Mercurial > projects > mde
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 }