reflexion 0.1.19 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/contact_event.cpp +6 -6
  3. data/.doc/ext/reflex/event.cpp +9 -1
  4. data/.doc/ext/reflex/focus_event.cpp +6 -6
  5. data/.doc/ext/reflex/key_event.cpp +211 -13
  6. data/.doc/ext/reflex/native.cpp +2 -0
  7. data/.doc/ext/reflex/pointer.cpp +158 -0
  8. data/.doc/ext/reflex/pointer_event.cpp +31 -90
  9. data/.doc/ext/reflex/selector.cpp +8 -0
  10. data/.doc/ext/reflex/view.cpp +57 -0
  11. data/.doc/ext/reflex/window.cpp +41 -0
  12. data/VERSION +1 -1
  13. data/ext/reflex/contact_event.cpp +6 -6
  14. data/ext/reflex/event.cpp +11 -2
  15. data/ext/reflex/focus_event.cpp +6 -6
  16. data/ext/reflex/key_event.cpp +212 -13
  17. data/ext/reflex/native.cpp +2 -0
  18. data/ext/reflex/pointer.cpp +170 -0
  19. data/ext/reflex/pointer_event.cpp +30 -95
  20. data/ext/reflex/selector.cpp +9 -0
  21. data/ext/reflex/view.cpp +67 -3
  22. data/ext/reflex/window.cpp +49 -3
  23. data/include/reflex/defs.h +140 -106
  24. data/include/reflex/event.h +26 -27
  25. data/include/reflex/pointer.h +107 -0
  26. data/include/reflex/ruby/pointer.h +41 -0
  27. data/include/reflex/ruby/view.h +9 -0
  28. data/include/reflex/ruby/window.h +9 -0
  29. data/include/reflex/selector.h +1 -1
  30. data/include/reflex/view.h +6 -4
  31. data/include/reflex/window.h +14 -8
  32. data/lib/reflex/application.rb +3 -3
  33. data/lib/reflex/autoinit.rb +1 -1
  34. data/lib/reflex/button.rb +7 -7
  35. data/lib/reflex/capture_event.rb +7 -7
  36. data/lib/reflex/contact_event.rb +4 -4
  37. data/lib/reflex/draw_event.rb +2 -2
  38. data/lib/reflex/ellipse_shape.rb +2 -2
  39. data/lib/reflex/focus_event.rb +4 -4
  40. data/lib/reflex/frame_event.rb +5 -5
  41. data/lib/reflex/helper.rb +20 -20
  42. data/lib/reflex/image_view.rb +2 -2
  43. data/lib/reflex/key_event.rb +6 -6
  44. data/lib/reflex/model.rb +22 -22
  45. data/lib/reflex/model_owner.rb +7 -7
  46. data/lib/reflex/model_view.rb +1 -1
  47. data/lib/reflex/module.rb +5 -5
  48. data/lib/reflex/pointer.rb +107 -0
  49. data/lib/reflex/pointer_event.rb +16 -54
  50. data/lib/reflex/polygon_shape.rb +2 -2
  51. data/lib/reflex/reflex.rb +3 -3
  52. data/lib/reflex/scroll_event.rb +1 -1
  53. data/lib/reflex/selector.rb +4 -4
  54. data/lib/reflex/shape.rb +13 -13
  55. data/lib/reflex/style.rb +11 -11
  56. data/lib/reflex/style_length.rb +1 -1
  57. data/lib/reflex/text_view.rb +2 -2
  58. data/lib/reflex/timer.rb +2 -2
  59. data/lib/reflex/timer_event.rb +1 -1
  60. data/lib/reflex/update_event.rb +1 -1
  61. data/lib/reflex/view.rb +32 -32
  62. data/lib/reflex/wheel_event.rb +3 -3
  63. data/lib/reflex/window.rb +7 -6
  64. data/lib/reflex.rb +1 -0
  65. data/lib/reflexion.rb +17 -17
  66. data/reflex.gemspec +5 -5
  67. data/samples/reflexion/noise.rb +1 -1
  68. data/samples/tree.rb +1 -1
  69. data/src/event.cpp +189 -37
  70. data/src/event.h +32 -0
  71. data/src/ios/event.h +15 -3
  72. data/src/ios/event.mm +126 -11
  73. data/src/ios/view_controller.mm +50 -22
  74. data/src/ios/window.mm +18 -0
  75. data/src/osx/event.h +14 -3
  76. data/src/osx/event.mm +213 -23
  77. data/src/osx/native_window.mm +84 -17
  78. data/src/osx/window.mm +22 -0
  79. data/src/pointer.cpp +203 -0
  80. data/src/pointer.h +26 -0
  81. data/src/selector.cpp +1 -1
  82. data/src/view.cpp +103 -64
  83. data/src/view.h +0 -4
  84. data/src/window.cpp +334 -98
  85. data/src/window.h +28 -3
  86. data/test/helper.rb +3 -3
  87. data/test/test_application.rb +1 -1
  88. data/test/test_capture_event.rb +6 -6
  89. data/test/test_event.rb +18 -4
  90. data/test/test_has_frame.rb +11 -11
  91. data/test/test_pointer.rb +149 -0
  92. data/test/test_pointer_event.rb +70 -104
  93. data/test/test_reflex.rb +1 -1
  94. data/test/test_selector.rb +15 -8
  95. data/test/test_shape.rb +8 -8
  96. data/test/test_style.rb +13 -13
  97. data/test/test_style_length.rb +5 -5
  98. data/test/test_view.rb +57 -30
  99. data/test/test_window.rb +45 -26
  100. metadata +46 -35
