Mercurial > projects > doodle
comparison doodle/dia/tool_layer.d @ 63:20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
author | daveb |
---|---|
date | Thu, 12 Aug 2010 16:35:24 +0930 |
parents | e64baac3efb2 |
children | eb5436b47d13 |
comparison
equal
deleted
inserted
replaced
62:6c3993f4c3eb | 63:20d6327c4a75 |
---|---|
17 interface IToolStackObserver { | 17 interface IToolStackObserver { |
18 void toolChanged(Tool tool); | 18 void toolChanged(Tool tool); |
19 } | 19 } |
20 | 20 |
21 final class ToolLayer : Layer, IEventHandler, IToolStack { | 21 final class ToolLayer : Layer, IEventHandler, IToolStack { |
22 this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") { | 22 this(in Tool[] staticTools, IToolStackObserver observer, in string name = "Tool") { |
23 super(name); | 23 super(name); |
24 _tools = tools.dup; | 24 _staticTools = staticTools.dup; |
25 _observer = observer; | 25 _observer = observer; |
26 } | 26 } |
27 | 27 |
28 // IToolStack overrides: | 28 // IToolStack overrides: |
29 | 29 |
30 void use(Tool tool) { | 30 void use(Tool tool) { |
31 assert(_grabbedTool is null); | 31 assert(_grabbedTool is null); |
32 message("using new tool: %s", tool.name); | 32 message("using new tool: %s", tool.name); |
33 _tools ~= tool; | 33 _staticTools ~= tool; |
34 _observer.toolChanged(tool); | 34 _observer.toolChanged(tool); |
35 } | 35 } |
36 | 36 |
37 // Layer overrides: | 37 // Layer overrides: |
38 | 38 |
52 | 52 |
53 bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { | 53 bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { |
54 // writefln("%s", event); | 54 // writefln("%s", event); |
55 | 55 |
56 if (_grabbedTool is null) { | 56 if (_grabbedTool is null) { |
57 foreach_reverse(ref tool; _tools) { | 57 foreach_reverse(ref tool; _staticTools) { |
58 if (tool.handleButtonPress(viewport, event)) { | 58 if (tool.handleButtonPress(viewport, event)) { |
59 _grabbedTool = &tool; | 59 _grabbedTool = tool; |
60 _grabbedButton = event.buttonName; | 60 _grabbedButton = event.buttonName; |
61 break; | 61 break; |
62 } | 62 } |
63 } | 63 } |
64 } | 64 } |
84 } | 84 } |
85 | 85 |
86 bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { | 86 bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { |
87 // writefln("%s", event); | 87 // writefln("%s", event); |
88 | 88 |
89 // FIXME not sure how these should work | |
90 foreach_reverse(ref tool; _staticTools) { | |
91 if (tool.handleKeyPress(viewport, event)) { | |
92 break; | |
93 } | |
94 } | |
95 | |
89 return true; | 96 return true; |
90 } | 97 } |
91 | 98 |
92 bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { | 99 bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { |
93 // writefln("%s", event); | 100 // writefln("%s", event); |
101 | |
102 // FIXME not sure how these should work | |
103 foreach_reverse(ref tool; _staticTools) { | |
104 if (tool.handleKeyRelease(viewport, event)) { | |
105 break; | |
106 } | |
107 } | |
94 | 108 |
95 return true; | 109 return true; |
96 } | 110 } |
97 | 111 |
98 bool handleMotion(scope IViewport viewport, in MotionEvent event) { | 112 bool handleMotion(scope IViewport viewport, in MotionEvent event) { |
99 //writefln("%s", event); | 113 //writefln("%s", event); |
100 | 114 |
101 if (_grabbedTool is null) { | 115 if (_grabbedTool is null) { |
102 foreach_reverse(ref tool; _tools) { | 116 foreach_reverse(ref tool; _staticTools) { |
103 if (tool.handleMotion(viewport, event)) { | 117 if (tool.handleMotion(viewport, event)) { |
104 break; | 118 break; |
105 } | 119 } |
106 } | 120 } |
107 } | 121 } |
114 | 128 |
115 bool handleScroll(scope IViewport viewport, in ScrollEvent event) { | 129 bool handleScroll(scope IViewport viewport, in ScrollEvent event) { |
116 // writefln("%s", event); | 130 // writefln("%s", event); |
117 | 131 |
118 if (_grabbedTool is null) { | 132 if (_grabbedTool is null) { |
119 foreach_reverse(ref tool; _tools) { | 133 foreach_reverse(ref tool; _staticTools) { |
120 if (tool.handleScroll(viewport, event)) { | 134 if (tool.handleScroll(viewport, event)) { |
121 break; | 135 break; |
122 } | 136 } |
123 } | 137 } |
124 } | 138 } |
128 | 142 |
129 return true; | 143 return true; |
130 } | 144 } |
131 | 145 |
132 private { | 146 private { |
133 Tool[] _tools; | 147 Tool[] _staticTools; |
134 IToolStackObserver _observer; | 148 IToolStackObserver _observer; |
135 | 149 |
136 Tool * _grabbedTool; | 150 Tool _grabbedTool; |
137 ButtonName _grabbedButton; | 151 ButtonName _grabbedButton; |
138 } | 152 } |
139 } | 153 } |