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.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/contact_event.cpp +6 -6
- data/.doc/ext/reflex/event.cpp +9 -1
- data/.doc/ext/reflex/focus_event.cpp +6 -6
- data/.doc/ext/reflex/key_event.cpp +211 -13
- data/.doc/ext/reflex/native.cpp +2 -0
- data/.doc/ext/reflex/pointer.cpp +158 -0
- data/.doc/ext/reflex/pointer_event.cpp +31 -90
- data/.doc/ext/reflex/selector.cpp +8 -0
- data/.doc/ext/reflex/view.cpp +57 -0
- data/.doc/ext/reflex/window.cpp +41 -0
- data/VERSION +1 -1
- data/ext/reflex/contact_event.cpp +6 -6
- data/ext/reflex/event.cpp +11 -2
- data/ext/reflex/focus_event.cpp +6 -6
- data/ext/reflex/key_event.cpp +212 -13
- data/ext/reflex/native.cpp +2 -0
- data/ext/reflex/pointer.cpp +170 -0
- data/ext/reflex/pointer_event.cpp +30 -95
- data/ext/reflex/selector.cpp +9 -0
- data/ext/reflex/view.cpp +67 -3
- data/ext/reflex/window.cpp +49 -3
- data/include/reflex/defs.h +140 -106
- data/include/reflex/event.h +26 -27
- 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/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 +4 -4
- data/lib/reflex/draw_event.rb +2 -2
- data/lib/reflex/ellipse_shape.rb +2 -2
- data/lib/reflex/focus_event.rb +4 -4
- 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 +6 -6
- 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 +1 -1
- data/lib/reflex/update_event.rb +1 -1
- data/lib/reflex/view.rb +32 -32
- data/lib/reflex/wheel_event.rb +3 -3
- data/lib/reflex/window.rb +7 -6
- 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 +189 -37
- data/src/event.h +32 -0
- data/src/ios/event.h +15 -3
- data/src/ios/event.mm +126 -11
- data/src/ios/view_controller.mm +50 -22
- data/src/ios/window.mm +18 -0
- data/src/osx/event.h +14 -3
- data/src/osx/event.mm +213 -23
- data/src/osx/native_window.mm +84 -17
- 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/view.cpp +103 -64
- data/src/view.h +0 -4
- data/src/window.cpp +334 -98
- data/src/window.h +28 -3
- data/test/helper.rb +3 -3
- data/test/test_application.rb +1 -1
- data/test/test_capture_event.rb +6 -6
- data/test/test_event.rb +18 -4
- data/test/test_has_frame.rb +11 -11
- 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_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_view.rb +57 -30
- data/test/test_window.rb +45 -26
- metadata +46 -35
data/src/ios/view_controller.mm
CHANGED
@@ -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
|
-
|
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
|
-
|
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 :
|
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 :
|
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
|
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,
|
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
|
-
|
391
|
-
|
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
|
-
|
401
|
-
|
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
|
-
|
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
|
-
|
421
|
-
|
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
|
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
|
23
|
+
struct NativeFlagKeyEvent : public KeyEvent
|
24
24
|
{
|
25
25
|
|
26
|
-
|
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 & (
|
26
|
-
if (buttons & (1
|
27
|
-
if (buttons >= (
|
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
|
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
|
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
|
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),
|
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
|
-
|
90
|
-
:
|
91
|
-
|
92
|
-
|
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
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
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
|
|