reflexion 0.1.22 → 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/event.cpp +9 -1
- data/.doc/ext/reflex/key_event.cpp +3 -3
- data/.doc/ext/reflex/native.cpp +2 -0
- data/.doc/ext/reflex/pointer.cpp +158 -0
- data/.doc/ext/reflex/pointer_event.cpp +29 -88
- data/.doc/ext/reflex/selector.cpp +8 -0
- data/.doc/ext/reflex/view.cpp +57 -0
- data/.doc/ext/reflex/window.cpp +24 -0
- data/VERSION +1 -1
- data/ext/reflex/event.cpp +11 -2
- data/ext/reflex/key_event.cpp +3 -3
- data/ext/reflex/native.cpp +2 -0
- data/ext/reflex/pointer.cpp +170 -0
- data/ext/reflex/pointer_event.cpp +29 -94
- data/ext/reflex/selector.cpp +9 -0
- data/ext/reflex/view.cpp +67 -3
- data/ext/reflex/window.cpp +30 -3
- data/include/reflex/defs.h +0 -18
- 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 +10 -8
- data/lib/reflex/key_event.rb +1 -1
- data/lib/reflex/pointer.rb +107 -0
- data/lib/reflex/pointer_event.rb +16 -54
- data/lib/reflex.rb +1 -0
- data/reflex.gemspec +5 -5
- 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 +49 -21
- data/src/osx/event.h +6 -3
- data/src/osx/event.mm +40 -22
- data/src/osx/native_window.mm +79 -16
- data/src/pointer.cpp +203 -0
- data/src/pointer.h +26 -0
- data/src/selector.cpp +1 -1
- data/src/view.cpp +83 -72
- data/src/view.h +0 -4
- data/src/window.cpp +321 -97
- data/src/window.h +22 -3
- data/test/test_event.rb +16 -2
- data/test/test_pointer.rb +149 -0
- data/test/test_pointer_event.rb +70 -104
- data/test/test_selector.rb +7 -0
- data/test/test_view.rb +38 -11
- data/test/test_window.rb +27 -25
- metadata +46 -35
data/src/view.cpp
CHANGED
@@ -9,6 +9,7 @@
|
|
9
9
|
#include "reflex/exception.h"
|
10
10
|
#include "reflex/debug.h"
|
11
11
|
#include "window.h"
|
12
|
+
#include "event.h"
|
12
13
|
#include "selector.h"
|
13
14
|
#include "timer.h"
|
14
15
|
#include "style.h"
|
@@ -877,7 +878,7 @@ namespace Reflex
|
|
877
878
|
result->clear();
|
878
879
|
|
879
880
|
Selector* sel = view->self->pselector.get();
|
880
|
-
if (!sel || sel->
|
881
|
+
if (!sel || sel->empty())
|
881
882
|
return false;
|
882
883
|
|
883
884
|
get_styles_for_selector(result, view, *sel);
|
@@ -1211,7 +1212,7 @@ namespace Reflex
|
|
1211
1212
|
|
1212
1213
|
View::Data* self = view->self.get();
|
1213
1214
|
|
1214
|
-
if (selector.
|
1215
|
+
if (selector.empty())
|
1215
1216
|
self->add_flag(View::Data::UPDATE_STYLE);
|
1216
1217
|
else
|
1217
1218
|
self->selectors_for_update().insert(selector);
|
@@ -1228,16 +1229,15 @@ namespace Reflex
|
|
1228
1229
|
|
1229
1230
|
template <typename FUN, typename EVENT>
|
1230
1231
|
static void
|
1231
|
-
call_children (View* parent,
|
1232
|
+
call_children (View* parent, const EVENT& event, FUN fun)
|
1232
1233
|
{
|
1233
1234
|
assert(parent);
|
1234
1235
|
|
1235
|
-
|
1236
|
-
if (pchildren)
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
}
|
1236
|
+
auto* pchildren = parent->self->pchildren.get();
|
1237
|
+
if (!pchildren) return;
|
1238
|
+
|
1239
|
+
for (auto& pchild : *pchildren)
|
1240
|
+
fun(pchild.get(), event);
|
1241
1241
|
}
|
1242
1242
|
|
1243
1243
|
void
|
@@ -1246,9 +1246,6 @@ namespace Reflex
|
|
1246
1246
|
if (!view)
|
1247
1247
|
argument_error(__FILE__, __LINE__);
|
1248
1248
|
|
1249
|
-
bool capturing = view->capture() & View::CAPTURE_KEY;
|
1250
|
-
if (capturing != event.capture) return;
|
1251
|
-
|
1252
1249
|
KeyEvent e = event;
|
1253
1250
|
view->on_key(&e);
|
1254
1251
|
|
@@ -1261,40 +1258,34 @@ namespace Reflex
|
|
1261
1258
|
}
|
1262
1259
|
|
1263
1260
|
static void
|
1264
|
-
|
1265
|
-
PointerEvent* to, const PointerEvent& from, const Bounds& frame)
|
1261
|
+
update_captures (View* view, PointerEvent* event)
|
1266
1262
|
{
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
to->size = 0;
|
1272
|
-
for (size_t i = 0; i < from.size; ++i) {
|
1273
|
-
const Point& pos = from.position(i);
|
1274
|
-
if (!frame.is_include(pos))
|
1275
|
-
continue;
|
1263
|
+
Window* win = view->window();
|
1264
|
+
if (!win)
|
1265
|
+
invalid_state_error(__FILE__, __LINE__);
|
1276
1266
|
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1267
|
+
PointerEvent_each_pointer(event, [&](const auto& pointer)
|
1268
|
+
{
|
1269
|
+
auto action = pointer.action();
|
1270
|
+
if (action == Pointer::DOWN)
|
1271
|
+
{
|
1272
|
+
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
|
+
});
|
1280
1279
|
}
|
1281
1280
|
|
1282
1281
|
static void
|
1283
|
-
|
1282
|
+
call_pointer_event_for_each_child (View* parent, const PointerEvent& event)
|
1284
1283
|
{
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
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
|
-
}
|
1284
|
+
call_children(parent, event, [](View* child, const PointerEvent& e) {
|
1285
|
+
PointerEvent e2 = e;
|
1286
|
+
PointerEvent_update_for_child_view(&e2, child);
|
1287
|
+
View_call_pointer_event(child, e2);
|
1288
|
+
});
|
1298
1289
|
}
|
1299
1290
|
|
1300
1291
|
void
|
@@ -1303,29 +1294,25 @@ namespace Reflex
|
|
1303
1294
|
if (!view)
|
1304
1295
|
argument_error(__FILE__, __LINE__);
|
1305
1296
|
|
1306
|
-
|
1307
|
-
if (capturing != event.capture) return;
|
1308
|
-
|
1309
|
-
PointerEvent e = event;
|
1310
|
-
filter_pointer_event(&e, event, view->frame());
|
1311
|
-
|
1312
|
-
if (!capturing && e.size == 0)
|
1297
|
+
if (event.empty())
|
1313
1298
|
return;
|
1314
1299
|
|
1315
|
-
|
1316
|
-
|
1300
|
+
PointerEvent e = event;
|
1317
1301
|
view->on_pointer(&e);
|
1318
1302
|
|
1319
|
-
switch (e.
|
1303
|
+
switch (e[0].action())
|
1320
1304
|
{
|
1321
|
-
case
|
1322
|
-
case
|
1323
|
-
case
|
1324
|
-
case
|
1305
|
+
case Pointer::DOWN: view->on_pointer_down(&e); break;
|
1306
|
+
case Pointer::UP: view->on_pointer_up(&e); break;
|
1307
|
+
case Pointer::MOVE: view->on_pointer_move(&e); break;
|
1308
|
+
case Pointer::CANCEL: view->on_pointer_cancel(&e); break;
|
1309
|
+
default: break;
|
1325
1310
|
}
|
1326
1311
|
|
1327
|
-
|
1328
|
-
|
1312
|
+
update_captures(view, &e);
|
1313
|
+
|
1314
|
+
if (!e.is_captured())
|
1315
|
+
call_pointer_event_for_each_child(view, e);
|
1329
1316
|
}
|
1330
1317
|
|
1331
1318
|
void
|
@@ -1344,7 +1331,7 @@ namespace Reflex
|
|
1344
1331
|
|
1345
1332
|
view->on_wheel(&e);
|
1346
1333
|
|
1347
|
-
call_children(view,
|
1334
|
+
call_children(view, e, View_call_wheel_event);
|
1348
1335
|
}
|
1349
1336
|
|
1350
1337
|
void
|
@@ -1480,22 +1467,29 @@ namespace Reflex
|
|
1480
1467
|
Point
|
1481
1468
|
View::from_parent (const Point& point) const
|
1482
1469
|
{
|
1483
|
-
|
1484
|
-
|
1470
|
+
if (!parent())
|
1471
|
+
invalid_state_error(__FILE__, __LINE__);
|
1472
|
+
|
1473
|
+
return point - frame().position();
|
1485
1474
|
}
|
1486
1475
|
|
1487
1476
|
Point
|
1488
1477
|
View::to_parent (const Point& point) const
|
1489
1478
|
{
|
1490
|
-
|
1491
|
-
|
1479
|
+
if (!parent())
|
1480
|
+
invalid_state_error(__FILE__, __LINE__);
|
1481
|
+
|
1482
|
+
return point + frame().position();
|
1492
1483
|
}
|
1493
1484
|
|
1494
1485
|
Point
|
1495
1486
|
View::from_window (const Point& point) const
|
1496
1487
|
{
|
1488
|
+
if (!window())
|
1489
|
+
invalid_state_error(__FILE__, __LINE__);
|
1490
|
+
|
1497
1491
|
Point p = point;
|
1498
|
-
for (const View* v =
|
1492
|
+
for (const View* v = this; v; v = v->parent())
|
1499
1493
|
p -= v->frame().position();
|
1500
1494
|
return p;
|
1501
1495
|
}
|
@@ -1503,22 +1497,33 @@ namespace Reflex
|
|
1503
1497
|
Point
|
1504
1498
|
View::to_window (const Point& point) const
|
1505
1499
|
{
|
1506
|
-
|
1507
|
-
|
1500
|
+
if (!window())
|
1501
|
+
invalid_state_error(__FILE__, __LINE__);
|
1502
|
+
|
1503
|
+
Point p = point;
|
1504
|
+
for (const View* v = this; v; v = v->parent())
|
1505
|
+
p += v->frame().position();
|
1506
|
+
return p;
|
1508
1507
|
}
|
1509
1508
|
|
1510
1509
|
Point
|
1511
1510
|
View::from_screen (const Point& point) const
|
1512
1511
|
{
|
1513
|
-
|
1514
|
-
|
1512
|
+
const Window* w = window();
|
1513
|
+
if (!w)
|
1514
|
+
invalid_state_error(__FILE__, __LINE__);
|
1515
|
+
|
1516
|
+
return w->from_screen(from_window(point));
|
1515
1517
|
}
|
1516
1518
|
|
1517
1519
|
Point
|
1518
1520
|
View::to_screen (const Point& point) const
|
1519
1521
|
{
|
1520
|
-
|
1521
|
-
|
1522
|
+
const Window* w = window();
|
1523
|
+
if (!w)
|
1524
|
+
invalid_state_error(__FILE__, __LINE__);
|
1525
|
+
|
1526
|
+
return w->to_screen(to_window(point));
|
1522
1527
|
}
|
1523
1528
|
|
1524
1529
|
static void
|
@@ -1700,7 +1705,7 @@ namespace Reflex
|
|
1700
1705
|
Style*
|
1701
1706
|
View::get_style (const Selector& selector, bool create)
|
1702
1707
|
{
|
1703
|
-
if (selector.
|
1708
|
+
if (selector.empty())
|
1704
1709
|
return style(create);
|
1705
1710
|
|
1706
1711
|
StyleList* pstyles = self->pstyles.get();
|
@@ -2069,7 +2074,8 @@ namespace Reflex
|
|
2069
2074
|
void
|
2070
2075
|
View::set_capture (uint types)
|
2071
2076
|
{
|
2072
|
-
|
2077
|
+
Window* w = window();
|
2078
|
+
if (!w || types == self->capture) return;
|
2073
2079
|
|
2074
2080
|
uint old = self->capture;
|
2075
2081
|
self->capture = types;
|
@@ -2078,9 +2084,9 @@ namespace Reflex
|
|
2078
2084
|
bool capture = types != CAPTURE_NONE;
|
2079
2085
|
|
2080
2086
|
if (capture && !registered)
|
2081
|
-
|
2087
|
+
Window_register_capture(w, this);
|
2082
2088
|
else if (!capture && registered)
|
2083
|
-
|
2089
|
+
Window_unregister_capture(w, this);
|
2084
2090
|
|
2085
2091
|
CaptureEvent e(~old & types, old & ~types);
|
2086
2092
|
on_capture(&e);
|
@@ -2536,6 +2542,11 @@ namespace Reflex
|
|
2536
2542
|
{
|
2537
2543
|
}
|
2538
2544
|
|
2545
|
+
void
|
2546
|
+
View::on_pointer_cancel (PointerEvent* e)
|
2547
|
+
{
|
2548
|
+
}
|
2549
|
+
|
2539
2550
|
void
|
2540
2551
|
View::on_wheel (WheelEvent* e)
|
2541
2552
|
{
|
data/src/view.h
CHANGED
@@ -37,10 +37,6 @@ namespace Reflex
|
|
37
37
|
|
38
38
|
void View_update_shapes (View* view);
|
39
39
|
|
40
|
-
void View_register_capture (View* view);
|
41
|
-
|
42
|
-
void View_unregister_capture (View* view);
|
43
|
-
|
44
40
|
void View_call_key_event (View* view, const KeyEvent& event);
|
45
41
|
|
46
42
|
void View_call_pointer_event (View* view, const PointerEvent& event);
|