data/src/window.cpp CHANGED
@@ -1,14 +1,25 @@
1
1
  #include "window.h"
2
2
 
3
3
 
4
+ #include <set>
4
5
  #include "reflex/exception.h"
5
6
  #include "view.h"
7
+ #include "event.h"
6
8
 
7
9
 
8
10
  namespace Reflex
9
11
  {
10
12
 
11
13
 
14
+ using ViewList = std::vector<View::Ref>;
15
+
16
+ using PointerMap = std::map<Pointer::ID, Pointer>;
17
+
18
+ using ExtractedPointerIDSet = std::set<Pointer::ID>;
19
+
20
+ using CaptureTargetIDList = Window::Data::CaptureTargetIDList;
21
+
22
+
12
23
  void
13
24
  Window_set_focus (Window* window, View* view)
14
25
  {
@@ -36,6 +47,80 @@ namespace Reflex
36
47
  }
37
48
  }
38
49
 
50
+ namespace global
51
+ {
52
+
53
+ static Window_CreateRootViewFun create_root_view_fun = NULL;
54
+
55
+ }// global
56
+
57
+ void
58
+ Window_set_create_root_view_fun (Window_CreateRootViewFun fun)
59
+ {
60
+ global::create_root_view_fun = fun;
61
+ }
62
+
63
+ static View*
64
+ create_root_view ()
65
+ {
66
+ return global::create_root_view_fun
67
+ ? global::create_root_view_fun()
68
+ : new View();
69
+ }
70
+
71
+ void
72
+ Window_register_capture (Window* window, View* view, Pointer::ID target)
73
+ {
74
+ assert(window);
75
+
76
+ if (!view)
77
+ argument_error(__FILE__, __LINE__);
78
+
79
+ if (view->window() != window)
80
+ invalid_state_error(__FILE__, __LINE__);
81
+
82
+ if (target < 0) return;
83
+
84
+ auto& targets = window->self->captures[view];
85
+ if (std::find(targets.begin(), targets.end(), target) != targets.end())
86
+ return;
87
+
88
+ targets.insert(
89
+ target == CAPTURE_ALL ? targets.begin() : targets.end(),
90
+ target);
91
+ }
92
+
93
+ void
94
+ Window_unregister_capture (Window* window, View* view, Pointer::ID target)
95
+ {
96
+ assert(window);
97
+
98
+ if (!view)
99
+ argument_error(__FILE__, __LINE__);
100
+
101
+ auto captures_it = window->self->captures.find(view);
102
+ if (captures_it == window->self->captures.end()) return;
103
+
104
+ auto& targets = captures_it->second;
105
+ auto targets_it = std::find(targets.begin(), targets.end(), target);
106
+ if (targets_it == targets.end()) return;
107
+
108
+ targets.erase(targets_it);
109
+ }
110
+
111
+ static void
112
+ cleanup_captures (Window* window)
113
+ {
114
+ assert(window);
115
+
116
+ auto& caps = window->self->captures;
117
+ for (auto it = caps.begin(), end = caps.end(); it != end;)
118
+ {
119
+ auto t = it++;
120
+ if (t->second.empty()) caps.erase(t);
121
+ }
122
+ }
123
+
39
124
  void
