Mercurial > projects > doodle
annotate doodle/tk/events.d @ 136:752676232e4b
Port to GtkD-2.0 (gtk+3)
author | David Bryant <bagnose@gmail.com> |
---|---|
date | Wed, 26 Sep 2012 17:36:31 +0930 |
parents | bc5baa585b32 |
children |
rev | line source |
---|---|
28
1754cb773d41
Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents:
17
diff
changeset
|
1 module doodle.tk.events; |
0 | 2 |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
3 public { |
28
1754cb773d41
Part-way through getting to compile with configure/builder.
Graham St Jack <graham.stjack@internode.on.net>
parents:
17
diff
changeset
|
4 import doodle.tk.geometry; |
81 | 5 import doodle.tk.screen_model; |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
6 } |
0 | 7 |
67 | 8 private { |
101 | 9 import std.conv; |
67 | 10 } |
11 | |
104 | 12 enum ButtonAction { |
13 SINGLE_PRESS, | |
14 DOUBLE_PRESS, | |
15 TRIPLE_PRESS, | |
16 RELEASE | |
17 } | |
18 | |
19 enum ButtonName { | |
20 LEFT, | |
21 MIDDLE, | |
22 RIGHT, | |
23 FOUR, | |
24 FIVE | |
67 | 25 } |
26 | |
104 | 27 enum ScrollDirection { |
28 UP, | |
29 DOWN, | |
30 LEFT, | |
31 RIGHT | |
32 } | |
67 | 33 |
104 | 34 enum Modifier { |
35 SHIFT, | |
36 CAPS_LOCK, | |
37 CONTROL, | |
38 ALT, | |
39 NUM_LOCK, | |
40 META, | |
41 SCROLL_LOCK, | |
42 LEFT_BUTTON, | |
43 MIDDLE_BUTTON, | |
44 RIGHT_BUTTON, | |
45 UNUSED_BUTTON_1, | |
46 UNUSED_BUTTON_2 | |
47 } | |
67 | 48 |
104 | 49 enum CrossingMode { // FIXME what to do about GRAB2/UNGRAB2 |
50 NORMAL, | |
51 GRAB, | |
52 UNGRAB, | |
53 GRAB2, | |
54 UNGRAB2, | |
55 STATE_CHANGED | |
56 } | |
67 | 57 |
58 struct Mask { | |
59 this(in Modifier[] modifiers) { | |
60 foreach (m; modifiers) { | |
61 _bits |= 1 << m; | |
62 } | |
63 } | |
64 | |
65 string toString() { | |
66 if (_bits == 0) { | |
67 return "<NO_MASK>"; | |
68 } | |
69 else { | |
70 string s = ""; | |
71 | |
72 for (int i = 0; i < _bits.sizeof * 8; ++i) { | |
73 if (_bits & (1 << i)) { | |
74 if (s.length != 0) s ~= "|"; | |
101 | 75 s ~= to!string(cast(Modifier)i); |
67 | 76 } |
77 } | |
78 | |
79 return s; | |
80 } | |
81 } | |
82 | |
126
89016abde9fe
Keep it building... (dmd 2.055)
David Bryant <bagnose@gmail.com>
parents:
105
diff
changeset
|
83 bool isSet(in Modifier m) const { return cast(bool)(_bits & (1 << m)); } |
67 | 84 bool isUnset(in Modifier m) const { return !isSet(m); } |
85 | |
86 private immutable ushort _bits; | |
87 } | |
88 | |
63
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
58
diff
changeset
|
89 // FIXME |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
90 // Do we need FocusEvent. Note, it has no mask. |
63
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
58
diff
changeset
|
91 // Hence would need to refactor hierarchy slightly, eg InputEvent |
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
58
diff
changeset
|
92 |
0 | 93 abstract class Event { |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
94 this(in Mask mask) { |
48 | 95 _mask = mask; |
0 | 96 } |
97 | |
132 | 98 @property Mask mask() const { return _mask; } |
0 | 99 |
100 private { | |
48 | 101 Mask _mask; |
0 | 102 } |
103 } | |
104 | |
13 | 105 final class KeyEvent : Event { |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
106 this(in string str, in uint value, in Mask mask) { |
0 | 107 super(mask); |
48 | 108 _str = str; |
109 _value = value; | |
0 | 110 } |
111 | |
132 | 112 @property string str() const { return _str; } |
113 @property uint value() const { return _value; } | |
0 | 114 |
5 | 115 override string toString() const { |
48 | 116 return std.string.format("Key event: %s, %d, %s", _str, _value, _mask); |
0 | 117 } |
118 | |
119 private { | |
48 | 120 string _str; |
121 uint _value; | |
0 | 122 } |
123 } | |
124 | |
13 | 125 abstract class PointerEvent : Event { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
126 this(in Point screenPoint, in Point modelPoint, in Mask mask) { |
0 | 127 super(mask); |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
128 _screenPoint = screenPoint; |
48 | 129 _modelPoint = modelPoint; |
0 | 130 } |
131 | |
132 | 132 @property Point screenPoint() const { return _screenPoint; } |
133 @property Point modelPoint() const { return _modelPoint; } | |
0 | 134 |
135 private { | |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
136 Point _screenPoint; |
48 | 137 Point _modelPoint; |
0 | 138 } |
139 } | |
140 | |
33
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
141 final class CrossingEvent : PointerEvent { |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
142 this(in CrossingMode crossingMode, |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
143 in Point screenPoint, |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
144 in Point modelPoint, |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
145 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
146 super(screenPoint, modelPoint, mask); |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
147 _crossingMode = crossingMode; |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
148 } |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
149 |
132 | 150 @property CrossingMode crossingMode() const { return _crossingMode; } |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
151 |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
152 override string toString() const { |
104 | 153 return std.string.format("Crossing event: %s, %s, %s, %s", to!string(_crossingMode), screenPoint, modelPoint, mask); |
33
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
154 } |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
155 |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
156 private { |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
157 CrossingMode _crossingMode; |
33
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
158 } |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
159 } |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
160 |
0 | 161 final class ButtonEvent : PointerEvent { |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
162 this(in ButtonAction buttonAction, |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
163 in ButtonName buttonName, |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
164 in Point screenPoint, |
48 | 165 in Point modelPoint, |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
166 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
167 super(screenPoint, modelPoint, mask); |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
168 _buttonAction = buttonAction; |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
169 _buttonName = buttonName; |
0 | 170 } |
171 | |
5 | 172 override string toString() const { |
8 | 173 return std.string.format("Button event: %s, %s, %s, %s, %s", |
104 | 174 to!string(_buttonAction), to!string(_buttonName), |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
175 _screenPoint, _modelPoint, _mask); |
0 | 176 } |
177 | |
132 | 178 @property ButtonAction buttonAction() const { return _buttonAction; } |
179 @property ButtonName buttonName() const { return _buttonName; } | |
0 | 180 |
181 private { | |
48 | 182 ButtonAction _buttonAction; |
183 ButtonName _buttonName; | |
0 | 184 } |
185 } | |
186 | |
187 final class MotionEvent : PointerEvent { | |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
188 this(in Point screenPoint, |
48 | 189 in Point modelPoint, |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
190 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
191 super(screenPoint, modelPoint, mask); |
0 | 192 } |
193 | |
5 | 194 override string toString() const { |
8 | 195 return std.string.format("Motion event: %s, %s, %s", |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
196 _screenPoint, _modelPoint, _mask); |
0 | 197 } |
198 } | |
199 | |
200 final class ScrollEvent : PointerEvent { | |
48 | 201 this(in ScrollDirection scrollDirection, |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
202 in Point screenPoint, |
48 | 203 in Point modelPoint, |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
204 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
205 super(screenPoint, modelPoint, mask); |
48 | 206 _scrollDirection = scrollDirection; |
0 | 207 } |
208 | |
5 | 209 override string toString() const { |
8 | 210 return std.string.format("Scroll event: %s, %s, %s, %s", |
101 | 211 to!string(_scrollDirection), _screenPoint, _modelPoint, _mask); |
0 | 212 } |
213 | |
132 | 214 @property ScrollDirection scrollDirection() const { return _scrollDirection; } |
0 | 215 |
216 private { | |
48 | 217 ScrollDirection _scrollDirection; |
0 | 218 } |
219 } |