Mercurial > projects > doodle
comparison standard_tools.d @ 18:df8d81d9f499
Lasso fiddling
author | David Bryant <daveb@acres.com.au> |
---|---|
date | Mon, 13 Jul 2009 17:08:32 +0930 |
parents | c643c04e3f5e |
children | 22abbf4cde96 |
comparison
equal
deleted
inserted
replaced
17:c643c04e3f5e | 18:df8d81d9f499 |
---|---|
3 public { | 3 public { |
4 import tool; | 4 import tool; |
5 } | 5 } |
6 | 6 |
7 private { | 7 private { |
8 import cairo_support; | |
8 import std.math; | 9 import std.math; |
9 import std.stdio; | 10 import std.stdio; |
10 } | 11 } |
11 | 12 |
12 final class PanTool : Tool { | 13 final class PanTool : Tool { |
16 return true; | 17 return true; |
17 } | 18 } |
18 else { | 19 else { |
19 return false; | 20 return false; |
20 } | 21 } |
21 } | |
22 | |
23 override bool handle_button_release(Viewport viewport, in ButtonEvent event) { | |
24 return true; | |
25 } | 22 } |
26 | 23 |
27 override bool handle_motion(Viewport viewport, in MotionEvent event) { | 24 override bool handle_motion(Viewport viewport, in MotionEvent event) { |
28 if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { | 25 if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { |
29 viewport.rel_pan(mLastPosition - event.pixel_point); | 26 viewport.rel_pan(mLastPosition - event.pixel_point); |
59 } | 56 } |
60 | 57 |
61 return true; | 58 return true; |
62 } | 59 } |
63 | 60 |
64 override bool handle_key_press(Viewport viewport, in KeyEvent event) { | |
65 return false; | |
66 } | |
67 | |
68 override bool handle_key_release(Viewport viewport, in KeyEvent event) { | |
69 return false; | |
70 } | |
71 | |
72 private { | 61 private { |
73 Point mLastPosition; | 62 Point mLastPosition; |
74 static invariant double AMOUNT = 60.0; | 63 static invariant double AMOUNT = 60.0; |
75 } | 64 } |
76 } | 65 } |
77 | 66 |
78 final class ZoomTool : Tool { | 67 final class ZoomTool : Tool { |
79 override bool handle_button_press(Viewport viewport, in ButtonEvent event) { | |
80 return false; | |
81 } | |
82 | |
83 override bool handle_button_release(Viewport viewport, in ButtonEvent event) { | |
84 return false; | |
85 } | |
86 | |
87 override bool handle_motion(Viewport viewport, in MotionEvent event) { | |
88 return false; | |
89 } | |
90 | |
91 override bool handle_scroll(Viewport viewport, in ScrollEvent event) { | 68 override bool handle_scroll(Viewport viewport, in ScrollEvent event) { |
92 if (event.mask.is_set(Modifier.CONTROL)) { | 69 if (event.mask.is_set(Modifier.CONTROL)) { |
93 if (event.scroll_direction == ScrollDirection.DOWN) { | 70 if (event.scroll_direction == ScrollDirection.DOWN) { |
94 viewport.rel_zoom(event.pixel_point, 1.0 / ZOOM); | 71 viewport.rel_zoom(event.pixel_point, 1.0 / ZOOM); |
95 return true; | 72 return true; |
105 else { | 82 else { |
106 return false; | 83 return false; |
107 } | 84 } |
108 } | 85 } |
109 | 86 |
110 override bool handle_key_press(Viewport viewport, in KeyEvent event) { | |
111 return false; | |
112 } | |
113 | |
114 override bool handle_key_release(Viewport viewport, in KeyEvent event) { | |
115 return false; | |
116 } | |
117 | |
118 private { | 87 private { |
119 static invariant double ZOOM = sqrt(2.0); | 88 static invariant double ZOOM = sqrt(2.0); |
120 } | 89 } |
121 } | 90 } |
122 | 91 |
123 final class LassoTool : Tool { | 92 final class LassoTool : Tool { |
124 override bool handle_button_press(Viewport viewport, in ButtonEvent event) { | 93 override bool handle_button_press(Viewport viewport, in ButtonEvent event) { |
125 if (event.button_name == ButtonName.LEFT) { | 94 if (event.button_name == ButtonName.LEFT) { |
126 writefln("Start lasso"); | 95 writefln("Start lasso"); |
127 mActive = true; | 96 mActive = true; |
128 mAnchorPoint = event.pixel_point; | 97 mAnchorPoint = mCurrentPoint = event.pixel_point; |
129 return true; | 98 return true; |
130 } | 99 } |
131 else { | 100 else { |
132 return false; | 101 return false; |
133 } | 102 } |
135 | 104 |
136 override bool handle_button_release(Viewport viewport, in ButtonEvent event) { | 105 override bool handle_button_release(Viewport viewport, in ButtonEvent event) { |
137 if (event.button_name == ButtonName.LEFT && mActive) { | 106 if (event.button_name == ButtonName.LEFT && mActive) { |
138 writefln("End lasso"); | 107 writefln("End lasso"); |
139 mActive = false; | 108 mActive = false; |
109 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint)); | |
140 return true; | 110 return true; |
141 } | 111 } |
142 else { | 112 else { |
143 return false; | 113 return false; |
144 } | 114 } |
145 } | 115 } |
146 | 116 |
117 // FIXME account for the line width... | |
118 | |
147 override bool handle_motion(Viewport viewport, in MotionEvent event) { | 119 override bool handle_motion(Viewport viewport, in MotionEvent event) { |
148 if (mActive) { | 120 if (mActive) { |
149 writefln("lassooing"); | 121 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint)); |
122 mCurrentPoint = event.pixel_point; | |
123 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint)); | |
150 } | 124 } |
151 | 125 |
152 return false; | 126 return false; |
153 } | 127 } |
154 | 128 |
155 override bool handle_scroll(Viewport viewport, in ScrollEvent event) { | 129 override void draw(const Viewport viewport, in Rectangle damage, Context model_cr, Context pixel_cr) const { |
156 return false; | 130 if (mActive) { |
157 } | 131 pixel_cr.save; { |
158 | 132 pixel_cr.setSourceRgba(1.0, 0.0, 0.0, 1.0); |
159 override bool handle_key_press(Viewport viewport, in KeyEvent event) { | 133 //writefln("Drawing rectangle: %s", Rectangle(mCurrentPoint, mAnchorPoint)); |
160 return false; | 134 rectangle(pixel_cr, Rectangle(mCurrentPoint, mAnchorPoint)); |
161 } | 135 pixel_cr.stroke; |
162 | 136 } pixel_cr.restore; |
163 override bool handle_key_release(Viewport viewport, in KeyEvent event) { | 137 } |
164 return false; | |
165 } | 138 } |
166 | 139 |
167 private { | 140 private { |
168 bool mActive; | 141 bool mActive; |
142 Point mCurrentPoint; | |
169 Point mAnchorPoint; // Pixel | 143 Point mAnchorPoint; // Pixel |
170 } | 144 } |
171 } | 145 } |