reflexion 0.2.1 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +1 -1
  3. data/.doc/ext/reflex/capture_event.cpp +1 -1
  4. data/.doc/ext/reflex/contact_event.cpp +1 -1
  5. data/.doc/ext/reflex/draw_event.cpp +1 -1
  6. data/.doc/ext/reflex/ellipse_shape.cpp +1 -1
  7. data/.doc/ext/reflex/event.cpp +1 -1
  8. data/.doc/ext/reflex/filter.cpp +1 -1
  9. data/.doc/ext/reflex/focus_event.cpp +1 -1
  10. data/.doc/ext/reflex/frame_event.cpp +1 -1
  11. data/.doc/ext/reflex/image_view.cpp +1 -1
  12. data/.doc/ext/reflex/key_event.cpp +74 -69
  13. data/.doc/ext/reflex/line_shape.cpp +1 -1
  14. data/.doc/ext/reflex/motion_event.cpp +1 -1
  15. data/.doc/ext/reflex/pointer.cpp +7 -16
  16. data/.doc/ext/reflex/pointer_event.cpp +1 -1
  17. data/.doc/ext/reflex/polygon_shape.cpp +1 -1
  18. data/.doc/ext/reflex/rect_shape.cpp +1 -1
  19. data/.doc/ext/reflex/reflex.cpp +58 -50
  20. data/.doc/ext/reflex/screen.cpp +1 -1
  21. data/.doc/ext/reflex/scroll_event.cpp +1 -1
  22. data/.doc/ext/reflex/selector.cpp +2 -2
  23. data/.doc/ext/reflex/shape.cpp +1 -1
  24. data/.doc/ext/reflex/style.cpp +1 -1
  25. data/.doc/ext/reflex/style_length.cpp +5 -3
  26. data/.doc/ext/reflex/timer.cpp +1 -1
  27. data/.doc/ext/reflex/timer_event.cpp +1 -1
  28. data/.doc/ext/reflex/update_event.cpp +1 -1
  29. data/.doc/ext/reflex/view.cpp +17 -9
  30. data/.doc/ext/reflex/wheel_event.cpp +1 -1
  31. data/.doc/ext/reflex/window.cpp +1 -1
  32. data/.github/workflows/release-gem.yml +1 -1
  33. data/.github/workflows/test.yml +3 -0
  34. data/ChangeLog.md +17 -0
  35. data/Gemfile.lock +1 -1
  36. data/LICENSE +1 -1
  37. data/Rakefile +1 -2
  38. data/VERSION +1 -1
  39. data/ext/reflex/application.cpp +1 -1
  40. data/ext/reflex/capture_event.cpp +1 -1
  41. data/ext/reflex/contact_event.cpp +1 -1
  42. data/ext/reflex/defs.h +2 -0
  43. data/ext/reflex/draw_event.cpp +1 -1
  44. data/ext/reflex/ellipse_shape.cpp +1 -1
  45. data/ext/reflex/event.cpp +1 -1
  46. data/ext/reflex/extconf.rb +4 -4
  47. data/ext/reflex/filter.cpp +1 -1
  48. data/ext/reflex/focus_event.cpp +1 -1
  49. data/ext/reflex/frame_event.cpp +1 -1
  50. data/ext/reflex/image_view.cpp +1 -1
  51. data/ext/reflex/key_event.cpp +74 -69
  52. data/ext/reflex/line_shape.cpp +1 -1
  53. data/ext/reflex/motion_event.cpp +1 -1
  54. data/ext/reflex/pointer.cpp +7 -17
  55. data/ext/reflex/pointer_event.cpp +1 -1
  56. data/ext/reflex/polygon_shape.cpp +1 -1
  57. data/ext/reflex/rect_shape.cpp +1 -1
  58. data/ext/reflex/reflex.cpp +58 -50
  59. data/ext/reflex/screen.cpp +1 -1
  60. data/ext/reflex/scroll_event.cpp +1 -1
  61. data/ext/reflex/selector.cpp +2 -2
  62. data/ext/reflex/shape.cpp +1 -1
  63. data/ext/reflex/style.cpp +1 -1
  64. data/ext/reflex/style_length.cpp +5 -3
  65. data/ext/reflex/timer.cpp +1 -1
  66. data/ext/reflex/timer_event.cpp +1 -1
  67. data/ext/reflex/update_event.cpp +1 -1
  68. data/ext/reflex/view.cpp +18 -9
  69. data/ext/reflex/wheel_event.cpp +1 -1
  70. data/ext/reflex/window.cpp +1 -1
  71. data/include/reflex/defs.h +204 -187
  72. data/include/reflex/pointer.h +3 -5
  73. data/include/reflex/reflex.h +1 -0
  74. data/include/reflex/ruby/application.h +2 -2
  75. data/include/reflex/ruby/event.h +26 -26
  76. data/include/reflex/ruby/exception.h +3 -3
  77. data/include/reflex/ruby/filter.h +2 -2
  78. data/include/reflex/ruby/image_view.h +2 -2
  79. data/include/reflex/ruby/pointer.h +2 -2
  80. data/include/reflex/ruby/reflex.h +1 -1
  81. data/include/reflex/ruby/screen.h +2 -2
  82. data/include/reflex/ruby/selector.h +2 -2
  83. data/include/reflex/ruby/shape.h +10 -10
  84. data/include/reflex/ruby/style.h +4 -4
  85. data/include/reflex/ruby/timer.h +3 -3
  86. data/include/reflex/ruby/view.h +2 -2
  87. data/include/reflex/ruby/window.h +2 -2
  88. data/include/reflex/view.h +3 -1
  89. data/lib/reflex/extension.rb +4 -0
  90. data/lib/reflex/pointer.rb +1 -1
  91. data/lib/reflex/pointer_event.rb +2 -2
  92. data/reflex.gemspec +4 -4
  93. data/src/body.cpp +12 -6
  94. data/src/event.cpp +17 -31
  95. data/src/event.h +3 -3
  96. data/src/filter.cpp +3 -1
  97. data/src/ios/event.mm +20 -27
  98. data/src/osx/application.mm +6 -5
  99. data/src/osx/event.mm +1 -2
  100. data/src/pointer.cpp +12 -32
  101. data/src/pointer.h +0 -2
  102. data/src/selector.cpp +3 -1
  103. data/src/shape.cpp +5 -3
  104. data/src/style.cpp +14 -8
  105. data/src/view.cpp +47 -24
  106. data/src/win32/application.cpp +48 -35
  107. data/src/win32/device.cpp +18 -0
  108. data/src/win32/event.cpp +219 -0
  109. data/src/win32/event.h +50 -0
  110. data/src/win32/opengl.cpp +54 -27
  111. data/src/win32/opengl.h +15 -13
  112. data/src/win32/reflex.cpp +10 -16
  113. data/src/win32/screen.cpp +61 -0
  114. data/src/win32/screen.h +21 -0
  115. data/src/win32/window.cpp +445 -240
  116. data/src/window.cpp +28 -30
  117. data/src/window.h +3 -12
  118. data/test/test_pointer.rb +8 -10
  119. data/test/test_pointer_event.rb +8 -9
  120. data/test/test_window.rb +24 -21
  121. metadata +15 -12
  122. data/src/win32/defs.cpp +0 -303
  123. data/src/win32/defs.h +0 -34
