annotate doodle/fig/select_tool.d @ 80:b759414d2b72

Switched from cairo to Drawable abstraction
author "David Bryant <bagnose@gmail.com>"
date Sun, 15 Aug 2010 23:43:04 +0930
parents 535bae7a7305
children d92b9f04b1e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
1 module doodle.fig.select_tool;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
2
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
3 public {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
4 import doodle.dia.tool;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
5 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
6
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
7 private {
73
6f2525e170f2 Cairo/OpenGL checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 66
diff changeset
8 import doodle.tk.cairo;
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
9 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
10
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
11 final class SelectTool : Tool {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
12 this() {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
13 super("Select");
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
14 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
15
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
16 override bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
17 if (event.buttonName == ButtonName.LEFT) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
18 _active = true;
80
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
19 _anchorPoint = _currentPoint = event.screenPoint;
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
20 viewport.setCursor(Cursor.HAND);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
21 return true;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
22 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
23 else {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
24 return false;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
25 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
26 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
27
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
28 override bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
29 if (event.buttonName == ButtonName.LEFT && _active) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
30 _active = false;
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 77
diff changeset
31 viewport.damageScreen(growCentre(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH));
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
32 viewport.setCursor(Cursor.DEFAULT);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
33 return true;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
34 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
35 else {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
36 return false;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
37 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
38 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
39
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
40 override bool handleMotion(scope IViewport viewport, in MotionEvent event) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
41 if (_active) {
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 77
diff changeset
42 viewport.damageScreen(growCentre(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH));
80
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
43 _currentPoint = event.screenPoint;
79
535bae7a7305 Checkpoint
"David Bryant <bagnose@gmail.com>"
parents: 77
diff changeset
44 viewport.damageScreen(growCentre(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH));
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
45 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
46
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
47 return false;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
48 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
49
80
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
50 override void draw(in Rectangle screenDamage, scope Drawable screenDrawable) const {
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
51 if (_active) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
52 /*
80
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
53 screenCr.save; {
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
54 screenCr.setSourceRgba(0.0, 0.0, 0.8, 0.3);
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
55 rectangle(screenCr, Rectangle(_currentPoint, _anchorPoint));
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
56 screenCr.fill();
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
57 } screenCr.restore();
66
43cc2135ced0 Some code cleanups
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
58 */
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
59
80
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
60 screenDrawable.pushState; {
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
61 screenDrawable.setLineWidth(LINE_WIDTH);
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
62 screenDrawable.setColor(Color(0.0, 0.0, 0.5, 1.0));
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
63 screenDrawable.drawRectangle(Rectangle(_currentPoint, _anchorPoint), false);
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
64 } screenDrawable.popState;
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
65
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
66 /*
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
67 screenCr.save(); {
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
68 double[] dashes = [ 4.0, 4.0 ];
80
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
69 screenCr.setDash(dashes, 0.0);
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
70 screenCr.setSourceRgba(0.0, 0.0, 0.5, 1.0);
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
71 screenCr.setLineWidth(LINE_WIDTH);
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
72 rectangle(screenCr, Rectangle(_currentPoint, _anchorPoint));
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
73 screenCr.stroke;
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
74 } screenCr.restore;
b759414d2b72 Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents: 79
diff changeset
75 */
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
76 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
77 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
78
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
79 private {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
80 bool _active;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
81 Point _currentPoint;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
82 Point _anchorPoint; // Pixel
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
83 static immutable double LINE_WIDTH = 1.0;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
84 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
85 }