# HG changeset patch # User "David Bryant " # Date 1247314744 -34200 # Node ID bf7903435f58f0c235ea913c2b2bebceca2d41d9 # Parent 936feb16eed4dae03da648023c9bb8a339171132 Checkpoint diff -r 936feb16eed4 -r bf7903435f58 gui.d --- a/gui.d Sat Jul 11 21:29:03 2009 +0930 +++ b/gui.d Sat Jul 11 21:49:04 2009 +0930 @@ -24,6 +24,7 @@ auto event_handler = new ToolStack(tools); auto canvas = new Canvas(event_handler); window.add(canvas); + window.setDefaultSize(420, 340); window.showAll(); Main.run(); diff -r 936feb16eed4 -r bf7903435f58 standard_tools.d --- a/standard_tools.d Sat Jul 11 21:29:03 2009 +0930 +++ b/standard_tools.d Sat Jul 11 21:49:04 2009 +0930 @@ -5,10 +5,12 @@ import tk.types; import tk.events; import tk.geometry; +import std.math; final class PanTool : Tool { bool handle_button_press(ICanvas canvas, in ButtonEvent event) { if (event.button_name == ButtonName.MIDDLE) { + mLastPosition = event.screen_point; return true; } else { @@ -17,31 +19,43 @@ } bool handle_button_release(ICanvas canvas, in ButtonEvent event) { - return false; + return true; } bool handle_motion(ICanvas canvas, in MotionEvent event) { - return false; + if (event.mask.is_set(Modifier.BUTTON_MIDDLE)) { + canvas.rel_pan(mLastPosition - event.screen_point); + mLastPosition = event.screen_point; + + return true; + } + else { + return false; + } } bool handle_scroll(ICanvas canvas, in ScrollEvent event) { - const double AMOUNT = 30.0; - Vector v; + if (event.mask.is_unset(Modifier.BUTTON_MIDDLE)) { + const double AMOUNT = 60.0; + Vector v; - if (event.mask.is_set(Modifier.SHIFT)) { - // left to right - v = Vector(AMOUNT, 0.0); + switch (event.scroll_direction) { + case ScrollDirection.UP: + v = event.mask.is_set(Modifier.SHIFT) ? Vector(-AMOUNT, 0.0) : Vector(0.0, -AMOUNT); + break; + case ScrollDirection.DOWN: + v = event.mask.is_set(Modifier.SHIFT) ? Vector(AMOUNT, 0.0) : Vector(0.0, AMOUNT); + break; + case ScrollDirection.LEFT: + v = Vector(-AMOUNT, 0.0); + break; + case ScrollDirection.RIGHT: + v = Vector(AMOUNT, 0.0); + break; + } + + canvas.rel_pan(v); } - else { - // down to up - v = Vector(0.0, AMOUNT); - } - - if (event.scroll_direction == ScrollDirection.UP) { - v = -v; - } - - canvas.rel_pan(v); return true; } @@ -53,10 +67,14 @@ bool handle_key_release(ICanvas canvas, in KeyEvent event) { return false; } + + private { + Point mLastPosition; + } } final class ZoomTool : Tool { - static invariant double ZOOM = 1.44; + static invariant double ZOOM = sqrt(2.0); bool handle_button_press(ICanvas canvas, in ButtonEvent event) { return false; diff -r 936feb16eed4 -r bf7903435f58 tk/events.d --- a/tk/events.d Sat Jul 11 21:29:03 2009 +0930 +++ b/tk/events.d Sat Jul 11 21:49:04 2009 +0930 @@ -56,7 +56,7 @@ string str() const { return mStr; } override string toString() const { - return std.string.format("Key event: %s, %d", mStr, mValue); + return std.string.format("Key event: %s, %d, %s", mStr, mValue, mMask); } private { @@ -93,7 +93,9 @@ } override string toString() const { - return std.string.format("Button event: %s, %s, %s, %s, %s", mButtonAction, mButtonName, mScreenPoint, mModelPoint, mMask); + return std.string.format("Button event: %s, %s, %s, %s, %s", + enumToString(mButtonAction), enumToString(mButtonName), + mScreenPoint, mModelPoint, mMask); } ButtonAction button_action() const { return mButtonAction; } @@ -113,7 +115,8 @@ } override string toString() const { - return std.string.format("Motion event: %s, %s, %s", mScreenPoint, mModelPoint, mMask); + return std.string.format("Motion event: %s, %s, %s", + mScreenPoint, mModelPoint, mMask); } } @@ -127,7 +130,8 @@ } override string toString() const { - return std.string.format("Scroll event: %s, %s, %s, %s", mScrollDirection, mScreenPoint, mModelPoint, mMask); + return std.string.format("Scroll event: %s, %s, %s, %s", + enumToString(mScrollDirection), mScreenPoint, mModelPoint, mMask); } ScrollDirection scroll_direction() const { return mScrollDirection; } diff -r 936feb16eed4 -r bf7903435f58 tk/gtk_support.d --- a/tk/gtk_support.d Sat Jul 11 21:29:03 2009 +0930 +++ b/tk/gtk_support.d Sat Jul 11 21:49:04 2009 +0930 @@ -7,11 +7,11 @@ ButtonAction gtk2tk_button_action(gdk.Event.EventType event_type) { switch (event_type) { case gdk.Event.EventType.BUTTON_PRESS: - return ButtonAction.PRESS_SINGLE; + return ButtonAction.SINGLE_PRESS; case gdk.Event.EventType.DOUBLE_BUTTON_PRESS: - return ButtonAction.PRESS_DOUBLE; + return ButtonAction.DOUBLE_PRESS; case gdk.Event.EventType.TRIPLE_BUTTON_PRESS: - return ButtonAction.PRESS_TRIPLE; + return ButtonAction.TRIPLE_PRESS; case gdk.Event.EventType.BUTTON_RELEASE: return ButtonAction.RELEASE; default: diff -r 936feb16eed4 -r bf7903435f58 tk/types.d --- a/tk/types.d Sat Jul 11 21:29:03 2009 +0930 +++ b/tk/types.d Sat Jul 11 21:49:04 2009 +0930 @@ -5,7 +5,7 @@ private import std.algorithm; mixin(defineEnum!("ButtonAction", - "PRESS_SINGLE", "PRESS_DOUBLE", "PRESS_TRIPLE", "RELEASE")); + "SINGLE_PRESS", "DOUBLE_PRESS", "TRIPLE_PRESS", "RELEASE")); mixin(defineEnum!("ButtonName", "LEFT", "MIDDLE", "RIGHT", "FOUR", "FIVE")); mixin(defineEnum!("ScrollDirection",