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;
 }