Mercurial > projects > mde
diff mde/gui/renderer/SimpleRenderer.d @ 97:30470bc19ca4
Floating widgets now work nicely: customizable borders added, resizing, moving.
gl.basic abstraction module removed (seemed pointless).
Some changes to SimpleRenderer (largely to accomodate floating widgets).
author | Diggory Hardy <diggory.hardy@gmail.com> |
---|---|
date | Mon, 10 Nov 2008 16:44:44 +0000 |
parents | 2a364c7d82c9 |
children | 5de5810e3516 |
line wrap: on
line diff
--- a/mde/gui/renderer/SimpleRenderer.d Thu Nov 06 13:16:39 2008 +0000 +++ b/mde/gui/renderer/SimpleRenderer.d Mon Nov 10 16:44:44 2008 +0000 @@ -18,7 +18,7 @@ import mde.gui.renderer.IRenderer; -import gl = mde.gl.basic; +import derelict.opengl.gl; import mde.font.font; /** Interface for renderers. @@ -34,51 +34,25 @@ defaultFont = FontStyle.get("default"); } - BorderDimensions setSizable (bool wS, bool hS) { - wSizable = wS; - hSizable = hS; - - // Set the border size based on the above + alias Border.BTYPE BTYPE; + Border getBorder (BTYPE type, bool wS, bool hS) { + Border border; with (border) { - l = r = t = b = 14; + if (type & BTYPE.RESIZE) { + if (wS) capability = RESIZE.X1 | RESIZE.X2; + if (hS) capability |= RESIZE.Y1 | RESIZE.Y2; + } + if (type & BTYPE.LARGE) { + y1 = 12; + y2 = 6; + } + else if (type & BTYPE.SMALL) + y1 = y2 = 4; + x1 = x2 = y2; } - 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; } @@ -88,35 +62,57 @@ void restrict (wdim x, wdim y, wdim w, wdim h) {} void relax () {} - void drawWindow (wdim x, wdim y, wdim w, wdim h) { - gl.setColor (0f, 0f, .7f); - gl.drawBox (x,y, w,h); + void drawWindow (Border* border, wdim x, wdim y, wdim w, wdim h) { + glColor3f (0f, 0f, .8f); + glRecti(x, y+h, x+w, y); - gl.setColor (0f, 0f, 1f); - gl.drawBox (x+resize.l, y+resize.t, w-resize.l-resize.r, h-resize.t-resize.b); + if (border.capability != 0) { + glColor3f (0f, 0f, .7f); + glBegin (GL_TRIANGLES); + wdim t = border.x1 + border.y1; + glVertex2i (x, y); + glVertex2i (x+t, y); + glVertex2i (x, y+t); + + t = border.x2 + border.y1; + glVertex2i (x+w, y); + glVertex2i (x+w, y+t); + glVertex2i (x+w-t, y); + + t = border.x2 + border.y2; + glVertex2i (x+w, y+h); + glVertex2i (x+w-t, y+h); + glVertex2i (x+w, y+h-t); + + t = border.x1 + border.y2; + glVertex2i (x, y+h); + glVertex2i (x, y+h-t); + glVertex2i (x+t, y+h); + glEnd (); + } - gl.setColor (.3f, .3f, .3f); - gl.drawBox (x+border.l, y+border.t, w-border.l-border.r, h-border.t-border.b); + glColor3f (0f, 0f, 0f); + glRecti(x+border.x1, y+h-border.y2, x+w-border.x2, y+border.y1); } void drawWidgetBack (wdim x, wdim y, wdim w, wdim h) { debug { - gl.setColor (0f, .2f, .2f); - gl.drawBox (x,y, w,h); + glColor3f (0f, .2f, .2f); + glRecti (x,y+h, x+w,y); } } void drawBlank (wdim x, wdim y, wdim w, wdim h) { - gl.setColor (.4f, .4f, .4f); - gl.drawBox (x,y, w,h); + glColor3f (.4f, .4f, .4f); + glRecti(x, y+h, x+w, y); } void drawButton (wdim x, wdim y, wdim w, wdim h, bool pushed) { if (pushed) - gl.setColor (1f, 0f, 1f); + glColor3f (1f, 0f, 1f); else - gl.setColor (.6f, 0f, .6f); - gl.drawBox (x,y, w,h); + glColor3f (.6f, 0f, .6f); + glRecti(x, y+h, x+w, y); } wdimPair getToggleSize () { @@ -128,10 +124,10 @@ void drawToggle (wdim x, wdim y, bool state, bool pushed) { float c = pushed ? .7f : .5f; if (state) - gl.setColor (0f, c, 0f); + glColor3f (0f, c, 0f); else - gl.setColor (c, 0f, 0f); - gl.drawBox (x+2,y+2, 12,12); + glColor3f (c, 0f, 0f); + glRecti (x+2,y+14, x+14,y+2); } TextAdapter getAdapter (char[] text, int col) { @@ -142,8 +138,5 @@ } protected: - bool wSizable, hSizable; - BorderDimensions border; - BorderDimensions resize; FontStyle defaultFont; }