Mercurial > projects > mde
view mde/gui/renderer/SimpleRenderer.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/>. */ /** A simple renderer. */ module mde.gui.renderer.SimpleRenderer; import mde.gui.renderer.IRenderer; import gl = mde.gl.basic; /** 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. */ class SimpleRenderer : IRenderer { BorderDimensions setSizable (bool wS, bool hS) { wSizable = wS; hSizable = hS; // Set the border size based on the above with (border) { l = r = t = b = 14; } with (resize) { if (wSizable) l = r = 6; else l = r = 0; if (hSizable) { t = b = 6; } else t = b = 0; } border += resize; return border; } RESIZE_TYPE getResizeType (wdim cx, wdim cy, wdim w, wdim h) { RESIZE_TYPE resizeType = RESIZE_TYPE.NONE; if (cx < resize.l || cx >= w - resize.r || cy < resize.t || cy >= h - resize.b) { // window is being resized /* check for resizes (different to above; use whole border giving larger area for * diagonal resizes). */ if (wSizable) { if (cx < border.l) resizeType = RESIZE_TYPE.L; else if (cx >= w - border.r) resizeType = RESIZE_TYPE.R; } if (hSizable) { if (cy < border.t) resizeType |= RESIZE_TYPE.T; else if (cy >= h - border.b) resizeType |= RESIZE_TYPE.B; } } return resizeType; } wdim layoutSpacing () { return 4; } void drawWindow (wdim x, wdim y, wdim w, wdim h) { gl.setColor (0f, 0f, .7f); gl.drawBox (x,y, w,h); gl.setColor (0f, 0f, 1f); gl.drawBox (x+resize.l, y+resize.t, w-resize.l-resize.r, h-resize.t-resize.b); gl.setColor (.3f, .3f, .3f); gl.drawBox (x+border.l, y+border.t, w-border.l-border.r, h-border.t-border.b); } void drawWidgetBack (wdim x, wdim y, wdim w, wdim h) {} void drawBlank (wdim x, wdim y, wdim w, wdim h) { gl.setColor (.4f, .4f, .4f); gl.drawBox (x,y, w,h); } void drawButton (wdim x, wdim y, wdim w, wdim h, bool pushed) { if (pushed) gl.setColor (1f, 0f, 1f); else gl.setColor (.6f, 0f, .6f); gl.drawBox (x,y, w,h); } protected: bool wSizable, hSizable; BorderDimensions border; BorderDimensions resize; }