reflexion 0.1.21 → 0.1.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.doc/ext/reflex/contact_event.cpp +6 -6
- data/.doc/ext/reflex/focus_event.cpp +6 -6
- data/.doc/ext/reflex/key_event.cpp +210 -12
- data/.doc/ext/reflex/pointer_event.cpp +21 -21
- data/VERSION +1 -1
- data/ext/reflex/contact_event.cpp +6 -6
- data/ext/reflex/focus_event.cpp +6 -6
- data/ext/reflex/key_event.cpp +211 -12
- data/ext/reflex/pointer_event.cpp +21 -21
- data/include/reflex/defs.h +143 -91
- 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 +5 -5
- 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_event.rb +12 -12
- 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 +5 -5
- data/lib/reflexion.rb +17 -17
- data/reflex.gemspec +4 -4
- data/samples/reflexion/noise.rb +1 -1
- data/samples/tree.rb +1 -1
- data/src/ios/window.mm +1 -1
- data/src/osx/event.h +8 -0
- data/src/osx/event.mm +173 -1
- data/src/osx/native_window.mm +5 -1
- data/src/view.cpp +38 -10
- data/src/window.cpp +1 -1
- 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 +2 -2
- data/test/test_has_frame.rb +11 -11
- data/test/test_pointer_event.rb +13 -13
- data/test/test_reflex.rb +1 -1
- data/test/test_selector.rb +8 -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 +30 -30
- data/test/test_window.rb +10 -10
- metadata +10 -10
data/lib/reflexion.rb
CHANGED
@@ -18,7 +18,7 @@ module Reflexion
|
|
18
18
|
}
|
19
19
|
|
20
20
|
|
21
|
-
def call_event
|
21
|
+
def call_event(event, *args, &block)
|
22
22
|
$event = event
|
23
23
|
Xot::BlockUtil.instance_eval_or_block_call *args, &block if block
|
24
24
|
$event = nil
|
@@ -27,7 +27,7 @@ module Reflexion
|
|
27
27
|
|
28
28
|
class App < Application
|
29
29
|
|
30
|
-
def on_motion
|
30
|
+
def on_motion(e)
|
31
31
|
super
|
32
32
|
call_event e, e, &$motion
|
33
33
|
end
|
@@ -39,29 +39,29 @@ module Reflexion
|
|
39
39
|
|
40
40
|
attr_reader :event
|
41
41
|
|
42
|
-
def initialize
|
42
|
+
def initialize(*args, &block)
|
43
43
|
super
|
44
44
|
$window = self
|
45
45
|
call_event nil, self, &$setup
|
46
46
|
end
|
47
47
|
|
48
|
-
def on_update
|
48
|
+
def on_update(e)
|
49
49
|
super
|
50
50
|
redraw
|
51
51
|
call_event e, e, &$update
|
52
52
|
end
|
53
53
|
|
54
|
-
def on_draw
|
54
|
+
def on_draw(e)
|
55
55
|
super
|
56
56
|
call_event e, e.painter, &$draw
|
57
57
|
end
|
58
58
|
|
59
|
-
def on_key
|
59
|
+
def on_key(e)
|
60
60
|
super
|
61
61
|
call_event e, e, &$key
|
62
62
|
end
|
63
63
|
|
64
|
-
def on_pointer
|
64
|
+
def on_pointer(e)
|
65
65
|
super
|
66
66
|
call_event e, e, &$pointer
|
67
67
|
end
|
@@ -71,43 +71,43 @@ module Reflexion
|
|
71
71
|
|
72
72
|
module_function
|
73
73
|
|
74
|
-
def window
|
74
|
+
def window()
|
75
75
|
$window ||= MainWindow.new DEFAULTS
|
76
76
|
end
|
77
77
|
|
78
|
-
def event
|
78
|
+
def event()
|
79
79
|
$event
|
80
80
|
end
|
81
81
|
|
82
|
-
def setup
|
82
|
+
def setup(&block)
|
83
83
|
$setup = block
|
84
84
|
end
|
85
85
|
|
86
|
-
def update
|
86
|
+
def update(&block)
|
87
87
|
$update = block
|
88
88
|
end
|
89
89
|
|
90
|
-
def draw
|
90
|
+
def draw(&block)
|
91
91
|
$draw = block
|
92
92
|
end
|
93
93
|
|
94
|
-
def key
|
94
|
+
def key(&block)
|
95
95
|
$key = block
|
96
96
|
end
|
97
97
|
|
98
|
-
def pointer
|
98
|
+
def pointer(&block)
|
99
99
|
$pointer = block
|
100
100
|
end
|
101
101
|
|
102
|
-
def motion
|
102
|
+
def motion(&block)
|
103
103
|
$motion = block
|
104
104
|
end
|
105
105
|
|
106
|
-
def start
|
106
|
+
def start()
|
107
107
|
App.new {window.show}.start
|
108
108
|
end
|
109
109
|
|
110
|
-
def quit
|
110
|
+
def quit()
|
111
111
|
window.close
|
112
112
|
end
|
113
113
|
|
data/reflex.gemspec
CHANGED
@@ -28,10 +28,10 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.platform = Gem::Platform::RUBY
|
29
29
|
s.required_ruby_version = '~> 2'
|
30
30
|
|
31
|
-
s.add_runtime_dependency 'xot', '~> 0.1.
|
32
|
-
s.add_runtime_dependency 'rucy', '~> 0.1.
|
33
|
-
s.add_runtime_dependency 'beeps', '~> 0.1.
|
34
|
-
s.add_runtime_dependency 'rays', '~> 0.1.
|
31
|
+
s.add_runtime_dependency 'xot', '~> 0.1.22'
|
32
|
+
s.add_runtime_dependency 'rucy', '~> 0.1.22'
|
33
|
+
s.add_runtime_dependency 'beeps', '~> 0.1.22'
|
34
|
+
s.add_runtime_dependency 'rays', '~> 0.1.22'
|
35
35
|
|
36
36
|
s.files = `git ls-files`.split $/
|
37
37
|
s.executables = s.files.grep(%r{^bin/}) {|f| File.basename f}
|
data/samples/reflexion/noise.rb
CHANGED
data/samples/tree.rb
CHANGED
data/src/ios/window.mm
CHANGED
data/src/osx/event.h
CHANGED
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,6 +18,168 @@ 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
|
{
|
@@ -81,7 +244,16 @@ namespace Reflex
|
|
81
244
|
|
82
245
|
NativeKeyEvent::NativeKeyEvent (NSEvent* e, Type type)
|
83
246
|
: KeyEvent(
|
84
|
-
type, get_chars(e), [e keyCode], get_modifiers(e),
|
247
|
+
type, get_chars(e), get_code([e keyCode]), get_modifiers(e),
|
248
|
+
[e isARepeat] ? 1 : 0)
|
249
|
+
{
|
250
|
+
}
|
251
|
+
|
252
|
+
|
253
|
+
NativeFlagKeyEvent::NativeFlagKeyEvent (NSEvent* e)
|
254
|
+
: KeyEvent(
|
255
|
+
get_flag_key_event_type(e), "", get_code([e keyCode]), get_modifiers(e),
|
256
|
+
0)
|
85
257
|
{
|
86
258
|
}
|
87
259
|
|
data/src/osx/native_window.mm
CHANGED
@@ -280,7 +280,11 @@ static const NSUInteger WINDOW_STYLE_MASK =
|
|
280
280
|
|
281
281
|
- (void) flagsChanged: (NSEvent*) event
|
282
282
|
{
|
283
|
-
|
283
|
+
Reflex::Window* win = self.window;
|
284
|
+
if (!win) return;
|
285
|
+
|
286
|
+
Reflex::NativeFlagKeyEvent e(event);
|
287
|
+
win->on_key(&e);
|
284
288
|
}
|
285
289
|
|
286
290
|
- (void) mouseDown: (NSEvent*) event
|
data/src/view.cpp
CHANGED
@@ -1279,6 +1279,24 @@ namespace Reflex
|
|
1279
1279
|
}
|
1280
1280
|
}
|
1281
1281
|
|
1282
|
+
static void
|
1283
|
+
scroll_and_zoom_positions (PointerEvent* e, const Point* scroll, float zoom)
|
1284
|
+
{
|
1285
|
+
static const Point ZERO = 0;
|
1286
|
+
|
1287
|
+
assert(zoom != 0);
|
1288
|
+
|
1289
|
+
if (!scroll) scroll = &ZERO;
|
1290
|
+
if (*scroll == 0 && zoom == 1)
|
1291
|
+
return;
|
1292
|
+
|
1293
|
+
for (size_t i = 0; i < e->size; ++i)
|
1294
|
+
{
|
1295
|
+
e->position(i) -= *scroll;
|
1296
|
+
e->position(i) /= zoom;
|
1297
|
+
}
|
1298
|
+
}
|
1299
|
+
|
1282
1300
|
void
|
1283
1301
|
View_call_pointer_event (View* view, const PointerEvent& event)
|
1284
1302
|
{
|
@@ -1288,14 +1306,14 @@ namespace Reflex
|
|
1288
1306
|
bool capturing = view->capture() & View::CAPTURE_POINTER;
|
1289
1307
|
if (capturing != event.capture) return;
|
1290
1308
|
|
1291
|
-
const Bounds& frame = view->frame();
|
1292
|
-
|
1293
1309
|
PointerEvent e = event;
|
1294
|
-
filter_pointer_event(&e, event, frame);
|
1310
|
+
filter_pointer_event(&e, event, view->frame());
|
1295
1311
|
|
1296
1312
|
if (!capturing && e.size == 0)
|
1297
1313
|
return;
|
1298
1314
|
|
1315
|
+
scroll_and_zoom_positions(&e, view->self->pscroll.get(), view->zoom());
|
1316
|
+
|
1299
1317
|
view->on_pointer(&e);
|
1300
1318
|
|
1301
1319
|
switch (e.type)
|
@@ -1989,18 +2007,23 @@ namespace Reflex
|
|
1989
2007
|
void
|
1990
2008
|
View::scroll_to (coord x, coord y, coord z)
|
1991
2009
|
{
|
1992
|
-
Point
|
1993
|
-
self->scroll().reset(x, y, z);
|
1994
|
-
ScrollEvent e(x, y, z, x - old.x, y - old.y, z - old.z);
|
1995
|
-
on_scroll(&e);
|
1996
|
-
|
1997
|
-
redraw();
|
2010
|
+
scroll_to(Point(x, y, z));
|
1998
2011
|
}
|
1999
2012
|
|
2000
2013
|
void
|
2001
2014
|
View::scroll_to (const Point& scroll)
|
2002
2015
|
{
|
2003
|
-
|
2016
|
+
if (scroll == this->scroll()) return;
|
2017
|
+
|
2018
|
+
Point old = self->scroll();
|
2019
|
+
self->scroll() = scroll;
|
2020
|
+
|
2021
|
+
ScrollEvent e(
|
2022
|
+
scroll.x, scroll.y, scroll.z,
|
2023
|
+
scroll.x - old.x, scroll.y - old.y, scroll.z - old.z);
|
2024
|
+
on_scroll(&e);
|
2025
|
+
|
2026
|
+
redraw();
|
2004
2027
|
}
|
2005
2028
|
|
2006
2029
|
void
|
@@ -2028,6 +2051,11 @@ namespace Reflex
|
|
2028
2051
|
void
|
2029
2052
|
View::set_zoom (float zoom)
|
2030
2053
|
{
|
2054
|
+
if (zoom == self->zoom) return;
|
2055
|
+
|
2056
|
+
if (zoom == 0)
|
2057
|
+
argument_error(__FILE__, __LINE__);
|
2058
|
+
|
2031
2059
|
self->zoom = zoom;
|
2032
2060
|
redraw();
|
2033
2061
|
}
|