Mercurial > projects > doodle
annotate standard_tools.d @ 16:9e63308b749c
* Fix up public/private includes
* Make Mask a struct
author | David Bryant <daveb@acres.com.au> |
---|---|
date | Mon, 13 Jul 2009 16:16:17 +0930 |
parents | 0b7e7d43a79d |
children | c643c04e3f5e |
rev | line source |
---|---|
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
1 module standard_tools; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
2 |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
3 public { |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
4 import tool; |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
5 } |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
6 |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
7 private { |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
8 import std.math; |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
9 } |
7 | 10 |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
11 final class PanTool : Tool { |
10 | 12 bool handle_button_press(Viewport viewport, in ButtonEvent event) { |
7 | 13 if (event.button_name == ButtonName.MIDDLE) { |
8 | 14 mLastPosition = event.screen_point; |
7 | 15 return true; |
16 } | |
17 else { | |
18 return false; | |
19 } | |
20 } | |
21 | |
10 | 22 bool handle_button_release(Viewport viewport, in ButtonEvent event) { |
8 | 23 return true; |
7 | 24 } |
25 | |
10 | 26 bool handle_motion(Viewport viewport, in MotionEvent event) { |
13 | 27 if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { |
10 | 28 viewport.rel_pan(mLastPosition - event.screen_point); |
8 | 29 mLastPosition = event.screen_point; |
30 | |
31 return true; | |
32 } | |
33 else { | |
34 return false; | |
35 } | |
7 | 36 } |
37 | |
10 | 38 bool handle_scroll(Viewport viewport, in ScrollEvent event) { |
13 | 39 if (event.mask.is_unset(Modifier.MIDDLE_BUTTON)) { |
9 | 40 Vector delta; |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
41 |
8 | 42 switch (event.scroll_direction) { |
43 case ScrollDirection.UP: | |
14 | 44 delta = event.mask.is_set(Modifier.SHIFT) ? Vector(AMOUNT, 0.0) : Vector(0.0, AMOUNT); |
8 | 45 break; |
46 case ScrollDirection.DOWN: | |
14 | 47 delta = event.mask.is_set(Modifier.SHIFT) ? Vector(-AMOUNT, 0.0) : Vector(0.0, -AMOUNT); |
8 | 48 break; |
49 case ScrollDirection.LEFT: | |
9 | 50 delta = Vector(-AMOUNT, 0.0); |
8 | 51 break; |
52 case ScrollDirection.RIGHT: | |
9 | 53 delta = Vector(AMOUNT, 0.0); |
8 | 54 break; |
55 } | |
56 | |
10 | 57 viewport.rel_pan(delta); |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
58 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
59 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
60 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
61 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
62 |
10 | 63 bool handle_key_press(Viewport viewport, in KeyEvent event) { |
7 | 64 return false; |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
65 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
66 |
10 | 67 bool handle_key_release(Viewport viewport, in KeyEvent event) { |
7 | 68 return false; |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
69 } |
8 | 70 |
71 private { | |
72 Point mLastPosition; | |
9 | 73 static invariant double AMOUNT = 60.0; |
8 | 74 } |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
75 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
76 |
7 | 77 final class ZoomTool : Tool { |
10 | 78 bool handle_button_press(Viewport viewport, in ButtonEvent event) { |
7 | 79 return false; |
80 } | |
81 | |
10 | 82 bool handle_button_release(Viewport viewport, in ButtonEvent event) { |
7 | 83 return false; |
84 } | |
85 | |
10 | 86 bool handle_motion(Viewport viewport, in MotionEvent event) { |
7 | 87 return false; |
88 } | |
89 | |
10 | 90 bool handle_scroll(Viewport viewport, in ScrollEvent event) { |
7 | 91 if (event.mask.is_set(Modifier.CONTROL)) { |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
92 if (event.scroll_direction == ScrollDirection.DOWN) { |
10 | 93 viewport.rel_zoom(event.screen_point(), 1.0 / ZOOM); |
9 | 94 return true; |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
95 } |
9 | 96 else if (event.scroll_direction == ScrollDirection.UP) { |
10 | 97 viewport.rel_zoom(event.screen_point(), ZOOM); |
9 | 98 return true; |
99 } | |
100 else { | |
101 return false; | |
102 } | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
103 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
104 else { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
105 return false; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
106 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
107 } |
7 | 108 |
10 | 109 bool handle_key_press(Viewport viewport, in KeyEvent event) { |
7 | 110 return false; |
111 } | |
112 | |
10 | 113 bool handle_key_release(Viewport viewport, in KeyEvent event) { |
7 | 114 return false; |
115 } | |
9 | 116 |
117 private { | |
118 static invariant double ZOOM = sqrt(2.0); | |
119 } | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
120 } |