diff mde/gui/widget/layout.d @ 160:ccd01fde535e

Replaced WidgetManager's click and motion callbacks with a drag event system. This is less flexible, but much closer to what is required (and is simpler and less open to bugs through unintended use).
author Diggory Hardy <diggory.hardy@gmail.com>
date Thu, 21 May 2009 22:15:32 +0200
parents 783969f4665c
children 2476790223b8
line wrap: on
line diff
--- a/mde/gui/widget/layout.d	Thu May 21 20:55:10 2009 +0200
+++ b/mde/gui/widget/layout.d	Thu May 21 22:15:32 2009 +0200
@@ -314,12 +314,30 @@
             dragX = cx;
             dragY = cy;
             
-            mgr.addClickCallback (&endCallback);
-            mgr.addMotionCallback (&resizeCallback);
+	    return 2;
         }
 	return 0;
     }
     
+    //BEGIN Col/row resizing callback
+    override void dragMotion (wdim cx, wdim cy, IChildWidget) {
+        col.resizeCols (cx - dragX);
+        row.resizeCols (cy - dragY);
+        
+        // NOTE: all adjustments are relative; might be better if they were absolute?
+        dragX = cx;
+        dragY = cy;
+        
+        foreach (i,widget; subWidgets)
+            widget.setPosition (x + col.pos[i % cols],
+                                y + row.pos[i / cols]);
+        mgr.requestRedraw;
+    }
+    override bool dragRelease (wdabs cx, wdabs cy, IChildWidget) {
+	return true;	// we've handled the up-click
+    }
+    //END Col/row resizing callback
+    
     override void draw () {
         super.draw ();
         
@@ -427,33 +445,9 @@
         parent.minHChange (this, row.mw);
     }
     
-    
-    //BEGIN Col/row resizing callback
-    override void resizeCallback (wdim cx, wdim cy) {
-        col.resizeCols (cx - dragX);
-        row.resizeCols (cy - dragY);
-        
-        // NOTE: all adjustments are relative; might be better if they were absolute?
-        dragX = cx;
-        dragY = cy;
-        
-        foreach (i,widget; subWidgets)
-            widget.setPosition (x + col.pos[i % cols],
-                                y + row.pos[i / cols]);
-        mgr.requestRedraw;
-    }
-    override bool endCallback (wdabs cx, wdabs cy, ubyte b, bool state) {
-        if (b == 1 && state == false) {
-            mgr.removeCallbacks (cast(void*) this);
-            return true;	// we've handled the up-click
-        }
-        return false;		// we haven't handled it
-    }
-    
 protected:
     // Data for resizing cols/rows:
     wdim dragX, dragY;	// coords where drag starts
-    //END Col/row resizing callback
     
     size_t cols, rows;	// number of cells in grid
     wdim[] initWidths;  // see this / setInitialSize