Mercurial > projects > doodle
comparison doodle/dia/tool_layer.d @ 28:1754cb773d41
Part-way through getting to compile with configure/builder.
author | Graham St Jack <graham.stjack@internode.on.net> |
---|---|
date | Sun, 02 Aug 2009 16:27:21 +0930 |
parents | dia/tool_layer.d@06c30d250c0a |
children | 188397ef9a12 |
comparison
equal
deleted
inserted
replaced
27:f3d91579bb28 | 28:1754cb773d41 |
---|---|
1 module doodle.dia.tool_layer; | |
2 | |
3 private { | |
4 import std.stdio; | |
5 import doodle.cairo.routines; | |
6 } | |
7 | |
8 public { | |
9 import doodle.dia.tool; | |
10 } | |
11 | |
12 class ToolLayer : Layer, EventHandler { | |
13 this(in Tool[] tools, in string name) { | |
14 super(name); | |
15 mTools = tools.dup; | |
16 } | |
17 | |
18 override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { | |
19 // writefln("%s", event); | |
20 | |
21 if (mGrabbedTool is null) { | |
22 foreach_reverse(ref tool; mTools) { | |
23 if (tool.handle_button_press(viewport, event)) { | |
24 mGrabbedTool = &tool; | |
25 mGrabbedButton = event.button_name; | |
26 break; | |
27 } | |
28 } | |
29 } | |
30 else { | |
31 mGrabbedTool.handle_button_press(viewport, event); | |
32 } | |
33 | |
34 return true; | |
35 } | |
36 | |
37 override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { | |
38 // writefln("%s", event); | |
39 | |
40 if (mGrabbedTool !is null) { | |
41 mGrabbedTool.handle_button_release(viewport, event); | |
42 | |
43 if (mGrabbedButton == event.button_name) { | |
44 mGrabbedTool = null; | |
45 } | |
46 } | |
47 | |
48 return true; | |
49 } | |
50 | |
51 override bool handle_key_press(scope Viewport viewport, in KeyEvent event) { | |
52 // writefln("%s", event); | |
53 | |
54 return true; | |
55 } | |
56 | |
57 override bool handle_key_release(scope Viewport viewport, in KeyEvent event) { | |
58 // writefln("%s", event); | |
59 | |
60 return true; | |
61 } | |
62 | |
63 override bool handle_motion(scope Viewport viewport, in MotionEvent event) { | |
64 //writefln("%s", event); | |
65 | |
66 if (mGrabbedTool is null) { | |
67 foreach_reverse(ref tool; mTools) { | |
68 if (tool.handle_motion(viewport, event)) { | |
69 break; | |
70 } | |
71 } | |
72 } | |
73 else { | |
74 mGrabbedTool.handle_motion(viewport, event); | |
75 } | |
76 | |
77 return true; | |
78 } | |
79 | |
80 override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { | |
81 // writefln("%s", event); | |
82 | |
83 if (mGrabbedTool is null) { | |
84 foreach_reverse(ref tool; mTools) { | |
85 if (tool.handle_scroll(viewport, event)) { | |
86 break; | |
87 } | |
88 } | |
89 } | |
90 else { | |
91 mGrabbedTool.handle_scroll(viewport, event); | |
92 } | |
93 | |
94 return true; | |
95 } | |
96 | |
97 override Rectangle bounds() const { | |
98 return Rectangle(); | |
99 } | |
100 | |
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 { | |
104 // FIXME this isn't how we will really draw the tools... | |
105 foreach (const Tool tool; mTools) { | |
106 tool.draw(viewport, pixel_damage, pixel_cr, model_damage, model_cr); | |
107 } | |
108 } | |
109 | |
110 /* | |
111 override void push(Tool tool) { | |
112 } | |
113 | |
114 override void pop() { | |
115 } | |
116 | |
117 override void replace(Tool tool) { | |
118 } | |
119 */ | |
120 | |
121 private { | |
122 Tool[] mTools; | |
123 Tool * mGrabbedTool; | |
124 ButtonName mGrabbedButton; | |
125 } | |
126 } |