40
125
  Window_call_draw_event (Window* window, DrawEvent* event)
41
126
  {
@@ -63,66 +148,252 @@ namespace Reflex
63
148
  painter->end();
64
149
  }
65
150
 
66
- namespace global
151
+ static bool
152
+ is_capturing (
153
+ const View* view, const CaptureTargetIDList& targets, View::Capture type)
67
154
  {
155
+ return
156
+ !targets.empty() &&
157
+ targets[0] == CAPTURE_ALL &&
158
+ (view->capture() & type) == type;
159
+ }
68
160
 
69
- static Window_CreateRootViewFun create_root_view_fun = NULL;
161
+ void
162
+ Window_call_key_event (Window* window, KeyEvent* event)
163
+ {
164
+ assert(window);
70
165
 
71
- }// global
166
+ if (!event)
167
+ argument_error(__FILE__, __LINE__);
72
168
 
73
- void
74
- Window_set_create_root_view_fun (Window_CreateRootViewFun fun)
169
+ window->on_key(event);
170
+
171
+ switch (event->type)
172
+ {
173
+ case KeyEvent::DOWN: window->on_key_down(event); break;
174
+ case KeyEvent::UP: window->on_key_up(event); break;
175
+ default: break;
176
+ }
177
+
178
+ for (auto& [view, targets] : window->self->captures)
179
+ {
180
+ if (!is_capturing(view.get(), targets, View::CAPTURE_KEY))
181
+ continue;
182
+
183
+ KeyEvent e = *event;
184
+ e.captured = true;
185
+ View_call_key_event(const_cast<View*>(view.get()), e);
186
+ }
187
+
188
+ if (window->self->focus)
189
+ View_call_key_event(window->self->focus.get(), *event);
190
+
191
+ cleanup_captures(window);
192
+ }
193
+
194
+ static void
195
+ get_views_capturing_all_pointers (Window* window, ViewList* result)
75
196
  {
76
- global::create_root_view_fun = fun;
197
+ assert(window && result);
198
+
199
+ result->clear();
200
+ for (const auto& [view, targets] : window->self->captures)
201
+ {
202
+ if (is_capturing(view.get(), targets, View::CAPTURE_POINTER))
203
+ result->emplace_back(view);
204
+ }
77
205
  }
78
206
 
79
- static View*
80
- create_root_view ()
207
+ static void
208
+ capture_all_pointers (
209
+ Window* window, const PointerEvent& event, ViewList& views_capturing_all)
81
210
  {
82
- return global::create_root_view_fun
83
- ? global::create_root_view_fun()
84
- : new View();
211
+ assert(window);
212
+
213
+ if (views_capturing_all.empty()) return;
214
+
215
+ PointerEvent_each_pointer(&event, [&](const auto& pointer)
216
+ {
217
+ if (pointer.action() == Pointer::DOWN)
218
+ {
219
+ for (auto& view : views_capturing_all)
220
+ Window_register_capture(window, view, pointer.id());
221
+ }
222
+ });
85
223
  }
86
224
 
87
- void
88
- View_register_capture (View* view)
225
+ static void
226
+ extract_pointer (
227
+ PointerEvent* event, ExtractedPointerIDSet* extracteds,
228
+ const Pointer& pointer)
89
229
  {
90
- if (!view)
91
- argument_error(__FILE__, __LINE__);
230
+ assert(event && extracteds);
231
+
232
+ PointerEvent_add_pointer(event, pointer);
233
+ extracteds->insert(pointer.id());
234
+ }
92
235
 
