Mercurial > projects > doodle
annotate tool_layer.d @ 17:c643c04e3f5e
Checkpoint
author | David Bryant <daveb@acres.com.au> |
---|---|
date | Mon, 13 Jul 2009 16:46:21 +0930 |
parents | 9e63308b749c |
children | df8d81d9f499 |
rev | line source |
---|---|
12 | 1 module 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; |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
5 import cairo_support; |
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 { |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
9 import tool; |
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 |
10 | 18 override bool handle_button_press(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 |
10 | 37 override bool handle_button_release(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 |
10 | 51 override bool handle_key_press(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 |
10 | 57 override bool handle_key_release(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 |
10 | 63 override bool handle_motion(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 |
10 | 80 override bool handle_scroll(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 | |
101 override void draw(const Viewport viewport, in Rectangle damage, | |
102 Context model_cr, Context screen_cr) const { | |
103 } | |
104 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
105 /* |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
106 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
|
107 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
108 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
109 override void pop() { |
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 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
112 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
|
113 } |
7 | 114 */ |
2
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 private { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
117 Tool[] mTools; |
7 | 118 Tool * mGrabbedTool; |
119 ButtonName mGrabbedButton; | |
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 } |