reflexion 0.1.34 → 0.1.36
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/frame_event.cpp +27 -2
- data/.doc/ext/reflex/view.cpp +25 -0
- data/.github/workflows/utils.rb +2 -1
- data/ChangeLog.md +15 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/ext/reflex/extconf.rb +0 -3
- data/ext/reflex/frame_event.cpp +33 -5
- data/ext/reflex/view.cpp +28 -0
- data/include/reflex/event.h +10 -2
- data/include/reflex/ruby/view.h +9 -0
- data/include/reflex/view.h +12 -4
- data/lib/reflex/application.rb +2 -3
- data/lib/reflex/autoinit.rb +0 -3
- data/lib/reflex/bitmap.rb +0 -3
- data/lib/reflex/bounds.rb +0 -3
- data/lib/reflex/button.rb +0 -3
- data/lib/reflex/camera.rb +0 -3
- data/lib/reflex/capture_event.rb +0 -3
- data/lib/reflex/color.rb +0 -3
- data/lib/reflex/color_space.rb +0 -3
- data/lib/reflex/contact_event.rb +0 -3
- data/lib/reflex/draw_event.rb +0 -3
- data/lib/reflex/ellipse_shape.rb +0 -3
- data/lib/reflex/ext.rb +0 -3
- data/lib/reflex/extension.rb +0 -3
- data/lib/reflex/filter.rb +0 -3
- data/lib/reflex/fixture.rb +0 -3
- data/lib/reflex/focus_event.rb +0 -3
- data/lib/reflex/font.rb +0 -3
- data/lib/reflex/frame_event.rb +2 -4
- data/lib/reflex/helper.rb +0 -3
- data/lib/reflex/image.rb +0 -3
- data/lib/reflex/image_view.rb +0 -3
- data/lib/reflex/key_event.rb +0 -3
- data/lib/reflex/line_shape.rb +0 -3
- data/lib/reflex/list_view.rb +0 -3
- data/lib/reflex/matrix.rb +0 -3
- data/lib/reflex/model.rb +0 -3
- data/lib/reflex/model_owner.rb +0 -3
- data/lib/reflex/model_view.rb +0 -3
- data/lib/reflex/painter.rb +0 -3
- data/lib/reflex/point.rb +0 -3
- data/lib/reflex/pointer.rb +0 -3
- data/lib/reflex/pointer_event.rb +0 -3
- data/lib/reflex/polygon.rb +0 -3
- data/lib/reflex/polygon_shape.rb +0 -3
- data/lib/reflex/polyline.rb +0 -3
- data/lib/reflex/rect_shape.rb +0 -3
- data/lib/reflex/reflex.rb +0 -3
- data/lib/reflex/scroll_event.rb +0 -3
- data/lib/reflex/selector.rb +0 -3
- data/lib/reflex/shader.rb +0 -3
- data/lib/reflex/shape.rb +0 -3
- data/lib/reflex/style.rb +0 -3
- data/lib/reflex/style_length.rb +0 -3
- data/lib/reflex/text_view.rb +0 -3
- data/lib/reflex/timer.rb +0 -3
- data/lib/reflex/timer_event.rb +0 -3
- data/lib/reflex/update_event.rb +0 -3
- data/lib/reflex/view.rb +10 -4
- data/lib/reflex/wheel_event.rb +0 -3
- data/lib/reflex/window.rb +2 -3
- data/lib/reflex.rb +0 -3
- data/lib/reflexion/include.rb +0 -3
- data/lib/reflexion.rb +0 -3
- data/reflex.gemspec +5 -5
- data/samples/app.rb +0 -3
- data/samples/bats.rb +0 -3
- data/samples/camera.rb +0 -3
- data/samples/checker.rb +0 -3
- data/samples/fans.rb +0 -3
- data/samples/fps.rb +0 -3
- data/samples/grid.rb +0 -3
- data/samples/hello.rb +0 -3
- data/samples/image.rb +0 -3
- data/samples/key.rb +0 -3
- data/samples/layout.rb +0 -3
- data/samples/model.rb +0 -3
- data/samples/physics.rb +0 -3
- data/samples/reflexion/breakout.rb +0 -3
- data/samples/reflexion/hello.rb +0 -3
- data/samples/reflexion/jump_action.rb +0 -3
- data/samples/reflexion/noise.rb +0 -3
- data/samples/reflexion/paint.rb +0 -3
- data/samples/reflexion/physics.rb +0 -3
- data/samples/reflexion/pulse.rb +0 -3
- data/samples/repl.rb +0 -3
- data/samples/shader.rb +0 -3
- data/samples/shapes.rb +0 -3
- data/samples/text.rb +0 -3
- data/samples/tree.rb +0 -3
- data/samples/views.rb +0 -3
- data/samples/visuals.rb +0 -3
- data/src/body.cpp +14 -0
- data/src/body.h +4 -0
- data/src/event.cpp +54 -32
- data/src/osx/native_window.mm +1 -1
- data/src/view.cpp +136 -61
- data/src/window.cpp +4 -2
- data/test/helper.rb +0 -3
- data/test/test_application.rb +4 -3
- data/test/test_capture_event.rb +0 -3
- data/test/test_contact_event.rb +0 -3
- data/test/test_draw_event.rb +0 -3
- data/test/test_event.rb +1 -4
- data/test/test_focus_event.rb +0 -3
- data/test/test_frame_event.rb +22 -7
- data/test/test_has_frame.rb +0 -3
- data/test/test_key_event.rb +0 -3
- data/test/test_model.rb +0 -3
- data/test/test_model_owner.rb +0 -3
- data/test/test_pointer.rb +0 -3
- data/test/test_pointer_event.rb +0 -3
- data/test/test_reflex_init.rb +0 -3
- data/test/test_scroll_event.rb +0 -3
- data/test/test_selector.rb +0 -3
- data/test/test_shape.rb +0 -3
- data/test/test_style.rb +0 -3
- data/test/test_style_length.rb +0 -3
- data/test/test_timer_event.rb +0 -3
- data/test/test_update_event.rb +0 -3
- data/test/test_view.rb +37 -3
- data/test/test_wheel_event.rb +0 -3
- data/test/test_window.rb +4 -3
- metadata +10 -11
- data/task/box2d.rake +0 -46
data/src/event.cpp
CHANGED
@@ -26,10 +26,10 @@ namespace Reflex
|
|
26
26
|
{
|
27
27
|
}
|
28
28
|
|
29
|
-
void block ()
|
29
|
+
void block (bool parent)
|
30
30
|
{
|
31
31
|
blocked = true;
|
32
|
-
if (parent) parent->block();
|
32
|
+
if (parent && this->parent) this->parent->block(true);
|
33
33
|
}
|
34
34
|
|
35
35
|
};// Event::Data
|
@@ -50,9 +50,9 @@ namespace Reflex
|
|
50
50
|
}
|
51
51
|
|
52
52
|
void
|
53
|
-
Event::block ()
|
53
|
+
Event::block (bool parent)
|
54
54
|
{
|
55
|
-
self->block();
|
55
|
+
self->block(parent);
|
56
56
|
}
|
57
57
|
|
58
58
|
bool
|
@@ -221,13 +221,17 @@ namespace Reflex
|
|
221
221
|
|
222
222
|
coord dx, dy, dw, dh;
|
223
223
|
|
224
|
+
float zoom, dzoom;
|
225
|
+
|
224
226
|
float angle, dangle;
|
225
227
|
|
226
228
|
Data (
|
227
229
|
const Bounds& frame = 0,
|
228
230
|
coord dx = 0, coord dy = 0, coord dw = 0, coord dh = 0,
|
231
|
+
float zoom = 0, float dzoom = 0,
|
229
232
|
float angle = 0, float dangle = 0)
|
230
|
-
: frame(frame), dx(dx), dy(dy), dw(dw), dh(dh),
|
233
|
+
: frame(frame), dx(dx), dy(dy), dw(dw), dh(dh),
|
234
|
+
zoom(zoom), dzoom(dzoom), angle(angle), dangle(dangle)
|
231
235
|
{
|
232
236
|
}
|
233
237
|
|
@@ -240,18 +244,19 @@ namespace Reflex
|
|
240
244
|
|
241
245
|
FrameEvent::FrameEvent (
|
242
246
|
const Bounds& frame, coord dx, coord dy, coord dwidth, coord dheight,
|
243
|
-
float angle, float dangle)
|
244
|
-
: self(new Data(frame, dx, dy, dwidth, dheight, angle, dangle))
|
247
|
+
float zoom, float dzoom, float angle, float dangle)
|
248
|
+
: self(new Data(frame, dx, dy, dwidth, dheight, zoom, dzoom, angle, dangle))
|
245
249
|
{
|
246
250
|
}
|
247
251
|
|
248
252
|
FrameEvent::FrameEvent (
|
249
253
|
const Bounds& frame, const Bounds& prev_frame,
|
250
|
-
float angle, float prev_angle)
|
254
|
+
float zoom, float prev_zoom, float angle, float prev_angle)
|
251
255
|
: self(new Data(
|
252
256
|
frame,
|
253
257
|
frame.x - prev_frame.x, frame.y - prev_frame.y,
|
254
258
|
frame.w - prev_frame.w, frame.h - prev_frame.h,
|
259
|
+
zoom, zoom - prev_zoom,
|
255
260
|
angle, angle - prev_angle))
|
256
261
|
{
|
257
262
|
}
|
@@ -297,6 +302,18 @@ namespace Reflex
|
|
297
302
|
return self->dh;
|
298
303
|
}
|
299
304
|
|
305
|
+
float
|
306
|
+
FrameEvent::zoom () const
|
307
|
+
{
|
308
|
+
return self->zoom;
|
309
|
+
}
|
310
|
+
|
311
|
+
float
|
312
|
+
FrameEvent::dzoom () const
|
313
|
+
{
|
314
|
+
return self->dzoom;
|
315
|
+
}
|
316
|
+
|
300
317
|
float
|
301
318
|
FrameEvent::angle () const
|
302
319
|
{
|
@@ -321,6 +338,12 @@ namespace Reflex
|
|
321
338
|
return self->dw != 0 || self->dh != 0;
|
322
339
|
}
|
323
340
|
|
341
|
+
bool
|
342
|
+
FrameEvent::is_zoom () const
|
343
|
+
{
|
344
|
+
return self->dzoom != 0;
|
345
|
+
}
|
346
|
+
|
324
347
|
bool
|
325
348
|
FrameEvent::is_rotate () const
|
326
349
|
{
|
@@ -611,29 +634,6 @@ namespace Reflex
|
|
611
634
|
pthis->self->captured = captured;
|
612
635
|
}
|
613
636
|
|
614
|
-
static void
|
615
|
-
filter_and_offset_pointer_positions (PointerEvent* event, const Bounds& frame)
|
616
|
-
{
|
617
|
-
assert(event);
|
618
|
-
|
619
|
-
const Point& offset = frame.position();
|
620
|
-
|
621
|
-
std::vector<Pointer> pointers;
|
622
|
-
for (const auto& pointer : event->self->pointers)
|
623
|
-
{
|
624
|
-
if (!frame.is_include(pointer.position()))
|
625
|
-
continue;
|
626
|
-
|
627
|
-
pointers.emplace_back(pointer);
|
628
|
-
Pointer_update_positions(&pointers.back(), [&](Point* pos)
|
629
|
-
{
|
630
|
-
*pos -= offset;
|
631
|
-
});
|
632
|
-
}
|
633
|
-
|
634
|
-
event->self->pointers = pointers;
|
635
|
-
}
|
636
|
-
|
637
637
|
static void
|
638
638
|
scroll_and_zoom_pointer_positions (
|
639
639
|
PointerEvent* event, const Point& scroll, float zoom)
|
@@ -662,7 +662,26 @@ namespace Reflex
|
|
662
662
|
if (!pthis || !view)
|
663
663
|
argument_error(__FILE__, __LINE__);
|
664
664
|
|
665
|
-
|
665
|
+
const Bounds& frame = view->frame();
|
666
|
+
const Point& offset = frame.position();
|
667
|
+
Bounds bounds = frame.dup().move_to(0, 0);
|
668
|
+
float angle = view->angle();
|
669
|
+
|
670
|
+
std::vector<Pointer> pointers;
|
671
|
+
for (const auto& pointer : pthis->self->pointers)
|
672
|
+
{
|
673
|
+
pointers.emplace_back(pointer);
|
674
|
+
Pointer_update_positions(&pointers.back(), [&](Point* pos)
|
675
|
+
{
|
676
|
+
*pos -= offset;
|
677
|
+
pos->rotate(-angle);
|
678
|
+
});
|
679
|
+
|
680
|
+
if (!bounds.is_include(pointers.back().position()))
|
681
|
+
pointers.pop_back();
|
682
|
+
}
|
683
|
+
pthis->self->pointers = pointers;
|
684
|
+
|
666
685
|
scroll_and_zoom_pointer_positions(pthis, view->scroll(), view->zoom());
|
667
686
|
}
|
668
687
|
|
@@ -672,11 +691,14 @@ namespace Reflex
|
|
672
691
|
if (!pthis || !view)
|
673
692
|
argument_error(__FILE__, __LINE__);
|
674
693
|
|
694
|
+
float angle = view->angle();
|
695
|
+
|
675
696
|
for (auto& pointer : pthis->self->pointers)
|
676
697
|
{
|
677
698
|
Pointer_update_positions(&pointer, [=](Point* pos)
|
678
699
|
{
|
679
700
|
*pos = view->from_window(*pos);
|
701
|
+
pos->rotate(-angle);
|
680
702
|
});
|
681
703
|
}
|
682
704
|
|
data/src/osx/native_window.mm
CHANGED
@@ -288,7 +288,7 @@ update_pixel_density (Reflex::Window* window)
|
|
288
288
|
|
289
289
|
if (dpos != 0 || dsize != 0)
|
290
290
|
{
|
291
|
-
Reflex::FrameEvent e(b, dpos.x, dpos.y, dsize.x, dsize.y
|
291
|
+
Reflex::FrameEvent e(b, dpos.x, dpos.y, dsize.x, dsize.y);
|
292
292
|
if (dpos != 0) win->on_move(&e);
|
293
293
|
if (dsize != 0)
|
294
294
|
{
|
data/src/view.cpp
CHANGED
@@ -4,6 +4,7 @@
|
|
4
4
|
#include <assert.h>
|
5
5
|
#include <memory>
|
6
6
|
#include <algorithm>
|
7
|
+
#include <rays/matrix.h>
|
7
8
|
#include "reflex/timer.h"
|
8
9
|
#include "reflex/filter.h"
|
9
10
|
#include "reflex/exception.h"
|
@@ -25,6 +26,8 @@ namespace Reflex
|
|
25
26
|
|
26
27
|
static const char* WALL_NAME = "__WALL__";
|
27
28
|
|
29
|
+
static const Point ZERO = 0;
|
30
|
+
|
28
31
|
|
29
32
|
struct View::Data
|
30
33
|
{
|
@@ -52,19 +55,23 @@ namespace Reflex
|
|
52
55
|
|
53
56
|
};// Flag
|
54
57
|
|
55
|
-
Window* window;
|
58
|
+
Window* window = NULL;
|
56
59
|
|
57
|
-
View* parent;
|
60
|
+
View* parent = NULL;
|
58
61
|
|
59
62
|
Bounds frame;
|
60
63
|
|
61
|
-
float zoom
|
64
|
+
float zoom = 1;
|
65
|
+
|
66
|
+
float angle = 0;
|
67
|
+
|
68
|
+
ushort capture = CAPTURE_NONE;
|
62
69
|
|
63
|
-
|
70
|
+
short hide_count = 0;
|
64
71
|
|
65
|
-
|
72
|
+
uint flags = FLAG_CLIP | FLAG_RESIZE_TO_FIT | REDRAW | UPDATE_LAYOUT | UPDATE_STYLE;
|
66
73
|
|
67
|
-
|
74
|
+
std::unique_ptr<Point> ppivot;
|
68
75
|
|
69
76
|
std::unique_ptr<Point> pscroll;
|
70
77
|
|
@@ -92,15 +99,10 @@ namespace Reflex
|
|
92
99
|
|
93
100
|
std::unique_ptr<ChildList> pchildren;
|
94
101
|
|
95
|
-
|
96
|
-
: window(NULL), parent(NULL),
|
97
|
-
zoom(1), angle(0), capture(CAPTURE_NONE), hide_count(0),
|
98
|
-
flags(FLAG_CLIP | FLAG_RESIZE_TO_FIT | REDRAW | UPDATE_LAYOUT | UPDATE_STYLE)
|
99
|
-
{
|
100
|
-
}
|
101
|
-
|
102
|
-
~Data ()
|
102
|
+
Point& pivot ()
|
103
103
|
{
|
104
|
+
if (!ppivot) ppivot.reset(new Point);
|
105
|
+
return *ppivot;
|
104
106
|
}
|
105
107
|
|
106
108
|
Point& scroll ()
|
@@ -204,7 +206,40 @@ namespace Reflex
|
|
204
206
|
{
|
205
207
|
if (!pbody) return;
|
206
208
|
|
207
|
-
|
209
|
+
auto* pivot = ppivot.get();
|
210
|
+
if (pivot && (pivot->x != 0 || pivot->y != 0) && angle != 0)
|
211
|
+
{
|
212
|
+
Matrix m;
|
213
|
+
get_view2body_matrix(&m);
|
214
|
+
pbody->set_transform(m * Point(0), angle);
|
215
|
+
}
|
216
|
+
else
|
217
|
+
pbody->set_transform(frame.x, frame.y, angle);
|
218
|
+
}
|
219
|
+
|
220
|
+
void
|
221
|
+
get_view2body_matrix (Matrix* m)
|
222
|
+
{
|
223
|
+
assert(m && *m == 1 && ppivot && *ppivot != 0);
|
224
|
+
|
225
|
+
Point pivot = *ppivot * frame.size();
|
226
|
+
m->translate(frame.position() + pivot)
|
227
|
+
.rotate(angle)
|
228
|
+
.translate(-pivot);
|
229
|
+
}
|
230
|
+
|
231
|
+
void
|
232
|
+
get_body2view_matrix (Matrix* m)
|
233
|
+
{
|
234
|
+
assert(m && *m == 1 && ppivot && *ppivot != 0 && pbody);
|
235
|
+
|
236
|
+
Point pivot = *ppivot * frame.size();
|
237
|
+
float angle = pbody->angle();
|
238
|
+
m->translate(pbody->position())
|
239
|
+
.rotate(angle)
|
240
|
+
.translate( pivot)
|
241
|
+
.rotate(-angle)
|
242
|
+
.translate(-pivot);
|
208
243
|
}
|
209
244
|
|
210
245
|
void update_body_and_shapes ()
|
@@ -654,37 +689,41 @@ namespace Reflex
|
|
654
689
|
|
655
690
|
static void
|
656
691
|
update_view_frame (
|
657
|
-
View* view, const Bounds& frame, float
|
692
|
+
View* view, const Bounds& frame, float zoom, float angle,
|
693
|
+
bool update_body = true)
|
658
694
|
{
|
659
695
|
assert(view);
|
660
696
|
View::Data* self = view->self.get();
|
661
697
|
|
662
|
-
if (frame == self->frame && angle == self->angle)
|
698
|
+
if (frame == self->frame && zoom == self->zoom && angle == self->angle)
|
663
699
|
return;
|
664
700
|
|
665
|
-
FrameEvent event(frame, self->frame, angle, self->angle);
|
701
|
+
FrameEvent event(frame, self->frame, zoom, self->zoom, angle, self->angle);
|
666
702
|
self->frame = frame;
|
703
|
+
self->zoom = zoom;
|
667
704
|
self->angle = angle;
|
668
705
|
|
669
|
-
bool
|
670
|
-
bool
|
671
|
-
bool
|
706
|
+
bool moved = event.is_move();
|
707
|
+
bool resized = event.is_resize();
|
708
|
+
bool zoomed = event.is_zoom();
|
709
|
+
bool rotated = event.is_rotate();
|
672
710
|
|
673
|
-
if (
|
674
|
-
if (
|
675
|
-
if (
|
711
|
+
if (moved) view->on_move(&event);
|
712
|
+
if (resized) view->on_resize(&event);
|
713
|
+
if (zoomed) view->on_zoom(&event);
|
714
|
+
if (rotated) view->on_rotate(&event);
|
676
715
|
|
677
|
-
if (
|
716
|
+
if (resized)
|
678
717
|
{
|
679
718
|
view->self->resize_shapes(&event);
|
680
719
|
apply_style_to_children_have_variable_lengths(view);
|
681
720
|
update_view_layout(view, true);
|
682
721
|
}
|
683
722
|
|
684
|
-
if (update_body && (
|
723
|
+
if (update_body && (moved || rotated) && self->pbody)
|
685
724
|
self->update_body_frame();
|
686
725
|
|
687
|
-
if ((
|
726
|
+
if ((moved || resized) && self->parent)
|
688
727
|
self->parent->self->add_flag(View::Data::FIT_TO_CONTENT);
|
689
728
|
|
690
729
|
view->redraw();
|
@@ -696,7 +735,7 @@ namespace Reflex
|
|
696
735
|
if (!view)
|
697
736
|
argument_error(__FILE__, __LINE__);
|
698
737
|
|
699
|
-
update_view_frame(view, frame, view->
|
738
|
+
update_view_frame(view, frame, view->zoom(), view->angle());
|
700
739
|
}
|
701
740
|
|
702
741
|
const Style&
|
@@ -802,13 +841,24 @@ namespace Reflex
|
|
802
841
|
update_view_body (View* view)
|
803
842
|
{
|
804
843
|
assert(view);
|
844
|
+
View::Data* self = view->self.get();
|
805
845
|
|
806
|
-
Body* body =
|
846
|
+
Body* body = self->pbody.get();
|
807
847
|
if (!body) return;
|
808
848
|
|
809
849
|
Bounds frame = view->frame();
|
810
|
-
|
811
|
-
|
850
|
+
|
851
|
+
auto* pivot = self->ppivot.get();
|
852
|
+
if (pivot && (pivot->x != 0 || pivot->y != 0) && self->angle != 0)
|
853
|
+
{
|
854
|
+
Matrix m;
|
855
|
+
self->get_body2view_matrix(&m);
|
856
|
+
frame.set_position(m * Point(0));
|
857
|
+
}
|
858
|
+
else
|
859
|
+
frame.set_position(body->position());
|
860
|
+
|
861
|
+
update_view_frame(view, frame, view->zoom(), body->angle(), false);
|
812
862
|
}
|
813
863
|
|
814
864
|
static void
|
@@ -1088,7 +1138,7 @@ namespace Reflex
|
|
1088
1138
|
|
1089
1139
|
if (event->is_blocked()) return;
|
1090
1140
|
|
1091
|
-
View::ChildList* pchildren =
|
1141
|
+
View::ChildList* pchildren = self->pchildren.get();
|
1092
1142
|
if (pchildren)
|
1093
1143
|
{
|
1094
1144
|
for (auto& pchild : *pchildren)
|
@@ -1098,7 +1148,7 @@ namespace Reflex
|
|
1098
1148
|
}
|
1099
1149
|
}
|
1100
1150
|
|
1101
|
-
World* child_world =
|
1151
|
+
World* child_world = self->pchild_world.get();
|
1102
1152
|
if (child_world)
|
1103
1153
|
{
|
1104
1154
|
p->push_state();
|
@@ -1182,7 +1232,7 @@ namespace Reflex
|
|
1182
1232
|
Point pos = bounds.position();
|
1183
1233
|
Bounds clip2 = bounds.dup().move_by(offset) & clip;
|
1184
1234
|
|
1185
|
-
bounds.
|
1235
|
+
bounds.set_position(0, 0, bounds.z);
|
1186
1236
|
if (self->pscroll)
|
1187
1237
|
{
|
1188
1238
|
bounds.move_by(-*self->pscroll);
|
@@ -1193,9 +1243,13 @@ namespace Reflex
|
|
1193
1243
|
p->push_matrix();
|
1194
1244
|
p->translate(pos);
|
1195
1245
|
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1246
|
+
if (self->angle != 0)
|
1247
|
+
{
|
1248
|
+
const Point* pivot = self->ppivot.get();
|
1249
|
+
if (pivot) p->translate( pivot->x * bounds.width, pivot->y * bounds.height);
|
1250
|
+
p->rotate(self->angle);
|
1251
|
+
if (pivot) p->translate(-pivot->x * bounds.width, -pivot->y * bounds.height);
|
1252
|
+
}
|
1199
1253
|
|
1200
1254
|
float zoom = self->zoom;
|
1201
1255
|
if (zoom != 1 && zoom > 0)
|
@@ -1290,6 +1344,9 @@ namespace Reflex
|
|
1290
1344
|
{
|
1291
1345
|
assert(view && event);
|
1292
1346
|
|
1347
|
+
if (view->self->pbody)
|
1348
|
+
view->self->pbody->awake();
|
1349
|
+
|
1293
1350
|
view->on_pointer(event);
|
1294
1351
|
|
1295
1352
|
switch ((*event)[0].action())
|
@@ -2045,10 +2102,28 @@ namespace Reflex
|
|
2045
2102
|
self->add_flag(View::Data::FIT_TO_CONTENT);
|
2046
2103
|
}
|
2047
2104
|
|
2105
|
+
void
|
2106
|
+
View::set_zoom (float zoom)
|
2107
|
+
{
|
2108
|
+
if (zoom == self->zoom) return;
|
2109
|
+
|
2110
|
+
if (zoom == 0)
|
2111
|
+
argument_error(__FILE__, __LINE__);
|
2112
|
+
|
2113
|
+
update_view_frame(this, self->frame, zoom, self->angle);
|
2114
|
+
redraw();
|
2115
|
+
}
|
2116
|
+
|
2117
|
+
float
|
2118
|
+
View::zoom () const
|
2119
|
+
{
|
2120
|
+
return self->zoom;
|
2121
|
+
}
|
2122
|
+
|
2048
2123
|
void
|
2049
2124
|
View::set_angle (float degree)
|
2050
2125
|
{
|
2051
|
-
update_view_frame(this, self->frame,
|
2126
|
+
update_view_frame(this, self->frame, self->zoom, degree);
|
2052
2127
|
}
|
2053
2128
|
|
2054
2129
|
float
|
@@ -2057,7 +2132,23 @@ namespace Reflex
|
|
2057
2132
|
return self->angle;
|
2058
2133
|
}
|
2059
2134
|
|
2060
|
-
|
2135
|
+
void
|
2136
|
+
View::set_pivot (float x, float y, float z)
|
2137
|
+
{
|
2138
|
+
self->pivot().reset(x, y, z);
|
2139
|
+
}
|
2140
|
+
|
2141
|
+
void
|
2142
|
+
View::set_pivot (const Point& pivot)
|
2143
|
+
{
|
2144
|
+
set_pivot(pivot.x, pivot.y, pivot.z);
|
2145
|
+
}
|
2146
|
+
|
2147
|
+
const Point&
|
2148
|
+
View::pivot () const
|
2149
|
+
{
|
2150
|
+
return self->ppivot ? self->pivot() : ZERO;
|
2151
|
+
}
|
2061
2152
|
|
2062
2153
|
void
|
2063
2154
|
View::scroll_to (coord x, coord y, coord z)
|
@@ -2097,28 +2188,7 @@ namespace Reflex
|
|
2097
2188
|
const Point&
|
2098
2189
|
View::scroll () const
|
2099
2190
|
{
|
2100
|
-
|
2101
|
-
return self->scroll();
|
2102
|
-
else
|
2103
|
-
return ZERO_SCROLL;
|
2104
|
-
}
|
2105
|
-
|
2106
|
-
void
|
2107
|
-
View::set_zoom (float zoom)
|
2108
|
-
{
|
2109
|
-
if (zoom == self->zoom) return;
|
2110
|
-
|
2111
|
-
if (zoom == 0)
|
2112
|
-
argument_error(__FILE__, __LINE__);
|
2113
|
-
|
2114
|
-
self->zoom = zoom;
|
2115
|
-
redraw();
|
2116
|
-
}
|
2117
|
-
|
2118
|
-
float
|
2119
|
-
View::zoom () const
|
2120
|
-
{
|
2121
|
-
return self->zoom;
|
2191
|
+
return self->pscroll ? self->scroll() : ZERO;
|
2122
2192
|
}
|
2123
2193
|
|
2124
2194
|
void
|
@@ -2508,6 +2578,11 @@ namespace Reflex
|
|
2508
2578
|
{
|
2509
2579
|
}
|
2510
2580
|
|
2581
|
+
void
|
2582
|
+
View::on_zoom (FrameEvent* e)
|
2583
|
+
{
|
2584
|
+
}
|
2585
|
+
|
2511
2586
|
void
|
2512
2587
|
View::on_rotate (FrameEvent* e)
|
2513
2588
|
{
|
data/src/window.cpp
CHANGED
@@ -176,7 +176,7 @@ namespace Reflex
|
|
176
176
|
|
177
177
|
for (auto& [view, targets] : window->self->captures)
|
178
178
|
{
|
179
|
-
if (!is_capturing(view.get(), targets, View::CAPTURE_KEY))
|
179
|
+
if (!view->window() || !is_capturing(view.get(), targets, View::CAPTURE_KEY))
|
180
180
|
continue;
|
181
181
|
|
182
182
|
KeyEvent e = event->dup();
|
@@ -256,7 +256,7 @@ namespace Reflex
|
|
256
256
|
|
257
257
|
for (auto& [view, targets] : window->self->captures)
|
258
258
|
{
|
259
|
-
if (targets.empty()) continue;
|
259
|
+
if (!view->window() || targets.empty()) continue;
|
260
260
|
|
261
261
|
PointerEvent event;
|
262
262
|
PointerEvent_set_captured(&event, true);
|
@@ -300,6 +300,8 @@ namespace Reflex
|
|
300
300
|
|
301
301
|
for (auto& view : views_capturing_all)
|
302
302
|
{
|
303
|
+
if (!view->window()) continue;
|
304
|
+
|
303
305
|
PointerEvent e = event.dup();
|
304
306
|
PointerEvent_update_for_capturing_view(&e, view);
|
305
307
|
View_call_pointer_event(const_cast<View*>(view.get()), &e);
|
data/test/helper.rb
CHANGED
data/test/test_application.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
1
|
require_relative 'helper'
|
5
2
|
|
6
3
|
|
@@ -14,4 +11,8 @@ class TestApplication < Test::Unit::TestCase
|
|
14
11
|
assert_equal 'AppName', @@app.name
|
15
12
|
end
|
16
13
|
|
14
|
+
def test_inspect()
|
15
|
+
assert_match %r|#<Reflex::Application:0x\w{16}>|, @@app.inspect
|
16
|
+
end
|
17
|
+
|
17
18
|
end# TestApplication
|
data/test/test_capture_event.rb
CHANGED
data/test/test_contact_event.rb
CHANGED
data/test/test_draw_event.rb
CHANGED
data/test/test_event.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
1
|
require_relative 'helper'
|
5
2
|
|
6
3
|
|
@@ -27,7 +24,7 @@ class TestEvent < Test::Unit::TestCase
|
|
27
24
|
assert_true e.blocked?
|
28
25
|
end
|
29
26
|
|
30
|
-
def
|
27
|
+
def _test_block_propagation()
|
31
28
|
e1 = event
|
32
29
|
e2 = e1.dup
|
33
30
|
e3 = e2.dup
|
data/test/test_focus_event.rb
CHANGED
data/test/test_frame_event.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
|
4
1
|
require_relative 'helper'
|
5
2
|
|
6
3
|
|
@@ -15,19 +12,31 @@ class TestFrameEvent < Test::Unit::TestCase
|
|
15
12
|
end
|
16
13
|
|
17
14
|
def test_initialize()
|
18
|
-
e = event bounds(1, 2, 3, 4, 5, 6), 7, 8, 9, 10, 11, 12
|
15
|
+
e = event bounds(1, 2, 3, 4, 5, 6), 7, 8, 9, 10, 11, 12, 13, 14
|
19
16
|
assert_equal bounds(1, 2, 3, 4, 5, 6), e.frame
|
20
17
|
assert_equal 7, e.dx
|
21
18
|
assert_equal 8, e.dy
|
22
19
|
assert_equal 9, e.dw
|
23
20
|
assert_equal 10, e.dh
|
24
|
-
assert_equal 11, e.
|
25
|
-
assert_equal 12, e.
|
21
|
+
assert_equal 11, e.zoom
|
22
|
+
assert_equal 12, e.dzoom
|
23
|
+
assert_equal 13, e.angle
|
24
|
+
assert_equal 14, e.dangle
|
26
25
|
end
|
27
26
|
|
28
27
|
def test_dup()
|
29
|
-
e1 = event bounds(1, 2, 3, 4, 5, 6), 7, 8, 9, 10, 11, 12
|
28
|
+
e1 = event bounds(1, 2, 3, 4, 5, 6), 7, 8, 9, 10, 11, 12, 13, 14
|
30
29
|
e2 = e1.dup
|
30
|
+
assert_equal bounds(1, 2, 3, 4, 5, 6), e2.frame
|
31
|
+
assert_equal 7, e2.dx
|
32
|
+
assert_equal 8, e2.dy
|
33
|
+
assert_equal 9, e2.dw
|
34
|
+
assert_equal 10, e2.dh
|
35
|
+
assert_equal 11, e2.zoom
|
36
|
+
assert_equal 12, e2.dzoom
|
37
|
+
assert_equal 13, e2.angle
|
38
|
+
assert_equal 14, e2.dangle
|
39
|
+
|
31
40
|
e1.block
|
32
41
|
e3 = e1.dup
|
33
42
|
assert_true e1.blocked?
|
@@ -35,4 +44,10 @@ class TestFrameEvent < Test::Unit::TestCase
|
|
35
44
|
assert_true e3.blocked?
|
36
45
|
end
|
37
46
|
|
47
|
+
def test_inspect()
|
48
|
+
assert_equal(
|
49
|
+
"#<Reflex::FrameEvent x:1(7) y:2(8) w:4(9) h:5(10) zoom:11(12) angle:13(14)>",
|
50
|
+
event(bounds(1, 2, 3, 4, 5, 6), 7, 8, 9, 10, 11, 12, 13, 14).inspect)
|
51
|
+
end
|
52
|
+
|
38
53
|
end# TestFrameEvent
|
data/test/test_has_frame.rb
CHANGED
data/test/test_key_event.rb
CHANGED
data/test/test_model.rb
CHANGED