93
- const Window* window = view->window();
94
- if (!window)
95
- invalid_state_error(__FILE__, __LINE__, "this view does not belong to any Window.");
236
+ static void
237
+ extract_targeted_pointers (
238
+ PointerEvent* event, ExtractedPointerIDSet* extracteds,
239
+ const CaptureTargetIDList& targets, const PointerMap& pointers)
240
+ {
241
+ assert(event && event->empty() && extracteds);
96
242
 
97
- window->self->capturing_views[view] = true;
243
+ for (auto pointer_id : targets)
244
+ {
245
+ auto it = pointers.find(pointer_id);
246
+ if (it != pointers.end())
247
+ extract_pointer(event, extracteds, it->second);
248
+ }
98
249
  }
99
250
 
100
- void
101
- View_unregister_capture (View* view)
251
+ static void
252
+ capture_targeted_pointers_and_call_events (
253
+ ExtractedPointerIDSet* extracteds,
254
+ Window* window, const PointerMap& pointers)
102
255
  {
103
- if (!view)
104
- argument_error(__FILE__, __LINE__);
256
+ assert(extracteds && window);
105
257
 
106
- const Window* window = view->window();
107
- if (!window) return;
258
+ for (auto& [view, targets] : window->self->captures)
259
+ {
260
+ if (targets.empty()) continue;
108
261
 
109
- auto it = window->self->capturing_views.find(view);
110
- if (it == window->self->capturing_views.end()) return;
262
+ PointerEvent e(true);
263
+ extract_targeted_pointers(&e, extracteds, targets, pointers);
264
+ if (e.empty()) continue;
111
265
 
112
- it->second = false;
266
+ PointerEvent_update_for_capturing_view(&e, view);
267
+ View_call_pointer_event(const_cast<View*>(view.get()), e);
268
+ }
113
269
  }
114
270
 
115
271
  static void
116
- cleanup_capturing_views (Window* window)
272
+ extract_hovering_pointers (
273
+ PointerEvent* event, ExtractedPointerIDSet* extracteds,
274
+ const PointerMap& pointers)
117
275
  {
118
- auto end = window->self->capturing_views.end();
119
- for (auto it = window->self->capturing_views.begin(); it != end;)
276
+ assert(event && event->empty() && extracteds);
277
+
278
+ for (const auto& [_, pointer] : pointers)
120
279
  {
121
- auto t = it++;
122
- if (!t->second) window->self->capturing_views.erase(t);
280
+ // dragging pointers is captured as a targeted
281
+ if (pointer.is_drag()) continue;
282
+
283
+ extract_pointer(event, extracteds, pointer);
284
+ }
285
+ }
286
+
287
+ static void
288
+ capture_hovering_pointers_and_call_events (
289
+ ExtractedPointerIDSet* extracteds,
290
+ const ViewList& views_capturing_all, const PointerMap& pointers)
291
+ {
292
+ assert(extracteds);
293
+
294
+ if (views_capturing_all.empty()) return;
295
+
296
+ PointerEvent event(true);
297
+ extract_hovering_pointers(&event, extracteds, pointers);
298
+ if (event.empty()) return;
299
+
300
+ for (auto& view : views_capturing_all)
301
+ {
302
+ PointerEvent e = event;
303
+ PointerEvent_update_for_capturing_view(&e, view);
304
+ View_call_pointer_event(const_cast<View*>(view.get()), e);
123
305
  }
124
306
  }
125
307
 
