reflexion 0.1.19 → 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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/contact_event.cpp +6 -6
  3. data/.doc/ext/reflex/event.cpp +9 -1
  4. data/.doc/ext/reflex/focus_event.cpp +6 -6
  5. data/.doc/ext/reflex/key_event.cpp +211 -13
  6. data/.doc/ext/reflex/native.cpp +2 -0
  7. data/.doc/ext/reflex/pointer.cpp +158 -0
  8. data/.doc/ext/reflex/pointer_event.cpp +31 -90
  9. data/.doc/ext/reflex/selector.cpp +8 -0
  10. data/.doc/ext/reflex/view.cpp +57 -0
  11. data/.doc/ext/reflex/window.cpp +41 -0
  12. data/VERSION +1 -1
  13. data/ext/reflex/contact_event.cpp +6 -6
  14. data/ext/reflex/event.cpp +11 -2
  15. data/ext/reflex/focus_event.cpp +6 -6
  16. data/ext/reflex/key_event.cpp +212 -13
  17. data/ext/reflex/native.cpp +2 -0
  18. data/ext/reflex/pointer.cpp +170 -0
  19. data/ext/reflex/pointer_event.cpp +30 -95
  20. data/ext/reflex/selector.cpp +9 -0
  21. data/ext/reflex/view.cpp +67 -3
  22. data/ext/reflex/window.cpp +49 -3
  23. data/include/reflex/defs.h +140 -106
  24. data/include/reflex/event.h +26 -27
  25. data/include/reflex/pointer.h +107 -0
  26. data/include/reflex/ruby/pointer.h +41 -0
  27. data/include/reflex/ruby/view.h +9 -0
  28. data/include/reflex/ruby/window.h +9 -0
  29. data/include/reflex/selector.h +1 -1
  30. data/include/reflex/view.h +6 -4
  31. data/include/reflex/window.h +14 -8
  32. data/lib/reflex/application.rb +3 -3
  33. data/lib/reflex/autoinit.rb +1 -1
  34. data/lib/reflex/button.rb +7 -7
  35. data/lib/reflex/capture_event.rb +7 -7
  36. data/lib/reflex/contact_event.rb +4 -4
  37. data/lib/reflex/draw_event.rb +2 -2
  38. data/lib/reflex/ellipse_shape.rb +2 -2
  39. data/lib/reflex/focus_event.rb +4 -4
  40. data/lib/reflex/frame_event.rb +5 -5
  41. data/lib/reflex/helper.rb +20 -20
  42. data/lib/reflex/image_view.rb +2 -2
  43. data/lib/reflex/key_event.rb +6 -6
  44. data/lib/reflex/model.rb +22 -22
  45. data/lib/reflex/model_owner.rb +7 -7
  46. data/lib/reflex/model_view.rb +1 -1
  47. data/lib/reflex/module.rb +5 -5
  48. data/lib/reflex/pointer.rb +107 -0
  49. data/lib/reflex/pointer_event.rb +16 -54
  50. data/lib/reflex/polygon_shape.rb +2 -2
  51. data/lib/reflex/reflex.rb +3 -3
  52. data/lib/reflex/scroll_event.rb +1 -1
  53. data/lib/reflex/selector.rb +4 -4
  54. data/lib/reflex/shape.rb +13 -13
  55. data/lib/reflex/style.rb +11 -11
  56. data/lib/reflex/style_length.rb +1 -1
  57. data/lib/reflex/text_view.rb +2 -2
  58. data/lib/reflex/timer.rb +2 -2
  59. data/lib/reflex/timer_event.rb +1 -1
  60. data/lib/reflex/update_event.rb +1 -1
  61. data/lib/reflex/view.rb +32 -32
  62. data/lib/reflex/wheel_event.rb +3 -3
  63. data/lib/reflex/window.rb +7 -6
  64. data/lib/reflex.rb +1 -0
  65. data/lib/reflexion.rb +17 -17
  66. data/reflex.gemspec +5 -5
  67. data/samples/reflexion/noise.rb +1 -1
  68. data/samples/tree.rb +1 -1
  69. data/src/event.cpp +189 -37
  70. data/src/event.h +32 -0
  71. data/src/ios/event.h +15 -3
  72. data/src/ios/event.mm +126 -11
  73. data/src/ios/view_controller.mm +50 -22
  74. data/src/ios/window.mm +18 -0
  75. data/src/osx/event.h +14 -3
  76. data/src/osx/event.mm +213 -23
  77. data/src/osx/native_window.mm +84 -17
  78. data/src/osx/window.mm +22 -0
  79. data/src/pointer.cpp +203 -0
  80. data/src/pointer.h +26 -0
  81. data/src/selector.cpp +1 -1
  82. data/src/view.cpp +103 -64
  83. data/src/view.h +0 -4
  84. data/src/window.cpp +334 -98
  85. data/src/window.h +28 -3
  86. data/test/helper.rb +3 -3
  87. data/test/test_application.rb +1 -1
  88. data/test/test_capture_event.rb +6 -6
  89. data/test/test_event.rb +18 -4
  90. data/test/test_has_frame.rb +11 -11
  91. data/test/test_pointer.rb +149 -0
  92. data/test/test_pointer_event.rb +70 -104
  93. data/test/test_reflex.rb +1 -1
  94. data/test/test_selector.rb +15 -8
  95. data/test/test_shape.rb +8 -8
  96. data/test/test_style.rb +13 -13
  97. data/test/test_style_length.rb +5 -5
  98. data/test/test_view.rb +57 -30
  99. data/test/test_window.rb +45 -26
  100. 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->is_empty())
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.is_empty())
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, FUN fun, const EVENT& e)
1232
+ call_children (View* parent, const EVENT& event, FUN fun)
1232
1233
  {
1233
1234
  assert(parent);
1234
1235
 
1235
- View::ChildList* pchildren = parent->self->pchildren.get();
1236
- if (pchildren)
1237
- {
1238
- for (auto& pchild : *pchildren)
1239
- fun(pchild.get(), e);
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,22 +1258,34 @@ namespace Reflex
1261
1258
  }
1262
1259
 
1263
1260
  static void
1264
- filter_pointer_event (
1265
- PointerEvent* to, const PointerEvent& from, const Bounds& frame)
1261
+ update_captures (View* view, PointerEvent* event)
1266
1262
  {
1267
- assert(to);
1268
-
1269
- const Point& offset = frame.position();
1263
+ Window* win = view->window();
1264
+ if (!win)
1265
+ invalid_state_error(__FILE__, __LINE__);
1270
1266
 
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;
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
+ });
1279
+ }
1276
1280
 
