Mercurial > projects > mde
diff mde/gui/renderer/SimpleRenderer.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 | 5132301e9ed7 |
children | 1530d9c04d4d |
line wrap: on
line diff
--- a/mde/gui/renderer/SimpleRenderer.d Thu May 08 16:05:51 2008 +0100 +++ b/mde/gui/renderer/SimpleRenderer.d Tue May 13 12:02:36 2008 +0100 @@ -29,17 +29,50 @@ * The renderer is intended to be per-GUI. */ class SimpleRenderer : IRenderer { - BorderDimensions getBorder (BORDER_TYPES type) { - BorderDimensions dims; - with (BORDER_TYPES) with (dims) { - if (type == WINDOW_TOTAL) { - l = t = r = b = 20; - } else if (type == WINDOW_RESIZE) { - r = t = 5; - l = b = 20; + 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 = 2; + b = 6; + } else + t = b = 0; + } + border += resize; + return border; + } + + RESIZE_TYPE getResizeType (int cx, int cy, int w, int 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 dims; + return resizeType; } int layoutSpacing () { @@ -52,10 +85,10 @@ gl.drawBox (x,y, w,h); gl.setColor (0f, 0f, 1f); - gl.drawBox (x+20,y+5, w-25,h-25); + 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+20, y+20, w-40, h-40); + gl.drawBox (x+border.l, y+border.t, w-border.l-border.r, h-border.t-border.b); } void drawWidgetBack (int x, int y, int w, int h) {} @@ -67,4 +100,9 @@ gl.setColor (.6f, 0f, .6f); gl.drawBox (x,y, w,h); } + +protected: + bool wSizable, hSizable; + BorderDimensions border; + BorderDimensions resize; }