data/src/view.cpp CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
 
4
4
  #include <limits.h>
5
+ #include <string.h>
5
6
  #include <assert.h>
6
7
  #include <memory>
7
8
  #include <algorithm>
@@ -288,15 +289,22 @@ namespace Reflex
288
289
 
289
290
  World* child_world (View* view, bool create = true)
290
291
  {
291
- if (!pchild_world && create)
292
- {
293
- pchild_world.reset(new World());
294
- create_walls(view);
295
- }
296
-
292
+ if (!pchild_world && create) create_world(view);
297
293
  return pchild_world.get();
298
294
  }
299
295
 
296
+ void create_world (View* view, float pixels_per_meter = 0)
297
+ {
298
+ if (pchild_world)
299
+ invalid_state_error(__FILE__, __LINE__);
300
+
301
+ if (pixels_per_meter == 0)
302
+ pixels_per_meter = World::DEFAULT_PIXELS_PER_METER;
303
+
304
+ pchild_world.reset(new World(pixels_per_meter));
305
+ create_walls(view);
306
+ }
307
+
300
308
  void create_walls (View* view)
301
309
  {
302
310
  clear_walls(view);
@@ -1326,7 +1334,9 @@ namespace Reflex
1326
1334
  void
1327
1335
  View_call_key_event (View* view, KeyEvent* event)
1328
1336
  {
1329
- if (!view || !event)
1337
+ if (!view)
1338
+ argument_error(__FILE__, __LINE__);
1339
+ if (!event)
1330
1340
  argument_error(__FILE__, __LINE__);
1331
1341
 
1332
1342
  if (view->hidden()) return;
@@ -1382,9 +1392,6 @@ namespace Reflex
1382
1392
  case Pointer::CANCEL: view->on_pointer_cancel(event); break;
1383
1393
  default: break;
1384
1394
  }
1385
-
1386
- if (!event->is_captured())
1387
- PointerEvent_increment_view_indices(event);
1388
1395
  }
