reflexion 0.1.19 → 0.1.23

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -3,9 +3,9 @@
3
3
 
4
4
 
5
5
  #include <rays/opengl.h>
6
- #include <rays/exception.h>
7
6
  #include "reflex/exception.h"
8
7
  #include "../view.h"
8
+ #include "../pointer.h"
9
9
  #include "event.h"
10
10
  #include "window.h"
11
11
 
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
  static ReflexViewController*
17
- createReflexViewController ()
17
+ create_reflex_view_controller ()
18
18
  {
19
19
  return [[ReflexViewController alloc] init];
20
20
  }
@@ -52,7 +52,7 @@ get_top_view_controller (UIViewController* vc)
52
52
  }
53
53
 
54
54
  static void
55
- showReflexViewController (
55
+ show_reflex_view_controller (
56
56
  UIViewController* root_vc, ReflexViewController* reflex_vc)
57
57
  {
58
58
  UIViewController* top = get_top_view_controller(root_vc);
@@ -90,13 +90,13 @@ ReflexViewController_set_show_fun (ReflexViewController_ShowFun fun)
90
90
  ReflexViewController_CreateFun
91
91
  ReflexViewController_get_create_fun ()
92
92
  {
93
- return global::create_fun ? global::create_fun : createReflexViewController;
93
+ return global::create_fun ? global::create_fun : create_reflex_view_controller;
94
94
  }
95
95
 
96
96
  ReflexViewController_ShowFun
97
97
  ReflexViewController_get_show_fun ()
98
98
  {
99
- return global::show_fun ? global::show_fun : showReflexViewController;
99
+ return global::show_fun ? global::show_fun : show_reflex_view_controller;
100
100
  }
101
101
 
102
102
 
@@ -131,6 +131,10 @@ ReflexViewController_get_show_fun ()
131
131
 
132
132
  {
133
133
  Reflex::Window *pwindow, *ptr_for_rebind;
134
+ int update_count;
135
+ int touching_count;
136
+ Reflex::Pointer::ID pointer_id;
137
+ Reflex::PrevPointerList prev_pointers;
134
138
  }
135
139
 
136
140
  - (id) init
@@ -138,7 +142,11 @@ ReflexViewController_get_show_fun ()
138
142
  self = [super init];
139
143
  if (!self) return nil;
140
144
 
141
- pwindow = ptr_for_rebind = NULL;
145
+ pwindow =
146
+ ptr_for_rebind = NULL;
147
+ update_count = 0;
148
+ touching_count = 0;
149
+ pointer_id = 0;
142
150
 
143
151
  return self;
144
152
  }
@@ -312,6 +320,8 @@ ReflexViewController_get_show_fun ()
312
320
  Reflex::Window* win = self.window;
313
321
  if (!win) return;
314
322
 
323
+ ++update_count;
324
+
315
325
  double now = Xot::time();
316
326
  Reflex::UpdateEvent e(now, now - win->self->prev_time_update);
317
327
  win->self->prev_time_update = now;
@@ -332,6 +342,9 @@ ReflexViewController_get_show_fun ()
332
342
  Reflex::Window* win = self.window;
333
343
  if (!win) return;
334
344
 
345
+ if (update_count == 0)
346
+ [self update];
347
+
335
348
  EAGLContext* context = self.reflexView.context;
336
349
  if (!context) return;
337
350
 
@@ -371,7 +384,7 @@ ReflexViewController_get_show_fun ()
371
384
  b.move_to(0, 0);
372
385
 
373
386
  if (win->painter())
374
- win->painter()->canvas(b, UIScreen.mainScreen.scale);
387
+ win->painter()->canvas(b, win->painter()->pixel_density());
375
388
 
376
389
  if (win->root())
377
390
  View_set_frame(win->root(), b);
@@ -386,9 +399,12 @@ ReflexViewController_get_show_fun ()
386
399
  Reflex::Window* win = self.window;
387
400
  if (!win) return;
388
401
 
389
- Reflex::NativePointerEvent e(
390
- touches, event, self.reflexView, Reflex::PointerEvent::DOWN);
391
- win->on_pointer(&e);
402
+ Reflex::NativePointerEvent e(touches, event, self.reflexView, &pointer_id);
403
+ [self addToPrevPointers: e];
404
+
405
+ touching_count += e.size();
406
+
407
+ Window_call_pointer_event(win, &e);
392
408
  }
