reflexion 0.1.20 → 0.1.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/capture_event.cpp +6 -5
- data/.doc/ext/reflex/contact_event.cpp +18 -16
- data/.doc/ext/reflex/draw_event.cpp +10 -8
- data/.doc/ext/reflex/event.cpp +10 -10
- data/.doc/ext/reflex/focus_event.cpp +18 -17
- data/.doc/ext/reflex/frame_event.cpp +17 -17
- data/.doc/ext/reflex/key_event.cpp +227 -28
- data/.doc/ext/reflex/native.cpp +2 -0
- data/.doc/ext/reflex/pointer.cpp +158 -0
- data/.doc/ext/reflex/pointer_event.cpp +32 -91
- data/.doc/ext/reflex/scroll_event.cpp +14 -17
- data/.doc/ext/reflex/selector.cpp +8 -0
- data/.doc/ext/reflex/timer.cpp +9 -1
- data/.doc/ext/reflex/timer_event.cpp +4 -13
- data/.doc/ext/reflex/update_event.cpp +6 -5
- data/.doc/ext/reflex/view.cpp +57 -0
- data/.doc/ext/reflex/wheel_event.cpp +39 -22
- data/.doc/ext/reflex/window.cpp +41 -0
- data/VERSION +1 -1
- data/ext/reflex/capture_event.cpp +6 -5
- data/ext/reflex/contact_event.cpp +18 -16
- data/ext/reflex/draw_event.cpp +9 -7
- data/ext/reflex/event.cpp +11 -11
- data/ext/reflex/focus_event.cpp +18 -17
- data/ext/reflex/frame_event.cpp +16 -16
- data/ext/reflex/key_event.cpp +228 -28
- data/ext/reflex/native.cpp +2 -0
- data/ext/reflex/pointer.cpp +170 -0
- data/ext/reflex/pointer_event.cpp +31 -96
- data/ext/reflex/scroll_event.cpp +15 -18
- data/ext/reflex/selector.cpp +9 -0
- data/ext/reflex/timer.cpp +15 -6
- data/ext/reflex/timer_event.cpp +9 -19
- data/ext/reflex/update_event.cpp +6 -5
- data/ext/reflex/view.cpp +67 -3
- data/ext/reflex/wheel_event.cpp +40 -21
- data/ext/reflex/window.cpp +49 -3
- data/include/reflex/defs.h +140 -106
- data/include/reflex/event.h +232 -124
- data/include/reflex/pointer.h +107 -0
- data/include/reflex/ruby/pointer.h +41 -0
- data/include/reflex/ruby/view.h +9 -0
- data/include/reflex/ruby/window.h +9 -0
- data/include/reflex/selector.h +1 -1
- data/include/reflex/shape.h +2 -2
- data/include/reflex/view.h +6 -4
- data/include/reflex/window.h +14 -8
- data/lib/reflex/application.rb +3 -3
- data/lib/reflex/autoinit.rb +1 -1
- data/lib/reflex/button.rb +7 -7
- data/lib/reflex/capture_event.rb +7 -7
- data/lib/reflex/contact_event.rb +10 -10
- data/lib/reflex/draw_event.rb +2 -2
- data/lib/reflex/ellipse_shape.rb +2 -2
- data/lib/reflex/focus_event.rb +11 -11
- data/lib/reflex/frame_event.rb +5 -5
- data/lib/reflex/helper.rb +20 -20
- data/lib/reflex/image_view.rb +2 -2
- data/lib/reflex/key_event.rb +12 -12
- data/lib/reflex/model.rb +22 -22
- data/lib/reflex/model_owner.rb +7 -7
- data/lib/reflex/model_view.rb +1 -1
- data/lib/reflex/module.rb +5 -5
- data/lib/reflex/pointer.rb +107 -0
- data/lib/reflex/pointer_event.rb +16 -54
- data/lib/reflex/polygon_shape.rb +2 -2
- data/lib/reflex/reflex.rb +3 -3
- data/lib/reflex/scroll_event.rb +1 -1
- data/lib/reflex/selector.rb +4 -4
- data/lib/reflex/shape.rb +13 -13
- data/lib/reflex/style.rb +11 -11
- data/lib/reflex/style_length.rb +1 -1
- data/lib/reflex/text_view.rb +2 -2
- data/lib/reflex/timer.rb +2 -2
- data/lib/reflex/timer_event.rb +3 -2
- data/lib/reflex/update_event.rb +1 -1
- data/lib/reflex/view.rb +32 -32
- data/lib/reflex/wheel_event.rb +2 -10
- data/lib/reflex/window.rb +8 -7
- data/lib/reflex.rb +1 -0
- data/lib/reflexion.rb +17 -17
- data/reflex.gemspec +5 -5
- data/samples/reflexion/noise.rb +1 -1
- data/samples/tree.rb +1 -1
- data/src/event.cpp +792 -86
- data/src/event.h +47 -0
- data/src/image_view.cpp +2 -2
- data/src/ios/event.h +15 -3
- data/src/ios/event.mm +126 -11
- data/src/ios/view_controller.mm +51 -23
- data/src/ios/window.mm +18 -0
- data/src/osx/event.h +15 -4
- data/src/osx/event.mm +214 -24
- data/src/osx/native_window.mm +85 -18
- data/src/osx/window.mm +22 -0
- data/src/pointer.cpp +203 -0
- data/src/pointer.h +26 -0
- data/src/selector.cpp +1 -1
- data/src/shape.cpp +11 -13
- data/src/shape.h +1 -1
- data/src/view.cpp +205 -118
- data/src/view.h +5 -10
- data/src/window.cpp +346 -104
- data/src/window.h +28 -3
- data/src/world.cpp +6 -4
- data/test/helper.rb +3 -3
- data/test/test_application.rb +1 -1
- data/test/test_capture_event.rb +22 -6
- data/test/test_contact_event.rb +40 -0
- data/test/test_draw_event.rb +35 -0
- data/test/test_event.rb +33 -5
- data/test/test_focus_event.rb +34 -0
- data/test/test_frame_event.rb +38 -0
- data/test/test_has_frame.rb +11 -11
- data/test/test_key_event.rb +33 -0
- data/test/test_pointer.rb +149 -0
- data/test/test_pointer_event.rb +70 -104
- data/test/test_reflex.rb +1 -1
- data/test/test_scroll_event.rb +39 -0
- data/test/test_selector.rb +15 -8
- data/test/test_shape.rb +8 -8
- data/test/test_style.rb +13 -13
- data/test/test_style_length.rb +5 -5
- data/test/test_timer_event.rb +38 -0
- data/test/test_update_event.rb +29 -0
- data/test/test_view.rb +57 -30
- data/test/test_wheel_event.rb +40 -0
- data/test/test_window.rb +45 -26
- metadata +64 -35
data/src/event.cpp
CHANGED
@@ -1,96 +1,371 @@
|
|
1
|
-
#include "
|
1
|
+
#include "event.h"
|
2
2
|
|
3
3
|
|
4
4
|
#include "reflex/timer.h"
|
5
5
|
#include "reflex/shape.h"
|
6
6
|
#include "reflex/exception.h"
|
7
|
+
#include "view.h"
|
8
|
+
#include "pointer.h"
|
7
9
|
|
8
10
|
|
9
11
|
namespace Reflex
|
10
12
|
{
|
11
13
|
|
12
14
|
|
15
|
+
struct Event::Data
|
16
|
+
{
|
17
|
+
|
18
|
+
bool blocked;
|
19
|
+
|
20
|
+
double time;
|
21
|
+
|
22
|
+
Xot::PSharedImpl<Data> parent;
|
23
|
+
|
24
|
+
Data (bool blocked = false, double time = Xot::time())
|
25
|
+
: blocked(blocked), time(time), parent(NULL)
|
26
|
+
{
|
27
|
+
}
|
28
|
+
|
29
|
+
void block ()
|
30
|
+
{
|
31
|
+
blocked = true;
|
32
|
+
if (parent) parent->block();
|
33
|
+
}
|
34
|
+
|
35
|
+
};// Event::Data
|
36
|
+
|
37
|
+
|
13
38
|
Event::Event ()
|
14
|
-
|
39
|
+
{
|
40
|
+
}
|
41
|
+
|
42
|
+
Event::Event (const Event* src)
|
43
|
+
: self(new Data(*src->self))
|
44
|
+
{
|
45
|
+
self->parent = src->self;
|
46
|
+
}
|
47
|
+
|
48
|
+
Event::~Event ()
|
15
49
|
{
|
16
50
|
}
|
17
51
|
|
18
52
|
void
|
19
53
|
Event::block ()
|
20
54
|
{
|
21
|
-
|
55
|
+
self->block();
|
22
56
|
}
|
23
57
|
|
24
58
|
bool
|
25
59
|
Event::is_blocked () const
|
26
60
|
{
|
27
|
-
return blocked;
|
61
|
+
return self->blocked;
|
28
62
|
}
|
29
63
|
|
64
|
+
double
|
65
|
+
Event::time () const
|
66
|
+
{
|
67
|
+
return self->time;
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
struct UpdateEvent::Data
|
72
|
+
{
|
73
|
+
|
74
|
+
double now;
|
75
|
+
|
76
|
+
float dt;
|
77
|
+
|
78
|
+
Data (double now = 0, float dt = 0)
|
79
|
+
: now(now), dt(dt)
|
80
|
+
{
|
81
|
+
}
|
82
|
+
|
83
|
+
};// UpdateEvent::Data
|
84
|
+
|
85
|
+
|
86
|
+
UpdateEvent::UpdateEvent ()
|
87
|
+
{
|
88
|
+
}
|
30
89
|
|
31
90
|
UpdateEvent::UpdateEvent (double now, float dt)
|
32
|
-
:
|
91
|
+
: self(new Data(now, dt))
|
92
|
+
{
|
93
|
+
}
|
94
|
+
|
95
|
+
UpdateEvent::UpdateEvent (const UpdateEvent* src)
|
96
|
+
: Event(src), self(new Data(*src->self))
|
97
|
+
{
|
98
|
+
}
|
99
|
+
|
100
|
+
UpdateEvent
|
101
|
+
UpdateEvent::dup () const
|
33
102
|
{
|
103
|
+
return UpdateEvent(this);
|
34
104
|
}
|
35
105
|
|
106
|
+
double
|
107
|
+
UpdateEvent::now () const
|
108
|
+
{
|
109
|
+
return self->now;
|
110
|
+
}
|
111
|
+
|
112
|
+
float
|
113
|
+
UpdateEvent::dt () const
|
114
|
+
{
|
115
|
+
return self->dt;
|
116
|
+
}
|
117
|
+
|
118
|
+
|
119
|
+
struct DrawEvent::Data
|
120
|
+
{
|
121
|
+
|
122
|
+
View* view;
|
123
|
+
|
124
|
+
Painter* painter;
|
125
|
+
|
126
|
+
Bounds bounds;
|
127
|
+
|
128
|
+
float dt, fps;
|
129
|
+
|
130
|
+
Data (float dt = 0, float fps = 0)
|
131
|
+
: view(NULL), painter(NULL), dt(dt), fps(fps)
|
132
|
+
{
|
133
|
+
}
|
134
|
+
|
135
|
+
};// DrawEvent::Data
|
136
|
+
|
137
|
+
|
138
|
+
void
|
139
|
+
DrawEvent_set_view (DrawEvent* pthis, View* view)
|
140
|
+
{
|
141
|
+
if (!pthis)
|
142
|
+
argument_error(__FILE__, __LINE__);
|
143
|
+
|
144
|
+
pthis->self->view = view;
|
145
|
+
}
|
146
|
+
|
147
|
+
void
|
148
|
+
DrawEvent_set_painter (DrawEvent* pthis, Painter* painter)
|
149
|
+
{
|
150
|
+
if (!pthis)
|
151
|
+
argument_error(__FILE__, __LINE__);
|
152
|
+
|
153
|
+
pthis->self->painter = painter;
|
154
|
+
}
|
155
|
+
|
156
|
+
void
|
157
|
+
DrawEvent_set_bounds (DrawEvent* pthis, const Bounds& bounds)
|
158
|
+
{
|
159
|
+
if (!pthis)
|
160
|
+
argument_error(__FILE__, __LINE__);
|
161
|
+
|
162
|
+
pthis->self->bounds = bounds;
|
163
|
+
}
|
164
|
+
|
165
|
+
|
166
|
+
DrawEvent::DrawEvent ()
|
167
|
+
{
|
168
|
+
}
|
36
169
|
|
37
170
|
DrawEvent::DrawEvent (float dt, float fps)
|
38
|
-
:
|
171
|
+
: self(new Data(dt, fps))
|
172
|
+
{
|
173
|
+
}
|
174
|
+
|
175
|
+
DrawEvent::DrawEvent (const DrawEvent* src)
|
176
|
+
: Event(src), self(new Data(*src->self))
|
177
|
+
{
|
178
|
+
}
|
179
|
+
|
180
|
+
DrawEvent
|
181
|
+
DrawEvent::dup () const
|
182
|
+
{
|
183
|
+
return DrawEvent(this);
|
184
|
+
}
|
185
|
+
|
186
|
+
Painter*
|
187
|
+
DrawEvent::painter ()
|
188
|
+
{
|
189
|
+
return self->painter;
|
190
|
+
}
|
191
|
+
|
192
|
+
const Painter*
|
193
|
+
DrawEvent::painter () const
|
39
194
|
{
|
195
|
+
return const_cast<DrawEvent*>(this)->painter();
|
40
196
|
}
|
41
197
|
|
198
|
+
const Bounds&
|
199
|
+
DrawEvent::bounds () const
|
200
|
+
{
|
201
|
+
return self->bounds;
|
202
|
+
}
|
203
|
+
|
204
|
+
float
|
205
|
+
DrawEvent::dt () const
|
206
|
+
{
|
207
|
+
return self->dt;
|
208
|
+
}
|
209
|
+
|
210
|
+
float
|
211
|
+
DrawEvent::fps () const
|
212
|
+
{
|
213
|
+
return self->fps;
|
214
|
+
}
|
215
|
+
|
216
|
+
|
217
|
+
struct FrameEvent::Data
|
218
|
+
{
|
219
|
+
|
220
|
+
Bounds frame;
|
221
|
+
|
222
|
+
coord dx, dy, dw, dh;
|
223
|
+
|
224
|
+
float angle, dangle;
|
225
|
+
|
226
|
+
Data (
|
227
|
+
const Bounds& frame = 0,
|
228
|
+
coord dx = 0, coord dy = 0, coord dw = 0, coord dh = 0,
|
229
|
+
float angle = 0, float dangle = 0)
|
230
|
+
: frame(frame), dx(dx), dy(dy), dw(dw), dh(dh), angle(angle), dangle(dangle)
|
231
|
+
{
|
232
|
+
}
|
233
|
+
|
234
|
+
};// FrameEvent::Data
|
235
|
+
|
236
|
+
|
237
|
+
FrameEvent::FrameEvent ()
|
238
|
+
{
|
239
|
+
}
|
42
240
|
|
43
241
|
FrameEvent::FrameEvent (
|
44
242
|
const Bounds& frame, coord dx, coord dy, coord dwidth, coord dheight,
|
45
243
|
float angle, float dangle)
|
46
|
-
:
|
47
|
-
angle(angle), dangle(dangle)
|
244
|
+
: self(new Data(frame, dx, dy, dwidth, dheight, angle, dangle))
|
48
245
|
{
|
49
246
|
}
|
50
247
|
|
51
248
|
FrameEvent::FrameEvent (
|
52
249
|
const Bounds& frame, const Bounds& prev_frame,
|
53
250
|
float angle, float prev_angle)
|
54
|
-
:
|
55
|
-
|
56
|
-
|
57
|
-
|
251
|
+
: self(new Data(
|
252
|
+
frame,
|
253
|
+
frame.x - prev_frame.x, frame.y - prev_frame.y,
|
254
|
+
frame.w - prev_frame.w, frame.h - prev_frame.h,
|
255
|
+
angle, angle - prev_angle))
|
256
|
+
{
|
257
|
+
}
|
258
|
+
|
259
|
+
FrameEvent::FrameEvent (const FrameEvent* src)
|
260
|
+
: Event(src), self(new Data(*src->self))
|
58
261
|
{
|
59
262
|
}
|
60
263
|
|
264
|
+
FrameEvent
|
265
|
+
FrameEvent::dup () const
|
266
|
+
{
|
267
|
+
return FrameEvent(this);
|
268
|
+
}
|
269
|
+
|
270
|
+
const Bounds&
|
271
|
+
FrameEvent::frame () const
|
272
|
+
{
|
273
|
+
return self->frame;
|
274
|
+
}
|
275
|
+
|
276
|
+
coord
|
277
|
+
FrameEvent::dx () const
|
278
|
+
{
|
279
|
+
return self->dx;
|
280
|
+
}
|
281
|
+
|
282
|
+
coord
|
283
|
+
FrameEvent::dy () const
|
284
|
+
{
|
285
|
+
return self->dy;
|
286
|
+
}
|
287
|
+
|
288
|
+
coord
|
289
|
+
FrameEvent::dwidth () const
|
290
|
+
{
|
291
|
+
return self->dw;
|
292
|
+
}
|
293
|
+
|
294
|
+
coord
|
295
|
+
FrameEvent::dheight () const
|
296
|
+
{
|
297
|
+
return self->dh;
|
298
|
+
}
|
299
|
+
|
300
|
+
float
|
301
|
+
FrameEvent::angle () const
|
302
|
+
{
|
303
|
+
return self->angle;
|
304
|
+
}
|
305
|
+
|
306
|
+
float
|
307
|
+
FrameEvent::dangle () const
|
308
|
+
{
|
309
|
+
return self->dangle;
|
310
|
+
}
|
311
|
+
|
61
312
|
bool
|
62
313
|
FrameEvent::is_move () const
|
63
314
|
{
|
64
|
-
return dx != 0 || dy != 0;
|
315
|
+
return self->dx != 0 || self->dy != 0;
|
65
316
|
}
|
66
317
|
|
67
318
|
bool
|
68
319
|
FrameEvent::is_resize () const
|
69
320
|
{
|
70
|
-
return
|
321
|
+
return self->dw != 0 || self->dh != 0;
|
71
322
|
}
|
72
323
|
|
73
324
|
bool
|
74
325
|
FrameEvent::is_rotate () const
|
75
326
|
{
|
76
|
-
return dangle != 0;
|
327
|
+
return self->dangle != 0;
|
77
328
|
}
|
78
329
|
|
79
330
|
|
331
|
+
struct ScrollEvent::Data
|
332
|
+
{
|
333
|
+
|
334
|
+
Point scroll, dscroll;
|
335
|
+
|
336
|
+
Data (const Point& scroll, const Point& dscroll)
|
337
|
+
: scroll(scroll), dscroll(dscroll)
|
338
|
+
{
|
339
|
+
}
|
340
|
+
|
341
|
+
};// ScrollEvent::Data
|
342
|
+
|
343
|
+
|
80
344
|
ScrollEvent::ScrollEvent ()
|
81
|
-
:
|
345
|
+
: self(new Data(0, 0))
|
82
346
|
{
|
83
347
|
}
|
84
348
|
|
85
349
|
ScrollEvent::ScrollEvent (coord x, coord y, coord z, coord dx, coord dy, coord dz)
|
86
|
-
:
|
350
|
+
: self(new Data(Point(x, y, z), Point(dx, dy, dz)))
|
351
|
+
{
|
352
|
+
}
|
353
|
+
|
354
|
+
ScrollEvent::ScrollEvent (const ScrollEvent* src)
|
355
|
+
: Event(src), self(new Data(*src->self))
|
87
356
|
{
|
88
357
|
}
|
89
358
|
|
359
|
+
ScrollEvent
|
360
|
+
ScrollEvent::dup () const
|
361
|
+
{
|
362
|
+
return ScrollEvent(this);
|
363
|
+
}
|
364
|
+
|
90
365
|
Point&
|
91
366
|
ScrollEvent::scroll ()
|
92
367
|
{
|
93
|
-
return
|
368
|
+
return self->scroll;
|
94
369
|
}
|
95
370
|
|
96
371
|
const Point&
|
@@ -100,117 +375,416 @@ namespace Reflex
|
|
100
375
|
}
|
101
376
|
|
102
377
|
Point&
|
103
|
-
ScrollEvent::
|
378
|
+
ScrollEvent::dscroll ()
|
104
379
|
{
|
105
|
-
return
|
380
|
+
return self->dscroll;
|
106
381
|
}
|
107
382
|
|
108
383
|
const Point&
|
109
|
-
ScrollEvent::
|
384
|
+
ScrollEvent::dscroll () const
|
110
385
|
{
|
111
|
-
return const_cast<ScrollEvent*>(this)->
|
386
|
+
return const_cast<ScrollEvent*>(this)->dscroll();
|
112
387
|
}
|
113
388
|
|
114
389
|
|
390
|
+
struct FocusEvent::Data
|
391
|
+
{
|
392
|
+
|
393
|
+
Action action;
|
394
|
+
|
395
|
+
View *current, *last;
|
396
|
+
|
397
|
+
Data (Action action = ACTION_NONE, View* current = NULL, View* last = NULL)
|
398
|
+
: action(action), current(current), last(last)
|
399
|
+
{
|
400
|
+
}
|
401
|
+
|
402
|
+
};// FocusEvent::Data
|
403
|
+
|
404
|
+
|
115
405
|
FocusEvent::FocusEvent ()
|
116
406
|
{
|
117
407
|
}
|
118
408
|
|
119
|
-
FocusEvent::FocusEvent (
|
120
|
-
:
|
409
|
+
FocusEvent::FocusEvent (Action action, View* current, View* last)
|
410
|
+
: self(new Data(action, current, last))
|
411
|
+
{
|
412
|
+
}
|
413
|
+
|
414
|
+
FocusEvent::FocusEvent (const FocusEvent* src)
|
415
|
+
: Event(src), self(new Data(*src->self))
|
416
|
+
{
|
417
|
+
}
|
418
|
+
|
419
|
+
FocusEvent
|
420
|
+
FocusEvent::dup () const
|
421
|
+
{
|
422
|
+
return FocusEvent(this);
|
423
|
+
}
|
424
|
+
|
425
|
+
FocusEvent::Action
|
426
|
+
FocusEvent::action () const
|
427
|
+
{
|
428
|
+
return self->action;
|
429
|
+
}
|
430
|
+
|
431
|
+
View*
|
432
|
+
FocusEvent::current () const
|
433
|
+
{
|
434
|
+
return self->current;
|
435
|
+
}
|
436
|
+
|
437
|
+
View*
|
438
|
+
FocusEvent::last () const
|
439
|
+
{
|
440
|
+
return self->last;
|
441
|
+
}
|
442
|
+
|
443
|
+
|
444
|
+
struct KeyEvent::Data
|
445
|
+
{
|
446
|
+
|
447
|
+
Action action;
|
448
|
+
|
449
|
+
String chars;
|
450
|
+
|
451
|
+
int code;
|
452
|
+
|
453
|
+
uint modifiers;
|
454
|
+
|
455
|
+
int repeat;
|
456
|
+
|
457
|
+
bool captured;
|
458
|
+
|
459
|
+
Data (
|
460
|
+
Action action = ACTION_NONE, const char* chars = NULL, int code = KEY_NONE,
|
461
|
+
uint modifiers = MOD_NONE, int repeat = 0, bool captured = false)
|
462
|
+
: action(action), chars(chars ? chars : ""), code(code),
|
463
|
+
modifiers(modifiers), repeat(repeat), captured(captured)
|
464
|
+
{
|
465
|
+
}
|
466
|
+
|
467
|
+
};// KeyEvent::Data
|
468
|
+
|
469
|
+
|
470
|
+
void
|
471
|
+
KeyEvent_set_captured (KeyEvent* pthis, bool captured)
|
121
472
|
{
|
473
|
+
if (!pthis)
|
474
|
+
argument_error(__FILE__, __LINE__);
|
475
|
+
|
476
|
+
pthis->self->captured = captured;
|
122
477
|
}
|
123
478
|
|
124
479
|
|
125
480
|
KeyEvent::KeyEvent ()
|
126
|
-
: type(NONE), code(KEY_NONE), modifiers(MOD_NONE), repeat(0), capture(false)
|
127
481
|
{
|
128
482
|
}
|
129
483
|
|
130
484
|
KeyEvent::KeyEvent (
|
131
|
-
|
132
|
-
:
|
133
|
-
repeat(repeat), capture(false)
|
485
|
+
Action action, const char* chars, int code, uint modifiers, int repeat)
|
486
|
+
: self(new Data(action, chars, code, modifiers, repeat))
|
134
487
|
{
|
135
488
|
}
|
136
489
|
|
490
|
+
KeyEvent::KeyEvent (const KeyEvent* src)
|
491
|
+
: Event(src), self(new Data(*src->self))
|
492
|
+
{
|
493
|
+
}
|
137
494
|
|
138
|
-
|
139
|
-
|
140
|
-
size(0), modifiers(MOD_NONE), count(0), drag(false), capture(false),
|
141
|
-
x(0), y(0), z(0)
|
495
|
+
KeyEvent
|
496
|
+
KeyEvent::dup () const
|
142
497
|
{
|
498
|
+
return KeyEvent(this);
|
143
499
|
}
|
144
500
|
|
145
|
-
|
146
|
-
|
147
|
-
: type(type), pointer_type(pointer_type),
|
148
|
-
size(1), modifiers(modifiers), count(count), drag(drag), capture(false),
|
149
|
-
x(x), y(y), z(0)
|
501
|
+
KeyEvent::Action
|
502
|
+
KeyEvent::action () const
|
150
503
|
{
|
504
|
+
return self->action;
|
151
505
|
}
|
152
506
|
|
153
|
-
|
154
|
-
|
155
|
-
uint modifiers, uint count, bool drag)
|
156
|
-
: type(type), pointer_type(pointer_type),
|
157
|
-
size(size), modifiers(modifiers), count(count), drag(drag), capture(false)
|
507
|
+
const char*
|
508
|
+
KeyEvent::chars () const
|
158
509
|
{
|
159
|
-
|
160
|
-
|
510
|
+
return self->chars;
|
511
|
+
}
|
161
512
|
|
162
|
-
|
513
|
+
int
|
514
|
+
KeyEvent::code () const
|
515
|
+
{
|
516
|
+
return self->code;
|
517
|
+
}
|
518
|
+
|
519
|
+
uint
|
520
|
+
KeyEvent::modifiers () const
|
521
|
+
{
|
522
|
+
return self->modifiers;
|
523
|
+
}
|
524
|
+
|
525
|
+
int
|
526
|
+
KeyEvent::repeat () const
|
527
|
+
{
|
528
|
+
return self->repeat;
|
529
|
+
}
|
530
|
+
|
531
|
+
bool
|
532
|
+
KeyEvent::is_captured () const
|
533
|
+
{
|
534
|
+
return self->captured;
|
535
|
+
}
|
163
536
|
|
164
|
-
|
537
|
+
|
538
|
+
struct PointerEvent::Data
|
539
|
+
{
|
540
|
+
|
541
|
+
std::vector<Pointer> pointers;
|
542
|
+
|
543
|
+
bool captured;
|
544
|
+
|
545
|
+
Data (bool captured = false)
|
546
|
+
: captured(captured)
|
165
547
|
{
|
166
|
-
for (size_t i = 0; i < size; ++i)
|
167
|
-
positions[i] = *(Coord3*) &positions_[i];
|
168
548
|
}
|
549
|
+
|
550
|
+
};// PointerEvent::Data
|
551
|
+
|
552
|
+
|
553
|
+
void
|
554
|
+
PointerEvent_add_pointer (PointerEvent* pthis, const Pointer& pointer)
|
555
|
+
{
|
556
|
+
if (!pthis)
|
557
|
+
argument_error(__FILE__, __LINE__);
|
558
|
+
|
559
|
+
pthis->self->pointers.emplace_back(pointer);
|
169
560
|
}
|
170
561
|
|
171
|
-
|
172
|
-
PointerEvent::
|
562
|
+
void
|
563
|
+
PointerEvent_erase_pointer (PointerEvent* pthis, Pointer::ID id)
|
173
564
|
{
|
174
|
-
if (
|
565
|
+
if (!pthis)
|
566
|
+
argument_error(__FILE__, __LINE__);
|
567
|
+
|
568
|
+
auto& pointers = pthis->self->pointers;
|
569
|
+
auto it = std::find_if(
|
570
|
+
pointers.begin(), pointers.end(),
|
571
|
+
[=](const auto& pointer)
|
572
|
+
{
|
573
|
+
return pointer.id() == id;
|
574
|
+
});
|
575
|
+
|
576
|
+
if (it == pointers.end()) return;
|
577
|
+
|
578
|
+
pointers.erase(it);
|
579
|
+
}
|
580
|
+
|
581
|
+
Pointer&
|
582
|
+
PointerEvent_pointer_at (PointerEvent* pthis, size_t index)
|
583
|
+
{
|
584
|
+
if (!pthis)
|
585
|
+
argument_error(__FILE__, __LINE__);
|
586
|
+
|
587
|
+
auto& pointers = pthis->self->pointers;
|
588
|
+
if (index >= pointers.size())
|
175
589
|
index_error(__FILE__, __LINE__);
|
176
590
|
|
177
|
-
return
|
591
|
+
return pointers[index];
|
178
592
|
}
|
179
593
|
|
180
|
-
|
181
|
-
|
594
|
+
void
|
595
|
+
PointerEvent_each_pointer (
|
596
|
+
const PointerEvent* pthis, std::function<void(const Pointer&)> fun)
|
182
597
|
{
|
183
|
-
|
598
|
+
if (!pthis)
|
599
|
+
argument_error(__FILE__, __LINE__);
|
600
|
+
|
601
|
+
for (const auto& pointer : pthis->self->pointers)
|
602
|
+
fun(pointer);
|
184
603
|
}
|
185
604
|
|
186
|
-
|
187
|
-
PointerEvent
|
605
|
+
void
|
606
|
+
PointerEvent_set_captured (PointerEvent* pthis, bool captured)
|
188
607
|
{
|
189
|
-
|
608
|
+
if (!pthis)
|
609
|
+
argument_error(__FILE__, __LINE__);
|
610
|
+
|
611
|
+
pthis->self->captured = captured;
|
190
612
|
}
|
191
613
|
|
192
|
-
|
193
|
-
PointerEvent
|
614
|
+
static void
|
615
|
+
filter_and_offset_pointer_positions (PointerEvent* event, const Bounds& frame)
|
194
616
|
{
|
195
|
-
|
617
|
+
assert(event);
|
618
|
+
|
619
|
+
const Point& offset = frame.position();
|
620
|
+
|
621
|
+
std::vector<Pointer> pointers;
|
622
|
+
for (const auto& pointer : event->self->pointers)
|
623
|
+
{
|
624
|
+
if (!frame.is_include(pointer.position()))
|
625
|
+
continue;
|
626
|
+
|
627
|
+
pointers.emplace_back(pointer);
|
628
|
+
Pointer_update_positions(&pointers.back(), [&](Point* pos)
|
629
|
+
{
|
630
|
+
*pos -= offset;
|
631
|
+
});
|
632
|
+
}
|
633
|
+
|
634
|
+
event->self->pointers = pointers;
|
635
|
+
}
|
636
|
+
|
637
|
+
static void
|
638
|
+
scroll_and_zoom_pointer_positions (
|
639
|
+
PointerEvent* event, const Point& scroll, float zoom)
|
640
|
+
{
|
641
|
+
assert(event);
|
642
|
+
|
643
|
+
if (zoom == 0)
|
644
|
+
argument_error(__FILE__, __LINE__);
|
645
|
+
|
646
|
+
if (scroll == 0 && zoom == 1)
|
647
|
+
return;
|
648
|
+
|
649
|
+
for (auto& pointer : event->self->pointers)
|
650
|
+
{
|
651
|
+
Pointer_update_positions(&pointer, [=](Point* pos)
|
652
|
+
{
|
653
|
+
*pos -= scroll;
|
654
|
+
*pos /= zoom;
|
655
|
+
});
|
656
|
+
}
|
657
|
+
}
|
658
|
+
|
659
|
+
void
|
660
|
+
PointerEvent_update_for_child_view (PointerEvent* pthis, const View* view)
|
661
|
+
{
|
662
|
+
if (!pthis || !view)
|
663
|
+
argument_error(__FILE__, __LINE__);
|
664
|
+
|
665
|
+
filter_and_offset_pointer_positions(pthis, view->frame());
|
666
|
+
scroll_and_zoom_pointer_positions(pthis, view->scroll(), view->zoom());
|
667
|
+
}
|
668
|
+
|
669
|
+
void
|
670
|
+
PointerEvent_update_for_capturing_view (PointerEvent* pthis, const View* view)
|
671
|
+
{
|
672
|
+
if (!pthis || !view)
|
673
|
+
argument_error(__FILE__, __LINE__);
|
674
|
+
|
675
|
+
for (auto& pointer : pthis->self->pointers)
|
676
|
+
{
|
677
|
+
Pointer_update_positions(&pointer, [=](Point* pos)
|
678
|
+
{
|
679
|
+
*pos = view->from_window(*pos);
|
680
|
+
});
|
681
|
+
}
|
682
|
+
|
683
|
+
scroll_and_zoom_pointer_positions(pthis, view->scroll(), view->zoom());
|
684
|
+
}
|
685
|
+
|
686
|
+
|
687
|
+
PointerEvent::PointerEvent ()
|
688
|
+
{
|
689
|
+
}
|
690
|
+
|
691
|
+
PointerEvent::PointerEvent (const Pointer* pointers, size_t size)
|
692
|
+
{
|
693
|
+
for (size_t i = 0; i < size; ++i)
|
694
|
+
self->pointers.emplace_back(pointers[i]);
|
695
|
+
}
|
696
|
+
|
697
|
+
PointerEvent::PointerEvent (const PointerEvent* src)
|
698
|
+
: Event(src), self(new Data(*src->self))
|
699
|
+
{
|
700
|
+
}
|
701
|
+
|
702
|
+
PointerEvent
|
703
|
+
PointerEvent::dup () const
|
704
|
+
{
|
705
|
+
return PointerEvent(this);
|
706
|
+
}
|
707
|
+
|
708
|
+
size_t
|
709
|
+
PointerEvent::size () const
|
710
|
+
{
|
711
|
+
return self->pointers.size();
|
712
|
+
}
|
713
|
+
|
714
|
+
bool
|
715
|
+
PointerEvent::empty () const
|
716
|
+
{
|
717
|
+
return size() == 0;
|
718
|
+
}
|
719
|
+
|
720
|
+
bool
|
721
|
+
PointerEvent::is_captured () const
|
722
|
+
{
|
723
|
+
return self->captured;
|
724
|
+
}
|
725
|
+
|
726
|
+
const Pointer&
|
727
|
+
PointerEvent::operator [] (size_t index) const
|
728
|
+
{
|
729
|
+
if (index >= self->pointers.size())
|
730
|
+
index_error(__FILE__, __LINE__);
|
731
|
+
|
732
|
+
return self->pointers[index];
|
733
|
+
}
|
734
|
+
|
735
|
+
|
736
|
+
struct WheelEvent::Data
|
737
|
+
{
|
738
|
+
|
739
|
+
Point position, dposition;
|
740
|
+
|
741
|
+
uint modifiers;
|
742
|
+
|
743
|
+
Data (
|
744
|
+
const Point& position = 0, const Point& dposition = 0,
|
745
|
+
uint modifiers = 0)
|
746
|
+
: position(position), dposition(dposition), modifiers(modifiers)
|
747
|
+
{
|
748
|
+
}
|
749
|
+
|
750
|
+
};// WheelEvent::Data
|
751
|
+
|
752
|
+
|
753
|
+
void
|
754
|
+
WheelEvent_set_position (WheelEvent* pthis, const Point& position)
|
755
|
+
{
|
756
|
+
if (!pthis)
|
757
|
+
argument_error(__FILE__, __LINE__);
|
758
|
+
|
759
|
+
pthis->self->position = position;
|
196
760
|
}
|
197
761
|
|
198
762
|
|
199
763
|
WheelEvent::WheelEvent ()
|
200
|
-
: dx(0), dy(0), dz(0), x(0), y(0), z(0), modifiers(0)
|
201
764
|
{
|
202
765
|
}
|
203
766
|
|
204
767
|
WheelEvent::WheelEvent (
|
205
|
-
coord
|
206
|
-
:
|
768
|
+
coord x, coord y, coord z, coord dx, coord dy, coord dz, uint modifiers)
|
769
|
+
: self(new Data(Point(x, y, z), Point(dx, dy, dz), modifiers))
|
207
770
|
{
|
208
771
|
}
|
209
772
|
|
773
|
+
WheelEvent::WheelEvent (const WheelEvent* src)
|
774
|
+
: Event(src), self(new Data(*src->self))
|
775
|
+
{
|
776
|
+
}
|
777
|
+
|
778
|
+
WheelEvent
|
779
|
+
WheelEvent::dup () const
|
780
|
+
{
|
781
|
+
return WheelEvent(this);
|
782
|
+
}
|
783
|
+
|
210
784
|
Point&
|
211
785
|
WheelEvent::position ()
|
212
786
|
{
|
213
|
-
return
|
787
|
+
return self->position;
|
214
788
|
}
|
215
789
|
|
216
790
|
const Point&
|
@@ -220,79 +794,211 @@ namespace Reflex
|
|
220
794
|
}
|
221
795
|
|
222
796
|
Point&
|
223
|
-
WheelEvent::
|
797
|
+
WheelEvent::dposition ()
|
224
798
|
{
|
225
|
-
return
|
799
|
+
return self->dposition;
|
226
800
|
}
|
227
801
|
|
228
802
|
const Point&
|
229
|
-
WheelEvent::
|
803
|
+
WheelEvent::dposition () const
|
804
|
+
{
|
805
|
+
return const_cast<WheelEvent*>(this)->dposition();
|
806
|
+
}
|
807
|
+
|
808
|
+
uint
|
809
|
+
WheelEvent::modifiers () const
|
230
810
|
{
|
231
|
-
return
|
811
|
+
return self->modifiers;
|
232
812
|
}
|
233
813
|
|
234
814
|
|
815
|
+
struct CaptureEvent::Data
|
816
|
+
{
|
817
|
+
|
818
|
+
uint begin, end;
|
819
|
+
|
820
|
+
Data (uint begin = 0, uint end = 0)
|
821
|
+
: begin(begin), end(end)
|
822
|
+
{
|
823
|
+
}
|
824
|
+
|
825
|
+
};// CaptureEvent::Data
|
826
|
+
|
827
|
+
|
235
828
|
CaptureEvent::CaptureEvent ()
|
236
|
-
: begin(0), end(0)
|
237
829
|
{
|
238
830
|
}
|
239
831
|
|
240
832
|
CaptureEvent::CaptureEvent (uint begin, uint end)
|
241
|
-
:
|
833
|
+
: self(new Data(begin, end))
|
834
|
+
{
|
835
|
+
}
|
836
|
+
|
837
|
+
CaptureEvent::CaptureEvent (const CaptureEvent* src)
|
838
|
+
: Event(src), self(new Data(*src->self))
|
839
|
+
{
|
840
|
+
}
|
841
|
+
|
842
|
+
CaptureEvent
|
843
|
+
CaptureEvent::dup () const
|
242
844
|
{
|
845
|
+
return CaptureEvent(this);
|
243
846
|
}
|
244
847
|
|
848
|
+
uint
|
849
|
+
CaptureEvent::begin () const
|
850
|
+
{
|
851
|
+
return self->begin;
|
852
|
+
}
|
853
|
+
|
854
|
+
uint
|
855
|
+
CaptureEvent::end () const
|
856
|
+
{
|
857
|
+
return self->end;
|
858
|
+
}
|
859
|
+
|
860
|
+
|
861
|
+
struct TimerEvent::Data
|
862
|
+
{
|
863
|
+
|
864
|
+
Timer::Ref timer;
|
865
|
+
|
866
|
+
Data (Timer* timer = NULL)
|
867
|
+
: timer(timer)
|
868
|
+
{
|
869
|
+
}
|
870
|
+
|
871
|
+
};// TimerEvent::Data
|
872
|
+
|
873
|
+
|
874
|
+
TimerEvent::TimerEvent ()
|
875
|
+
{
|
876
|
+
}
|
245
877
|
|
246
878
|
TimerEvent::TimerEvent (Timer* timer)
|
247
|
-
:
|
879
|
+
: self(new Data(timer))
|
880
|
+
{
|
881
|
+
}
|
882
|
+
|
883
|
+
TimerEvent::TimerEvent (const TimerEvent* src)
|
884
|
+
: Event(src), self(new Data(*src->self))
|
885
|
+
{
|
886
|
+
}
|
887
|
+
|
888
|
+
TimerEvent
|
889
|
+
TimerEvent::dup () const
|
890
|
+
{
|
891
|
+
return TimerEvent(this);
|
892
|
+
}
|
893
|
+
|
894
|
+
Timer*
|
895
|
+
TimerEvent::timer ()
|
248
896
|
{
|
897
|
+
return self->timer;
|
898
|
+
}
|
899
|
+
|
900
|
+
const Timer*
|
901
|
+
TimerEvent::timer () const
|
902
|
+
{
|
903
|
+
return const_cast<TimerEvent*>(this)->timer();
|
249
904
|
}
|
250
905
|
|
251
906
|
View*
|
252
907
|
TimerEvent::owner () const
|
253
908
|
{
|
254
|
-
return timer ? timer->owner() : NULL;
|
909
|
+
return self->timer ? self->timer->owner() : NULL;
|
255
910
|
}
|
256
911
|
|
257
912
|
int
|
258
913
|
TimerEvent::id () const
|
259
914
|
{
|
260
|
-
return timer ? timer->id() : Timer::ID_INVALID;
|
915
|
+
return self->timer ? self->timer->id() : Timer::ID_INVALID;
|
261
916
|
}
|
262
917
|
|
263
918
|
float
|
264
919
|
TimerEvent::interval () const
|
265
920
|
{
|
266
|
-
return timer ? timer->interval() : -1;
|
267
|
-
}
|
268
|
-
|
269
|
-
void
|
270
|
-
TimerEvent::set_count (int count)
|
271
|
-
{
|
272
|
-
if (timer) timer->set_count(count);
|
921
|
+
return self->timer ? self->timer->interval() : -1;
|
273
922
|
}
|
274
923
|
|
275
924
|
int
|
276
925
|
TimerEvent::count () const
|
277
926
|
{
|
278
|
-
return timer ? timer->count() : 0;
|
927
|
+
return self->timer ? self->timer->count() : 0;
|
279
928
|
}
|
280
929
|
|
281
930
|
bool
|
282
931
|
TimerEvent::is_finished () const
|
283
932
|
{
|
284
|
-
return timer ? timer->is_finished() : true;
|
933
|
+
return self->timer ? self->timer->is_finished() : true;
|
285
934
|
}
|
286
935
|
|
287
936
|
|
937
|
+
struct ContactEvent::Data
|
938
|
+
{
|
939
|
+
|
940
|
+
Action action;
|
941
|
+
|
942
|
+
Shape* shape;
|
943
|
+
|
944
|
+
View* view;
|
945
|
+
|
946
|
+
Data (Action action = ACTION_NONE, Shape* shape = NULL, View* view = NULL)
|
947
|
+
: action(action), shape(shape), view(view)
|
948
|
+
{
|
949
|
+
}
|
950
|
+
|
951
|
+
};// ContactEvent::Data
|
952
|
+
|
953
|
+
|
288
954
|
ContactEvent::ContactEvent ()
|
289
|
-
: type(NONE), shape(NULL), view(NULL)
|
290
955
|
{
|
291
956
|
}
|
292
957
|
|
293
|
-
ContactEvent::ContactEvent (
|
294
|
-
:
|
958
|
+
ContactEvent::ContactEvent (Action action, Shape* shape)
|
959
|
+
: self(new Data(action, shape, shape ? shape->owner() : NULL))
|
960
|
+
{
|
961
|
+
}
|
962
|
+
|
963
|
+
ContactEvent::ContactEvent (const ContactEvent* src)
|
964
|
+
: Event(src), self(new Data(*src->self))
|
965
|
+
{
|
966
|
+
}
|
967
|
+
|
968
|
+
ContactEvent
|
969
|
+
ContactEvent::dup () const
|
970
|
+
{
|
971
|
+
return ContactEvent(this);
|
972
|
+
}
|
973
|
+
|
974
|
+
ContactEvent::Action
|
975
|
+
ContactEvent::action () const
|
976
|
+
{
|
977
|
+
return self->action;
|
978
|
+
}
|
979
|
+
|
980
|
+
Shape*
|
981
|
+
ContactEvent::shape ()
|
982
|
+
{
|
983
|
+
return self->shape;
|
984
|
+
}
|
985
|
+
|
986
|
+
const Shape*
|
987
|
+
ContactEvent::shape () const
|
988
|
+
{
|
989
|
+
return const_cast<ContactEvent*>(this)->shape();
|
990
|
+
}
|
991
|
+
|
992
|
+
View*
|
993
|
+
ContactEvent::view ()
|
994
|
+
{
|
995
|
+
return self->view;
|
996
|
+
}
|
997
|
+
|
998
|
+
const View*
|
999
|
+
ContactEvent::view () const
|
295
1000
|
{
|
1001
|
+
return const_cast<ContactEvent*>(this)->view();
|
296
1002
|
}
|
297
1003
|
|
298
1004
|
|