view mde/gui/renderer/IRenderer.d @ 75:25cb7420dc91

A massive overhaul/rewrite for the gui's data management and setup code. Currently much that was working is broken. imde's classes are created in a static this instead of mde's main. gl setup code moved from gl/basic.d to gl/draw.d mergetag.DefaultData: now HIGH_LOW priority instead of LOW_HIGH. Reduced type list to only used types; small fix for indent function. setup.paths: new NoFileException thrown instead of MTFileIOException
author Diggory Hardy <diggory.hardy@gmail.com>
date Mon, 28 Jul 2008 18:17:48 +0100
parents d43523ed4b62
children ea58f277f487
line wrap: on
line source

/* LICENSE BLOCK
Part of mde: a Modular D game-oriented Engine
Copyright © 2007-2008 Diggory Hardy

This program is free software: you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation, either
version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>. */

/** Interface for the renderer. This is planned to replace decoration.d */
module mde.gui.renderer.IRenderer;

// Put here to avoid circular import.
typedef int wdim;

/** Interface for renderers.
*
* Renderers provide unified drawing methods for widget, e.g. to draw a window background, a frame,
* or a button. The renderer will effectively be synonymous with the theme, except that a scripted
* renderer may also be available.
*
* The renderer is intended to be per-GUI. */
interface IRenderer
{
    //BEGIN Get dimensions
    /// A container for the dimensions
    struct BorderDimensions {
        /// The dimensions: left, top, right, bottom
        wdim l, t, r, b;
        
        void opAddAssign (BorderDimensions d) {
            l += d.l;
            t += d.t;
            r += d.r;
            b += d.b;
        }
    }
    
    /** Use to set and reset these parameters, and to get the border size (which may depend on
     * them). */
    BorderDimensions setSizable (bool wSizable, bool hSizable);
    
    /// Which edges of a window are being resized
    enum RESIZE_TYPE : ubyte {
        NONE = 0x0, L = 0x1, R = 0x2, T = 0x4, B = 0x8
    }
    
    /** Used to tell if a click on a window's border is for resizing or moving.
    *
    * Depends on setSizable's parameters.
    *
    * Params:
    *   cx =
    *   cy = click coordinates relative to window border
    *   w  =
    *   h  = window size
    *
    * Returns:
    *   RESIZE_TYPE = NONE for a move, an or'd combination of L/R/T/B for resizing.
    */
    RESIZE_TYPE getResizeType (wdim cx, wdim cy, wdim w, wdim h);
    
    /** Return the renderer's between-widget spacing (for layout widgets). */
    wdim layoutSpacing ();
    //END Get dimensions
    
    //BEGIN draw routines
    /** Draw a window border plus background. */
    void drawWindow (wdim x, wdim y, wdim w, wdim h);
    
    /** Draws a widget background. Usually doesn't do anything since backgrounds are transparent. */
    void drawWidgetBack (wdim x, wdim y, wdim w, wdim h);
    
    /** Draws a blank widget (temporary) */
    void drawBlank (wdim x, wdim y, wdim w, wdim h);
    
    /** Draws a button frame, in if pushed == true. */
    void drawButton (wdim x, wdim y, wdim w, wdim h, bool pushed);
    //END draw routines
}