308
+ static void
309
+ erase_extracted_pointers (
310
+ PointerMap* pointers, const ExtractedPointerIDSet& extracteds)
311
+ {
312
+ assert(pointers);
313
+
314
+ for (auto id : extracteds)
315
+ {
316
+ auto it = pointers->find(id);
317
+ if (it != pointers->end()) pointers->erase(it);
318
+ }
319
+ }
320
+
321
+ static void
322
+ erase_extracted_pointers (
323
+ PointerEvent* event, const ExtractedPointerIDSet& extracteds)
324
+ {
325
+ assert(event);
326
+
327
+ for (auto id : extracteds)
328
+ PointerEvent_erase_pointer(event, id);
329
+ }
330
+
331
+ static void
332
+ call_captured_pointer_events (Window* window, PointerEvent* event)
333
+ {
334
+ assert(window && event);
335
+
336
+ ViewList views_capturing_all;
337
+ get_views_capturing_all_pointers(window, &views_capturing_all);
338
+ capture_all_pointers(window, *event, views_capturing_all);
339
+
340
+ PointerMap pointers;
341
+ PointerEvent_each_pointer(event, [&](const auto& pointer)
342
+ {
343
+ if (pointer.id() >= 0) pointers[pointer.id()] = pointer;
344
+ });
345
+
346
+ ExtractedPointerIDSet extracteds;
347
+ capture_targeted_pointers_and_call_events(&extracteds, window, pointers);
348
+ erase_extracted_pointers(&pointers, extracteds);
349
+
350
+ capture_hovering_pointers_and_call_events(&extracteds, views_capturing_all, pointers);
351
+ erase_extracted_pointers(event, extracteds);
352
+ }
353
+
354
+ void
355
+ Window_call_pointer_event (Window* window, PointerEvent* event)
356
+ {
357
+ assert(window);
358
+
359
+ if (!event)
360
+ argument_error(__FILE__, __LINE__);
361
+
362
+ window->on_pointer(event);
363
+
364
+ switch ((*event)[0].action())
365
+ {
366
+ case Pointer::DOWN: window->on_pointer_down(event); break;
367
+ case Pointer::UP: window->on_pointer_up(event); break;
368
+ case Pointer::MOVE: window->on_pointer_move(event); break;
369
+ case Pointer::CANCEL: window->on_pointer_cancel(event); break;
370
+ default: break;
371
+ }
372
+
373
+ call_captured_pointer_events(window, event);
374
+
375
+ if (!event->empty())
376
+ {
377
+ PointerEvent_update_for_child_view(event, window->root());
378
+ View_call_pointer_event(window->root(), *event);
379
+ }
380
+
381
+ cleanup_captures(window);
382
+ }
383
+
384
+ void
385
+ Window_call_wheel_event (Window* window, WheelEvent* event)
386
+ {
387
+ assert(window);
388
+
389
+ if (!event)
390
+ argument_error(__FILE__, __LINE__);
391
+
392
+ window->on_wheel(event);
393
+
394
+ View_call_wheel_event(window->root(), *event);
395
+ }
396
+
126
397
 
127
398
  Window::Window ()
128
399
  : self(Window_create_data())
@@ -133,7 +404,7 @@ namespace Reflex
133
404
  self->root->set_name(VIEW_TAG_ROOT);
134
405
  View_set_window(self->root.get(), this);
135
406
 
136
- self->painter.canvas(0, 0, 1, 1);
407
+ self->painter.canvas(0, 0, 1, 1, Window_get_pixel_density(*this));
137
408
  }
138
409
 
139
410
  Window::~Window ()
@@ -191,6 +462,18 @@ namespace Reflex
191
462
  self->redraw = true;
192
463
  }
193
464
 
465
+ Point
466
+ Window::from_screen (const Point& point) const
467
+ {
468
+ return point - frame().position();
469
+ }
470
+
471
+ Point
472
+ Window::to_screen (const Point& point) const
473
+ {
474
+ return point + frame().position();
475
+ }
476
+
194
477
  void
195
478
  Window::set_title (const char* title)
196
479
  {
@@ -221,6 +504,18 @@ namespace Reflex
221
504
  return Window_get_frame(*this);
222
505
  }
223
506
 
507
+ void
508
+ Window::set_resizable (bool state)
509
+ {
510
+ Window_set_resizable(this, state);
511
+ }
512
+
513
+ bool
514
+ Window::is_resizable () const
515
+ {
516
+ return Window_is_resizable(*this);
517
+ }
518
+
224
519
  bool
225
520
  Window::hidden () const
226
521
  {
@@ -263,20 +558,6 @@ namespace Reflex
263
558
  return const_cast<Window*>(this)->painter();
264
559
  }
265
560
 
266
- Point
267
- Window::from_screen (const Point& point) const
268
- {
269
- not_implemented_error(__FILE__, __LINE__);
270
- return 0;
271
- }
272
-
273
- Point
274
- Window::to_screen (const Point& point) const
275
- {
276
- not_implemented_error(__FILE__, __LINE__);
277
- return 0;
278
- }
279
-
280
561
  void
281
562
  Window::on_show (Event* e)
