Mercurial > projects > doodle
annotate doodle/dia/tool_layer.d @ 57:9960c4fbd0dd
I is for Interface
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sun, 08 Aug 2010 22:01:54 +0930 |
parents | b190a9d9352e |
children | c63719604adb |
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 |
57 | 12 interface IToolStack { |
56 | 13 } |
14 | |
57 | 15 class ToolLayer : Layer, IEventHandler, IToolStack { |
12 | 16 this(in Tool[] tools, in string name) { |
17 super(name); | |
48 | 18 _tools = tools.dup; |
7 | 19 } |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
20 |
36 | 21 // Layer overrides: |
22 | |
23 override Rectangle bounds() const { | |
24 return Rectangle(); | |
25 } | |
26 | |
57 | 27 override void draw(const IViewport viewport, |
48 | 28 in Rectangle pixelDamage, scope Context pixelCr, |
29 in Rectangle modelDamage, scope Context modelCr) const { | |
56 | 30 if (_grabbedTool) { |
31 _grabbedTool.draw(viewport, pixelDamage, pixelCr); | |
36 | 32 } |
33 } | |
34 | |
35 // EventHandler overrides: | |
36 | |
57 | 37 override bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { |
14 | 38 // writefln("%s", event); |
7 | 39 |
48 | 40 if (_grabbedTool is null) { |
41 foreach_reverse(ref tool; _tools) { | |
42 if (tool.handleButtonPress(viewport, event)) { | |
43 _grabbedTool = &tool; | |
44 _grabbedButton = event.button_name; | |
7 | 45 break; |
46 } | |
47 } | |
48 } | |
49 else { | |
48 | 50 _grabbedTool.handleButtonPress(viewport, event); |
7 | 51 } |
52 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
53 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
54 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
55 |
57 | 56 override bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) { |
14 | 57 // writefln("%s", event); |
7 | 58 |
48 | 59 if (_grabbedTool !is null) { |
60 _grabbedTool.handleButtonRelease(viewport, event); | |
7 | 61 |
48 | 62 if (_grabbedButton == event.button_name) { |
63 _grabbedTool = null; | |
7 | 64 } |
65 } | |
66 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
67 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
68 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
69 |
57 | 70 override bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { |
14 | 71 // writefln("%s", event); |
72 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
73 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
74 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
75 |
57 | 76 override bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { |
14 | 77 // writefln("%s", event); |
78 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
79 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
80 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
81 |
57 | 82 override bool handleMotion(scope IViewport viewport, in MotionEvent event) { |
17 | 83 //writefln("%s", event); |
7 | 84 |
48 | 85 if (_grabbedTool is null) { |
86 foreach_reverse(ref tool; _tools) { | |
87 if (tool.handleMotion(viewport, event)) { | |
7 | 88 break; |
89 } | |
90 } | |
91 } | |
92 else { | |
48 | 93 _grabbedTool.handleMotion(viewport, event); |
7 | 94 } |
95 | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
96 return true; |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
97 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
98 |
57 | 99 override bool handleScroll(scope IViewport viewport, in ScrollEvent event) { |
14 | 100 // writefln("%s", event); |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
101 |
48 | 102 if (_grabbedTool is null) { |
103 foreach_reverse(ref tool; _tools) { | |
104 if (tool.handleScroll(viewport, event)) { | |
7 | 105 break; |
106 } | |
2
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 else { |
48 | 110 _grabbedTool.handleScroll(viewport, event); |
2
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 return true; |
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 |
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 push(Tool tool) { |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
118 } |
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 override void pop() { |
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 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
123 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
|
124 } |
7 | 125 */ |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
126 |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
127 private { |
48 | 128 Tool[] _tools; |
129 Tool * _grabbedTool; | |
130 ButtonName _grabbedButton; | |
2
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
131 } |
d6f44347373d
* Switched over to geometry done with structs instead of classes.
David Bryant <daveb@acres.com.au>
parents:
diff
changeset
|
132 } |