1389
1396
 
1390
1397
  static void
@@ -1397,34 +1404,36 @@ namespace Reflex
1397
1404
  PointerEvent_each_pointer(&event, [&](const auto& pointer)
1398
1405
  {
1399
1406
  if (pointer.action() == Pointer::DOWN)
1400
- Window_register_capture(win, view, pointer.id(), pointer.view_index());
1407
+ Window_register_capture(win, view, pointer.id());
1401
1408
  });
1402
1409
  }
1403
1410
 
1404
1411
  static void
1405
- unregister_captures (View* view, const PointerEvent& event)
1412
+ unregister_captures (Window* window, View* view, const PointerEvent& event)
1406
1413
  {
1407
- Window* win = view->window();
1408
- if (!win)
1409
- invalid_state_error(__FILE__, __LINE__);
1410
-
1411
1414
  PointerEvent_each_pointer(&event, [&](const auto& pointer)
1412
1415
  {
1413
1416
  auto action = pointer.action();
1414
1417
  if (action == Pointer::UP || action == Pointer::CANCEL)
1415
- Window_unregister_capture(win, view, pointer.id());
1418
+ Window_unregister_capture(window, view, pointer.id());
1416
1419
  });
1417
1420
  }
1418
1421
 
1419
1422
  void
1420
1423
  View_call_pointer_event (View* view, PointerEvent* event)
1421
1424
  {
1422
- if (!view || !event)
1425
+ if (!view)
1426
+ argument_error(__FILE__, __LINE__);
1427
+ if (!event)
1423
1428
  argument_error(__FILE__, __LINE__);
1424
1429
 
1425
1430
  if (view->hidden() || event->empty())
1426
1431
  return;
1427
1432
 
1433
+ Window* win = view->window();
1434
+ if (!win)
1435
+ invalid_state_error(__FILE__, __LINE__);
1436
+
1428
1437
  PointerEvent e = event->dup();
1429
1438
 
1430
1439
  if (!e.is_captured())
@@ -1436,13 +1445,15 @@ namespace Reflex
1436
1445
  call_pointer_events(view, &e);
1437
1446
  }
1438
1447
 
1439
- unregister_captures(view, e);
1448
+ unregister_captures(win, view, e);
1440
1449
  }
1441
1450
 
1442
1451
  void
1443
1452
  View_call_wheel_event (View* view, WheelEvent* event)
