Mercurial > projects > doodle
annotate tool_layer.d @ 14:0b7e7d43a79d
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sun, 12 Jul 2009 01:23:32 +0930 |
parents | a093c4fbdd43 |
children | 9e63308b749c |
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 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
3 import std.stdio; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
4 |
12 | 5 import cairo.Context; |
6 import cairo_support; | |
3
7d57cae10805
Renamed geometry2 to geometry
David Bryant <daveb@acres.com.au>
parents:
2
diff
changeset
|
7 import tool; |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
8 private import icanvas; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
9 private import tk.types; |
3
7d57cae10805
Renamed geometry2 to geometry
David Bryant <daveb@acres.com.au>
parents:
2
diff
changeset
|
10 private import tk.geometry; |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
11 private import tk.events; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
12 |
12 | 13 class ToolLayer : Layer, EventHandler { |
14 this(in Tool[] tools, in string name) { | |
15 super(name); | |
7 | 16 mTools = tools.dup; |
17 } | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
18 |
10 | 19 override bool handle_button_press(Viewport viewport, in ButtonEvent event) { |
14 | 20 // writefln("%s", event); |
7 | 21 |
22 if (mGrabbedTool is null) { | |
23 foreach_reverse(ref tool; mTools) { | |
10 | 24 if (tool.handle_button_press(viewport, event)) { |
7 | 25 mGrabbedTool = &tool; |
26 mGrabbedButton = event.button_name; | |
27 break; | |
28 } | |
29 } | |
30 } | |
31 else { | |
10 | 32 mGrabbedTool.handle_button_press(viewport, event); |
7 | 33 } |
34 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
35 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
36 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
37 |
10 | 38 override bool handle_button_release(Viewport viewport, in ButtonEvent event) { |
14 | 39 // writefln("%s", event); |
7 | 40 |
41 if (mGrabbedTool !is null) { | |
10 | 42 mGrabbedTool.handle_button_release(viewport, event); |
7 | 43 |
44 if (mGrabbedButton == event.button_name) { | |
45 mGrabbedTool = null; | |
46 } | |
47 } | |
48 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
49 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
50 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
51 |
10 | 52 override bool handle_key_press(Viewport viewport, in KeyEvent event) { |
14 | 53 // writefln("%s", event); |
54 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
55 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
56 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
57 |
10 | 58 override bool handle_key_release(Viewport viewport, in KeyEvent event) { |
14 | 59 // writefln("%s", event); |
60 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
61 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
62 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
63 |
10 | 64 override bool handle_motion(Viewport viewport, in MotionEvent event) { |
14 | 65 // writefln("%s", event); |
7 | 66 |
67 if (mGrabbedTool is null) { | |
68 foreach_reverse(ref tool; mTools) { | |
10 | 69 if (tool.handle_motion(viewport, event)) { |
7 | 70 break; |
71 } | |
72 } | |
73 } | |
74 else { | |
10 | 75 mGrabbedTool.handle_motion(viewport, event); |
7 | 76 } |
77 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
78 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
79 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
80 |
10 | 81 override bool handle_scroll(Viewport viewport, in ScrollEvent event) { |
14 | 82 // writefln("%s", event); |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
83 |
7 | 84 if (mGrabbedTool is null) { |
85 foreach_reverse(ref tool; mTools) { | |
10 | 86 if (tool.handle_scroll(viewport, event)) { |
7 | 87 break; |
88 } | |
2
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 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
91 else { |
10 | 92 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
|
93 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
94 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
95 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
96 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
97 |
12 | 98 override Rectangle bounds() const { |
99 return Rectangle(); | |
100 } | |
101 | |
102 override void draw(const Viewport viewport, in Rectangle damage, | |
103 Context model_cr, Context screen_cr) const { | |
104 } | |
105 | |
2
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 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
|
108 } |
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 override void pop() { |
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 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
113 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
|
114 } |
7 | 115 */ |
2
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 private { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
118 Tool[] mTools; |
7 | 119 Tool * mGrabbedTool; |
120 ButtonName mGrabbedButton; | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
121 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
122 } |