reflexion 0.1.23 → 0.1.24
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/capture_event.cpp +6 -5
- data/.doc/ext/reflex/contact_event.cpp +14 -12
- data/.doc/ext/reflex/draw_event.cpp +10 -8
- data/.doc/ext/reflex/event.cpp +2 -10
- data/.doc/ext/reflex/focus_event.cpp +14 -13
- data/.doc/ext/reflex/frame_event.cpp +17 -17
- data/.doc/ext/reflex/key_event.cpp +20 -19
- data/.doc/ext/reflex/pointer_event.cpp +1 -1
- data/.doc/ext/reflex/scroll_event.cpp +14 -17
- data/.doc/ext/reflex/timer.cpp +9 -1
- data/.doc/ext/reflex/timer_event.cpp +4 -13
- data/.doc/ext/reflex/update_event.cpp +6 -5
- data/.doc/ext/reflex/wheel_event.cpp +39 -22
- data/VERSION +1 -1
- data/ext/reflex/capture_event.cpp +6 -5
- data/ext/reflex/contact_event.cpp +16 -14
- data/ext/reflex/draw_event.cpp +9 -7
- data/ext/reflex/event.cpp +2 -11
- data/ext/reflex/focus_event.cpp +14 -13
- data/ext/reflex/frame_event.cpp +16 -16
- data/ext/reflex/key_event.cpp +20 -19
- data/ext/reflex/pointer_event.cpp +1 -1
- data/ext/reflex/scroll_event.cpp +15 -18
- data/ext/reflex/timer.cpp +15 -6
- data/ext/reflex/timer_event.cpp +9 -19
- data/ext/reflex/update_event.cpp +6 -5
- data/ext/reflex/wheel_event.cpp +40 -21
- data/include/reflex/event.h +224 -115
- data/include/reflex/shape.h +2 -2
- data/lib/reflex/contact_event.rb +7 -7
- data/lib/reflex/focus_event.rb +8 -8
- data/lib/reflex/key_event.rb +8 -8
- data/lib/reflex/pointer.rb +3 -3
- data/lib/reflex/timer_event.rb +2 -1
- data/lib/reflex/wheel_event.rb +1 -9
- data/lib/reflex/window.rb +1 -1
- data/reflex.gemspec +4 -4
- data/src/event.cpp +630 -76
- data/src/event.h +15 -0
- data/src/image_view.cpp +2 -2
- data/src/ios/view_controller.mm +1 -1
- data/src/osx/event.h +1 -1
- data/src/osx/event.mm +9 -9
- data/src/osx/native_window.mm +1 -1
- data/src/shape.cpp +11 -13
- data/src/shape.h +1 -1
- data/src/view.cpp +137 -89
- data/src/view.h +5 -6
- data/src/window.cpp +44 -38
- data/src/world.cpp +6 -4
- data/test/test_capture_event.rb +16 -0
- data/test/test_contact_event.rb +40 -0
- data/test/test_draw_event.rb +35 -0
- data/test/test_event.rb +20 -6
- data/test/test_focus_event.rb +34 -0
- data/test/test_frame_event.rb +38 -0
- data/test/test_key_event.rb +33 -0
- data/test/test_pointer.rb +14 -14
- data/test/test_pointer_event.rb +1 -1
- data/test/test_scroll_event.rb +39 -0
- data/test/test_timer_event.rb +38 -0
- data/test/test_update_event.rb +29 -0
- data/test/test_wheel_event.rb +40 -0
- metadata +29 -11
data/src/event.h
CHANGED
@@ -12,6 +12,16 @@ namespace Reflex
|
|
12
12
|
{
|
13
13
|
|
14
14
|
|
15
|
+
void DrawEvent_set_view (DrawEvent* pthis, View* view);
|
16
|
+
|
17
|
+
void DrawEvent_set_painter (DrawEvent* pthis, Painter* painter);
|
18
|
+
|
19
|
+
void DrawEvent_set_bounds (DrawEvent* pthis, const Bounds& bounds);
|
20
|
+
|
21
|
+
|
22
|
+
void KeyEvent_set_captured (KeyEvent* pthis, bool captured);
|
23
|
+
|
24
|
+
|
15
25
|
void PointerEvent_add_pointer (PointerEvent* pthis, const Pointer& pointer);
|
16
26
|
|
17
27
|
void PointerEvent_erase_pointer (PointerEvent* pthis, Pointer::ID id);
|
@@ -21,11 +31,16 @@ namespace Reflex
|
|
21
31
|
void PointerEvent_each_pointer (
|
22
32
|
const PointerEvent* pthis, std::function<void(const Pointer&)> fun);
|
23
33
|
|
34
|
+
void PointerEvent_set_captured (PointerEvent* pthis, bool captured);
|
35
|
+
|
24
36
|
void PointerEvent_update_for_child_view (PointerEvent* pthis, const View* view);
|
25
37
|
|
26
38
|
void PointerEvent_update_for_capturing_view (PointerEvent* pthis, const View* view);
|
27
39
|
|
28
40
|
|
41
|
+
void WheelEvent_set_position (WheelEvent* pthis, const Point& position);
|
42
|
+
|
43
|
+
|
29
44
|
}// Reflex
|
30
45
|
|
31
46
|
|
data/src/image_view.cpp
CHANGED
data/src/ios/view_controller.mm
CHANGED
@@ -376,7 +376,7 @@ ReflexViewController_get_show_fun ()
|
|
376
376
|
|
377
377
|
if (dpos != 0 || dsize != 0)
|
378
378
|
{
|
379
|
-
Reflex::FrameEvent e(b, dpos.x, dpos.y, dsize.x, dsize.y);
|
379
|
+
Reflex::FrameEvent e(b, dpos.x, dpos.y, dsize.x, dsize.y, 0, 0);
|
380
380
|
if (dpos != 0) win->on_move(&e);
|
381
381
|
if (dsize != 0)
|
382
382
|
{
|
data/src/osx/event.h
CHANGED
data/src/osx/event.mm
CHANGED
@@ -169,11 +169,11 @@ namespace Reflex
|
|
169
169
|
return 0;
|
170
170
|
}
|
171
171
|
|
172
|
-
static KeyEvent::
|
173
|
-
|
172
|
+
static KeyEvent::Action
|
173
|
+
get_flag_key_event_action (const NSEvent* e)
|
174
174
|
{
|
175
175
|
uint mask = get_modifier_flag_mask(e);
|
176
|
-
if (mask == 0) return Reflex::KeyEvent::
|
176
|
+
if (mask == 0) return Reflex::KeyEvent::ACTION_NONE;
|
177
177
|
|
178
178
|
return [e modifierFlags] & mask
|
179
179
|
? Reflex::KeyEvent::DOWN
|
@@ -251,18 +251,18 @@ namespace Reflex
|
|
251
251
|
}
|
252
252
|
|
253
253
|
|
254
|
-
NativeKeyEvent::NativeKeyEvent (NSEvent* e,
|
254
|
+
NativeKeyEvent::NativeKeyEvent (NSEvent* e, Action action)
|
255
255
|
: KeyEvent(
|
256
|
-
|
257
|
-
[e isARepeat] ? 1 : 0)
|
256
|
+
action, get_chars(e), get_code([e keyCode]),
|
257
|
+
get_modifiers(e), [e isARepeat] ? 1 : 0)
|
258
258
|
{
|
259
259
|
}
|
260
260
|
|
261
261
|
|
262
262
|
NativeFlagKeyEvent::NativeFlagKeyEvent (NSEvent* e)
|
263
263
|
: KeyEvent(
|
264
|
-
|
265
|
-
0)
|
264
|
+
get_flag_key_event_action(e), "", get_code([e keyCode]),
|
265
|
+
get_modifiers(e), 0)
|
266
266
|
{
|
267
267
|
}
|
268
268
|
|
@@ -295,7 +295,7 @@ namespace Reflex
|
|
295
295
|
NativeWheelEvent::NativeWheelEvent (NSEvent* e, NSView* view)
|
296
296
|
: WheelEvent(0, 0, 0, [e deltaX], [e deltaY], [e deltaZ], get_modifiers(e))
|
297
297
|
{
|
298
|
-
|
298
|
+
WheelEvent_set_position(this, get_pointer_position(e, view));
|
299
299
|
}
|
300
300
|
|
301
301
|
|
data/src/osx/native_window.mm
CHANGED
@@ -269,7 +269,7 @@ count_mouse_buttons (const Reflex::PointerEvent& e)
|
|
269
269
|
|
270
270
|
if (dpos != 0 || dsize != 0)
|
271
271
|
{
|
272
|
-
Reflex::FrameEvent e(b, dpos.x, dpos.y, dsize.x, dsize.y);
|
272
|
+
Reflex::FrameEvent e(b, dpos.x, dpos.y, dsize.x, dsize.y, 0, 0);
|
273
273
|
if (dpos != 0) win->on_move(&e);
|
274
274
|
if (dsize != 0)
|
275
275
|
{
|
data/src/shape.cpp
CHANGED
@@ -432,25 +432,23 @@ namespace Reflex
|
|
432
432
|
}
|
433
433
|
|
434
434
|
void
|
435
|
-
Shape_call_contact_event (Shape* shape,
|
435
|
+
Shape_call_contact_event (Shape* shape, ContactEvent* event)
|
436
436
|
{
|
437
|
-
if (!shape)
|
437
|
+
if (!shape || !event)
|
438
438
|
argument_error(__FILE__, __LINE__);
|
439
439
|
|
440
|
-
|
441
|
-
shape->on_contact(&e);
|
440
|
+
shape->on_contact(event);
|
442
441
|
|
443
|
-
switch (
|
442
|
+
switch (event->action())
|
444
443
|
{
|
445
|
-
case ContactEvent::BEGIN: shape->on_contact_begin(
|
446
|
-
case ContactEvent::END: shape->on_contact_end(
|
447
|
-
|
444
|
+
case ContactEvent::BEGIN: shape->on_contact_begin(event); break;
|
445
|
+
case ContactEvent::END: shape->on_contact_end(event); break;
|
446
|
+
default: break;
|
448
447
|
}
|
449
448
|
|
450
|
-
if (
|
451
|
-
return;
|
449
|
+
if (event->is_blocked()) return;
|
452
450
|
|
453
|
-
View_call_contact_event(shape->owner(),
|
451
|
+
View_call_contact_event(shape->owner(), event);
|
454
452
|
}
|
455
453
|
|
456
454
|
|
@@ -587,9 +585,9 @@ namespace Reflex
|
|
587
585
|
void
|
588
586
|
Shape::on_draw (DrawEvent* e)
|
589
587
|
{
|
590
|
-
assert(e && e->painter);
|
588
|
+
assert(e && e->painter());
|
591
589
|
|
592
|
-
e->painter->polygon(self->polygon);
|
590
|
+
e->painter()->polygon(self->polygon);
|
593
591
|
}
|
594
592
|
|
595
593
|
void
|
data/src/shape.h
CHANGED
data/src/view.cpp
CHANGED
@@ -948,7 +948,7 @@ namespace Reflex
|
|
948
948
|
|
949
949
|
View::Data* self = view->self.get();
|
950
950
|
|
951
|
-
fire_timers(view, event.now);
|
951
|
+
fire_timers(view, event.now());
|
952
952
|
|
953
953
|
View::ChildList* pchildren = self->pchildren.get();
|
954
954
|
if (pchildren)
|
@@ -958,9 +958,9 @@ namespace Reflex
|
|
958
958
|
}
|
959
959
|
|
960
960
|
update_view_shapes(view);
|
961
|
-
update_child_world(view, event.dt);
|
961
|
+
update_child_world(view, event.dt());
|
962
962
|
|
963
|
-
UpdateEvent e = event;
|
963
|
+
UpdateEvent e = event.dup();
|
964
964
|
view->on_update(&e);
|
965
965
|
|
966
966
|
update_views_for_selectors(view);
|
@@ -1024,7 +1024,10 @@ namespace Reflex
|
|
1024
1024
|
static void
|
1025
1025
|
draw_default_shape (View* view, DrawEvent* event)
|
1026
1026
|
{
|
1027
|
-
assert(view && event
|
1027
|
+
assert(view && event);
|
1028
|
+
|
1029
|
+
Painter* painter = event->painter();
|
1030
|
+
assert(painter);
|
1028
1031
|
|
1029
1032
|
const Style& style = View_get_style(view);
|
1030
1033
|
const Color& back_fill = style.background_fill();
|
@@ -1033,26 +1036,26 @@ namespace Reflex
|
|
1033
1036
|
Shape* shape = view->shape(false);
|
1034
1037
|
if (shape)
|
1035
1038
|
{
|
1036
|
-
setup_painter(
|
1039
|
+
setup_painter(painter, back_fill, back_stroke);
|
1037
1040
|
shape->on_draw(event);
|
1038
1041
|
}
|
1039
1042
|
else if (back_fill || back_stroke)
|
1040
1043
|
{
|
1041
|
-
setup_painter(
|
1042
|
-
|
1044
|
+
setup_painter(painter, back_fill, back_stroke);
|
1045
|
+
painter->rect(event->bounds());
|
1043
1046
|
}
|
1044
1047
|
}
|
1045
1048
|
|
1046
1049
|
static void
|
1047
1050
|
draw_content (View* view, DrawEvent* event)
|
1048
1051
|
{
|
1049
|
-
assert(view && event && event->painter);
|
1052
|
+
assert(view && event && event->painter());
|
1050
1053
|
|
1051
1054
|
draw_default_shape(view, event);
|
1052
1055
|
|
1053
1056
|
const Style& style = View_get_style(view);
|
1054
1057
|
setup_painter(
|
1055
|
-
event->painter, style.foreground_fill(), style.foreground_stroke());
|
1058
|
+
event->painter(), style.foreground_fill(), style.foreground_stroke());
|
1056
1059
|
|
1057
1060
|
View::ShapeList* pshapes = view->self->pshapes.get();
|
1058
1061
|
if (pshapes && !pshapes->empty())
|
@@ -1068,10 +1071,10 @@ namespace Reflex
|
|
1068
1071
|
draw_view (
|
1069
1072
|
View* view, DrawEvent* event, const Point& offset, const Bounds& clip)
|
1070
1073
|
{
|
1071
|
-
assert(view && event && event->painter);
|
1074
|
+
assert(view && event && event->painter());
|
1072
1075
|
View::Data* self = view->self.get();
|
1073
1076
|
|
1074
|
-
Painter* p = event->painter;
|
1077
|
+
Painter* p = event->painter();
|
1075
1078
|
p->push_state();
|
1076
1079
|
|
1077
1080
|
if (self->has_flag(View::FLAG_CLIP) && !self->pbody)
|
@@ -1088,8 +1091,8 @@ namespace Reflex
|
|
1088
1091
|
{
|
1089
1092
|
for (auto& pchild : *pchildren)
|
1090
1093
|
{
|
1091
|
-
if (event->bounds & pchild->self->frame)
|
1092
|
-
View_draw_tree(pchild.get(),
|
1094
|
+
if (event->bounds() & pchild->self->frame)
|
1095
|
+
View_draw_tree(pchild.get(), event, offset, clip);
|
1093
1096
|
}
|
1094
1097
|
}
|
1095
1098
|
|
@@ -1105,23 +1108,24 @@ namespace Reflex
|
|
1105
1108
|
static void
|
1106
1109
|
draw_view_to_cache (View* view, DrawEvent* event)
|
1107
1110
|
{
|
1108
|
-
assert(view && event && event->painter && view->self->pcache_image);
|
1111
|
+
assert(view && event && event->painter() && view->self->pcache_image);
|
1109
1112
|
|
1110
|
-
Painter* view_painter = event->painter;
|
1113
|
+
Painter* view_painter = event->painter();
|
1111
1114
|
Painter cache_painter = view->self->pcache_image->painter();
|
1112
|
-
|
1115
|
+
|
1116
|
+
DrawEvent_set_painter(event, &cache_painter);
|
1113
1117
|
|
1114
1118
|
cache_painter.begin();
|
1115
|
-
draw_view(view, event, 0, event->bounds);
|
1119
|
+
draw_view(view, event, 0, event->bounds());
|
1116
1120
|
cache_painter.end();
|
1117
1121
|
|
1118
|
-
event
|
1122
|
+
DrawEvent_set_painter(event, view_painter);
|
1119
1123
|
}
|
1120
1124
|
|
1121
1125
|
static bool
|
1122
1126
|
draw_view_with_cache (View* view, DrawEvent* event, bool redraw)
|
1123
1127
|
{
|
1124
|
-
assert(view && event && event->painter);
|
1128
|
+
assert(view && event && event->painter());
|
1125
1129
|
View::Data* self = view->self.get();
|
1126
1130
|
|
1127
1131
|
if (!use_cache(view))
|
@@ -1130,7 +1134,7 @@ namespace Reflex
|
|
1130
1134
|
return false;
|
1131
1135
|
}
|
1132
1136
|
|
1133
|
-
Painter* painter = event->painter;
|
1137
|
+
Painter* painter = event->painter();
|
1134
1138
|
|
1135
1139
|
if (reset_cache_image(view, *painter) || redraw)
|
1136
1140
|
{
|
@@ -1148,7 +1152,7 @@ namespace Reflex
|
|
1148
1152
|
if (self->pfilter && *self->pfilter)
|
1149
1153
|
self->pfilter->apply(painter, *self->pcache_image);
|
1150
1154
|
else
|
1151
|
-
painter->image(*self->pcache_image, event->bounds);
|
1155
|
+
painter->image(*self->pcache_image, event->bounds());
|
1152
1156
|
|
1153
1157
|
painter->pop_state();
|
1154
1158
|
|
@@ -1157,7 +1161,7 @@ namespace Reflex
|
|
1157
1161
|
|
1158
1162
|
void
|
1159
1163
|
View_draw_tree (
|
1160
|
-
View* view,
|
1164
|
+
View* view, DrawEvent* event, const Point& offset, const Bounds& clip)
|
1161
1165
|
{
|
1162
1166
|
if (!view)
|
1163
1167
|
argument_error(__FILE__, __LINE__);
|
@@ -1166,26 +1170,24 @@ namespace Reflex
|
|
1166
1170
|
|
1167
1171
|
bool redraw = self->check_and_remove_flag(View::Data::REDRAW);
|
1168
1172
|
|
1169
|
-
if (
|
1173
|
+
if (view->hidden() || event->is_blocked())
|
1170
1174
|
return;
|
1171
1175
|
|
1172
1176
|
if (self->frame.width <= 0 || self->frame.height <= 0)
|
1173
1177
|
return;
|
1174
1178
|
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
e.view = view;
|
1179
|
-
e.bounds = self->frame;
|
1180
|
-
e.bounds.move_to(0, 0, e.bounds.z);
|
1179
|
+
Bounds bounds = self->frame;
|
1180
|
+
Point pos = bounds.position();
|
1181
|
+
Bounds clip2 = bounds.dup().move_by(offset) & clip;
|
1181
1182
|
|
1183
|
+
bounds.move_to(0, 0, bounds.z);
|
1182
1184
|
if (self->pscroll)
|
1183
1185
|
{
|
1184
|
-
|
1185
|
-
|
1186
|
+
bounds.move_by(-*self->pscroll);
|
1187
|
+
pos .move_by( *self->pscroll);
|
1186
1188
|
}
|
1187
1189
|
|
1188
|
-
Painter* p = event
|
1190
|
+
Painter* p = event->painter();
|
1189
1191
|
p->push_matrix();
|
1190
1192
|
p->translate(pos);
|
1191
1193
|
|
@@ -1197,9 +1199,15 @@ namespace Reflex
|
|
1197
1199
|
if (zoom != 1 && zoom > 0)
|
1198
1200
|
p->scale(zoom, zoom);
|
1199
1201
|
|
1200
|
-
|
1202
|
+
DrawEvent e = event->dup();
|
1203
|
+
DrawEvent_set_view(&e, view);
|
1204
|
+
DrawEvent_set_bounds(&e, bounds);
|
1205
|
+
|
1201
1206
|
if (!draw_view_with_cache(view, &e, redraw))
|
1207
|
+
{
|
1208
|
+
pos += offset;
|
1202
1209
|
draw_view(view, &e, pos, clip2);
|
1210
|
+
}
|
1203
1211
|
|
1204
1212
|
p->pop_matrix();
|
1205
1213
|
}
|
@@ -1227,127 +1235,167 @@ namespace Reflex
|
|
1227
1235
|
view->self->add_flag(View::Data::UPDATE_SHAPES);
|
1228
1236
|
}
|
1229
1237
|
|
1230
|
-
|
1238
|
+
void
|
1239
|
+
View_call_key_event (View* view, KeyEvent* event)
|
1240
|
+
{
|
1241
|
+
if (!view || !event)
|
1242
|
+
argument_error(__FILE__, __LINE__);
|
1243
|
+
|
1244
|
+
if (view->hidden()) return;
|
1245
|
+
|
1246
|
+
KeyEvent e = event->dup();
|
1247
|
+
view->on_key(&e);
|
1248
|
+
|
1249
|
+
switch (e.action())
|
1250
|
+
{
|
1251
|
+
case KeyEvent::DOWN: view->on_key_down(&e); break;
|
1252
|
+
case KeyEvent::UP: view->on_key_up(&e); break;
|
1253
|
+
default: break;
|
1254
|
+
}
|
1255
|
+
}
|
1256
|
+
|
1231
1257
|
static void
|
1232
|
-
call_children (View* parent,
|
1258
|
+
call_children (View* parent, std::function<bool(View*)> fun)
|
1233
1259
|
{
|
1234
1260
|
assert(parent);
|
1235
1261
|
|
1236
1262
|
auto* pchildren = parent->self->pchildren.get();
|
1237
1263
|
if (!pchildren) return;
|
1238
1264
|
|
1239
|
-
|
1240
|
-
|
1265
|
+
auto end = pchildren->rend();
|
1266
|
+
for (auto it = pchildren->rbegin(); it != end; ++it)
|
1267
|
+
{
|
1268
|
+
if (!fun(it->get()))
|
1269
|
+
break;
|
1270
|
+
}
|
1241
1271
|
}
|
1242
1272
|
|
1243
|
-
void
|
1244
|
-
|
1273
|
+
static void
|
1274
|
+
call_pointer_events_for_each_child (View* parent, PointerEvent* event)
|
1245
1275
|
{
|
1246
|
-
|
1247
|
-
argument_error(__FILE__, __LINE__);
|
1276
|
+
assert(parent && event);
|
1248
1277
|
|
1249
|
-
|
1250
|
-
|
1278
|
+
call_children(parent, [&](View* child) {
|
1279
|
+
PointerEvent e = event->dup();
|
1280
|
+
PointerEvent_update_for_child_view(&e, child);
|
1281
|
+
View_call_pointer_event(child, &e);
|
1282
|
+
return !e.is_blocked();
|
1283
|
+
});
|
1284
|
+
}
|
1285
|
+
|
1286
|
+
static void
|
1287
|
+
call_pointer_events (View* view, PointerEvent* event)
|
1288
|
+
{
|
1289
|
+
assert(view && event);
|
1290
|
+
|
1291
|
+
view->on_pointer(event);
|
1251
1292
|
|
1252
|
-
switch (
|
1293
|
+
switch ((*event)[0].action())
|
1253
1294
|
{
|
1254
|
-
case
|
1255
|
-
case
|
1256
|
-
case
|
1295
|
+
case Pointer::DOWN: view->on_pointer_down(event); break;
|
1296
|
+
case Pointer::UP: view->on_pointer_up(event); break;
|
1297
|
+
case Pointer::MOVE: view->on_pointer_move(event); break;
|
1298
|
+
case Pointer::CANCEL: view->on_pointer_cancel(event); break;
|
1299
|
+
default: break;
|
1257
1300
|
}
|
1258
1301
|
}
|
1259
1302
|
|
1260
1303
|
static void
|
1261
|
-
|
1304
|
+
register_captures (View* view, const PointerEvent& event)
|
1262
1305
|
{
|
1306
|
+
assert(view);
|
1307
|
+
|
1263
1308
|
Window* win = view->window();
|
1264
1309
|
if (!win)
|
1265
1310
|
invalid_state_error(__FILE__, __LINE__);
|
1266
1311
|
|
1267
|
-
PointerEvent_each_pointer(event, [&](const auto& pointer)
|
1312
|
+
PointerEvent_each_pointer(&event, [&](const auto& pointer)
|
1268
1313
|
{
|
1269
|
-
|
1270
|
-
if (action == Pointer::DOWN)
|
1271
|
-
{
|
1314
|
+
if (pointer.action() == Pointer::DOWN)
|
1272
1315
|
Window_register_capture(win, view, pointer.id());
|
1273
|
-
}
|
1274
|
-
else if (action == Pointer::UP || action == Pointer::CANCEL)
|
1275
|
-
{
|
1276
|
-
Window_unregister_capture(win, view, pointer.id());
|
1277
|
-
}
|
1278
1316
|
});
|
1279
1317
|
}
|
1280
1318
|
|
1281
1319
|
static void
|
1282
|
-
|
1320
|
+
unregister_captures (View* view, const PointerEvent& event)
|
1283
1321
|
{
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1322
|
+
assert(view);
|
1323
|
+
|
1324
|
+
Window* win = view->window();
|
1325
|
+
if (!win)
|
1326
|
+
invalid_state_error(__FILE__, __LINE__);
|
1327
|
+
|
1328
|
+
PointerEvent_each_pointer(&event, [&](const auto& pointer)
|
1329
|
+
{
|
1330
|
+
auto action = pointer.action();
|
1331
|
+
if (action == Pointer::UP || action == Pointer::CANCEL)
|
1332
|
+
Window_unregister_capture(win, view, pointer.id());
|
1288
1333
|
});
|
1289
1334
|
}
|
1290
1335
|
|
1291
1336
|
void
|
1292
|
-
View_call_pointer_event (View* view,
|
1337
|
+
View_call_pointer_event (View* view, PointerEvent* event)
|
1293
1338
|
{
|
1294
|
-
if (!view)
|
1339
|
+
if (!view || !event)
|
1295
1340
|
argument_error(__FILE__, __LINE__);
|
1296
1341
|
|
1297
|
-
if (event
|
1342
|
+
if (view->hidden() || event->empty())
|
1298
1343
|
return;
|
1299
1344
|
|
1300
|
-
PointerEvent e = event;
|
1301
|
-
view->on_pointer(&e);
|
1345
|
+
PointerEvent e = event->dup();
|
1302
1346
|
|
1303
|
-
|
1347
|
+
if (!e.is_captured())
|
1348
|
+
call_pointer_events_for_each_child(view, &e);
|
1349
|
+
|
1350
|
+
if (!e.is_blocked())
|
1304
1351
|
{
|
1305
|
-
|
1306
|
-
|
1307
|
-
case Pointer::MOVE: view->on_pointer_move(&e); break;
|
1308
|
-
case Pointer::CANCEL: view->on_pointer_cancel(&e); break;
|
1309
|
-
default: break;
|
1352
|
+
register_captures(view, e);
|
1353
|
+
call_pointer_events(view, &e);
|
1310
1354
|
}
|
1311
1355
|
|
1312
|
-
|
1313
|
-
|
1314
|
-
if (!e.is_captured())
|
1315
|
-
call_pointer_event_for_each_child(view, e);
|
1356
|
+
unregister_captures(view, e);
|
1316
1357
|
}
|
1317
1358
|
|
1318
1359
|
void
|
1319
|
-
View_call_wheel_event (View* view,
|
1360
|
+
View_call_wheel_event (View* view, WheelEvent* event)
|
1320
1361
|
{
|
1321
|
-
if (!view)
|
1362
|
+
if (!view || !event)
|
1322
1363
|
argument_error(__FILE__, __LINE__);
|
1323
1364
|
|
1365
|
+
if (view->hidden()) return;
|
1366
|
+
|
1324
1367
|
const Bounds& frame = view->frame();
|
1325
1368
|
|
1326
|
-
if (!frame.is_include(event
|
1369
|
+
if (!frame.is_include(event->position()))
|
1327
1370
|
return;
|
1328
1371
|
|
1329
|
-
WheelEvent e = event;
|
1330
|
-
e.position()
|
1372
|
+
WheelEvent e = event->dup();
|
1373
|
+
WheelEvent_set_position(&e, e.position() - frame.position());
|
1331
1374
|
|
1332
|
-
view
|
1375
|
+
call_children(view, [&](View* child) {
|
1376
|
+
View_call_wheel_event(child, &e);
|
1377
|
+
return !e.is_blocked();
|
1378
|
+
});
|
1333
1379
|
|
1334
|
-
|
1380
|
+
if (e.is_blocked()) return;
|
1381
|
+
|
1382
|
+
view->on_wheel(&e);
|
1335
1383
|
}
|
1336
1384
|
|
1337
1385
|
void
|
1338
|
-
View_call_contact_event (View* view,
|
1386
|
+
View_call_contact_event (View* view, ContactEvent* event)
|
1339
1387
|
{
|
1340
|
-
if (!view)
|
1388
|
+
if (!view || !event)
|
1341
1389
|
argument_error(__FILE__, __LINE__);
|
1342
1390
|
|
1343
|
-
ContactEvent e = event;
|
1391
|
+
ContactEvent e = event->dup();
|
1344
1392
|
view->on_contact(&e);
|
1345
1393
|
|
1346
|
-
switch (e.
|
1394
|
+
switch (e.action())
|
1347
1395
|
{
|
1348
1396
|
case ContactEvent::BEGIN: view->on_contact_begin(&e); break;
|
1349
1397
|
case ContactEvent::END: view->on_contact_end(&e); break;
|
1350
|
-
|
1398
|
+
default: break;
|
1351
1399
|
}
|
1352
1400
|
}
|
1353
1401
|
|
data/src/view.h
CHANGED
@@ -30,20 +30,19 @@ namespace Reflex
|
|
30
30
|
void View_update_tree (View* view, const UpdateEvent& event);
|
31
31
|
|
32
32
|
void View_draw_tree (
|
33
|
-
View* view, const
|
34
|
-
const Point& offset, const Bounds& clip);
|
33
|
+
View* view, DrawEvent* event, const Point& offset, const Bounds& clip);
|
35
34
|
|
36
35
|
void View_update_styles (View* view, const Selector& selector);
|
37
36
|
|
38
37
|
void View_update_shapes (View* view);
|
39
38
|
|
40
|
-
void View_call_key_event (View* view,
|
39
|
+
void View_call_key_event (View* view, KeyEvent* event);
|
41
40
|
|
42
|
-
void View_call_pointer_event (View* view,
|
41
|
+
void View_call_pointer_event (View* view, PointerEvent* event);
|
43
42
|
|
44
|
-
void View_call_wheel_event (View* view,
|
43
|
+
void View_call_wheel_event (View* view, WheelEvent* event);
|
45
44
|
|
46
|
-
void View_call_contact_event (View* view,
|
45
|
+
void View_call_contact_event (View* view, ContactEvent* event);
|
47
46
|
|
48
47
|
|
49
48
|
}// Reflex
|