393
409
 
394
410
  - (void) touchesEnded: (NSSet*) touches withEvent: (UIEvent*) event
@@ -396,19 +412,20 @@ ReflexViewController_get_show_fun ()
396
412
  Reflex::Window* win = self.window;
397
413
  if (!win) return;
398
414
 
399
- Reflex::NativePointerEvent e(
400
- touches, event, self.reflexView, Reflex::PointerEvent::UP);
401
- win->on_pointer(&e);
415
+ Reflex::NativePointerEvent e(touches, event, self.reflexView, &prev_pointers);
416
+
417
+ touching_count -= e.size();
418
+ if (touching_count == 0)
419
+ prev_pointers.clear();
420
+ else if (touching_count < 0)
421
+ Reflex::invalid_state_error(__FILE__, __LINE__);
422
+
423
+ Window_call_pointer_event(win, &e);
402
424
  }
403
425
 
404
426
  - (void) touchesCancelled: (NSSet*) touches withEvent: (UIEvent*) event
405
427
  {
406
- Reflex::Window* win = self.window;
407
- if (!win) return;
408
-
409
- Reflex::NativePointerEvent e(
410
- touches, event, self.reflexView, Reflex::PointerEvent::UP);
411
- win->on_pointer(&e);
428
+ [self touchesEnded: touches withEvent: event];
412
429
  }
413
430
 
414
431
  - (void) touchesMoved: (NSSet*) touches withEvent: (UIEvent*) event
@@ -416,9 +433,20 @@ ReflexViewController_get_show_fun ()
416
433
  Reflex::Window* win = self.window;
417
434
  if (!win) return;
418
435
 
419
- Reflex::NativePointerEvent e(
420
- touches, event, self.reflexView, Reflex::PointerEvent::MOVE);
421
- win->on_pointer(&e);
436
+ Reflex::NativePointerEvent e(touches, event, self.reflexView, &prev_pointers);
437
+ [self addToPrevPointers: e];
438
+
439
+ Window_call_pointer_event(win, &e);
440
+ }
441
+
442
+ - (void) addToPrevPointers: (const Reflex::PointerEvent&) event
443
+ {
444
+ size_t size = event.size();
445
+ for (size_t i = 0; i < size; ++i)
446
+ {
447
+ prev_pointers.emplace_back(event[i]);
448
+ Reflex::Pointer_set_prev(&prev_pointers.back(), NULL);
449
+ }
422
450
  }
423
451
 
424
452
  @end// ReflexViewController
data/src/ios/window.mm CHANGED
@@ -130,6 +130,24 @@ namespace Reflex
130
130
  rect.size.height);
131
131
  }
132
132
 
133
+ void
134
+ Window_set_resizable (Window* window, bool state)
135
+ {
136
+ //not_implemented_error(__FILE__, __LINE__);
137
+ }
138
+
139
+ bool
140
+ Window_is_resizable (const Window& window)
141
+ {
142
+ return false;
143
+ }
144
+
145
+ float
146
+ Window_get_pixel_density (const Window& window)
147
+ {
148
+ return UIScreen.mainScreen.scale;
149
+ }
150
+
133
151
 
134
152
  WindowData::WindowData ()
135
153
  {
data/src/osx/event.h CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
 
7
7
  #import <AppKit/NSEvent.h>
8
- #include <reflex/event.h>
8
+ #include "../event.h"
9
9
 
10
10
 
11
11
  namespace Reflex
@@ -20,10 +20,21 @@ namespace Reflex
20
20
  };// NativeKeyEvent
