Mercurial > projects > doodle
comparison 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 |
comparison
equal
deleted
inserted
replaced
7:936feb16eed4 | 8:bf7903435f58 |
---|---|
3 import tool; | 3 import tool; |
4 import icanvas; | 4 import icanvas; |
5 import tk.types; | 5 import tk.types; |
6 import tk.events; | 6 import tk.events; |
7 import tk.geometry; | 7 import tk.geometry; |
8 import std.math; | |
8 | 9 |
9 final class PanTool : Tool { | 10 final class PanTool : Tool { |
10 bool handle_button_press(ICanvas canvas, in ButtonEvent event) { | 11 bool handle_button_press(ICanvas canvas, in ButtonEvent event) { |
11 if (event.button_name == ButtonName.MIDDLE) { | 12 if (event.button_name == ButtonName.MIDDLE) { |
13 mLastPosition = event.screen_point; | |
12 return true; | 14 return true; |
13 } | 15 } |
14 else { | 16 else { |
15 return false; | 17 return false; |
16 } | 18 } |
17 } | 19 } |
18 | 20 |
19 bool handle_button_release(ICanvas canvas, in ButtonEvent event) { | 21 bool handle_button_release(ICanvas canvas, in ButtonEvent event) { |
20 return false; | 22 return true; |
21 } | 23 } |
22 | 24 |
23 bool handle_motion(ICanvas canvas, in MotionEvent event) { | 25 bool handle_motion(ICanvas canvas, in MotionEvent event) { |
24 return false; | 26 if (event.mask.is_set(Modifier.BUTTON_MIDDLE)) { |
27 canvas.rel_pan(mLastPosition - event.screen_point); | |
28 mLastPosition = event.screen_point; | |
29 | |
30 return true; | |
31 } | |
32 else { | |
33 return false; | |
34 } | |
25 } | 35 } |
26 | 36 |
27 bool handle_scroll(ICanvas canvas, in ScrollEvent event) { | 37 bool handle_scroll(ICanvas canvas, in ScrollEvent event) { |
28 const double AMOUNT = 30.0; | 38 if (event.mask.is_unset(Modifier.BUTTON_MIDDLE)) { |
29 Vector v; | 39 const double AMOUNT = 60.0; |
40 Vector v; | |
30 | 41 |
31 if (event.mask.is_set(Modifier.SHIFT)) { | 42 switch (event.scroll_direction) { |
32 // left to right | 43 case ScrollDirection.UP: |
33 v = Vector(AMOUNT, 0.0); | 44 v = event.mask.is_set(Modifier.SHIFT) ? Vector(-AMOUNT, 0.0) : Vector(0.0, -AMOUNT); |
45 break; | |
46 case ScrollDirection.DOWN: | |
47 v = event.mask.is_set(Modifier.SHIFT) ? Vector(AMOUNT, 0.0) : Vector(0.0, AMOUNT); | |
48 break; | |
49 case ScrollDirection.LEFT: | |
50 v = Vector(-AMOUNT, 0.0); | |
51 break; | |
52 case ScrollDirection.RIGHT: | |
53 v = Vector(AMOUNT, 0.0); | |
54 break; | |
55 } | |
56 | |
57 canvas.rel_pan(v); | |
34 } | 58 } |
35 else { | |
36 // down to up | |
37 v = Vector(0.0, AMOUNT); | |
38 } | |
39 | |
40 if (event.scroll_direction == ScrollDirection.UP) { | |
41 v = -v; | |
42 } | |
43 | |
44 canvas.rel_pan(v); | |
45 | 59 |
46 return true; | 60 return true; |
47 } | 61 } |
48 | 62 |
49 bool handle_key_press(ICanvas canvas, in KeyEvent event) { | 63 bool handle_key_press(ICanvas canvas, in KeyEvent event) { |
51 } | 65 } |
52 | 66 |
53 bool handle_key_release(ICanvas canvas, in KeyEvent event) { | 67 bool handle_key_release(ICanvas canvas, in KeyEvent event) { |
54 return false; | 68 return false; |
55 } | 69 } |
70 | |
71 private { | |
72 Point mLastPosition; | |
73 } | |
56 } | 74 } |
57 | 75 |
58 final class ZoomTool : Tool { | 76 final class ZoomTool : Tool { |
59 static invariant double ZOOM = 1.44; | 77 static invariant double ZOOM = sqrt(2.0); |
60 | 78 |
61 bool handle_button_press(ICanvas canvas, in ButtonEvent event) { | 79 bool handle_button_press(ICanvas canvas, in ButtonEvent event) { |
62 return false; | 80 return false; |
63 } | 81 } |
64 | 82 |