view mde/gui/renderer/IRenderer.d @ 41:b3a6ca4516b4

The renderer now controls which parts of the window border allow resizing. committer: Diggory Hardy <diggory.hardy@gmail.com>
author Diggory Hardy <diggory.hardy@gmail.com>
date Tue, 13 May 2008 12:02:36 +0100
parents 8c4c96f04e7f
children 1530d9c04d4d
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;

/** 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
        ubyte 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 (int cx, int cy, int w, int h);
    
    /** Return the renderer's between-widget spacing (for layout widgets). */
    int layoutSpacing ();
    //END Get dimensions
    
    //BEGIN draw routines
    /** Draw a window border plus background. */
    void drawWindow (int x, int y, int w, int h);
    
    /** Draws a widget background. Usually doesn't do anything since backgrounds are transparent. */
    void drawWidgetBack (int x, int y, int w, int h);
    
    /** Draws a button frame, in if pushed == true. */
    void drawButton (int x, int y, int w, int h, bool pushed);
    //END draw routines
}