21
21
 
22
22
 
23
- struct NativePointerEvent : public PointerEvent
23
+ struct NativeFlagKeyEvent : public KeyEvent
24
24
  {
25
25
 
26
- NativePointerEvent (NSEvent* event, NSView* view, Type type);
26
+ NativeFlagKeyEvent (NSEvent* event);
27
+
28
+ };// NativeFlagKeyEvent
29
+
30
+
31
+ class NativePointerEvent : public PointerEvent
32
+ {
33
+
34
+ public:
35
+
36
+ NativePointerEvent (
37
+ NSEvent* event, NSView* view, Pointer::ID id, Pointer::Action action);
27
38
 
28
39
  };// NativePointerEvent
29
40
 
data/src/osx/event.mm CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
 
5
5
  #include <assert.h>
6
+ #include <Carbon/Carbon.h>
6
7
  #import <Cocoa/Cocoa.h>
7
8
 
8
9
 
@@ -17,14 +18,176 @@ namespace Reflex
17
18
  return [chars UTF8String];
18
19
  }
19
20
 
21
+ static KeyCode
22
+ get_code (UInt16 code)
23
+ {
24
+ switch (code)
25
+ {
26
+ case kVK_ANSI_A: return KEY_A;
27
+ case kVK_ANSI_S: return KEY_S;
28
+ case kVK_ANSI_D: return KEY_D;
29
+ case kVK_ANSI_F: return KEY_F;
30
+ case kVK_ANSI_H: return KEY_H;
31
+ case kVK_ANSI_G: return KEY_G;
32
+ case kVK_ANSI_Z: return KEY_Z;
33
+ case kVK_ANSI_X: return KEY_X;
34
+ case kVK_ANSI_C: return KEY_C;
35
+ case kVK_ANSI_V: return KEY_V;
36
+ case kVK_ANSI_B: return KEY_B;
37
+ case kVK_ANSI_Q: return KEY_Q;
38
+ case kVK_ANSI_W: return KEY_W;
39
+ case kVK_ANSI_E: return KEY_E;
40
+ case kVK_ANSI_R: return KEY_R;
41
+ case kVK_ANSI_Y: return KEY_Y;
42
+ case kVK_ANSI_T: return KEY_T;
43
+ case kVK_ANSI_1: return KEY_1;
44
+ case kVK_ANSI_2: return KEY_2;
45
+ case kVK_ANSI_3: return KEY_3;
46
+ case kVK_ANSI_4: return KEY_4;
47
+ case kVK_ANSI_6: return KEY_6;
48
+ case kVK_ANSI_5: return KEY_5;
49
+ case kVK_ANSI_Equal: return KEY_EQUAL;
50
+ case kVK_ANSI_9: return KEY_9;
51
+ case kVK_ANSI_7: return KEY_7;
52
+ case kVK_ANSI_Minus: return KEY_MINUS;
53
+ case kVK_ANSI_8: return KEY_8;
54
+ case kVK_ANSI_0: return KEY_0;
55
+ case kVK_ANSI_RightBracket: return KEY_RBRACKET;
56
+ case kVK_ANSI_O: return KEY_O;
57
+ case kVK_ANSI_U: return KEY_U;
58
+ case kVK_ANSI_LeftBracket: return KEY_LBRACKET;
59
+ case kVK_ANSI_I: return KEY_I;
60
+ case kVK_ANSI_P: return KEY_P;
61
+ case kVK_ANSI_L: return KEY_L;
62
+ case kVK_ANSI_J: return KEY_J;
63
+ case kVK_ANSI_Quote: return KEY_QUOTE;
64
+ case kVK_ANSI_K: return KEY_K;
65
+ case kVK_ANSI_Semicolon: return KEY_SEMICOLON;
66
+ case kVK_ANSI_Backslash: return KEY_BACKSLASH;
67
+ case kVK_ANSI_Comma: return KEY_COMMA;
68
+ case kVK_ANSI_Slash: return KEY_SLASH;
69
+ case kVK_ANSI_N: return KEY_N;
70
+ case kVK_ANSI_M: return KEY_M;
71
+ case kVK_ANSI_Period: return KEY_PERIOD;
72
+ case kVK_ANSI_Grave: return KEY_GRAVE;
73
+ case kVK_ANSI_KeypadDecimal: return KEY_NUM_DECIMAL;
74
+ case kVK_ANSI_KeypadMultiply: return KEY_NUM_MULTIPLY;
75
+ case kVK_ANSI_KeypadPlus: return KEY_NUM_PLUS;
76
+ case kVK_ANSI_KeypadClear: return KEY_NUM_CLEAR;
77
+ case kVK_ANSI_KeypadDivide: return KEY_NUM_DIVIDE;
78
+ case kVK_ANSI_KeypadEnter: return KEY_ENTER;
79
+ case kVK_ANSI_KeypadMinus: return KEY_NUM_MINUS;
80
+ case kVK_ANSI_KeypadEquals: return KEY_NUM_EQUAL;
81
+ case kVK_ANSI_Keypad0: return KEY_NUM_0;
82
+ case kVK_ANSI_Keypad1: return KEY_NUM_1;
83
+ case kVK_ANSI_Keypad2: return KEY_NUM_2;
84
+ case kVK_ANSI_Keypad3: return KEY_NUM_3;
85
+ case kVK_ANSI_Keypad4: return KEY_NUM_4;
86
+ case kVK_ANSI_Keypad5: return KEY_NUM_5;
87
+ case kVK_ANSI_Keypad6: return KEY_NUM_6;
88
+ case kVK_ANSI_Keypad7: return KEY_NUM_7;
89
+ case kVK_ANSI_Keypad8: return KEY_NUM_8;
90
+ case kVK_ANSI_Keypad9: return KEY_NUM_9;
91
+
92
+ case kVK_Return: return KEY_RETURN;
93
+ case kVK_Tab: return KEY_TAB;
94
+ case kVK_Space: return KEY_SPACE;
95
+ case kVK_Delete: return KEY_BACKSPACE;
96
+ case kVK_Escape: return KEY_ESCAPE;
97
+ case kVK_Command: return KEY_LCOMMAND;
98
+ case kVK_Shift: return KEY_LSHIFT;
99
+ case kVK_CapsLock: return KEY_CAPSLOCK;
100
+ case kVK_Option: return KEY_LOPTION;
101
+ case kVK_Control: return KEY_LCONTROL;
102
+ case kVK_RightCommand: return KEY_RCOMMAND;
103
+ case kVK_RightShift: return KEY_RSHIFT;
104
+ case kVK_RightOption: return KEY_ROPTION;
105
+ case kVK_RightControl: return KEY_RCONTROL;
106
+ case kVK_Function: return KEY_FUNCTION;
107
+ case kVK_F17: return KEY_F17;
108
+ case kVK_VolumeUp: return KEY_VOLUME_UP;
109
+ case kVK_VolumeDown: return KEY_VOLUME_DOWN;
110
+ case kVK_Mute: return KEY_MUTE;
111
+ case kVK_F18: return KEY_F18;
112
+ case kVK_F19: return KEY_F19;
113
+ case kVK_F20: return KEY_F20;
114
+ case kVK_F5: return KEY_F5;
115
+ case kVK_F6: return KEY_F6;
116
+ case kVK_F7: return KEY_F7;
117
+ case kVK_F3: return KEY_F3;
118
+ case kVK_F8: return KEY_F8;
119
+ case kVK_F9: return KEY_F9;
120
+ case kVK_F11: return KEY_F11;
121
+ case kVK_F13: return KEY_F13;
122
+ case kVK_F16: return KEY_F16;
123
+ case kVK_F14: return KEY_F14;
124
+ case kVK_F10: return KEY_F10;
125
+ case kVK_F12: return KEY_F12;
126
+ case kVK_F15: return KEY_F15;
127
+ case kVK_Help: return KEY_HELP;
128
+ case kVK_Home: return KEY_HOME;
129
+ case kVK_PageUp: return KEY_PAGEUP;
130
+ case kVK_ForwardDelete: return KEY_DELETE;
131
+ case kVK_F4: return KEY_F4;
132
+ case kVK_End: return KEY_END;
133
+ case kVK_F2: return KEY_F2;
134
+ case kVK_PageDown: return KEY_PAGEDOWN;
135
+ case kVK_F1: return KEY_F1;
136
+ case kVK_LeftArrow: return KEY_LEFT;
137
+ case kVK_RightArrow: return KEY_RIGHT;
138
+ case kVK_DownArrow: return KEY_DOWN;
139
+ case kVK_UpArrow: return KEY_UP;
140
+
141
+ case kVK_ISO_Section: return KEY_SECTION;
142
+
143
+ case kVK_JIS_Yen: return KEY_YEN;
144
+ case kVK_JIS_Underscore: return KEY_UNDERSCORE;
145
+ case kVK_JIS_KeypadComma: return KEY_NUM_COMMA;
146
+ case kVK_JIS_Eisu: return KEY_IME_EISU;
147
+ case kVK_JIS_Kana: return KEY_IME_KANA;
148
+ }
149
+
150
+ return KEY_NONE;
151
+ }
152
+
153
+ static uint
154
+ get_modifier_flag_mask (const NSEvent* e)
155
+ {
156
+ switch ([e keyCode])
157
+ {
158
+ case kVK_Shift:
159
+ case kVK_RightShift: return NSShiftKeyMask;
160
+ case kVK_Control:
161
+ case kVK_RightControl: return NSControlKeyMask;
162
+ case kVK_Option:
163
+ case kVK_RightOption: return NSAlternateKeyMask;
164
+ case kVK_Command:
165
+ case kVK_RightCommand: return NSCommandKeyMask;
166
+ case kVK_CapsLock: return NSAlphaShiftKeyMask;
167
+ case kVK_Function: return NSFunctionKeyMask;
168
+ }
169
+ return 0;
170
+ }
171
+
172
+ static KeyEvent::Type
173
+ get_flag_key_event_type(const NSEvent* e)
174
+ {
175
+ uint mask = get_modifier_flag_mask(e);
176
+ if (mask == 0) return Reflex::KeyEvent::NONE;
177
+
178
+ return [e modifierFlags] & mask
179
+ ? Reflex::KeyEvent::DOWN
180
+ : Reflex::KeyEvent::UP;
181
+ }
182
+
20
183
  static uint
