Mercurial > projects > doodle
annotate doodle/dia/tool_layer.d @ 36:188397ef9a12
Late night tinkering
author | David Bryant <bagnose@gmail.com> |
---|---|
date | Sun, 30 Aug 2009 23:36:31 +0930 |
parents | 1754cb773d41 |
children | 1b4c9ba58673 |
rev | line source |
---|---|
28
1754cb773d41
Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents:
26
diff
changeset
|
1 module doodle.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 |
36 | 3 public { |
4 import doodle.dia.tool; | |
5 } | |
6 | |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
7 private { |
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
14
diff
changeset
|
8 import std.stdio; |
28
1754cb773d41
Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents:
26
diff
changeset
|
9 import doodle.cairo.routines; |
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 |
36 | 18 // Layer overrides: |
19 | |
20 override Rectangle bounds() const { | |
21 return Rectangle(); | |
22 } | |
23 | |
24 override void draw(const Viewport viewport, | |
25 in Rectangle pixel_damage, scope Context pixel_cr, | |
26 in Rectangle model_damage, scope Context model_cr) const { | |
27 // FIXME this isn't how we will really draw the tools... | |
28 foreach (const Tool tool; mTools) { | |
29 tool.draw(viewport, pixel_damage, pixel_cr, model_damage, model_cr); | |
30 } | |
31 } | |
32 | |
33 // EventHandler overrides: | |
34 | |
26 | 35 override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { |
14 | 36 // writefln("%s", event); |
7 | 37 |
38 if (mGrabbedTool is null) { | |
39 foreach_reverse(ref tool; mTools) { | |
10 | 40 if (tool.handle_button_press(viewport, event)) { |
7 | 41 mGrabbedTool = &tool; |
42 mGrabbedButton = event.button_name; | |
43 break; | |
44 } | |
45 } | |
46 } | |
47 else { | |
10 | 48 mGrabbedTool.handle_button_press(viewport, event); |
7 | 49 } |
50 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
51 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
52 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
53 |
26 | 54 override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { |
14 | 55 // writefln("%s", event); |
7 | 56 |
57 if (mGrabbedTool !is null) { | |
10 | 58 mGrabbedTool.handle_button_release(viewport, event); |
7 | 59 |
60 if (mGrabbedButton == event.button_name) { | |
61 mGrabbedTool = null; | |
62 } | |
63 } | |
64 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
65 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
66 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
67 |
26 | 68 override bool handle_key_press(scope Viewport viewport, in KeyEvent event) { |
14 | 69 // writefln("%s", event); |
70 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
71 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
72 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
73 |
26 | 74 override bool handle_key_release(scope Viewport viewport, in KeyEvent event) { |
14 | 75 // writefln("%s", event); |
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_motion(scope Viewport viewport, in MotionEvent event) { |
17 | 81 //writefln("%s", event); |
7 | 82 |
83 if (mGrabbedTool is null) { | |
84 foreach_reverse(ref tool; mTools) { | |
10 | 85 if (tool.handle_motion(viewport, event)) { |
7 | 86 break; |
87 } | |
88 } | |
89 } | |
90 else { | |
10 | 91 mGrabbedTool.handle_motion(viewport, event); |
7 | 92 } |
93 | |
2
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 |
26 | 97 override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { |
14 | 98 // writefln("%s", event); |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
99 |
7 | 100 if (mGrabbedTool is null) { |
101 foreach_reverse(ref tool; mTools) { | |
10 | 102 if (tool.handle_scroll(viewport, event)) { |
7 | 103 break; |
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 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
107 else { |
10 | 108 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
|
109 } |
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 return true; |
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 /* |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
115 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
|
116 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
117 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
118 override void pop() { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
119 } |
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 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
|
122 } |
7 | 123 */ |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
124 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
125 private { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
126 Tool[] mTools; |
7 | 127 Tool * mGrabbedTool; |
128 ButtonName mGrabbedButton; | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
129 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
130 } |