Mercurial > projects > mde
view mde/gui/renderer/IRenderer.d @ 80:ea58f277f487
Gui reorganization and changes; partial implementation of floating widgets.
Moved contents of mde/gui/WidgetData.d elsewhere; new gui/WidgetDataSet.d and gui/types.d modules.
Changes to widget/createWidget.d
Partially implemented FloatingAreaWidget to provide an area for floating "window" widgets.
New DebugWidget and some uses of it (e.g. bad widget data).
Decoupled OptionChanges from Options.
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Thu, 07 Aug 2008 11:25:27 +0100 |
parents | 25cb7420dc91 |
children | 08a4ae11454b |
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; public import mde.gui.types; /** 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 /** Restrict following draw operations to given box. * * Restrict "pushes" a restriction onto a stack; relax must be called afterwards to "pop" the * restriction. */ void restrict (wdim x, wdim y, wdim w, wdim h); /** See restrict. */ void relax (); /** 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 }