21
184
  get_current_pointer_type ()
22
185
  {
23
186
  NSUInteger buttons = [NSEvent pressedMouseButtons];
24
187
  uint ret = 0;
25
- if (buttons & (1 << 0)) ret |= POINTER_MOUSE_LEFT;
26
- if (buttons & (1 << 1)) ret |= POINTER_MOUSE_RIGHT;
27
- if (buttons >= (1 << 2)) ret |= POINTER_MOUSE_MIDDLE;
188
+ if (buttons & Xot::bit(0)) ret |= Reflex::Pointer::MOUSE_LEFT;
189
+ if (buttons & Xot::bit(1)) ret |= Reflex::Pointer::MOUSE_RIGHT;
190
+ if (buttons >= Xot::bit(2)) ret |= Reflex::Pointer::MOUSE_MIDDLE;
28
191
  return ret;
29
192
  }
30
193
 
@@ -36,22 +199,24 @@ namespace Reflex
36
199
  case NSLeftMouseDown:
37
200
  case NSLeftMouseUp:
38
201
  case NSLeftMouseDragged:
39
- return POINTER_MOUSE_LEFT;
202
+ return Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_LEFT;
40
203
 
41
204
  case NSRightMouseDown:
42
205
  case NSRightMouseUp:
43
206
  case NSRightMouseDragged:
