Mercurial > projects > doodle
comparison dia/standard_tools.d @ 26:06c30d250c0a
Cleanup
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Thu, 16 Jul 2009 00:12:02 +0930 |
parents | a24c13bb9c98 |
children | f3d91579bb28 |
comparison
equal
deleted
inserted
replaced
25:8f58a8f88735 | 26:06c30d250c0a |
---|---|
9 import std.math; | 9 import std.math; |
10 import std.stdio; | 10 import std.stdio; |
11 } | 11 } |
12 | 12 |
13 final class PanTool : Tool { | 13 final class PanTool : Tool { |
14 override bool handle_button_press(Viewport viewport, in ButtonEvent event) { | 14 override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { |
15 if (event.button_name == ButtonName.MIDDLE) { | 15 if (event.button_name == ButtonName.MIDDLE) { |
16 mLastPosition = event.pixel_point; | 16 mLastPosition = event.pixel_point; |
17 return true; | 17 return true; |
18 } | 18 } |
19 else { | 19 else { |
20 return false; | 20 return false; |
21 } | 21 } |
22 } | 22 } |
23 | 23 |
24 override bool handle_motion(Viewport viewport, in MotionEvent event) { | 24 override bool handle_motion(scope Viewport viewport, in MotionEvent event) { |
25 if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { | 25 if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) { |
26 viewport.pan_relative(mLastPosition - event.pixel_point); | 26 viewport.pan_relative(mLastPosition - event.pixel_point); |
27 mLastPosition = event.pixel_point; | 27 mLastPosition = event.pixel_point; |
28 | 28 |
29 return true; | 29 return true; |
31 else { | 31 else { |
32 return false; | 32 return false; |
33 } | 33 } |
34 } | 34 } |
35 | 35 |
36 override bool handle_scroll(Viewport viewport, in ScrollEvent event) { | 36 override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { |
37 if (event.mask.is_unset(Modifier.MIDDLE_BUTTON)) { | 37 if (event.mask.is_unset(Modifier.MIDDLE_BUTTON)) { |
38 Vector delta; | 38 Vector delta; |
39 | 39 |
40 switch (event.scroll_direction) { | 40 switch (event.scroll_direction) { |
41 case ScrollDirection.UP: | 41 case ScrollDirection.UP: |
63 static invariant double AMOUNT = 60.0; | 63 static invariant double AMOUNT = 60.0; |
64 } | 64 } |
65 } | 65 } |
66 | 66 |
67 final class ZoomTool : Tool { | 67 final class ZoomTool : Tool { |
68 override bool handle_scroll(Viewport viewport, in ScrollEvent event) { | 68 override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { |
69 if (event.mask.is_set(Modifier.CONTROL)) { | 69 if (event.mask.is_set(Modifier.CONTROL)) { |
70 if (event.scroll_direction == ScrollDirection.DOWN) { | 70 if (event.scroll_direction == ScrollDirection.DOWN) { |
71 viewport.zoom_relative(event.pixel_point, 1.0 / ZOOM); | 71 viewport.zoom_relative(event.pixel_point, 1.0 / ZOOM); |
72 return true; | 72 return true; |
73 } | 73 } |
88 static invariant double ZOOM = sqrt(2.0); | 88 static invariant double ZOOM = sqrt(2.0); |
89 } | 89 } |
90 } | 90 } |
91 | 91 |
92 final class LassoTool : Tool { | 92 final class LassoTool : Tool { |
93 override bool handle_button_press(Viewport viewport, in ButtonEvent event) { | 93 override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { |
94 if (event.button_name == ButtonName.LEFT) { | 94 if (event.button_name == ButtonName.LEFT) { |
95 mActive = true; | 95 mActive = true; |
96 mAnchorPoint = mCurrentPoint = event.pixel_point; | 96 mAnchorPoint = mCurrentPoint = event.pixel_point; |
97 return true; | 97 return true; |
98 } | 98 } |
99 else { | 99 else { |
100 return false; | 100 return false; |
101 } | 101 } |
102 } | 102 } |
103 | 103 |
104 override bool handle_button_release(Viewport viewport, in ButtonEvent event) { | 104 override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { |
105 if (event.button_name == ButtonName.LEFT && mActive) { | 105 if (event.button_name == ButtonName.LEFT && mActive) { |
106 mActive = false; | 106 mActive = false; |
107 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); | 107 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); |
108 return true; | 108 return true; |
109 } | 109 } |
110 else { | 110 else { |
111 return false; | 111 return false; |
112 } | 112 } |
113 } | 113 } |
114 | 114 |
115 override bool handle_motion(Viewport viewport, in MotionEvent event) { | 115 override bool handle_motion(scope Viewport viewport, in MotionEvent event) { |
116 if (mActive) { | 116 if (mActive) { |
117 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); | 117 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); |
118 mCurrentPoint = event.pixel_point; | 118 mCurrentPoint = event.pixel_point; |
119 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); | 119 viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0)); |
120 } | 120 } |
121 | 121 |
122 return false; | 122 return false; |
123 } | 123 } |
124 | 124 |
125 override void draw(const Viewport viewport, | 125 override void draw(in Viewport viewport, |
126 in Rectangle pixel_damage, scope Context pixel_cr, | 126 in Rectangle pixel_damage, scope Context pixel_cr, |
127 in Rectangle model_damage, scope Context model_cr) const { | 127 in Rectangle model_damage, scope Context model_cr) const { |
128 if (mActive) { | 128 if (mActive) { |
129 pixel_cr.save; { | 129 pixel_cr.save; { |
130 double[] dashes = [ 4.0, 4.0 ]; | 130 pixel_cr.setSourceRgba(0.0, 0.0, 0.8, 0.3); |
131 pixel_cr.setDash(dashes, 0.0); | 131 rectangle(pixel_cr, Rectangle(mCurrentPoint, mAnchorPoint)); |
132 pixel_cr.fill(); | |
133 } pixel_cr.restore(); | |
134 | |
135 pixel_cr.save(); { | |
136 //double[] dashes = [ 4.0, 4.0 ]; | |
137 //pixel_cr.setDash(dashes, 0.0); | |
132 pixel_cr.setSourceRgba(0.0, 0.0, 0.5, 1.0); | 138 pixel_cr.setSourceRgba(0.0, 0.0, 0.5, 1.0); |
133 pixel_cr.setLineWidth(LINE_WIDTH); | 139 pixel_cr.setLineWidth(LINE_WIDTH); |
134 //writefln("Drawing rectangle: %s", Rectangle(mCurrentPoint, mAnchorPoint)); | 140 //writefln("Drawing rectangle: %s", Rectangle(mCurrentPoint, mAnchorPoint)); |
135 rectangle(pixel_cr, Rectangle(mCurrentPoint, mAnchorPoint)); | 141 rectangle(pixel_cr, Rectangle(mCurrentPoint, mAnchorPoint)); |
136 pixel_cr.stroke; | 142 pixel_cr.stroke; |