annotate doodle/fig/select_tool.d @ 73:6f2525e170f2

Cairo/OpenGL checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sun, 15 Aug 2010 01:02:15 +0930
parents 43cc2135ced0
children c03ed75c0f8e
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;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
19 _anchorPoint = _currentPoint = event.pixelPoint;
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;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
31 viewport.damagePixel(feather(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH / 2.0));
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) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
42 viewport.damagePixel(feather(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH / 2.0));
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
43 _currentPoint = event.pixelPoint;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
44 viewport.damagePixel(feather(Rectangle(_anchorPoint, _currentPoint), LINE_WIDTH / 2.0));
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
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
50 override void draw(in IViewport viewport,
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
51 in Rectangle pixelDamage, scope Context pixelCr) const {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
52 if (_active) {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
53 /*
66
43cc2135ced0 Some code cleanups
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
54 pixelCr.save; {
43cc2135ced0 Some code cleanups
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
55 pixelCr.setSourceRgba(0.0, 0.0, 0.8, 0.3);
43cc2135ced0 Some code cleanups
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
56 rectangle(pixelCr, Rectangle(_currentPoint, _anchorPoint));
43cc2135ced0 Some code cleanups
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
57 pixelCr.fill();
43cc2135ced0 Some code cleanups
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
58 } pixelCr.restore();
43cc2135ced0 Some code cleanups
"David Bryant <bagnose@gmail.com>"
parents: 63
diff changeset
59 */
63
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
60
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
61 pixelCr.save(); {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
62 double[] dashes = [ 4.0, 4.0 ];
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
63 pixelCr.setDash(dashes, 0.0);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
64 pixelCr.setSourceRgba(0.0, 0.0, 0.5, 1.0);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
65 pixelCr.setLineWidth(LINE_WIDTH);
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
66 rectangle(pixelCr, Rectangle(_currentPoint, _anchorPoint));
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
67 pixelCr.stroke;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
68 } pixelCr.restore;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
69 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
70 }
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
71
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
72 private {
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
73 bool _active;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
74 Point _currentPoint;
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
75 Point _anchorPoint; // Pixel
20d6327c4a75 Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
diff changeset
76 static immutable double LINE_WIDTH = 1.0;
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 }