44
- return POINTER_MOUSE_RIGHT;
207
+ return Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_RIGHT;
45
208
 
46
209
  case NSOtherMouseDown:
47
210
  case NSOtherMouseUp:
48
211
  case NSOtherMouseDragged:
49
- return POINTER_MOUSE_MIDDLE;
212
+ return Reflex::Pointer::MOUSE | Reflex::Pointer::MOUSE_MIDDLE;
50
213
 
51
214
  case NSMouseMoved:
52
- return get_current_pointer_type();
215
+ return Reflex::Pointer::MOUSE | get_current_pointer_type();
216
+
217
+ default:
218
+ return Reflex::Pointer::TYPE_NONE;
53
219
  }
54
- return 0;
55
220
  }
56
221
 
57
222
  static uint
@@ -78,34 +243,59 @@ namespace Reflex
78
243
  return p;
79
244
  }
80
245
 
246
+ static Point
247
+ get_pointer_position (NSEvent* e, NSView* view)
248
+ {
249
+ NSPoint p = correct_point(view, [e locationInWindow]);
250
+ return Point(p.x, p.y);
251
+ }
252
+
81
253
 
82
254
  NativeKeyEvent::NativeKeyEvent (NSEvent* e, Type type)
83
255
  : KeyEvent(
84
- type, get_chars(e), [e keyCode], get_modifiers(e), [e isARepeat] ? 1 : 0)
256
+ type, get_chars(e), get_code([e keyCode]), get_modifiers(e),
257
+ [e isARepeat] ? 1 : 0)
85
258
  {
86
259
  }
