Mercurial > projects > doodle
annotate doodle/tk/events.d @ 101:523269b36711
Update to dmd 2.050
author | David Bryant <bagnose@gmail.com> |
---|---|
date | Thu, 28 Oct 2010 16:35:11 +1030 |
parents | d92b9f04b1e8 |
children | 7abaf5c3959f |
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; |
72
5cc2de64f6d0
Cautious Saturday night commits
"David Bryant <bagnose@gmail.com>"
parents:
67
diff
changeset
|
6 import gtkc.gdktypes; |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
7 } |
0 | 8 |
67 | 9 private { |
101 | 10 import std.conv; |
67 | 11 } |
12 | |
101 | 13 enum ButtonAction { SINGLE_PRESS, DOUBLE_PRESS, TRIPLE_PRESS, RELEASE } |
14 enum ButtonName { LEFT, MIDDLE, RIGHT, FOUR, FIVE } | |
15 enum ScrollDirection { UP, DOWN, LEFT, RIGHT } | |
16 enum Modifier { SHIFT, CAPS_LOCK, CONTROL, ALT, NUM_LOCK, META, SCROLL_LOCK, LEFT_BUTTON, MIDDLE_BUTTON, RIGHT_BUTTON, UNUSED_BUTTON_1, UNUSED_BUTTON_2 } | |
67 | 17 |
101 | 18 // FIXME what to do about GRAB2/UNGRAB2 |
19 enum CrossingMode { NORMAL, GRAB, UNGRAB, GRAB2, UNGRAB2, STATE_CHANGED } | |
67 | 20 |
21 struct Mask { | |
22 this(in Modifier[] modifiers) { | |
23 foreach (m; modifiers) { | |
24 _bits |= 1 << m; | |
25 } | |
26 } | |
27 | |
28 string toString() { | |
29 if (_bits == 0) { | |
30 return "<NO_MASK>"; | |
31 } | |
32 else { | |
33 string s = ""; | |
34 | |
35 for (int i = 0; i < _bits.sizeof * 8; ++i) { | |
36 if (_bits & (1 << i)) { | |
37 if (s.length != 0) s ~= "|"; | |
101 | 38 s ~= to!string(cast(Modifier)i); |
67 | 39 } |
40 } | |
41 | |
42 return s; | |
43 } | |
44 } | |
45 | |
46 bool isSet(in Modifier m) const { return _bits & (1 << m); } | |
47 bool isUnset(in Modifier m) const { return !isSet(m); } | |
48 | |
49 private immutable ushort _bits; | |
50 } | |
51 | |
63
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
58
diff
changeset
|
52 // FIXME |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
53 // 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
|
54 // 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
|
55 |
0 | 56 abstract class Event { |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
57 this(in Mask mask) { |
48 | 58 _mask = mask; |
0 | 59 } |
60 | |
48 | 61 Mask mask() const { return _mask; } |
0 | 62 |
63 private { | |
48 | 64 Mask _mask; |
0 | 65 } |
66 } | |
67 | |
13 | 68 final class KeyEvent : Event { |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
69 this(in string str, in uint value, in Mask mask) { |
0 | 70 super(mask); |
48 | 71 _str = str; |
72 _value = value; | |
0 | 73 } |
74 | |
48 | 75 string str() const { return _str; } |
63
20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
daveb
parents:
58
diff
changeset
|
76 uint value() const { return _value; } |
0 | 77 |
5 | 78 override string toString() const { |
101 | 79 return std.string.format("Key event: %s, %d, %s", |
80 _str, _value, _mask); | |
0 | 81 } |
82 | |
83 private { | |
48 | 84 string _str; |
85 uint _value; | |
0 | 86 } |
87 } | |
88 | |
13 | 89 abstract class PointerEvent : Event { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
90 this(in Point screenPoint, in Point modelPoint, in Mask mask) { |
0 | 91 super(mask); |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
92 _screenPoint = screenPoint; |
48 | 93 _modelPoint = modelPoint; |
0 | 94 } |
95 | |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
96 Point screenPoint() const { return _screenPoint; } |
48 | 97 Point modelPoint() const { return _modelPoint; } |
0 | 98 |
99 private { | |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
100 Point _screenPoint; |
48 | 101 Point _modelPoint; |
0 | 102 } |
103 } | |
104 | |
33
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
105 final class CrossingEvent : PointerEvent { |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
106 this(in CrossingMode crossingMode, |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
107 in Point screenPoint, |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
108 in Point modelPoint, |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
109 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
110 super(screenPoint, modelPoint, mask); |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
111 _crossingMode = crossingMode; |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
112 } |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
113 |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
114 CrossingMode crossingMode() const { return _crossingMode; } |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
115 |
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
116 override string toString() const { |
101 | 117 return std.string.format("Crossing event: %s, %s, %s, %s", |
118 to!string(_crossingMode), screenPoint, modelPoint, mask); | |
33
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
119 } |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
120 |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
121 private { |
64
eb5436b47d13
Implemented crossing events
"David Bryant <bagnose@gmail.com>"
parents:
63
diff
changeset
|
122 CrossingMode _crossingMode; |
33
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
123 } |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
124 } |
157b4ad5615d
Added intersection code for lines and segments.
David Bryant <bagnose@gmail.com>
parents:
28
diff
changeset
|
125 |
0 | 126 final class ButtonEvent : PointerEvent { |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
127 this(in ButtonAction buttonAction, |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
128 in ButtonName buttonName, |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
129 in Point screenPoint, |
48 | 130 in Point modelPoint, |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
131 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
132 super(screenPoint, modelPoint, mask); |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
133 _buttonAction = buttonAction; |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
134 _buttonName = buttonName; |
0 | 135 } |
136 | |
5 | 137 override string toString() const { |
8 | 138 return std.string.format("Button event: %s, %s, %s, %s, %s", |
101 | 139 to!string(_buttonAction), to!string(_buttonName), _screenPoint, _modelPoint, _mask); |
0 | 140 } |
141 | |
58
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
142 ButtonAction buttonAction() const { return _buttonAction; } |
c63719604adb
Beginnings of creating a rectangle...
"David Bryant <bagnose@gmail.com>"
parents:
48
diff
changeset
|
143 ButtonName buttonName() const { return _buttonName; } |
0 | 144 |
145 private { | |
48 | 146 ButtonAction _buttonAction; |
147 ButtonName _buttonName; | |
0 | 148 } |
149 } | |
150 | |
151 final class MotionEvent : PointerEvent { | |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
152 this(in Point screenPoint, |
48 | 153 in Point modelPoint, |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
154 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
155 super(screenPoint, modelPoint, mask); |
0 | 156 } |
157 | |
5 | 158 override string toString() const { |
8 | 159 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
|
160 _screenPoint, _modelPoint, _mask); |
0 | 161 } |
162 } | |
163 | |
164 final class ScrollEvent : PointerEvent { | |
48 | 165 this(in ScrollDirection scrollDirection, |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
166 in Point screenPoint, |
48 | 167 in Point modelPoint, |
16
9e63308b749c
* Fix up public/private includes
David Bryant <daveb@acres.com.au>
parents:
13
diff
changeset
|
168 in Mask mask) { |
80
b759414d2b72
Switched from cairo to Drawable abstraction
"David Bryant <bagnose@gmail.com>"
parents:
72
diff
changeset
|
169 super(screenPoint, modelPoint, mask); |
48 | 170 _scrollDirection = scrollDirection; |
0 | 171 } |
172 | |
5 | 173 override string toString() const { |
8 | 174 return std.string.format("Scroll event: %s, %s, %s, %s", |
101 | 175 to!string(_scrollDirection), _screenPoint, _modelPoint, _mask); |
0 | 176 } |
177 | |
48 | 178 ScrollDirection scrollDirection() const { return _scrollDirection; } |
0 | 179 |
180 private { | |
48 | 181 ScrollDirection _scrollDirection; |
0 | 182 } |
183 } |