reflexion 0.3.3 → 0.3.4
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/ChangeLog.md +9 -0
- data/VERSION +1 -1
- data/include/reflex/view.h +10 -10
- data/lib/reflex/application.rb +2 -2
- data/lib/reflex/helper.rb +0 -12
- data/lib/reflex/shape.rb +2 -1
- data/lib/reflex/view.rb +10 -3
- data/lib/reflex/window.rb +2 -1
- data/reflex.gemspec +3 -3
- data/src/body.cpp +15 -5
- data/src/ios/view_controller.mm +1 -7
- data/src/osx/native_window.mm +1 -7
- data/src/view.cpp +4 -2
- data/src/win32/window.cpp +1 -7
- data/src/window.cpp +69 -34
- data/src/window.h +3 -1
- data/test/test_view.rb +51 -0
- metadata +14 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92e1368f44fafa2ab8966bfec25f93af411b68a72eaf3f127bc6b95b97ba2fed
|
4
|
+
data.tar.gz: 6efaa218301242d6c4fea24062f9fd9d74f405e46a347eac1b231d6fe08a16c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3886ea311fccd85da0e7e3868771d61d32f10fd091612bf306df041dbbe2cf30490e3e6a5fa9cdc049e6cf41f3b8e090ea7af950753dff81db95548ffcb7df99
|
7
|
+
data.tar.gz: 1704f273a82ebd9b8272e7358c6936b81171a969ad1a6f085ad641dc0f833dfeb5b97d4f5cf71e80be8d00d9b7bdbc5cb4bdba9d2c9e1228ebb6b995e7903444
|
data/ChangeLog.md
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
# reflex ChangeLog
|
2
2
|
|
3
3
|
|
4
|
+
## [v0.3.4] - 2025-03-07
|
5
|
+
|
6
|
+
- Captured key and pointer events can be blocked before being sent to the window and views
|
7
|
+
- Apply pixel<->meter scale to linear velocity and linear damping
|
8
|
+
- Call awake() after moving the view
|
9
|
+
|
10
|
+
- Fix an issue where capturing keys do not work
|
11
|
+
|
12
|
+
|
4
13
|
## [v0.3.3] - 2025-01-23
|
5
14
|
|
6
15
|
- Remove dependence on the beeps library
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.4
|
data/include/reflex/view.h
CHANGED
@@ -59,30 +59,30 @@ namespace Reflex
|
|
59
59
|
enum Flag
|
60
60
|
{
|
61
61
|
|
62
|
-
FLAG_CLIP
|
62
|
+
FLAG_CLIP = Xot::bit(0),
|
63
63
|
|
64
|
-
FLAG_CACHE
|
64
|
+
FLAG_CACHE = Xot::bit(1),
|
65
65
|
|
66
|
-
FLAG_RESIZE_TO_FIT
|
66
|
+
FLAG_RESIZE_TO_FIT = Xot::bit(2),
|
67
67
|
|
68
|
-
FLAG_SCROLL_TO_FIT
|
68
|
+
FLAG_SCROLL_TO_FIT = Xot::bit(3),
|
69
69
|
|
70
|
-
FLAG_FIX_ANGLE
|
70
|
+
FLAG_FIX_ANGLE = Xot::bit(4),
|
71
71
|
|
72
|
-
FLAG_LAST
|
72
|
+
FLAG_LAST = FLAG_FIX_ANGLE
|
73
73
|
|
74
74
|
};// Flag
|
75
75
|
|
76
76
|
enum Capture
|
77
77
|
{
|
78
78
|
|
79
|
-
CAPTURE_NONE
|
79
|
+
CAPTURE_NONE = 0,
|
80
80
|
|
81
|
-
CAPTURE_KEY
|
81
|
+
CAPTURE_KEY = Xot::bit(0),
|
82
82
|
|
83
|
-
CAPTURE_POINTER
|
83
|
+
CAPTURE_POINTER = Xot::bit(1),
|
84
84
|
|
85
|
-
CAPTURE_ALL
|
85
|
+
CAPTURE_ALL = CAPTURE_KEY | CAPTURE_POINTER,
|
86
86
|
|
87
87
|
};// Capture
|
88
88
|
|
data/lib/reflex/application.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'xot/setter'
|
2
2
|
require 'xot/universal_accessor'
|
3
|
+
require 'xot/hookable'
|
3
4
|
require 'xot/block_util'
|
4
5
|
require 'xot/inspectable'
|
5
6
|
require 'reflex/ext'
|
6
|
-
require 'reflex/helper'
|
7
7
|
|
8
8
|
|
9
9
|
module Reflex
|
@@ -12,8 +12,8 @@ module Reflex
|
|
12
12
|
class Application
|
13
13
|
|
14
14
|
include Xot::Setter
|
15
|
+
include Xot::Hookable
|
15
16
|
include Xot::Inspectable
|
16
|
-
include Hookable
|
17
17
|
|
18
18
|
universal_accessor :name
|
19
19
|
|
data/lib/reflex/helper.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'xot/hookable'
|
2
1
|
require 'xot/universal_accessor'
|
3
2
|
require 'reflex/point'
|
4
3
|
require 'reflex/bounds'
|
@@ -7,17 +6,6 @@ require 'reflex/bounds'
|
|
7
6
|
module Reflex
|
8
7
|
|
9
8
|
|
10
|
-
module Hookable
|
11
|
-
|
12
|
-
include Xot::Hookable
|
13
|
-
|
14
|
-
def hook(name, &block)
|
15
|
-
super "on_#{name}".intern, &block
|
16
|
-
end
|
17
|
-
|
18
|
-
end# Hookable
|
19
|
-
|
20
|
-
|
21
9
|
module HasFrame
|
22
10
|
|
23
11
|
def move_to(*args)
|
data/lib/reflex/shape.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'xot/setter'
|
2
2
|
require 'xot/universal_accessor'
|
3
|
+
require 'xot/hookable'
|
3
4
|
require 'xot/block_util'
|
4
5
|
require 'reflex/ext'
|
5
6
|
require 'reflex/helper'
|
@@ -11,7 +12,7 @@ module Reflex
|
|
11
12
|
class Shape
|
12
13
|
|
13
14
|
include Xot::Setter
|
14
|
-
include Hookable
|
15
|
+
include Xot::Hookable
|
15
16
|
include HasFrame
|
16
17
|
include HasTags
|
17
18
|
|
data/lib/reflex/view.rb
CHANGED
@@ -2,6 +2,7 @@ require 'forwardable'
|
|
2
2
|
require 'xot/setter'
|
3
3
|
require 'xot/bit_flag_accessor'
|
4
4
|
require 'xot/universal_accessor'
|
5
|
+
require 'xot/hookable'
|
5
6
|
require 'xot/block_util'
|
6
7
|
require 'reflex/ext'
|
7
8
|
require 'reflex/selector'
|
@@ -16,7 +17,7 @@ module Reflex
|
|
16
17
|
class View
|
17
18
|
|
18
19
|
include Xot::Setter
|
19
|
-
include Hookable
|
20
|
+
include Xot::Hookable
|
20
21
|
include HasFrame
|
21
22
|
include HasTags
|
22
23
|
|
@@ -98,8 +99,14 @@ module Reflex
|
|
98
99
|
end
|
99
100
|
|
100
101
|
def capturing?(*args)
|
101
|
-
cap = capture
|
102
|
-
args.
|
102
|
+
args, cap = args.flatten, capture
|
103
|
+
if args.empty?
|
104
|
+
not cap.empty?
|
105
|
+
elsif args.include?(:all)
|
106
|
+
cap == [:key, :pointer]
|
107
|
+
else
|
108
|
+
args.all? {|type| cap.include? type}
|
109
|
+
end
|
103
110
|
end
|
104
111
|
|
105
112
|
def on_contact(e)
|
data/lib/reflex/window.rb
CHANGED
@@ -2,6 +2,7 @@ require 'forwardable'
|
|
2
2
|
require 'xot/setter'
|
3
3
|
require 'xot/bit_flag_accessor'
|
4
4
|
require 'xot/universal_accessor'
|
5
|
+
require 'xot/hookable'
|
5
6
|
require 'xot/block_util'
|
6
7
|
require 'xot/inspectable'
|
7
8
|
require 'reflex/ext'
|
@@ -14,8 +15,8 @@ module Reflex
|
|
14
15
|
class Window
|
15
16
|
|
16
17
|
include Xot::Setter
|
18
|
+
include Xot::Hookable
|
17
19
|
include Xot::Inspectable
|
18
|
-
include Hookable
|
19
20
|
include HasFrame
|
20
21
|
|
21
22
|
extend Forwardable
|
data/reflex.gemspec
CHANGED
@@ -25,9 +25,9 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.platform = Gem::Platform::RUBY
|
26
26
|
s.required_ruby_version = '>= 3.0.0'
|
27
27
|
|
28
|
-
s.add_dependency 'xot', '~> 0.3.
|
29
|
-
s.add_dependency 'rucy', '~> 0.3.
|
30
|
-
s.add_dependency 'rays', '~> 0.3.
|
28
|
+
s.add_dependency 'xot', '~> 0.3.4', '>= 0.3.4'
|
29
|
+
s.add_dependency 'rucy', '~> 0.3.4', '>= 0.3.4'
|
30
|
+
s.add_dependency 'rays', '~> 0.3.4', '>= 0.3.4'
|
31
31
|
|
32
32
|
s.files = `git ls-files`.split $/
|
33
33
|
s.executables = s.files.grep(%r{^bin/}) {|f| File.basename f}
|
data/src/body.cpp
CHANGED
@@ -291,9 +291,7 @@ namespace Reflex
|
|
291
291
|
assert(b2to && b2from);
|
292
292
|
|
293
293
|
b2to->SetType( b2from->GetType());
|
294
|
-
b2to->SetLinearVelocity( b2from->GetLinearVelocity());
|
295
294
|
b2to->SetAngularVelocity(b2from->GetAngularVelocity());
|
296
|
-
b2to->SetLinearDamping( b2from->GetLinearDamping());
|
297
295
|
b2to->SetAngularDamping( b2from->GetAngularDamping());
|
298
296
|
b2to->SetGravityScale( b2from->GetGravityScale());
|
299
297
|
b2to->SetBullet( b2from->IsBullet());
|
@@ -301,12 +299,24 @@ namespace Reflex
|
|
301
299
|
float ppm_to = to->self->ppm;
|
302
300
|
float ppm_from = from.self->ppm;
|
303
301
|
if (ppm_to == ppm_from)
|
304
|
-
|
302
|
+
{
|
303
|
+
b2to->SetTransform( b2from->GetPosition(),
|
304
|
+
b2from->GetAngle());
|
305
|
+
b2to->SetLinearVelocity(b2from->GetLinearVelocity());
|
306
|
+
b2to->SetLinearDamping( b2from->GetLinearDamping());
|
307
|
+
}
|
305
308
|
else
|
306
309
|
{
|
307
|
-
|
308
|
-
pos
|
310
|
+
float scale = ppm_from / ppm_to;
|
311
|
+
auto pos = b2from->GetPosition();
|
312
|
+
auto vel = b2from->GetLinearVelocity();
|
313
|
+
auto damp = b2from->GetLinearDamping();
|
314
|
+
pos *= scale;
|
315
|
+
vel *= scale;
|
316
|
+
damp *= scale;
|
309
317
|
b2to->SetTransform(pos, b2from->GetAngle());
|
318
|
+
b2to->SetLinearVelocity(vel);
|
319
|
+
b2to->SetLinearDamping(damp);
|
310
320
|
}
|
311
321
|
}
|
312
322
|
|
data/src/ios/view_controller.mm
CHANGED
@@ -369,13 +369,7 @@ ReflexViewController_get_show_fun ()
|
|
369
369
|
|
370
370
|
++update_count;
|
371
371
|
|
372
|
-
|
373
|
-
Reflex::UpdateEvent e(now, now - win->self->prev_time_update);
|
374
|
-
win->self->prev_time_update = now;
|
375
|
-
|
376
|
-
win->on_update(&e);
|
377
|
-
if (!e.is_blocked())
|
378
|
-
Reflex::View_update_tree(win->root(), e);
|
372
|
+
Window_call_update_event(win);
|
379
373
|
|
380
374
|
if (win->self->redraw)
|
381
375
|
{
|
data/src/osx/native_window.mm
CHANGED
@@ -201,13 +201,7 @@ move_to_main_screen_origin (NativeWindow* window)
|
|
201
201
|
|
202
202
|
++update_count;
|
203
203
|
|
204
|
-
|
205
|
-
Reflex::UpdateEvent e(now, now - win->self->prev_time_update);
|
206
|
-
win->self->prev_time_update = now;
|
207
|
-
|
208
|
-
win->on_update(&e);
|
209
|
-
if (!e.is_blocked())
|
210
|
-
Reflex::View_update_tree(win->root(), e);
|
204
|
+
Window_call_update_event(win);
|
211
205
|
|
212
206
|
if (win->self->redraw)
|
213
207
|
{
|
data/src/view.cpp
CHANGED
@@ -235,6 +235,8 @@ namespace Reflex
|
|
235
235
|
}
|
236
236
|
else
|
237
237
|
pbody->set_transform(frame.x, frame.y, angle);
|
238
|
+
|
239
|
+
pbody->awake();
|
238
240
|
}
|
239
241
|
|
240
242
|
void update_body_states ()
|
@@ -2295,9 +2297,9 @@ namespace Reflex
|
|
2295
2297
|
bool capture = types != CAPTURE_NONE;
|
2296
2298
|
|
2297
2299
|
if (capture && !registered)
|
2298
|
-
Window_register_capture(w, this,
|
2300
|
+
Window_register_capture(w, this, CAPTURE_ALL_EVENTS);
|
2299
2301
|
else if (!capture && registered)
|
2300
|
-
Window_unregister_capture(w, this,
|
2302
|
+
Window_unregister_capture(w, this, CAPTURE_ALL_EVENTS);
|
2301
2303
|
|
2302
2304
|
CaptureEvent e(~old & types, old & ~types);
|
2303
2305
|
on_capture(&e);
|
data/src/win32/window.cpp
CHANGED
@@ -154,13 +154,7 @@ namespace Reflex
|
|
154
154
|
{
|
155
155
|
WindowData* self = get_data(win);
|
156
156
|
|
157
|
-
|
158
|
-
Reflex::UpdateEvent e(now, now - self->prev_time_update);
|
159
|
-
self->prev_time_update = now;
|
160
|
-
|
161
|
-
win->on_update(&e);
|
162
|
-
if (!e.is_blocked())
|
163
|
-
Reflex::View_update_tree(win->root(), e);
|
157
|
+
Window_call_update_event(win);
|
164
158
|
|
165
159
|
if (self->redraw)
|
166
160
|
{
|
data/src/window.cpp
CHANGED
@@ -129,7 +129,7 @@ namespace Reflex
|
|
129
129
|
return;
|
130
130
|
|
131
131
|
targets.insert(
|
132
|
-
target ==
|
132
|
+
target == CAPTURE_ALL_EVENTS ? targets.begin() : targets.end(),
|
133
133
|
target);
|
134
134
|
}
|
135
135
|
|
@@ -163,23 +163,38 @@ namespace Reflex
|
|
163
163
|
}
|
164
164
|
|
165
165
|
void
|
166
|
-
Window_call_activate_event (
|
166
|
+
Window_call_activate_event (Window* window)
|
167
167
|
{
|
168
168
|
if (!window) return;
|
169
169
|
|
170
|
-
|
170
|
+
Event e;
|
171
171
|
window->on_activate(&e);
|
172
172
|
}
|
173
173
|
|
174
174
|
void
|
175
|
-
Window_call_deactivate_event (
|
175
|
+
Window_call_deactivate_event (Window* window)
|
176
176
|
{
|
177
177
|
if (!window) return;
|
178
178
|
|
179
|
-
|
179
|
+
Event e;
|
180
180
|
window->on_deactivate(&e);
|
181
181
|
}
|
182
182
|
|
183
|
+
void
|
184
|
+
Window_call_update_event (Window* window)
|
185
|
+
{
|
186
|
+
Window::Data* self = window->self.get();
|
187
|
+
|
188
|
+
double now = Xot::time();
|
189
|
+
UpdateEvent e(now, now - self->prev_time_update);
|
190
|
+
self->prev_time_update = now;
|
191
|
+
|
192
|
+
window->on_update(&e);
|
193
|
+
if (e.is_blocked()) return;
|
194
|
+
|
195
|
+
View_update_tree(window->root(), e);
|
196
|
+
}
|
197
|
+
|
183
198
|
void
|
184
199
|
Window_call_draw_event (Window* window, DrawEvent* event)
|
185
200
|
{
|
@@ -203,19 +218,19 @@ namespace Reflex
|
|
203
218
|
|
204
219
|
window->on_draw(event);
|
205
220
|
if (!event->is_blocked())
|
206
|
-
|
221
|
+
View_draw_tree(window->root(), event, 0, frame.move_to(0));
|
207
222
|
|
208
223
|
painter->pop_state();
|
209
224
|
painter->end();
|
210
225
|
}
|
211
226
|
|
212
227
|
static bool
|
213
|
-
|
228
|
+
is_capturing (
|
214
229
|
const View* view, const CaptureTargetIDList& targets, View::Capture type)
|
215
230
|
{
|
216
231
|
return
|
217
232
|
!targets.empty() &&
|
218
|
-
targets[0] ==
|
233
|
+
targets[0] == CAPTURE_ALL_EVENTS &&
|
219
234
|
(view->capture() & type) == type;
|
220
235
|
}
|
221
236
|
|
@@ -227,20 +242,11 @@ namespace Reflex
|
|
227
242
|
if (!event)
|
228
243
|
argument_error(__FILE__, __LINE__);
|
229
244
|
|
230
|
-
window->on_key(event);
|
231
|
-
|
232
|
-
switch (event->action())
|
233
|
-
{
|
234
|
-
case KeyEvent::DOWN: window->on_key_down(event); break;
|
235
|
-
case KeyEvent::UP: window->on_key_up(event); break;
|
236
|
-
default: break;
|
237
|
-
}
|
238
|
-
|
239
245
|
for (auto& [view, targets] : window->self->captures)
|
240
246
|
{
|
241
247
|
if (
|
242
248
|
!view->window() ||
|
243
|
-
!
|
249
|
+
!is_capturing(view.get(), targets, View::CAPTURE_KEY))
|
244
250
|
{
|
245
251
|
continue;
|
246
252
|
}
|
@@ -248,9 +254,24 @@ namespace Reflex
|
|
248
254
|
KeyEvent e = event->dup();
|
249
255
|
KeyEvent_set_captured(&e, true);
|
250
256
|
View_call_key_event(const_cast<View*>(view.get()), &e);
|
257
|
+
|
258
|
+
if (e.is_blocked()) event->block();
|
251
259
|
}
|
252
260
|
|
253
|
-
if (
|
261
|
+
if (!event->is_blocked())
|
262
|
+
window->on_key(event);
|
263
|
+
|
264
|
+
if (!event->is_blocked())
|
265
|
+
{
|
266
|
+
switch (event->action())
|
267
|
+
{
|
268
|
+
case KeyEvent::DOWN: window->on_key_down(event); break;
|
269
|
+
case KeyEvent::UP: window->on_key_up(event); break;
|
270
|
+
default: break;
|
271
|
+
}
|
272
|
+
}
|
273
|
+
|
274
|
+
if (!event->is_blocked() && window->self->focus)
|
254
275
|
View_call_key_event(window->self->focus.get(), event);
|
255
276
|
|
256
277
|
cleanup_captures(window);
|
@@ -367,7 +388,7 @@ namespace Reflex
|
|
367
388
|
result->clear();
|
368
389
|
for (const auto& [view, targets] : window->self->captures)
|
369
390
|
{
|
370
|
-
if (
|
391
|
+
if (is_capturing(view.get(), targets, View::CAPTURE_POINTER))
|
371
392
|
result->emplace_back(view);
|
372
393
|
}
|
373
394
|
}
|
@@ -416,7 +437,7 @@ namespace Reflex
|
|
416
437
|
|
417
438
|
static void
|
418
439
|
capture_targeted_pointers_and_call_events (
|
419
|
-
ExtractedPointerIDSet* extracteds,
|
440
|
+
ExtractedPointerIDSet* extracteds, bool* blocked,
|
420
441
|
Window* window, const PointerMap& pointers)
|
421
442
|
{
|
422
443
|
for (auto& [view, targets] : window->self->captures)
|
@@ -430,6 +451,8 @@ namespace Reflex
|
|
430
451
|
|
431
452
|
PointerEvent_update_for_capturing_view(&event, view);
|
432
453
|
View_call_pointer_event(const_cast<View*>(view.get()), &event);
|
454
|
+
|
455
|
+
if (event.is_blocked()) *blocked = true;
|
433
456
|
}
|
434
457
|
}
|
435
458
|
|
@@ -451,7 +474,7 @@ namespace Reflex
|
|
451
474
|
|
452
475
|
static void
|
453
476
|
capture_hovering_pointers_and_call_events (
|
454
|
-
ExtractedPointerIDSet* extracteds,
|
477
|
+
ExtractedPointerIDSet* extracteds, bool* blocked,
|
455
478
|
const ViewList& views_capturing_all, const PointerMap& pointers)
|
456
479
|
{
|
457
480
|
assert(extracteds);
|
@@ -470,6 +493,8 @@ namespace Reflex
|
|
470
493
|
PointerEvent e = event.dup();
|
471
494
|
PointerEvent_update_for_capturing_view(&e, view);
|
472
495
|
View_call_pointer_event(const_cast<View*>(view.get()), &e);
|
496
|
+
|
497
|
+
if (e.is_blocked()) *blocked = true;
|
473
498
|
}
|
474
499
|
}
|
475
500
|
|
@@ -512,11 +537,17 @@ namespace Reflex
|
|
512
537
|
});
|
513
538
|
|
514
539
|
ExtractedPointerIDSet extracteds;
|
515
|
-
|
540
|
+
bool blocked = false;
|
541
|
+
|
542
|
+
capture_targeted_pointers_and_call_events(
|
543
|
+
&extracteds, &blocked, window, pointers);
|
516
544
|
erase_extracted_pointers(&pointers, extracteds);
|
517
545
|
|
518
|
-
capture_hovering_pointers_and_call_events(
|
546
|
+
capture_hovering_pointers_and_call_events(
|
547
|
+
&extracteds, &blocked, views_capturing_all, pointers);
|
519
548
|
erase_extracted_pointers(event, extracteds);
|
549
|
+
|
550
|
+
if (blocked) event->block();
|
520
551
|
}
|
521
552
|
|
522
553
|
void
|
@@ -529,20 +560,24 @@ namespace Reflex
|
|
529
560
|
|
530
561
|
setup_pointer_event(window, event);
|
531
562
|
|
532
|
-
window
|
563
|
+
call_captured_pointer_events(window, event);
|
564
|
+
|
565
|
+
if (!event->is_blocked() && !event->empty())
|
566
|
+
window->on_pointer(event);
|
533
567
|
|
534
|
-
|
568
|
+
if (!event->is_blocked() && !event->empty())
|
535
569
|
{
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
570
|
+
switch ((*event)[0].action())
|
571
|
+
{
|
572
|
+
case Pointer::DOWN: window->on_pointer_down(event); break;
|
573
|
+
case Pointer::UP: window->on_pointer_up(event); break;
|
574
|
+
case Pointer::MOVE: window->on_pointer_move(event); break;
|
575
|
+
case Pointer::CANCEL: window->on_pointer_cancel(event); break;
|
576
|
+
default: break;
|
577
|
+
}
|
541
578
|
}
|
542
579
|
|
543
|
-
|
544
|
-
|
545
|
-
if (!event->empty())
|
580
|
+
if (!event->is_blocked() && !event->empty())
|
546
581
|
{
|
547
582
|
PointerEvent_update_for_child_view(event, window->root());
|
548
583
|
View_call_pointer_event(window->root(), event);
|
data/src/window.h
CHANGED
@@ -23,7 +23,7 @@ namespace Reflex
|
|
23
23
|
typedef std::list<Pointer> PointerList;
|
24
24
|
|
25
25
|
|
26
|
-
enum {
|
26
|
+
enum {CAPTURE_ALL_EVENTS = INT_MAX};
|
27
27
|
|
28
28
|
|
29
29
|
struct Window::Data
|
@@ -120,6 +120,8 @@ namespace Reflex
|
|
120
120
|
|
121
121
|
void Window_call_deactivate_event (Window* window);
|
122
122
|
|
123
|
+
void Window_call_update_event (Window* window);
|
124
|
+
|
123
125
|
void Window_call_draw_event (Window* window, DrawEvent* event);
|
124
126
|
|
125
127
|
void Window_call_key_event (Window* window, KeyEvent* event);
|
data/test/test_view.rb
CHANGED
@@ -373,6 +373,57 @@ class TestView < Test::Unit::TestCase
|
|
373
373
|
assert_raise(ArgumentError) {v.scroll_by 100}
|
374
374
|
end
|
375
375
|
|
376
|
+
def test_capture()
|
377
|
+
v, w = view, window
|
378
|
+
w.add v
|
379
|
+
assert_equal [], v.capture
|
380
|
+
|
381
|
+
v.capture = :key; assert_equal [:key], v.capture
|
382
|
+
v.capture = :pointer; assert_equal [:pointer], v.capture
|
383
|
+
v.capture = :all; assert_equal [:key, :pointer], v.capture
|
384
|
+
|
385
|
+
v.capture -= [:key]; assert_equal [:pointer], v.capture
|
386
|
+
v.capture += [:key]; assert_equal [:key, :pointer], v.capture
|
387
|
+
|
388
|
+
v.capture = []; assert_equal [], v.capture
|
389
|
+
v.capture += [:key, :pointer]; assert_equal [:key, :pointer], v.capture
|
390
|
+
v.capture = []; assert_equal [], v.capture
|
391
|
+
v.capture += [:all]; assert_equal [:key, :pointer], v.capture
|
392
|
+
|
393
|
+
v.capture -= []; assert_equal [:key, :pointer], v.capture
|
394
|
+
v.capture = []; assert_equal [], v.capture
|
395
|
+
v.capture += []; assert_equal [], v.capture
|
396
|
+
end
|
397
|
+
|
398
|
+
def test_capturing()
|
399
|
+
v, w = view, window
|
400
|
+
w.add v
|
401
|
+
|
402
|
+
v.capture = []
|
403
|
+
assert_false v.capturing?
|
404
|
+
assert_false v.capturing? :key
|
405
|
+
assert_false v.capturing? :pointer
|
406
|
+
assert_false v.capturing? :all
|
407
|
+
|
408
|
+
v.capture = :key
|
409
|
+
assert_true v.capturing?
|
410
|
+
assert_true v.capturing? :key
|
411
|
+
assert_false v.capturing? :pointer
|
412
|
+
assert_false v.capturing? :all
|
413
|
+
|
414
|
+
v.capture = :pointer
|
415
|
+
assert_true v.capturing?
|
416
|
+
assert_false v.capturing? :key
|
417
|
+
assert_true v.capturing? :pointer
|
418
|
+
assert_false v.capturing? :all
|
419
|
+
|
420
|
+
v.capture = :all
|
421
|
+
assert_true v.capturing?
|
422
|
+
assert_true v.capturing? :key
|
423
|
+
assert_true v.capturing? :pointer
|
424
|
+
assert_true v.capturing? :all
|
425
|
+
end
|
426
|
+
|
376
427
|
def test_parent()
|
377
428
|
parent, child = view, view
|
378
429
|
parent.add_child child
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reflexion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- xordog
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: xot
|
@@ -16,60 +16,60 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.3.
|
19
|
+
version: 0.3.4
|
20
20
|
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.3.
|
22
|
+
version: 0.3.4
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - "~>"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.3.
|
29
|
+
version: 0.3.4
|
30
30
|
- - ">="
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.3.
|
32
|
+
version: 0.3.4
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: rucy
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.3.
|
39
|
+
version: 0.3.4
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: 0.3.
|
42
|
+
version: 0.3.4
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
46
46
|
requirements:
|
47
47
|
- - "~>"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: 0.3.
|
49
|
+
version: 0.3.4
|
50
50
|
- - ">="
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: 0.3.
|
52
|
+
version: 0.3.4
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: rays
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 0.3.
|
59
|
+
version: 0.3.4
|
60
60
|
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 0.3.
|
62
|
+
version: 0.3.4
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
67
|
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 0.3.
|
69
|
+
version: 0.3.4
|
70
70
|
- - ">="
|
71
71
|
- !ruby/object:Gem::Version
|
72
|
-
version: 0.3.
|
72
|
+
version: 0.3.4
|
73
73
|
description: This library helps you to develop interactive graphical user interface.
|
74
74
|
email: xordog@gmail.com
|
75
75
|
executables: []
|