Mercurial > projects > doodle
diff standard_tools.d @ 8:bf7903435f58
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sat, 11 Jul 2009 21:49:04 +0930 |
parents | 936feb16eed4 |
children | 66b47e122b31 |
line wrap: on
line diff
--- 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;