1444
1453
  {
1445
- if (!view || !event)
1454
+ if (!view)
1455
+ argument_error(__FILE__, __LINE__);
1456
+ if (!event)
1446
1457
  argument_error(__FILE__, __LINE__);
1447
1458
 
1448
1459
  if (view->hidden()) return;
@@ -1468,7 +1479,9 @@ namespace Reflex
1468
1479
  void
1469
1480
  View_call_contact_event (View* view, ContactEvent* event)
1470
1481
  {
1471
- if (!view || !event)
1482
+ if (!view)
1483
+ argument_error(__FILE__, __LINE__);
1484
+ if (!event)
1472
1485
  argument_error(__FILE__, __LINE__);
1473
1486
 
1474
1487
  ContactEvent e = event->dup();
@@ -1737,7 +1750,9 @@ namespace Reflex
1737
1750
  void
1738
1751
  View::add_child (View* child)
1739
1752
  {
1740
- if (!child || child == this)
1753
+ if (!child)
1754
+ argument_error(__FILE__, __LINE__);
1755
+ if (child == this)
1741
1756
  argument_error(__FILE__, __LINE__);
1742
1757
 
1743
1758
  bool found = std::find(child_begin(), child_end(), child) != child_end();
@@ -1763,7 +1778,9 @@ namespace Reflex
1763
1778
  void
1764
1779
  View::remove_child (View* child)
1765
1780
  {
1766
- if (!child || child == this)
1781
+ if (!child)
1782
+ argument_error(__FILE__, __LINE__);
1783
+ if (child == this)
1767
1784
  argument_error(__FILE__, __LINE__);
1768
1785
 
1769
1786
  bool found = std::find(child_begin(), child_end(), child) != child_end();
@@ -2516,7 +2533,13 @@ namespace Reflex
2516
2533
  }
2517
2534
 
2518
2535
  void
2519
- View::update_physics (float duration)
2536
+ View::create_world (float pixels_per_meter)
2537
+ {
2538
+ self->create_world(this, pixels_per_meter);
2539
+ }
2540
+
2541
+ void
2542
+ View::update_world (float duration)
2520
2543
  {
2521
2544
  World* w = self->pchild_world.get();
2522
2545
  if (w) w->update(duration);
@@ -1,7 +1,7 @@
1
1
  #include "reflex/application.h"
2
2
 
3
3
 
4
- #include <windows.h>
4
+ #include <xot/windows.h>
5
5
  #include "reflex/exception.h"
6
6
 
7
7
 
@@ -9,13 +9,18 @@ namespace Reflex
9
9
  {
10
10
 
11
11
 
12
- static Application* instance = NULL;
12
+ namespace global
13
+ {
14
+
15
+ static Application* instance = NULL;
16
+
17
+ }// global
13
18
 
14
19
 
15
20
  Application*
16
21
  app ()
17
22
  {
18
- return instance;
23
+ return global::instance;
19
24
  }
20
25
 
21
26
 
@@ -24,30 +29,27 @@ namespace Reflex
24
29
 
25
30
  String name;
26
31
 
27
- operator bool () const
28
- {
29
- return true;
30
- }
31
-
32
32
  };// Application::Data
33
33
 
34
34
 
35
35
  Application::Application ()
36
36
  {
37
- if (instance) reflex_error("multiple application instance.");
37
+ if (global::instance)
38
+ reflex_error(__FILE__, __LINE__, "multiple application instances.");
38
39
 
39
- instance = this;
40
+ global::instance = this;
40
41
  }
41
42
 
42
43
  Application::~Application ()
43
44
  {
44
- instance = NULL;
45
+ global::instance = NULL;
45
46
  }
46
47
 
47
- bool
48
- Application::run ()
48
+ void
49
+ Application::start ()
49
50
  {
50
- if (!*this) return false;
51
+ Event e;
52
+ on_start(&e);
51
53
 
52
54
  MSG msg;
53
55
  while (GetMessage(&msg, NULL, 0, 0))
@@ -56,48 +58,59 @@ namespace Reflex
56
58
  DispatchMessage(&msg);
57
59
  }
58
60
 
59
- return msg.wParam == 0;
61
+ if (msg.wParam != 0)
62
+ reflex_error(__FILE__, __LINE__, "WM_QUIT with wParam %d.", msg.wParam);
60
63
  }
61
64
 
62
- bool
65
+ void
63
66
  Application::quit ()
64
67
  {
65
- if (!*this) return false;
66
-
67
68
  PostQuitMessage(0);
68
- return true;
69
69
  }
70
70
 
71
- bool
72
- Application::preference ()
71
+ void
72
+ Application::set_name (const char* name)
73
73
  {
74
- return *this;
74
+ if (!name)
75
+ argument_error(__FILE__, __LINE__);
76
+
77
+ self->name = name;
75
78
  }
76
79
 
77
- bool
78
- Application::about ()
80
+ const char*
81
+ Application::name () const
79
82
  {
80
- return *this;
83
+ return self->name.c_str();
81
84
  }
82
85
 
83
- bool
84
- Application::set_name (const char* name)
86
+ void
87
+ Application::on_start (Event* e)
85
88
  {
86
- if (!*this || !name) return false;
87
- self->name = name;
88
- return true;
89
89
  }
90
90
 
91
- const char*
92
- Application::name () const
91
+ void
92
+ Application::on_quit (Event* e)
93
+ {
94
+ }
95
+
96
+ void
97
+ Application::on_motion (MotionEvent* e)
98
+ {
99
+ }
100
+
101
+ void
102
+ Application::on_preference (Event* e)
103
+ {
104
+ }
105
+
106
+ void
107
+ Application::on_about (Event* e)
93
108
  {
94
- if (!*this) return "";
95
- return self->name.c_str();
96
109
  }
97
110
 
98
111
  Application::operator bool () const
99
112
  {
100
- return self && *self;
113
+ return true;
101
114
  }
102
115
 
103
116
  bool
@@ -0,0 +1,18 @@
1
+ #include "reflex/device.h"
2
+
3
+
4
+ #include "reflex/exception.h"
5
+
6
+
7
+ namespace Reflex
8
+ {
9
+
10
+
11
+ void
12
+ vibrate ()
13
+ {
14
+ not_implemented_error(__FILE__, __LINE__);
15
+ }
16
+
17
+
18
+ }// Reflex
@@ -0,0 +1,219 @@
1
+ #include "event.h"
2
+
3
+
4
+ #include <xot/time.h>
5
+ #include "reflex/exception.h"
6
+ #include "../pointer.h"
7
+
8
+
9
+ namespace Reflex
10
+ {
11
+
12
+
13
+ static uint
14
+ get_modifiers ()
15
+ {
16
+ return
17
+ (GetKeyState(VK_SHIFT) & 0x8000 ? MOD_SHIFT : 0) |
18
+ (GetKeyState(VK_CONTROL) & 0x8000 ? MOD_CONTROL : 0) |
19
+ (GetKeyState(VK_MENU) & 0x8000 ? MOD_ALT : 0) |
20
+ (GetKeyState(VK_LWIN) & 0x8000 ? MOD_WIN : 0) |
21
+ (GetKeyState(VK_RWIN) & 0x8000 ? MOD_WIN : 0);
22
+ }
23
+
24
+
25
+ static KeyEvent::Action
26
+ get_key_action (UINT msg)
27
+ {
28
+ switch (msg)
29
+ {
30
+ case WM_KEYDOWN:
31
+ case WM_SYSKEYDOWN: return KeyEvent::DOWN;
32
+ case WM_KEYUP:
33
+ case WM_SYSKEYUP: return KeyEvent::UP;
34
+ default: argument_error(__FILE__, __LINE__);
35
+ }
36
+ }
37
+
38
+ NativeKeyEvent::NativeKeyEvent (UINT msg, WPARAM wp, LPARAM lp, const char* chars)
39
+ : KeyEvent(get_key_action(msg), chars, (int) wp, get_modifiers(), lp & 0xFF)
40
+ {
41
+ }
42
+
43
+
44
+
45
+ static uint
46
+ get_mouse_type (UINT msg, WPARAM wp)
47
+ {
48
+ uint type = Reflex::Pointer::TYPE_NONE;
49
+
50
+ switch (msg)
51
+ {
52
+ case WM_LBUTTONDOWN:
53
+ case WM_LBUTTONDBLCLK:
54
+ case WM_LBUTTONUP:
55
+ type |= Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_LEFT;
56
+ break;
57
+
58
+ case WM_RBUTTONDOWN:
59
+ case WM_RBUTTONDBLCLK:
60
+ case WM_RBUTTONUP:
61
+ type |= Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_RIGHT;
62
+ break;
63
+
64
+ case WM_MBUTTONDOWN:
65
+ case WM_MBUTTONDBLCLK:
66
+ case WM_MBUTTONUP:
67
+ type |= Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_MIDDLE;
68
+ break;
69
+
70
+ case WM_MOUSEMOVE:
71
+ type |= Reflex::Pointer::MOUSE;
72
+ break;
73
+ }
74
+
75
+ return type;
76
+ }
77
+
78
+ static Reflex::Pointer::Action
79
+ get_mouse_action (UINT msg)
80
+ {
81
+ switch (msg)
82
+ {
83
+ case WM_LBUTTONDOWN:
84
+ case WM_RBUTTONDOWN:
85
+ case WM_MBUTTONDOWN:
86
+ case WM_LBUTTONDBLCLK:
87
+ case WM_RBUTTONDBLCLK:
88
+ case WM_MBUTTONDBLCLK:
89
+ return Reflex::Pointer::DOWN;
90
+
91
+ case WM_LBUTTONUP:
92
+ case WM_RBUTTONUP:
93
+ case WM_MBUTTONUP:
94
+ return Reflex::Pointer::UP;
95
+
96
+ case WM_MOUSEMOVE:
97
+ return Reflex::Pointer::MOVE;
98
+
99
+ default:
100
+ return Reflex::Pointer::ACTION_NONE;
101
+ }
102
+ }
103
+
104
+ static bool
105
+ is_mouse_dragging (UINT msg, WPARAM wp)
106
+ {
107
+ return msg == WM_MOUSEMOVE && wp & (MK_LBUTTON | MK_RBUTTON | MK_MBUTTON);
108
+ }
109
+
110
+ static int
111
+ get_mouse_click_count (UINT msg)
112
+ {
113
+ switch (msg)
114
+ {
115
+ case WM_LBUTTONDOWN:
116
+ case WM_RBUTTONDOWN:
117
+ case WM_MBUTTONDOWN:
118
+ return 1;
119
+
120
+ case WM_LBUTTONDBLCLK:
121
+ case WM_RBUTTONDBLCLK:
122
+ case WM_MBUTTONDBLCLK:
123
+ return 2;
124
+
125
+ default:
126
+ return 0;
127
+ }
128
+ }
129
+
130
+ NativePointerEvent::NativePointerEvent (UINT msg, WPARAM wp, LPARAM lp)
131
+ {
132
+ PointerEvent_add_pointer(this, Pointer(
133
+ 0,
134
+ get_mouse_type(msg, wp),
135
+ get_mouse_action(msg),
136
+ Point(GET_X_LPARAM(lp), GET_Y_LPARAM(lp)),
137
+ get_modifiers(),
138
+ get_mouse_click_count(msg),
139
+ is_mouse_dragging(msg, wp),
140
+ Xot::time()));
141
+ }
142
+
143
+ static uint
144
+ get_touch_type (const TOUCHINPUT& touch)
145
+ {
146
+ if (touch.dwFlags & TOUCHEVENTF_PEN) return Pointer::PEN;
147
+ if (touch.dwFlags & TOUCHEVENTF_PALM) return Pointer::TYPE_NONE;
148
+ else return Pointer::TOUCH;
149
+ }
150
+
151
+ static Pointer::Action
152
+ get_touch_action (const TOUCHINPUT& touch)
153
+ {
154
+ if (touch.dwFlags & TOUCHEVENTF_DOWN) return Pointer::DOWN;
155
+ if (touch.dwFlags & TOUCHEVENTF_UP) return Pointer::UP;
156
+ if (touch.dwFlags & TOUCHEVENTF_MOVE) return Pointer::MOVE;
157
+ else return Pointer::ACTION_NONE;
158
+ }
159
+
160
+ static Point
161
+ get_touch_position (HWND hwnd, const TOUCHINPUT& touch)
162
+ {
163
+ coord x = (coord) touch.x / 100;
164
+ coord y = (coord) touch.y / 100;
165
+
166
+ POINT point = {0, 0};
167
+ if (ClientToScreen(hwnd, &point))
168
+ {
169
+ x -= point.x;
170
+ y -= point.y;
171
+ }
172
+
173
+ return Point(x, y);
174
+ }
175
+
176
+ static double
177
+ get_touch_time (const TOUCHINPUT& touch)
178
+ {
179
+ //if (touch.dwFlags & TOUCHINPUTMASKF_TIMEFROMSYSTEM)
180
+ // return (double) touch.dwTime / 1000.0;
181
+
182
+ return Xot::time();
183
+ }
184
+
185
+ NativePointerEvent::NativePointerEvent (
186
+ HWND hwnd, const TOUCHINPUT* touches, size_t size)
187
+ {
188
+ for (size_t i = 0; i < size; ++i)
189
+ {
190
+ const TOUCHINPUT& touch = touches[i];
191
+ Pointer::Action action = get_touch_action(touch);
192
+
193
+ Pointer pointer(
194
+ 0,
195
+ get_touch_type(touch),
196
+ action,
197
+ get_touch_position(hwnd, touch),
198
+ get_modifiers(),
199
+ action == Pointer::DOWN ? 1 : 0,
200
+ action == Pointer::MOVE,
201
+ get_touch_time(touch));
202
+ Pointer_set_system_id(&pointer, touch.dwID);
203
+
204
+ if (pointer)
205
+ PointerEvent_add_pointer(this, pointer);
206
+ }
207
+ }
208
+
209
+
210
+ NativeWheelEvent::NativeWheelEvent (WPARAM wp_x, WPARAM wp_y, LPARAM lp)
211
+ : WheelEvent(
212
+ GET_X_LPARAM(lp), GET_Y_LPARAM(lp), 0,
213
+ GET_WHEEL_DELTA_WPARAM(wp_x), -GET_WHEEL_DELTA_WPARAM(wp_y), 0,
214
+ get_modifiers())
215
+ {
216
+ }
217
+
218
+
219
+ }// Reflex
data/src/win32/event.h ADDED
@@ -0,0 +1,50 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __REFLEX_SRC_WIN32_EVENT_H__
4
+ #define __REFLEX_SRC_WIN32_EVENT_H__
5
+
6
+
7
+ #include <xot/windows.h>
8
+ #include "../event.h"
9
+
10
+
11
+ namespace Reflex
12
+ {
13
+
14
+
15
+ class NativeKeyEvent : public KeyEvent
16
+ {
17
+
18
+ public:
19
+
20
+ NativeKeyEvent (UINT msg, WPARAM wp, LPARAM lp, const char* chars = NULL);
21
+
22
+ };// NativeKeyEvent
23
+
24
+
25
+ class NativePointerEvent : public PointerEvent
26
+ {
27
+
28
+ public:
29
+
30
+ NativePointerEvent (UINT msg, WPARAM wp, LPARAM lp);
31
+
32
+ NativePointerEvent (HWND hwnd, const TOUCHINPUT* touches, size_t size);
33
+
34
+ };// NativePointerEvent
35
+
36
+
37
+ class NativeWheelEvent : public WheelEvent
38
+ {
39
+
40
+ public:
41
+
42
+ NativeWheelEvent (WPARAM wp_x, WPARAM wp_y, LPARAM lp);
43
+
44
+ };// NativeWheelEvent
45
+
46
+
47
+ }// Reflex
48
+
49
+
50
+ #endif//EOH