Mercurial > projects > doodle
annotate dia/tool_layer.d @ 26:06c30d250c0a
Cleanup
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Thu, 16 Jul 2009 00:12:02 +0930 |
parents | a24c13bb9c98 |
children |
rev | line source |
---|---|
22 | 1 module dia.tool_layer; |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
2 |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
3 private { |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
4 import std.stdio; |
24 | 5 import cairo.routines; |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
6 } |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
7 |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
8 public { |
24 | 9 import dia.tool; |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
10 } |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
11 |
12 | 12 class ToolLayer : Layer, EventHandler { |
13 this(in Tool[] tools, in string name) { | |
14 super(name); | |
7 | 15 mTools = tools.dup; |
16 } | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
17 |
26 | 18 override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { |
14 | 19 // writefln("%s", event); |
7 | 20 |
21 if (mGrabbedTool is null) { | |
22 foreach_reverse(ref tool; mTools) { | |
10 | 23 if (tool.handle_button_press(viewport, event)) { |
7 | 24 mGrabbedTool = &tool; |
25 mGrabbedButton = event.button_name; | |
26 break; | |
27 } | |
28 } | |
29 } | |
30 else { | |
10 | 31 mGrabbedTool.handle_button_press(viewport, event); |
7 | 32 } |
33 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
34 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
35 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
36 |
26 | 37 override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { |
14 | 38 // writefln("%s", event); |
7 | 39 |
40 if (mGrabbedTool !is null) { | |
10 | 41 mGrabbedTool.handle_button_release(viewport, event); |
7 | 42 |
43 if (mGrabbedButton == event.button_name) { | |
44 mGrabbedTool = null; | |
45 } | |
46 } | |
47 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
48 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
49 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
50 |
26 | 51 override bool handle_key_press(scope Viewport viewport, in KeyEvent event) { |
14 | 52 // writefln("%s", event); |
53 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
54 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
55 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
56 |
26 | 57 override bool handle_key_release(scope Viewport viewport, in KeyEvent event) { |
14 | 58 // writefln("%s", event); |
59 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
60 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
61 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
62 |
26 | 63 override bool handle_motion(scope Viewport viewport, in MotionEvent event) { |
17 | 64 //writefln("%s", event); |
7 | 65 |
66 if (mGrabbedTool is null) { | |
67 foreach_reverse(ref tool; mTools) { | |
10 | 68 if (tool.handle_motion(viewport, event)) { |
7 | 69 break; |
70 } | |
71 } | |
72 } | |
73 else { | |
10 | 74 mGrabbedTool.handle_motion(viewport, event); |
7 | 75 } |
76 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
77 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
78 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
79 |
26 | 80 override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { |
14 | 81 // writefln("%s", event); |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
82 |
7 | 83 if (mGrabbedTool is null) { |
84 foreach_reverse(ref tool; mTools) { | |
10 | 85 if (tool.handle_scroll(viewport, event)) { |
7 | 86 break; |
87 } | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
88 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
89 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
90 else { |
10 | 91 mGrabbedTool.handle_scroll(viewport, event); |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
92 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
93 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
94 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
95 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
96 |
12 | 97 override Rectangle bounds() const { |
98 return Rectangle(); | |
99 } | |
100 | |
19 | 101 override void draw(const Viewport viewport, |
102 in Rectangle pixel_damage, scope Context pixel_cr, | |
103 in Rectangle model_damage, scope Context model_cr) const { | |
18 | 104 // FIXME this isn't how we will really draw the tools... |
105 foreach (const Tool tool; mTools) { | |
19 | 106 tool.draw(viewport, pixel_damage, pixel_cr, model_damage, model_cr); |
18 | 107 } |
12 | 108 } |
109 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
110 /* |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
111 override void push(Tool tool) { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
112 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
113 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
114 override void pop() { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
115 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
116 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
117 override void replace(Tool tool) { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
118 } |
7 | 119 */ |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
120 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
121 private { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
122 Tool[] mTools; |
7 | 123 Tool * mGrabbedTool; |
124 ButtonName mGrabbedButton; | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
125 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
126 } |