Mercurial > projects > doodle
annotate doodle/gtk/events.d @ 82:0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
Nearly done with the housekeeping...
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Mon, 16 Aug 2010 00:08:19 +0930 |
parents | d92b9f04b1e8 |
children | 752676232e4b |
rev | line source |
---|---|
73 | 1 module doodle.gtk.events; |
2 | |
3 public { | |
4 import doodle.tk.events; | |
5 } | |
6 | |
7 private { | |
8 import core.stdc.string : strlen; | |
82
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
9 static import gdk.Event; |
73 | 10 } |
11 | |
82
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
12 private { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
13 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
14 ButtonAction gtk2tkButtonAction(gdk.Event.EventType event_type) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
15 switch (event_type) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
16 case gdk.Event.EventType.BUTTON_PRESS: return ButtonAction.SINGLE_PRESS; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
17 case gdk.Event.EventType.DOUBLE_BUTTON_PRESS: return ButtonAction.DOUBLE_PRESS; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
18 case gdk.Event.EventType.TRIPLE_BUTTON_PRESS: return ButtonAction.TRIPLE_PRESS; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
19 case gdk.Event.EventType.BUTTON_RELEASE: return ButtonAction.RELEASE; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
20 default: |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
21 assert(false); |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
22 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
23 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
24 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
25 ButtonName gtk2tkButtonName(gdk.Event.guint button) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
26 switch (button) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
27 case 1: return ButtonName.LEFT; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
28 case 2: return ButtonName.MIDDLE; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
29 case 3: return ButtonName.RIGHT; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
30 case 4: return ButtonName.FOUR; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
31 case 5: return ButtonName.FIVE; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
32 default: |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
33 assert(false); |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
34 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
35 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
36 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
37 Mask gtk2tkMask(gdk.Event.guint state) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
38 Modifier[] modifiers; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
39 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
40 if (state & gdk.Event.GdkModifierType.SHIFT_MASK) modifiers ~= Modifier.SHIFT; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
41 if (state & gdk.Event.GdkModifierType.CONTROL_MASK) modifiers ~= Modifier.CONTROL; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
42 if (state & gdk.Event.GdkModifierType.MOD1_MASK) modifiers ~= Modifier.ALT; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
43 if (state & gdk.Event.GdkModifierType.MOD2_MASK) modifiers ~= Modifier.META; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
44 // Note, MOD 3-5 are currently omitted |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
45 if (state & gdk.Event.GdkModifierType.BUTTON1_MASK) modifiers ~= Modifier.LEFT_BUTTON; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
46 if (state & gdk.Event.GdkModifierType.BUTTON2_MASK) modifiers ~= Modifier.MIDDLE_BUTTON; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
47 if (state & gdk.Event.GdkModifierType.BUTTON3_MASK) modifiers ~= Modifier.RIGHT_BUTTON; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
48 if (state & gdk.Event.GdkModifierType.BUTTON4_MASK) modifiers ~= Modifier.UNUSED_BUTTON_1; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
49 if (state & gdk.Event.GdkModifierType.BUTTON5_MASK) modifiers ~= Modifier.UNUSED_BUTTON_2; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
50 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
51 Mask m = Mask(modifiers); |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
52 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
53 return Mask(modifiers); |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
54 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
55 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
56 ScrollDirection gtk2tkDirection(gdk.Event.ScrollDirection direction) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
57 switch (direction) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
58 case gdk.Event.ScrollDirection.UP: return ScrollDirection.UP; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
59 case gdk.Event.ScrollDirection.DOWN: return ScrollDirection.DOWN; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
60 case gdk.Event.ScrollDirection.LEFT: return ScrollDirection.LEFT; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
61 case gdk.Event.ScrollDirection.RIGHT: return ScrollDirection.RIGHT; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
62 default: |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
63 assert(false); |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
64 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
65 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
66 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
67 CrossingMode gtk2tkCrossingMode(gdk.Event.CrossingMode crossingMode) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
68 switch (crossingMode) { |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
69 case crossingMode.NORMAL: return CrossingMode.NORMAL; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
70 case crossingMode.GRAB: return CrossingMode.GRAB; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
71 case crossingMode.UNGRAB: return CrossingMode.UNGRAB; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
72 case crossingMode.GTK_GRAB: return CrossingMode.GRAB2; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
73 case crossingMode.GTK_UNGRAB: return CrossingMode.UNGRAB2; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
74 case crossingMode.STATE_CHANGED: return CrossingMode.STATE_CHANGED; |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
75 default: |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
76 assert(false); |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
77 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
78 } |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
79 |
0314b2e03f9b
Moved gtk/conversions.d int gtk/events.d
"David Bryant <bagnose@gmail.com>"
parents:
81
diff
changeset
|
80 } |
73 | 81 |
82 // Functions for creating the events | |
83 | |
84 /* | |
85 public struct GdkEventButton { | |
86 GdkEventType type; | |
87 GdkWindow *window; | |
88 byte sendEvent; | |
89 uint time; | |
90 double x; | |
91 double y; | |
92 double *axes; | |
93 uint state; | |
94 uint button; | |
95 GdkDevice *device; | |
96 double xRoot, yRoot; | |
97 } | |
98 */ | |
99 | |
77 | 100 ButtonEvent makeButtonEvent(const GdkEventButton * event, in ScreenModel screenModel) { |
101 Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); | |
102 Point modelPoint = screenModel.screenToModel(screenPoint); | |
73 | 103 return new ButtonEvent(gtk2tkButtonAction(event.type), |
104 gtk2tkButtonName(event.button), | |
77 | 105 screenPoint, modelPoint, gtk2tkMask(event.state)); |
73 | 106 } |
107 | |
108 /* | |
109 public struct GdkEventMotion { | |
110 GdkEventType type; | |
111 GdkWindow *window; | |
112 byte sendEvent; | |
113 uint time; | |
114 double x; | |
115 double y; | |
116 double *axes; | |
117 uint state; | |
118 short isHint; | |
119 GdkDevice *device; | |
120 double xRoot, yRoot; | |
121 } | |
122 */ | |
123 | |
77 | 124 MotionEvent makeMotionEvent(const GdkEventMotion * event, in ScreenModel screenModel) { |
125 Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); | |
126 Point modelPoint = screenModel.screenToModel(screenPoint); | |
73 | 127 |
77 | 128 return new MotionEvent(screenPoint, modelPoint, gtk2tkMask(event.state)); |
73 | 129 } |
130 | |
131 /* | |
132 public struct GdkEventKey { | |
133 GdkEventType type; | |
134 GdkWindow *window; | |
135 byte sendEvent; | |
136 uint time; | |
137 uint state; | |
138 uint keyval; | |
139 int length; | |
140 char *string; | |
141 ushort hardwareKeycode; | |
142 ubyte group; | |
143 uint bitfield0; | |
144 uint isModifier : 1; | |
145 } | |
146 */ | |
147 | |
77 | 148 KeyEvent makeKeyEvent(const GdkEventKey * event, in ScreenModel screenModel) { |
73 | 149 return new KeyEvent(event.string[0..strlen(event.string)].idup, |
150 event.keyval, | |
151 gtk2tkMask(event.state)); | |
152 } | |
153 | |
154 /* | |
155 public struct GdkEventScroll { | |
156 GdkEventType type; | |
157 GdkWindow *window; | |
158 byte sendEvent; | |
159 uint time; | |
160 double x; | |
161 double y; | |
162 uint state; | |
163 GdkScrollDirection direction; | |
164 GdkDevice *device; | |
165 double xRoot, yRoot; | |
166 } | |
167 */ | |
168 | |
77 | 169 ScrollEvent makeScrollEvent(const GdkEventScroll * event, in ScreenModel screenModel) { |
170 Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); | |
171 Point modelPoint = screenModel.screenToModel(screenPoint); | |
73 | 172 return new ScrollEvent(gtk2tkDirection(event.direction), |
77 | 173 screenPoint, |
73 | 174 modelPoint, |
175 gtk2tkMask(event.state)); | |
176 } | |
177 | |
178 /* | |
179 public enum GdkCrossingMode { | |
180 NORMAL, | |
181 GRAB, | |
182 UNGRAB, | |
183 GTK_GRAB, | |
184 GTK_UNGRAB, | |
185 STATE_CHANGED | |
186 } | |
187 | |
188 public struct GdkEventCrossing { | |
189 GdkEventType type; | |
190 GdkWindow *window; | |
191 byte sendEvent; | |
192 GdkWindow *subwindow; | |
193 uint time; | |
194 double x; | |
195 double y; | |
196 double xRoot; | |
197 double yRoot; | |
198 GdkCrossingMode mode; | |
199 GdkNotifyType detail; | |
200 int focus; | |
201 uint state; | |
202 } | |
203 */ | |
204 | |
77 | 205 CrossingEvent makeCrossingEvent(const GdkEventCrossing * event, in ScreenModel screenModel) { |
206 Point screenPoint = Point(event.x + 0.5, screenModel.viewBoundsScreen.h - (event.y + 0.5)); | |
207 Point modelPoint = screenModel.screenToModel(screenPoint); | |
73 | 208 return new CrossingEvent(gtk2tkCrossingMode(event.mode), |
77 | 209 screenPoint, |
73 | 210 modelPoint, |
211 gtk2tkMask(event.state)); | |
212 } | |
213 | |
214 | |
215 /* | |
216 public struct GdkEventFocus { | |
217 GdkEventType type; | |
218 GdkWindow *window; | |
219 byte sendEvent; | |
220 short inn; | |
221 } | |
222 */ | |
223 // In case we implement focus event... |