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 }