282
563
  {
@@ -315,28 +596,6 @@ namespace Reflex
315
596
  void
316
597
  Window::on_key (KeyEvent* e)
317
598
  {
318
- if (!e)
319
- argument_error(__FILE__, __LINE__);
320
-
321
- switch (e->type)
322
- {
323
- case KeyEvent::DOWN: on_key_down(e); break;
324
- case KeyEvent::UP: on_key_up(e); break;
325
- case KeyEvent::NONE: break;
326
- }
327
-
328
- auto end = self->capturing_views.end();
329
- for (auto it = self->capturing_views.begin(); it != end; ++it)
330
- {
331
- KeyEvent event = *e;
332
- event.capture = true;
333
- View_call_key_event(const_cast<View*>(it->first.get()), event);
334
- }
335
-
336
- if (self->focus)
337
- View_call_key_event(self->focus.get(), *e);
338
-
339
- cleanup_capturing_views(this);
340
599
  }
341
600
 
342
601
  void
@@ -352,30 +611,6 @@ namespace Reflex
352
611
  void
353
612
  Window::on_pointer (PointerEvent* e)
354
613
  {
355
- if (!e)
356
- argument_error(__FILE__, __LINE__);
357
-
358
- switch (e->type)
359
- {
360
- case PointerEvent::DOWN: on_pointer_down(e); break;
361
- case PointerEvent::UP: on_pointer_up(e); break;
362
- case PointerEvent::MOVE: on_pointer_move(e); break;
363
- case PointerEvent::NONE: break;
364
- }
365
-
366
- auto end = self->capturing_views.end();
367
- for (auto it = self->capturing_views.begin(); it != end; ++it)
368
- {
369
- PointerEvent event = *e;
370
- event.capture = true;
371
- for (size_t i = 0; i < event.size; ++i)
372
- event[i] = it->first.get()->from_window(event[i]);
373
- View_call_pointer_event(const_cast<View*>(it->first.get()), event);
374
- }
375
-
376
- View_call_pointer_event(root(), *e);
377
-
378
- cleanup_capturing_views(this);
379
614
  }
380
615
 
381
616
  void
@@ -394,12 +629,13 @@ namespace Reflex
394
629
  }
395
630
 
396
631
  void
397
- Window::on_wheel (WheelEvent* e)
632
+ Window::on_pointer_cancel (PointerEvent* e)
398
633
  {
399
- if (!e)
400
- argument_error(__FILE__, __LINE__);
634
+ }
401
635
 
402
- View_call_wheel_event(root(), *e);
636
+ void
637
+ Window::on_wheel (WheelEvent* e)
638
+ {
403
639
  }
404
640
 
405
641
  Window::operator bool () const
data/src/window.h CHANGED
@@ -4,22 +4,29 @@
4
4
  #define __REFLEX_SRC_WINDOW_H__
5
5
 
6
6
 
7
+ #include <vector>
7
8
  #include <map>
8
9
  #include <xot/time.h>
9
10
  #include <rays/point.h>
10
11
  #include <rays/painter.h>
11
12
  #include <reflex/window.h>
12
13
  #include <reflex/view.h>
14
+ #include "pointer.h"
13
15
 
14
16
 
15
17
  namespace Reflex