87
260
 
88
261
 
89
- NativePointerEvent::NativePointerEvent (NSEvent* e, NSView* view, Type type)
90
- : PointerEvent(
91
- type, get_pointer_type(e), (coord) 0, (coord) 0,
92
- get_modifiers(e), (uint) [e clickCount],
93
- [e type] == NSLeftMouseDragged || [e type] == NSRightMouseDragged || [e type] == NSOtherMouseDragged)
262
+ NativeFlagKeyEvent::NativeFlagKeyEvent (NSEvent* e)
263
+ : KeyEvent(
264
+ get_flag_key_event_type(e), "", get_code([e keyCode]), get_modifiers(e),
265
+ 0)
94
266
  {
95
- NSPoint p = correct_point(view, [e locationInWindow]);
96
- x = p.x;
97
- y = p.y;
267
+ }
268
+
269
+
270
+ static bool
271
+ is_pointer_dragging (NSEvent* e)
272
+ {
273
+ return
274
+ [e type] == NSLeftMouseDragged ||
275
+ [e type] == NSRightMouseDragged ||
276
+ [e type] == NSOtherMouseDragged;
277
+ }
278
+
279
+ NativePointerEvent::NativePointerEvent (
280
+ NSEvent* event, NSView* view, Pointer::ID id, Pointer::Action action)
281
+ {
282
+ bool dragging = is_pointer_dragging(event);
283
+ PointerEvent_add_pointer(this, Pointer(
284
+ id,
285
+ get_pointer_type(event),
286
+ action,
287
+ get_pointer_position(event, view),
288
+ get_modifiers(event),
289
+ action == Pointer::MOVE && !dragging ? 0 : (uint) [event clickCount],
290
+ dragging,
291
+ time()));
98
292
  }
99
293
 
100
294
 
101
295
  NativeWheelEvent::NativeWheelEvent (NSEvent* e, NSView* view)
102
- : WheelEvent([e deltaX], [e deltaY], [e deltaZ])
296
+ : WheelEvent(0, 0, 0, [e deltaX], [e deltaY], [e deltaZ], get_modifiers(e))
103
297
  {
104
- NSPoint p = correct_point(view, [e locationInWindow]);
105
- x = p.x;
106
- y = p.y;
107
- z = 0;
108
- modifiers = get_modifiers(e);
298
+ position_ = get_pointer_position(e, view);
109
299
  }
110
300
 
111
301