Mercurial > projects > doodle
changeset 8:bf7903435f58
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sat, 11 Jul 2009 21:49:04 +0930 |
parents | 936feb16eed4 |
children | 66b47e122b31 |
files | gui.d standard_tools.d tk/events.d tk/gtk_support.d tk/types.d |
diffstat | 5 files changed, 49 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- 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();
--- 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;
--- 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; }
--- 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:
--- 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",