16
18
  {
17
19
 
18
20
 
21
+ enum {CAPTURE_ALL = INT_MAX};
22
+
23
+
19
24
  struct Window::Data
20
25
  {
21
26
 
22
- typedef std::map<View::Ref, bool> CapturingViews;
27
+ typedef std::vector<Pointer::ID> CaptureTargetIDList;
28
+
29
+ typedef std::map<View::Ref, CaptureTargetIDList> CaptureMap;
23
30
 
24
31
  int hide_count = 1;
25
32
 
@@ -33,7 +40,7 @@ namespace Reflex
33
40
 
34
41
  double prev_time_update, prev_time_draw, prev_fps = 0;
35
42
 
36
- CapturingViews capturing_views;
43
+ CaptureMap captures;
37
44
 
38
45
  Data ()
39
46
  {
@@ -78,9 +85,27 @@ namespace Reflex
78
85
 
79
86
  Bounds Window_get_frame (const Window& window);
80
87
 
88
+ void Window_set_resizable (Window* window, bool state);
89
+
90
+ bool Window_is_resizable (const Window& window);
91
+
81
92
  void Window_set_focus (Window* window, View* view);
82
93
 
83
- void Window_call_draw_event (Window* window, DrawEvent* event);
94
+ void Window_register_capture (
95
+ Window* window, View* view, Pointer::ID target = CAPTURE_ALL);
96
+
97
+ void Window_unregister_capture (
98
+ Window* window, View* view, Pointer::ID target = CAPTURE_ALL);
99
+
100
+ void Window_call_draw_event (Window* window, DrawEvent* event);
101
+
102
+ void Window_call_key_event (Window* window, KeyEvent* event);
103
+
104
+ void Window_call_pointer_event (Window* window, PointerEvent* event);
105
+
106
+ void Window_call_wheel_event (Window* window, WheelEvent* event);
107
+
108
+ float Window_get_pixel_density (const Window& window);
84
109
 
85
110
 
86
111
  typedef View* (*Window_CreateRootViewFun) ();
data/test/helper.rb CHANGED
@@ -12,7 +12,7 @@ require 'reflex'
12
12
  include Xot::Test
13
13
 
14
14
 
15
- unless $REFLEX_NOAUTOINIT
16
- def Rays.fin! () end
17
- def Reflex.fin! () end
15
+ unless defined?($REFLEX_NOAUTOINIT) && $REFLEX_NOAUTOINIT
16
+ def Rays.fin!() end
17
+ def Reflex.fin!() end
18
18
  end
@@ -8,7 +8,7 @@ class TestApplication < Test::Unit::TestCase
8
8
 
9
9
  @@app = Reflex::Application.new
10
10
 
11
- def test_name ()
11
+ def test_name()
12
12
  assert_equal '', @@app.name
13
13
  @@app.name = 'AppName'
14
14
  assert_equal 'AppName', @@app.name
@@ -6,13 +6,13 @@ require_relative 'helper'
6
6
 
7
7
  class TestCaptureEvent < Test::Unit::TestCase
8
8
 
9
- def event (*args)
10
- Reflex::CaptureEvent.new *args.map {|arg|
11
- Reflex::View.capture_flag.symbols2bits *arg
12
- }
9
+ def event(*args)
10
+ Reflex::CaptureEvent.new(*args.map {|arg|
11
+ Reflex::View.capture_flag.symbols2bits(*arg)
12
+ })
13
13
  end
14
14
 
15
- def test_begin ()
15
+ def test_begin()
16
16
  c = event [:key, :pointer], []
17
17
  assert_equal [:key, :pointer], c.begin
18
18
  assert_equal true, c.begin?(:key)
@@ -26,7 +26,7 @@ class TestCaptureEvent < Test::Unit::TestCase
26
26
  assert_equal false, c.begin?(:all)
27
27
  end
28
28
 
29
- def test_end ()
29
+ def test_end()
30
30
  c = event [], [:key, :pointer]
31
31
  assert_equal [:key, :pointer], c.end
32
32
  assert_equal true, c.end?(:key)
data/test/test_event.rb CHANGED
@@ -6,15 +6,29 @@ require_relative 'helper'
6
6
 
7
7
  class TestEvent < Test::Unit::TestCase
8
8
 
9
- def event ()
9
+ def event()
10
10
  Reflex::Event.new
11
11
  end
12
12
 
13
- def test_block ()
13
+ def test_dup()
14
+ e1 = event
15
+ e2 = e1.dup
16
+ e1.block
17
+ e3 = e1.dup
18
+ assert_equal true, e1.blocked?
19
+ assert_equal false, e2.blocked?
20
+ assert_equal true, e3.blocked?
21
+ end
22
+
23
+ def test_block()
14
24
  e = event
15
- assert_equal false, e.block?
25
+ assert_equal false, e.blocked?
16
26
  e.block
17
- assert_equal true, e.block?
27
+ assert_equal true, e.blocked?
28
+ end
29
+
30
+ def test_time()
31
+ assert_in_delta Time.now.to_f, event.time, 0.001
18
32
  end
19
33
 
20
34
  end# TestEvent