1277
- to->positions[i] = pos - offset;
1278
- ++to->size;
1279
- }
1281
+ static void
1282
+ call_pointer_event_for_each_child (View* parent, const PointerEvent& event)
1283
+ {
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
+ });
1280
1289
  }
1281
1290
 
1282
1291
  void
@@ -1285,29 +1294,25 @@ namespace Reflex
1285
1294
  if (!view)
1286
1295
  argument_error(__FILE__, __LINE__);
1287
1296
 
1288
- bool capturing = view->capture() & View::CAPTURE_POINTER;
1289
- if (capturing != event.capture) return;
1290
-
1291
- const Bounds& frame = view->frame();
1292
-
1293
- PointerEvent e = event;
1294
- filter_pointer_event(&e, event, frame);
1295
-
1296
- if (!capturing && e.size == 0)
1297
+ if (event.empty())
1297
1298
  return;
1298
1299
 
1300
+ PointerEvent e = event;
1299
1301
  view->on_pointer(&e);
1300
1302
 
1301
- switch (e.type)
1303
+ switch (e[0].action())
1302
1304
  {
1303
- case PointerEvent::DOWN: view->on_pointer_down(&e); break;
1304
- case PointerEvent::UP: view->on_pointer_up(&e); break;
1305
- case PointerEvent::MOVE: view->on_pointer_move(&e); break;
1306
- case PointerEvent::NONE: break;
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;
1307
1310
  }
1308
1311
 
1309
- if (!event.capture)
1310
- call_children(view, View_call_pointer_event, e);
1312
+ update_captures(view, &e);
1313
+
1314
+ if (!e.is_captured())
1315
+ call_pointer_event_for_each_child(view, e);
1311
1316
  }
1312
1317
 
1313
1318
  void
@@ -1326,7 +1331,7 @@ namespace Reflex
1326
1331
 
1327
1332
  view->on_wheel(&e);
1328
1333
 
1329
- call_children(view, View_call_wheel_event, e);
1334
+ call_children(view, e, View_call_wheel_event);
1330
1335
  }
1331
1336
 
1332
1337
  void
@@ -1462,22 +1467,29 @@ namespace Reflex
1462
1467
  Point
1463
1468
  View::from_parent (const Point& point) const
1464
1469
  {
1465
- not_implemented_error(__FILE__, __LINE__);
1466
- return 0;
1470
+ if (!parent())
1471
+ invalid_state_error(__FILE__, __LINE__);
1472
+
1473
+ return point - frame().position();
1467
1474
  }
1468
1475
 
1469
1476
  Point
1470
1477
  View::to_parent (const Point& point) const
1471
1478
  {
1472
- not_implemented_error(__FILE__, __LINE__);
1473
- return 0;
1479
+ if (!parent())
1480
+ invalid_state_error(__FILE__, __LINE__);
1481
+
1482
+ return point + frame().position();
1474
1483
  }
