reflexion 0.2 → 0.2.1
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/key_event.cpp +22 -7
- data/.doc/ext/reflex/reflex.cpp +203 -0
- data/.doc/ext/reflex/style.cpp +2 -2
- data/.doc/ext/reflex/view.cpp +1 -1
- data/.github/workflows/release-gem.yml +1 -1
- data/.github/workflows/tag.yml +1 -1
- data/.github/workflows/test.yml +7 -1
- data/ChangeLog.md +13 -0
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/ext/reflex/key_event.cpp +22 -7
- data/ext/reflex/reflex.cpp +203 -0
- data/ext/reflex/style.cpp +2 -2
- data/ext/reflex/view.cpp +1 -1
- data/include/reflex/defs.h +199 -188
- data/include/reflex/ruby.h +4 -1
- data/include/reflex.h +2 -0
- data/lib/reflex/key_event.rb +23 -1
- data/reflex.gemspec +4 -4
- data/samples/key.rb +1 -1
- data/src/event.cpp +1 -0
- data/src/ios/event.h +1 -11
- data/src/ios/event.mm +10 -57
- data/src/ios/view_controller.mm +21 -44
- data/src/ios/window.mm +19 -19
- data/src/osx/event.h +1 -1
- data/src/osx/event.mm +51 -189
- data/src/osx/native_window.mm +33 -84
- data/src/osx/window.mm +12 -12
- data/src/pointer.cpp +53 -11
- data/src/pointer.h +8 -0
- data/src/view.cpp +4 -79
- data/src/window.cpp +105 -0
- data/src/window.h +13 -3
- data/test/helper.rb +0 -6
- data/test/test_key_event.rb +17 -8
- data/test/test_pointer.rb +7 -2
- data/test/test_screen.rb +0 -4
- metadata +10 -10
data/src/ios/view_controller.mm
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
#include <assert.h>
|
6
|
-
#include <rays/
|
6
|
+
#include <rays/rays.h>
|
7
7
|
#include "reflex/exception.h"
|
8
8
|
#include "../view.h"
|
9
9
|
#include "../pointer.h"
|
@@ -136,8 +136,6 @@ ReflexViewController_get_show_fun ()
|
|
136
136
|
Reflex::Window *pwindow, *ptr_for_rebind;
|
137
137
|
int update_count;
|
138
138
|
int touching_count;
|
139
|
-
Reflex::Pointer::ID pointer_id;
|
140
|
-
Reflex::PrevPointerList prev_pointers;
|
141
139
|
}
|
142
140
|
|
143
141
|
- (id) init
|
@@ -149,7 +147,6 @@ ReflexViewController_get_show_fun ()
|
|
149
147
|
ptr_for_rebind = NULL;
|
150
148
|
update_count = 0;
|
151
149
|
touching_count = 0;
|
152
|
-
pointer_id = 0;
|
153
150
|
|
154
151
|
return self;
|
155
152
|
}
|
@@ -272,9 +269,8 @@ ReflexViewController_get_show_fun ()
|
|
272
269
|
ReflexView* view = self.reflexView;
|
273
270
|
if (!view) return;
|
274
271
|
|
275
|
-
|
276
|
-
|
277
|
-
[EAGLContext setCurrentContext: (EAGLContext*) Rays::get_offscreen_context()];
|
272
|
+
if (view.context && view.context == [EAGLContext currentContext])
|
273
|
+
Rays::activate_offscreen_context();
|
278
274
|
|
279
275
|
view.reflexViewController = nil;
|
280
276
|
[view removeFromSuperview];
|
@@ -421,23 +417,22 @@ ReflexViewController_get_show_fun ()
|
|
421
417
|
win->self->prev_position = b.position();
|
422
418
|
win->self->prev_size = b.size();
|
423
419
|
|
424
|
-
if (dpos
|
420
|
+
if (dpos == 0 && dsize == 0) return;
|
421
|
+
|
422
|
+
Reflex::FrameEvent e(b, dpos.x, dpos.y, 0, dsize.x, dsize.y, 0);
|
423
|
+
if (dpos != 0) win->on_move(&e);
|
424
|
+
if (dsize != 0)
|
425
425
|
{
|
426
|
-
|
427
|
-
|
428
|
-
if (dsize != 0)
|
429
|
-
{
|
430
|
-
Rays::Bounds b = win->frame();
|
431
|
-
b.move_to(0, 0);
|
426
|
+
Rays::Bounds b = win->frame();
|
427
|
+
b.move_to(0, 0);
|
432
428
|
|
433
|
-
|
434
|
-
|
429
|
+
if (win->painter())
|
430
|
+
win->painter()->canvas(b, win->painter()->pixel_density());
|
435
431
|
|
436
|
-
|
437
|
-
|
432
|
+
if (win->root())
|
433
|
+
View_set_frame(win->root(), b);
|
438
434
|
|
439
|
-
|
440
|
-
}
|
435
|
+
win->on_resize(&e);
|
441
436
|
}
|
442
437
|
}
|
443
438
|
|
@@ -481,12 +476,10 @@ ReflexViewController_get_show_fun ()
|
|
481
476
|
Reflex::Window* win = self.window;
|
482
477
|
if (!win) return;
|
483
478
|
|
484
|
-
Reflex::NativePointerEvent e(touches, event, self.reflexView
|
485
|
-
|
479
|
+
Reflex::NativePointerEvent e(touches, event, self.reflexView);
|
480
|
+
Window_call_pointer_event(win, &e);
|
486
481
|
|
487
482
|
touching_count += e.size();
|
488
|
-
|
489
|
-
Window_call_pointer_event(win, &e);
|
490
483
|
}
|
491
484
|
|
492
485
|
- (void) touchesEnded: (NSSet*) touches withEvent: (UIEvent*) event
|
@@ -494,15 +487,14 @@ ReflexViewController_get_show_fun ()
|
|
494
487
|
Reflex::Window* win = self.window;
|
495
488
|
if (!win) return;
|
496
489
|
|
497
|
-
Reflex::NativePointerEvent e(touches, event, self.reflexView
|
490
|
+
Reflex::NativePointerEvent e(touches, event, self.reflexView);
|
491
|
+
Window_call_pointer_event(win, &e);
|
498
492
|
|
499
493
|
touching_count -= e.size();
|
500
494
|
if (touching_count == 0)
|
501
|
-
prev_pointers.clear();
|
495
|
+
win->self->prev_pointers.clear();
|
502
496
|
else if (touching_count < 0)
|
503
497
|
Reflex::invalid_state_error(__FILE__, __LINE__);
|
504
|
-
|
505
|
-
Window_call_pointer_event(win, &e);
|
506
498
|
}
|
507
499
|
|
508
500
|
- (void) touchesCancelled: (NSSet*) touches withEvent: (UIEvent*) event
|
@@ -515,23 +507,8 @@ ReflexViewController_get_show_fun ()
|
|
515
507
|
Reflex::Window* win = self.window;
|
516
508
|
if (!win) return;
|
517
509
|
|
518
|
-
Reflex::NativePointerEvent e(touches, event, self.reflexView
|
519
|
-
[self addToPrevPointers: e];
|
520
|
-
|
510
|
+
Reflex::NativePointerEvent e(touches, event, self.reflexView);
|
521
511
|
Window_call_pointer_event(win, &e);
|
522
512
|
}
|
523
513
|
|
524
|
-
- (void) addToPrevPointers: (const Reflex::PointerEvent&) event
|
525
|
-
{
|
526
|
-
size_t size = event.size();
|
527
|
-
for (size_t i = 0; i < size; ++i)
|
528
|
-
{
|
529
|
-
prev_pointers.emplace_back(event[i]);
|
530
|
-
if (prev_pointers.size() > 10)
|
531
|
-
Reflex::invalid_state_error(__FILE__, __LINE__);
|
532
|
-
|
533
|
-
Reflex::Pointer_set_prev(&prev_pointers.back(), NULL);
|
534
|
-
}
|
535
|
-
}
|
536
|
-
|
537
514
|
@end// ReflexViewController
|
data/src/ios/window.mm
CHANGED
@@ -142,6 +142,25 @@ namespace Reflex
|
|
142
142
|
return Bounds(b.origin.x, b.origin.y, b.size.width, b.size.height);
|
143
143
|
}
|
144
144
|
|
145
|
+
static UIScreen*
|
146
|
+
get_screen (const Window& window)
|
147
|
+
{
|
148
|
+
UIWindow* w = get_vc(&window).view.window;
|
149
|
+
if (@available(iOS 13.0, *))
|
150
|
+
return w.windowScene.screen;
|
151
|
+
else
|
152
|
+
return w.screen;
|
153
|
+
}
|
154
|
+
|
155
|
+
Screen
|
156
|
+
Window_get_screen (const Window& window)
|
157
|
+
{
|
158
|
+
Screen s;
|
159
|
+
UIScreen* screen = get_screen(window);
|
160
|
+
Screen_initialize(&s, screen ? screen : UIScreen.mainScreen);
|
161
|
+
return s;
|
162
|
+
}
|
163
|
+
|
145
164
|
static UIInterfaceOrientationMask g_orientation_mask =
|
146
165
|
UIInterfaceOrientationMaskAll;
|
147
166
|
|
@@ -246,25 +265,6 @@ namespace Reflex
|
|
246
265
|
flags_to_orientation_mask(flags & (Window::FLAG_PORTRAIT | Window::FLAG_LANDSCAPE)));
|
247
266
|
}
|
248
267
|
|
249
|
-
static UIScreen*
|
250
|
-
get_screen (const Window& window)
|
251
|
-
{
|
252
|
-
UIWindow* w = get_vc(&window).view.window;
|
253
|
-
if (@available(iOS 13.0, *))
|
254
|
-
return w.windowScene.screen;
|
255
|
-
else
|
256
|
-
return w.screen;
|
257
|
-
}
|
258
|
-
|
259
|
-
Screen
|
260
|
-
Window_get_screen (const Window& window)
|
261
|
-
{
|
262
|
-
Screen s;
|
263
|
-
UIScreen* screen = get_screen(window);
|
264
|
-
Screen_initialize(&s, screen ? screen : UIScreen.mainScreen);
|
265
|
-
return s;
|
266
|
-
}
|
267
|
-
|
268
268
|
float
|
269
269
|
Window_get_pixel_density (const Window& window)
|
270
270
|
{
|
data/src/osx/event.h
CHANGED
data/src/osx/event.mm
CHANGED
@@ -11,145 +11,47 @@ namespace Reflex
|
|
11
11
|
{
|
12
12
|
|
13
13
|
|
14
|
-
static
|
15
|
-
|
14
|
+
static uint
|
15
|
+
get_modifiers (const NSEvent* e)
|
16
16
|
{
|
17
|
-
|
18
|
-
return
|
17
|
+
NSUInteger flags = e.modifierFlags;
|
18
|
+
return
|
19
|
+
(flags & NSAlphaShiftKeyMask) ? MOD_CAPS : 0 |
|
20
|
+
(flags & NSShiftKeyMask) ? MOD_SHIFT : 0 |
|
21
|
+
(flags & NSControlKeyMask) ? MOD_CONTROL : 0 |
|
22
|
+
(flags & NSAlternateKeyMask) ? MOD_OPTION : 0 |
|
23
|
+
(flags & NSCommandKeyMask) ? MOD_COMMAND : 0 |
|
24
|
+
(flags & NSNumericPadKeyMask) ? MOD_NUMPAD : 0 |
|
25
|
+
(flags & NSHelpKeyMask) ? MOD_HELP : 0 |
|
26
|
+
(flags & NSFunctionKeyMask) ? MOD_FUNCTION : 0;
|
19
27
|
}
|
20
28
|
|
21
|
-
static
|
22
|
-
|
29
|
+
static Point
|
30
|
+
get_pointer_position (NSEvent* e, NSView* view)
|
23
31
|
{
|
24
|
-
|
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;
|
32
|
+
assert(view);
|
91
33
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
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;
|
34
|
+
NSPoint p = [view convertPoint: e.locationInWindow fromView: nil];
|
35
|
+
p.y = view.bounds.size.height - p.y;
|
36
|
+
return Point(p.x, p.y);
|
37
|
+
}
|
140
38
|
|
141
|
-
case kVK_ISO_Section: return KEY_SECTION;
|
142
39
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
40
|
+
static const char*
|
41
|
+
get_chars (NSEvent* e)
|
42
|
+
{
|
43
|
+
NSString* chars = [e characters];//charactersIgnoringModifiers];
|
44
|
+
return [chars UTF8String];
|
45
|
+
}
|
149
46
|
|
150
|
-
|
47
|
+
NativeKeyEvent::NativeKeyEvent (NSEvent* e, Action action)
|
48
|
+
: KeyEvent(
|
49
|
+
action, get_chars(e), [e keyCode],
|
50
|
+
get_modifiers(e), [e isARepeat] ? 1 : 0)
|
51
|
+
{
|
151
52
|
}
|
152
53
|
|
54
|
+
|
153
55
|
static uint
|
154
56
|
get_modifier_flag_mask (const NSEvent* e)
|
155
57
|
{
|
@@ -180,6 +82,23 @@ namespace Reflex
|
|
180
82
|
: Reflex::KeyEvent::UP;
|
181
83
|
}
|
182
84
|
|
85
|
+
NativeFlagKeyEvent::NativeFlagKeyEvent (NSEvent* e)
|
86
|
+
: KeyEvent(
|
87
|
+
get_flag_key_event_action(e), "", [e keyCode],
|
88
|
+
get_modifiers(e), 0)
|
89
|
+
{
|
90
|
+
}
|
91
|
+
|
92
|
+
|
93
|
+
static bool
|
94
|
+
is_pointer_dragging (NSEvent* e)
|
95
|
+
{
|
96
|
+
return
|
97
|
+
[e type] == NSLeftMouseDragged ||
|
98
|
+
[e type] == NSRightMouseDragged ||
|
99
|
+
[e type] == NSOtherMouseDragged;
|
100
|
+
}
|
101
|
+
|
183
102
|
static uint
|
184
103
|
get_current_pointer_type ()
|
185
104
|
{
|
@@ -219,75 +138,18 @@ namespace Reflex
|
|
219
138
|
}
|
220
139
|
}
|
221
140
|
|
222
|
-
static uint
|
223
|
-
get_modifiers (const NSEvent* e)
|
224
|
-
{
|
225
|
-
NSUInteger flags = [e modifierFlags];
|
226
|
-
return
|
227
|
-
(flags & NSAlphaShiftKeyMask) ? MOD_CAPS : 0 |
|
228
|
-
(flags & NSShiftKeyMask) ? MOD_SHIFT : 0 |
|
229
|
-
(flags & NSControlKeyMask) ? MOD_CONTROL : 0 |
|
230
|
-
(flags & NSAlternateKeyMask) ? MOD_ALT : 0 |
|
231
|
-
(flags & NSCommandKeyMask) ? MOD_COMMAND : 0 |
|
232
|
-
(flags & NSNumericPadKeyMask) ? MOD_NUMPAD : 0 |
|
233
|
-
(flags & NSHelpKeyMask) ? MOD_HELP : 0 |
|
234
|
-
(flags & NSFunctionKeyMask) ? MOD_FUNCTION : 0;
|
235
|
-
}
|
236
|
-
|
237
|
-
static NSPoint
|
238
|
-
correct_point (NSView* view, const NSPoint& point)
|
239
|
-
{
|
240
|
-
assert(view);
|
241
|
-
NSPoint p = [view convertPoint: point fromView: nil];
|
242
|
-
p.y = [view bounds].size.height - p.y;
|
243
|
-
return p;
|
244
|
-
}
|
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
|
-
|
253
|
-
|
254
|
-
NativeKeyEvent::NativeKeyEvent (NSEvent* e, Action action)
|
255
|
-
: KeyEvent(
|
256
|
-
action, get_chars(e), get_code([e keyCode]),
|
257
|
-
get_modifiers(e), [e isARepeat] ? 1 : 0)
|
258
|
-
{
|
259
|
-
}
|
260
|
-
|
261
|
-
|
262
|
-
NativeFlagKeyEvent::NativeFlagKeyEvent (NSEvent* e)
|
263
|
-
: KeyEvent(
|
264
|
-
get_flag_key_event_action(e), "", get_code([e keyCode]),
|
265
|
-
get_modifiers(e), 0)
|
266
|
-
{
|
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
141
|
NativePointerEvent::NativePointerEvent (
|
280
|
-
NSEvent* event, NSView* view, Pointer::
|
142
|
+
NSEvent* event, NSView* view, Pointer::Action action)
|
281
143
|
{
|
282
144
|
bool dragging = is_pointer_dragging(event);
|
283
145
|
PointerEvent_add_pointer(this, Pointer(
|
284
|
-
|
146
|
+
0,
|
285
147
|
get_pointer_type(event),
|
286
148
|
action,
|
287
149
|
get_pointer_position(event, view),
|
288
150
|
get_modifiers(event),
|
289
151
|
dragging,
|
290
|
-
action == Pointer::MOVE && !dragging ? 0 : (uint)
|
152
|
+
action == Pointer::MOVE && !dragging ? 0 : (uint) event.clickCount,
|
291
153
|
0,
|
292
154
|
time()));
|
293
155
|
}
|
data/src/osx/native_window.mm
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
|
5
5
|
#include <assert.h>
|
6
6
|
#import <Cocoa/Cocoa.h>
|
7
|
+
#include <rays/rays.h>
|
7
8
|
#include "reflex/exception.h"
|
8
9
|
#include "../view.h"
|
9
10
|
#include "../pointer.h"
|
@@ -12,12 +13,6 @@
|
|
12
13
|
#import "opengl_view.h"
|
13
14
|
|
14
15
|
|
15
|
-
static const uint MOUSE_BUTTONS =
|
16
|
-
Reflex::Pointer::MOUSE_LEFT |
|
17
|
-
Reflex::Pointer::MOUSE_RIGHT |
|
18
|
-
Reflex::Pointer::MOUSE_MIDDLE;
|
19
|
-
|
20
|
-
|
21
16
|
static NSWindowStyleMask
|
22
17
|
default_style_mask ()
|
23
18
|
{
|
@@ -61,8 +56,6 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
61
56
|
OpenGLView* view;
|
62
57
|
NSTimer* timer;
|
63
58
|
int update_count;
|
64
|
-
Reflex::Pointer::ID pointer_id;
|
65
|
-
Reflex::Pointer prev_pointer;
|
66
59
|
}
|
67
60
|
|
68
61
|
- (id) init
|
@@ -74,12 +67,11 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
74
67
|
defer: NO];
|
75
68
|
if (!self) return nil;
|
76
69
|
|
77
|
-
pwindow
|
78
|
-
ptr_for_rebind
|
79
|
-
view
|
80
|
-
timer
|
81
|
-
update_count
|
82
|
-
pointer_id = 0;
|
70
|
+
pwindow =
|
71
|
+
ptr_for_rebind = NULL;
|
72
|
+
view = nil;
|
73
|
+
timer = nil;
|
74
|
+
update_count = 0;
|
83
75
|
|
84
76
|
[self setDelegate: self];
|
85
77
|
[self setupContentView];
|
@@ -92,8 +84,7 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
92
84
|
{
|
93
85
|
assert(!pwindow);
|
94
86
|
|
95
|
-
|
96
|
-
|
87
|
+
[self cleanupContentView];
|
97
88
|
[super dealloc];
|
98
89
|
}
|
99
90
|
|
@@ -156,6 +147,16 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
156
147
|
[self setContentView: view];
|
157
148
|
}
|
158
149
|
|
150
|
+
- (void) cleanupContentView
|
151
|
+
{
|
152
|
+
if (!view) return;
|
153
|
+
|
154
|
+
if (view.openGLContext == NSOpenGLContext.currentContext)
|
155
|
+
Rays::activate_offscreen_context();
|
156
|
+
|
157
|
+
[view release];
|
158
|
+
}
|
159
|
+
|
159
160
|
- (void) startTimer
|
160
161
|
{
|
161
162
|
[self startTimer: 60];
|
@@ -297,23 +298,22 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
297
298
|
win->self->prev_position = b.position();
|
298
299
|
win->self->prev_size = b.size();
|
299
300
|
|
300
|
-
if (dpos
|
301
|
+
if (dpos == 0 && dsize == 0) return;
|
302
|
+
|
303
|
+
Reflex::FrameEvent e(b, dpos.x, dpos.y, 0, dsize.x, dsize.y, 0);
|
304
|
+
if (dpos != 0) win->on_move(&e);
|
305
|
+
if (dsize != 0)
|
301
306
|
{
|
302
|
-
|
303
|
-
|
304
|
-
if (dsize != 0)
|
305
|
-
{
|
306
|
-
Rays::Bounds b = win->frame();
|
307
|
-
b.move_to(0, 0);
|
307
|
+
Rays::Bounds b = win->frame();
|
308
|
+
b.move_to(0, 0);
|
308
309
|
|
309
|
-
|
310
|
-
|
310
|
+
if (win->painter())
|
311
|
+
win->painter()->canvas(b, win->painter()->pixel_density());
|
311
312
|
|
312
|
-
|
313
|
-
|
313
|
+
if (win->root())
|
314
|
+
View_set_frame(win->root(), b);
|
314
315
|
|
315
|
-
|
316
|
-
}
|
316
|
+
win->on_resize(&e);
|
317
317
|
}
|
318
318
|
}
|
319
319
|
|
@@ -394,10 +394,7 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
394
394
|
Reflex::Window* win = self.window;
|
395
395
|
if (!win) return;
|
396
396
|
|
397
|
-
|
398
|
-
++pointer_id;
|
399
|
-
|
400
|
-
Reflex::NativePointerEvent e(event, view, pointer_id, Reflex::Pointer::DOWN);
|
397
|
+
Reflex::NativePointerEvent e(event, view, Reflex::Pointer::DOWN);
|
401
398
|
|
402
399
|
if (e[0].position().y < 0)
|
403
400
|
{
|
@@ -406,8 +403,6 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
406
403
|
return;
|
407
404
|
}
|
408
405
|
|
409
|
-
[self attachAndUpdatePastPointers: &e];
|
410
|
-
|
411
406
|
Window_call_pointer_event(win, &e);
|
412
407
|
}
|
413
408
|
|
@@ -416,15 +411,7 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
416
411
|
Reflex::Window* win = self.window;
|
417
412
|
if (!win) return;
|
418
413
|
|
419
|
-
Reflex::NativePointerEvent e(event, view,
|
420
|
-
[self attachAndUpdatePastPointers: &e];
|
421
|
-
|
422
|
-
if (prev_pointer && Reflex::Pointer_mask_flag(prev_pointer, MOUSE_BUTTONS) == 0)
|
423
|
-
{
|
424
|
-
++pointer_id;
|
425
|
-
Pointer_set_down(&prev_pointer, NULL);
|
426
|
-
}
|
427
|
-
|
414
|
+
Reflex::NativePointerEvent e(event, view, Reflex::Pointer::UP);
|
428
415
|
Window_call_pointer_event(win, &e);
|
429
416
|
}
|
430
417
|
|
@@ -433,9 +420,7 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
433
420
|
Reflex::Window* win = self.window;
|
434
421
|
if (!win) return;
|
435
422
|
|
436
|
-
Reflex::NativePointerEvent e(event, view,
|
437
|
-
[self attachAndUpdatePastPointers: &e];
|
438
|
-
|
423
|
+
Reflex::NativePointerEvent e(event, view, Reflex::Pointer::MOVE);
|
439
424
|
Window_call_pointer_event(win, &e);
|
440
425
|
}
|
441
426
|
|
@@ -444,46 +429,10 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
444
429
|
Reflex::Window* win = self.window;
|
445
430
|
if (!win) return;
|
446
431
|
|
447
|
-
Reflex::NativePointerEvent e(event, view,
|
448
|
-
[self attachAndUpdatePastPointers: &e];
|
449
|
-
|
432
|
+
Reflex::NativePointerEvent e(event, view, Reflex::Pointer::MOVE);
|
450
433
|
Window_call_pointer_event(win, &e);
|
451
434
|
}
|
452
435
|
|
453
|
-
- (void) attachAndUpdatePastPointers: (Reflex::PointerEvent*) e
|
454
|
-
{
|
455
|
-
using namespace Reflex;
|
456
|
-
|
457
|
-
assert(e->size() == 1);
|
458
|
-
|
459
|
-
Pointer& pointer = PointerEvent_pointer_at(e, 0);
|
460
|
-
|
461
|
-
if (prev_pointer)
|
462
|
-
{
|
463
|
-
Pointer_add_flag(&pointer, Pointer_mask_flag(prev_pointer, MOUSE_BUTTONS));
|
464
|
-
Reflex::Pointer_set_prev(&pointer, &prev_pointer);
|
465
|
-
}
|
466
|
-
|
467
|
-
switch (pointer.action())
|
468
|
-
{
|
469
|
-
case Pointer::DOWN:
|
470
|
-
Pointer_add_flag(&pointer, pointer.types());
|
471
|
-
break;
|
472
|
-
|
473
|
-
case Pointer::UP:
|
474
|
-
Pointer_remove_flag(&pointer, pointer.types());
|
475
|
-
break;
|
476
|
-
}
|
477
|
-
|
478
|
-
if (prev_pointer && prev_pointer.down())
|
479
|
-
Reflex::Pointer_set_down(&pointer, prev_pointer.down());
|
480
|
-
else if (pointer.action() == Reflex::Pointer::DOWN)
|
481
|
-
Reflex::Pointer_set_down(&pointer, &pointer);
|
482
|
-
|
483
|
-
prev_pointer = pointer;
|
484
|
-
Reflex::Pointer_set_prev(&prev_pointer, NULL);
|
485
|
-
}
|
486
|
-
|
487
436
|
- (void) scrollWheel: (NSEvent*) event
|
488
437
|
{
|
489
438
|
Reflex::Window* win = self.window;
|