Mercurial > projects > doodle
comparison doodle/dia/tool_layer.d @ 58:c63719604adb
Beginnings of creating a rectangle...
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Mon, 09 Aug 2010 21:43:24 +0930 |
parents | 9960c4fbd0dd |
children | e64baac3efb2 |
comparison
equal
deleted
inserted
replaced
57:9960c4fbd0dd | 58:c63719604adb |
---|---|
3 public { | 3 public { |
4 import doodle.dia.tool; | 4 import doodle.dia.tool; |
5 } | 5 } |
6 | 6 |
7 private { | 7 private { |
8 import std.stdio; | |
9 import doodle.cairo.routines; | 8 import doodle.cairo.routines; |
9 import doodle.core.logging; | |
10 } | 10 } |
11 | 11 |
12 // This interface is used by the palette | |
12 interface IToolStack { | 13 interface IToolStack { |
14 void use(Tool tool); | |
13 } | 15 } |
14 | 16 |
15 class ToolLayer : Layer, IEventHandler, IToolStack { | 17 interface IToolStackObserver { |
16 this(in Tool[] tools, in string name) { | 18 void toolChanged(int index); |
19 } | |
20 | |
21 final class ToolLayer : Layer, IEventHandler, IToolStack { | |
22 this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") { | |
17 super(name); | 23 super(name); |
18 _tools = tools.dup; | 24 _tools = tools.dup; |
25 _observer = observer; | |
26 } | |
27 | |
28 // IToolStack overrides: | |
29 | |
30 void use(Tool tool) { | |
31 assert(_grabbedTool is null); | |
32 message("using new tool: %s", tool.name); | |
33 _tools ~= tool; | |
34 //_observer.toolChanged(_tools.length - 1); | |
19 } | 35 } |
20 | 36 |
21 // Layer overrides: | 37 // Layer overrides: |
22 | 38 |
23 override Rectangle bounds() const { | 39 override Rectangle bounds() const { |
32 } | 48 } |
33 } | 49 } |
34 | 50 |
35 // EventHandler overrides: | 51 // EventHandler overrides: |
36 | 52 |
37 override bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { | 53 bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { |
38 // writefln("%s", event); | 54 // writefln("%s", event); |
39 | 55 |
40 if (_grabbedTool is null) { | 56 if (_grabbedTool is null) { |
41 foreach_reverse(ref tool; _tools) { | 57 foreach_reverse(ref tool; _tools) { |
42 if (tool.handleButtonPress(viewport, event)) { | 58 if (tool.handleButtonPress(viewport, event)) { |
43 _grabbedTool = &tool; | 59 _grabbedTool = &tool; |
44 _grabbedButton = event.button_name; | 60 _grabbedButton = event.buttonName; |
45 break; | 61 break; |
46 } | 62 } |
47 } | 63 } |
48 } | 64 } |
49 else { | 65 else { |
51 } | 67 } |
52 | 68 |
53 return true; | 69 return true; |
54 } | 70 } |
55 | 71 |
56 override bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) { | 72 bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) { |
57 // writefln("%s", event); | 73 // writefln("%s", event); |
58 | 74 |
59 if (_grabbedTool !is null) { | 75 if (_grabbedTool !is null) { |
60 _grabbedTool.handleButtonRelease(viewport, event); | 76 _grabbedTool.handleButtonRelease(viewport, event); |
61 | 77 |
62 if (_grabbedButton == event.button_name) { | 78 if (_grabbedButton == event.buttonName) { |
63 _grabbedTool = null; | 79 _grabbedTool = null; |
64 } | 80 } |
65 } | 81 } |
66 | 82 |
67 return true; | 83 return true; |
68 } | 84 } |
69 | 85 |
70 override bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { | 86 bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { |
71 // writefln("%s", event); | 87 // writefln("%s", event); |
72 | 88 |
73 return true; | 89 return true; |
74 } | 90 } |
75 | 91 |
76 override bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { | 92 bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { |
77 // writefln("%s", event); | 93 // writefln("%s", event); |
78 | 94 |
79 return true; | 95 return true; |
80 } | 96 } |
81 | 97 |
82 override bool handleMotion(scope IViewport viewport, in MotionEvent event) { | 98 bool handleMotion(scope IViewport viewport, in MotionEvent event) { |
83 //writefln("%s", event); | 99 //writefln("%s", event); |
84 | 100 |
85 if (_grabbedTool is null) { | 101 if (_grabbedTool is null) { |
86 foreach_reverse(ref tool; _tools) { | 102 foreach_reverse(ref tool; _tools) { |
87 if (tool.handleMotion(viewport, event)) { | 103 if (tool.handleMotion(viewport, event)) { |
94 } | 110 } |
95 | 111 |
96 return true; | 112 return true; |
97 } | 113 } |
98 | 114 |
99 override bool handleScroll(scope IViewport viewport, in ScrollEvent event) { | 115 bool handleScroll(scope IViewport viewport, in ScrollEvent event) { |
100 // writefln("%s", event); | 116 // writefln("%s", event); |
101 | 117 |
102 if (_grabbedTool is null) { | 118 if (_grabbedTool is null) { |
103 foreach_reverse(ref tool; _tools) { | 119 foreach_reverse(ref tool; _tools) { |
104 if (tool.handleScroll(viewport, event)) { | 120 if (tool.handleScroll(viewport, event)) { |
111 } | 127 } |
112 | 128 |
113 return true; | 129 return true; |
114 } | 130 } |
115 | 131 |
116 /* | |
117 override void push(Tool tool) { | |
118 } | |
119 | |
120 override void pop() { | |
121 } | |
122 | |
123 override void replace(Tool tool) { | |
124 } | |
125 */ | |
126 | |
127 private { | 132 private { |
128 Tool[] _tools; | 133 Tool[] _tools; |
134 IToolStackObserver _observer; | |
135 | |
129 Tool * _grabbedTool; | 136 Tool * _grabbedTool; |
130 ButtonName _grabbedButton; | 137 ButtonName _grabbedButton; |
131 } | 138 } |
132 } | 139 } |