1475
1484
 
1476
1485
  Point
1477
1486
  View::from_window (const Point& point) const
1478
1487
  {
1488
+ if (!window())
1489
+ invalid_state_error(__FILE__, __LINE__);
1490
+
1479
1491
  Point p = point;
1480
- for (const View* v = parent(); v; v = v->parent())
1492
+ for (const View* v = this; v; v = v->parent())
1481
1493
  p -= v->frame().position();
1482
1494
  return p;
1483
1495
  }
@@ -1485,22 +1497,33 @@ namespace Reflex
1485
1497
  Point
1486
1498
  View::to_window (const Point& point) const
1487
1499
  {
1488
- not_implemented_error(__FILE__, __LINE__);
1489
- return 0;
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;
1490
1507
  }
1491
1508
 
1492
1509
  Point
1493
1510
  View::from_screen (const Point& point) const
1494
1511
  {
1495
- not_implemented_error(__FILE__, __LINE__);
1496
- return 0;
1512
+ const Window* w = window();
1513
+ if (!w)
1514
+ invalid_state_error(__FILE__, __LINE__);
1515
+
1516
+ return w->from_screen(from_window(point));
1497
1517
  }
1498
1518
 
1499
1519
  Point
1500
1520
  View::to_screen (const Point& point) const
1501
1521
  {
1502
- not_implemented_error(__FILE__, __LINE__);
1503
- return 0;
1522
+ const Window* w = window();
1523
+ if (!w)
1524
+ invalid_state_error(__FILE__, __LINE__);
1525
+
1526
+ return w->to_screen(to_window(point));
1504
1527
  }
1505
1528
 
1506
1529
  static void
@@ -1682,7 +1705,7 @@ namespace Reflex
1682
1705
  Style*
1683
1706
  View::get_style (const Selector& selector, bool create)
1684
1707
  {
1685
- if (selector.is_empty())
1708
+ if (selector.empty())
1686
1709
  return style(create);
1687
1710
 
1688
1711
  StyleList* pstyles = self->pstyles.get();
@@ -1989,18 +2012,23 @@ namespace Reflex
1989
2012
  void
1990
2013
  View::scroll_to (coord x, coord y, coord z)
1991
2014
  {
1992
- Point old = self->scroll();
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();
2015
+ scroll_to(Point(x, y, z));
1998
2016
  }
1999
2017
 
2000
2018
  void
2001
2019
  View::scroll_to (const Point& scroll)
2002
2020
  {
2003
- scroll_to(scroll.x, scroll.y, scroll.z);
2021
+ if (scroll == this->scroll()) return;
2022
+
2023
+ Point old = self->scroll();
2024
+ self->scroll() = scroll;
2025
+
2026
+ ScrollEvent e(
2027
+ scroll.x, scroll.y, scroll.z,
2028
+ scroll.x - old.x, scroll.y - old.y, scroll.z - old.z);
2029
+ on_scroll(&e);
2030
+
2031
+ redraw();
2004
2032
  }
2005
2033
 
2006
2034
  void
@@ -2028,6 +2056,11 @@ namespace Reflex
2028
2056
  void
2029
2057
  View::set_zoom (float zoom)
2030
2058
  {
2059
+ if (zoom == self->zoom) return;
2060
+
2061
+ if (zoom == 0)
2062
+ argument_error(__FILE__, __LINE__);
2063
+
2031
2064
  self->zoom = zoom;
2032
2065
  redraw();
2033
2066
  }
@@ -2041,7 +2074,8 @@ namespace Reflex
2041
2074
  void
2042
2075
  View::set_capture (uint types)
2043
2076
  {
2044
- if (types == self->capture) return;
2077
+ Window* w = window();
2078
+ if (!w || types == self->capture) return;
2045
2079
 
2046
2080
  uint old = self->capture;
2047
2081
  self->capture = types;
@@ -2050,9 +2084,9 @@ namespace Reflex
2050
2084
  bool capture = types != CAPTURE_NONE;
2051
2085
 
2052
2086
  if (capture && !registered)
2053
- View_register_capture(this);
2087
+ Window_register_capture(w, this);
2054
2088
  else if (!capture && registered)
2055
- View_unregister_capture(this);
2089
+ Window_unregister_capture(w, this);
2056
2090
 
2057
2091
  CaptureEvent e(~old & types, old & ~types);
2058
2092
  on_capture(&e);
@@ -2508,6 +2542,11 @@ namespace Reflex
2508
2542
  {
2509
2543
  }
2510
2544
 
2545
+ void
2546
+ View::on_pointer_cancel (PointerEvent* e)
2547
+ {
2548
+ }
2549
+
2511
2550
  void
2512
2551
  View::on_wheel (WheelEvent* e)
2513
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);