Mercurial > projects > mde
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