reflexion 0.1.7 → 0.1.8
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/application.cpp +5 -5
- data/.doc/ext/reflex/body.cpp +167 -0
- data/.doc/ext/reflex/capture_event.cpp +4 -4
- data/.doc/ext/reflex/draw_event.cpp +4 -4
- data/.doc/ext/reflex/event.cpp +4 -4
- data/.doc/ext/reflex/fixture.cpp +101 -0
- data/.doc/ext/reflex/focus_event.cpp +4 -4
- data/.doc/ext/reflex/frame_event.cpp +4 -4
- data/.doc/ext/reflex/image_view.cpp +22 -5
- data/.doc/ext/reflex/key_event.cpp +4 -4
- data/.doc/ext/reflex/native.cpp +6 -0
- data/.doc/ext/reflex/pointer_event.cpp +4 -4
- data/.doc/ext/reflex/reflex.cpp +2 -3
- data/.doc/ext/reflex/scroll_event.cpp +4 -4
- data/.doc/ext/reflex/selector.cpp +4 -4
- data/.doc/ext/reflex/style.cpp +4 -4
- data/.doc/ext/reflex/style_length.cpp +4 -4
- data/.doc/ext/reflex/style_length2.cpp +4 -4
- data/.doc/ext/reflex/style_length4.cpp +4 -4
- data/.doc/ext/reflex/update_event.cpp +4 -4
- data/.doc/ext/reflex/view.cpp +110 -8
- data/.doc/ext/reflex/wheel_event.cpp +4 -4
- data/.doc/ext/reflex/window.cpp +36 -12
- data/README.md +2 -2
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/ext/reflex/application.cpp +8 -8
- data/ext/reflex/body.cpp +181 -0
- data/ext/reflex/capture_event.cpp +4 -4
- data/ext/reflex/draw_event.cpp +4 -4
- data/ext/reflex/event.cpp +4 -4
- data/ext/reflex/fixture.cpp +108 -0
- data/ext/reflex/focus_event.cpp +4 -4
- data/ext/reflex/frame_event.cpp +4 -4
- data/ext/reflex/image_view.cpp +24 -5
- data/ext/reflex/key_event.cpp +4 -4
- data/ext/reflex/native.cpp +6 -0
- data/ext/reflex/pointer_event.cpp +4 -4
- data/ext/reflex/reflex.cpp +2 -3
- data/ext/reflex/scroll_event.cpp +4 -4
- data/ext/reflex/selector.cpp +4 -4
- data/ext/reflex/style.cpp +4 -4
- data/ext/reflex/style_length.cpp +4 -4
- data/ext/reflex/style_length2.cpp +4 -4
- data/ext/reflex/style_length4.cpp +4 -4
- data/ext/reflex/update_event.cpp +4 -4
- data/ext/reflex/view.cpp +126 -12
- data/ext/reflex/wheel_event.cpp +4 -4
- data/ext/reflex/window.cpp +39 -12
- data/include/reflex/bitmap.h +20 -0
- data/include/reflex/body.h +82 -0
- data/include/reflex/bounds.h +20 -0
- data/include/reflex/color.h +20 -0
- data/include/reflex/color_space.h +20 -0
- data/include/reflex/defs.h +5 -1
- data/include/reflex/event.h +16 -25
- data/include/reflex/fixture.h +116 -0
- data/include/reflex/font.h +20 -0
- data/include/reflex/image.h +20 -0
- data/include/reflex/image_view.h +1 -1
- data/include/reflex/matrix.h +20 -0
- data/include/reflex/painter.h +20 -0
- data/include/reflex/point.h +24 -0
- data/include/reflex/ruby/application.h +6 -0
- data/include/reflex/ruby/body.h +41 -0
- data/include/reflex/ruby/event.h +68 -0
- data/include/reflex/ruby/fixture.h +41 -0
- data/include/reflex/ruby/image_view.h +14 -0
- data/include/reflex/ruby/selector.h +14 -0
- data/include/reflex/ruby/style.h +14 -0
- data/include/reflex/ruby/style_length.h +26 -0
- data/include/reflex/ruby/view.h +43 -39
- data/include/reflex/ruby/window.h +27 -21
- data/include/reflex/ruby.h +2 -0
- data/include/reflex/shader.h +20 -0
- data/include/reflex/style.h +2 -3
- data/include/reflex/texture.h +20 -0
- data/include/reflex/view.h +45 -24
- data/include/reflex/window.h +11 -14
- data/include/reflex.h +3 -0
- data/lib/reflex/application.rb +6 -2
- data/lib/reflex/body.rb +17 -0
- data/lib/reflex/fixture.rb +17 -0
- data/lib/reflex/view.rb +16 -1
- data/lib/reflex/window.rb +13 -1
- data/lib/reflex.rb +2 -0
- data/reflex.gemspec +1 -1
- data/samples/bats.rb +4 -3
- data/samples/checker.rb +4 -3
- data/samples/fans.rb +4 -3
- data/samples/fps.rb +5 -3
- data/samples/grid.rb +5 -4
- data/samples/hello.rb +1 -1
- data/samples/image.rb +3 -2
- data/samples/ios/hello/hello/main.cpp +12 -3
- data/samples/ios/hello/hello.xcodeproj/project.pbxproj +376 -123
- data/samples/key.rb +5 -4
- data/samples/layout.rb +3 -2
- data/samples/model.rb +3 -2
- data/samples/osx/hello/hello/main.cpp +12 -3
- data/samples/osx/hello/hello.xcodeproj/project.pbxproj +375 -120
- data/samples/physics.rb +37 -0
- data/samples/repl.rb +3 -2
- data/samples/shader.rb +4 -4
- data/samples/shapes.rb +4 -4
- data/samples/text.rb +6 -4
- data/samples/tree.rb +5 -4
- data/samples/views.rb +3 -2
- data/samples/visuals.rb +1 -2
- data/src/body.cpp +244 -0
- data/src/event.cpp +18 -18
- data/src/fixture.cpp +108 -0
- data/src/image_view.cpp +1 -1
- data/src/ios/native_window.h +2 -0
- data/src/ios/native_window.mm +18 -1
- data/src/ios/opengl_view.mm +8 -0
- data/src/ios/window.mm +24 -3
- data/src/ios/window_data.h +3 -3
- data/src/osx/native_window.mm +17 -1
- data/src/osx/window.mm +24 -3
- data/src/osx/window_data.h +3 -3
- data/src/physics/Box2D/Box2D.h +68 -0
- data/src/physics/Box2D/Collision/Shapes/b2ChainShape.cpp +193 -0
- data/src/physics/Box2D/Collision/Shapes/b2ChainShape.h +105 -0
- data/src/physics/Box2D/Collision/Shapes/b2CircleShape.cpp +99 -0
- data/src/physics/Box2D/Collision/Shapes/b2CircleShape.h +91 -0
- data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.cpp +138 -0
- data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.h +74 -0
- data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.cpp +467 -0
- data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.h +101 -0
- data/src/physics/Box2D/Collision/Shapes/b2Shape.h +101 -0
- data/src/physics/Box2D/Collision/b2BroadPhase.cpp +119 -0
- data/src/physics/Box2D/Collision/b2BroadPhase.h +257 -0
- data/src/physics/Box2D/Collision/b2CollideCircle.cpp +154 -0
- data/src/physics/Box2D/Collision/b2CollideEdge.cpp +698 -0
- data/src/physics/Box2D/Collision/b2CollidePolygon.cpp +239 -0
- data/src/physics/Box2D/Collision/b2Collision.cpp +252 -0
- data/src/physics/Box2D/Collision/b2Collision.h +277 -0
- data/src/physics/Box2D/Collision/b2Distance.cpp +603 -0
- data/src/physics/Box2D/Collision/b2Distance.h +141 -0
- data/src/physics/Box2D/Collision/b2DynamicTree.cpp +778 -0
- data/src/physics/Box2D/Collision/b2DynamicTree.h +289 -0
- data/src/physics/Box2D/Collision/b2TimeOfImpact.cpp +486 -0
- data/src/physics/Box2D/Collision/b2TimeOfImpact.h +58 -0
- data/src/physics/Box2D/Common/b2BlockAllocator.cpp +215 -0
- data/src/physics/Box2D/Common/b2BlockAllocator.h +62 -0
- data/src/physics/Box2D/Common/b2Draw.cpp +44 -0
- data/src/physics/Box2D/Common/b2Draw.h +86 -0
- data/src/physics/Box2D/Common/b2GrowableStack.h +85 -0
- data/src/physics/Box2D/Common/b2Math.cpp +94 -0
- data/src/physics/Box2D/Common/b2Math.h +720 -0
- data/src/physics/Box2D/Common/b2Settings.cpp +44 -0
- data/src/physics/Box2D/Common/b2Settings.h +151 -0
- data/src/physics/Box2D/Common/b2StackAllocator.cpp +83 -0
- data/src/physics/Box2D/Common/b2StackAllocator.h +60 -0
- data/src/physics/Box2D/Common/b2Timer.cpp +101 -0
- data/src/physics/Box2D/Common/b2Timer.h +50 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.cpp +53 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.h +39 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.cpp +53 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.h +39 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.cpp +52 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.h +39 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2Contact.cpp +247 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2Contact.h +349 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.cpp +838 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.h +95 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp +49 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.h +39 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp +49 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.h +39 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp +49 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.h +38 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.cpp +52 -0
- data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.h +39 -0
- data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.cpp +260 -0
- data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.h +169 -0
- data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.cpp +251 -0
- data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.h +119 -0
- data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.cpp +419 -0
- data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.h +125 -0
- data/src/physics/Box2D/Dynamics/Joints/b2Joint.cpp +211 -0
- data/src/physics/Box2D/Dynamics/Joints/b2Joint.h +226 -0
- data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.cpp +304 -0
- data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.h +133 -0
- data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.cpp +222 -0
- data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.h +129 -0
- data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp +629 -0
- data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.h +196 -0
- data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.cpp +348 -0
- data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.h +152 -0
- data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp +502 -0
- data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.h +204 -0
- data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.cpp +241 -0
- data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.h +114 -0
- data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.cpp +344 -0
- data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.h +126 -0
- data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.cpp +419 -0
- data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.h +210 -0
- data/src/physics/Box2D/Dynamics/b2Body.cpp +549 -0
- data/src/physics/Box2D/Dynamics/b2Body.h +860 -0
- data/src/physics/Box2D/Dynamics/b2ContactManager.cpp +296 -0
- data/src/physics/Box2D/Dynamics/b2ContactManager.h +52 -0
- data/src/physics/Box2D/Dynamics/b2Fixture.cpp +303 -0
- data/src/physics/Box2D/Dynamics/b2Fixture.h +345 -0
- data/src/physics/Box2D/Dynamics/b2Island.cpp +539 -0
- data/src/physics/Box2D/Dynamics/b2Island.h +93 -0
- data/src/physics/Box2D/Dynamics/b2TimeStep.h +70 -0
- data/src/physics/Box2D/Dynamics/b2World.cpp +1339 -0
- data/src/physics/Box2D/Dynamics/b2World.h +354 -0
- data/src/physics/Box2D/Dynamics/b2WorldCallbacks.cpp +36 -0
- data/src/physics/Box2D/Dynamics/b2WorldCallbacks.h +155 -0
- data/src/physics/Box2D/Rope/b2Rope.cpp +259 -0
- data/src/physics/Box2D/Rope/b2Rope.h +115 -0
- data/src/style.cpp +2 -2
- data/src/view.cpp +217 -17
- data/src/window.cpp +25 -15
- data/src/world.cpp +206 -0
- data/src/world.h +96 -0
- data/task/box2d.rake +25 -0
- data/test/test_view.rb +5 -5
- metadata +125 -3
data/src/view.cpp
CHANGED
@@ -4,10 +4,10 @@
|
|
4
4
|
#include <assert.h>
|
5
5
|
#include <algorithm>
|
6
6
|
#include <boost/scoped_ptr.hpp>
|
7
|
-
#include <rays/bounds.h>
|
8
|
-
#include <rays/painter.h>
|
9
7
|
#include "reflex/window.h"
|
8
|
+
#include "reflex/body.h"
|
10
9
|
#include "reflex/exception.h"
|
10
|
+
#include "world.h"
|
11
11
|
|
12
12
|
|
13
13
|
namespace Reflex
|
@@ -38,6 +38,10 @@ namespace Reflex
|
|
38
38
|
|
39
39
|
boost::scoped_ptr<StyleList> pstyles;
|
40
40
|
|
41
|
+
boost::scoped_ptr<World> pworld;
|
42
|
+
|
43
|
+
boost::scoped_ptr<Body> pbody;
|
44
|
+
|
41
45
|
Style style;
|
42
46
|
|
43
47
|
ushort capture;
|
@@ -80,6 +84,30 @@ namespace Reflex
|
|
80
84
|
return *pstyles;
|
81
85
|
}
|
82
86
|
|
87
|
+
World* world ()
|
88
|
+
{
|
89
|
+
if (!pworld) pworld.reset(new World());
|
90
|
+
return pworld.get();
|
91
|
+
}
|
92
|
+
|
93
|
+
World* parent_world ()
|
94
|
+
{
|
95
|
+
if (!parent) return NULL;
|
96
|
+
return parent->self->world();
|
97
|
+
}
|
98
|
+
|
99
|
+
Body* body (View* this_)
|
100
|
+
{
|
101
|
+
if (!pbody)
|
102
|
+
{
|
103
|
+
World* world = parent_world();
|
104
|
+
if (!world) return NULL;
|
105
|
+
pbody.reset(world->create_body(frame.position()));
|
106
|
+
this_->make_body();
|
107
|
+
}
|
108
|
+
return pbody.get();
|
109
|
+
}
|
110
|
+
|
83
111
|
};// View::Data
|
84
112
|
|
85
113
|
|
@@ -110,6 +138,7 @@ namespace Reflex
|
|
110
138
|
{
|
111
139
|
Event e;
|
112
140
|
this_->on_attach(&e);
|
141
|
+
this_->resize_to_fit();
|
113
142
|
}
|
114
143
|
}
|
115
144
|
|
@@ -133,6 +162,21 @@ namespace Reflex
|
|
133
162
|
set_window(this_, parent_ ? parent_->window() : NULL);
|
134
163
|
}
|
135
164
|
|
165
|
+
static void
|
166
|
+
update_world (View* view, float dt)
|
167
|
+
{
|
168
|
+
World* world = view->self->pworld.get();
|
169
|
+
if (world) world->step(dt);
|
170
|
+
|
171
|
+
Body* body = view->self->pbody.get();
|
172
|
+
if (body)
|
173
|
+
{
|
174
|
+
Bounds b = view->frame();
|
175
|
+
b.move_to(body->position());
|
176
|
+
view->set_frame(b);
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
136
180
|
void
|
137
181
|
update_view_tree (View* view, const UpdateEvent& event)
|
138
182
|
{
|
@@ -140,6 +184,7 @@ namespace Reflex
|
|
140
184
|
argument_error(__FILE__, __LINE__);
|
141
185
|
|
142
186
|
UpdateEvent e = event;
|
187
|
+
update_world(view, e.dt);
|
143
188
|
view->on_update(&e);
|
144
189
|
|
145
190
|
View::child_iterator end = view->child_end();
|
@@ -147,6 +192,13 @@ namespace Reflex
|
|
147
192
|
update_view_tree(it->get(), e);
|
148
193
|
}
|
149
194
|
|
195
|
+
static void
|
196
|
+
draw_world (View* view, Painter* painter)
|
197
|
+
{
|
198
|
+
World* world = view->self->pworld.get();
|
199
|
+
if (world) world->draw(painter);
|
200
|
+
}
|
201
|
+
|
150
202
|
void
|
151
203
|
draw_view_tree (
|
152
204
|
View* view, const DrawEvent& event, const Point& offset, const Bounds& clip)
|
@@ -154,6 +206,8 @@ namespace Reflex
|
|
154
206
|
if (!view)
|
155
207
|
argument_error(__FILE__, __LINE__);
|
156
208
|
|
209
|
+
if (view->hidden()) return;
|
210
|
+
|
157
211
|
DrawEvent e = event;
|
158
212
|
e.painter->push_matrix();
|
159
213
|
e.painter->push_attr();
|
@@ -174,6 +228,8 @@ namespace Reflex
|
|
174
228
|
for (View::child_iterator it = view->child_begin(); it != end; ++it)
|
175
229
|
draw_view_tree(it->get(), e, p, c);
|
176
230
|
|
231
|
+
draw_world(view, e.painter);
|
232
|
+
|
177
233
|
e.painter->pop_attr();
|
178
234
|
e.painter->pop_matrix();
|
179
235
|
}
|
@@ -651,8 +707,17 @@ namespace Reflex
|
|
651
707
|
if (!*this)
|
652
708
|
invalid_state_error(__FILE__, __LINE__);
|
653
709
|
|
654
|
-
|
655
|
-
|
710
|
+
int new_count = self->hide_count - 1;
|
711
|
+
if (new_count == 0)
|
712
|
+
{
|
713
|
+
Event e;
|
714
|
+
on_show(&e);
|
715
|
+
if (e.is_blocked()) return;
|
716
|
+
|
717
|
+
redraw();
|
718
|
+
}
|
719
|
+
|
720
|
+
self->hide_count = new_count;
|
656
721
|
}
|
657
722
|
|
658
723
|
void
|
@@ -661,8 +726,17 @@ namespace Reflex
|
|
661
726
|
if (!*this)
|
662
727
|
invalid_state_error(__FILE__, __LINE__);
|
663
728
|
|
664
|
-
|
665
|
-
|
729
|
+
int new_count = self->hide_count + 1;
|
730
|
+
if (new_count == 1)
|
731
|
+
{
|
732
|
+
Event e;
|
733
|
+
on_hide(&e);
|
734
|
+
if (e.is_blocked()) return;
|
735
|
+
|
736
|
+
redraw();
|
737
|
+
}
|
738
|
+
|
739
|
+
self->hide_count = new_count;
|
666
740
|
}
|
667
741
|
|
668
742
|
bool
|
@@ -979,6 +1053,32 @@ namespace Reflex
|
|
979
1053
|
return -1;
|
980
1054
|
}
|
981
1055
|
|
1056
|
+
void
|
1057
|
+
View::make_body ()
|
1058
|
+
{
|
1059
|
+
Body* b = body();
|
1060
|
+
if (!b) return;
|
1061
|
+
|
1062
|
+
b->clear_fixtures();
|
1063
|
+
|
1064
|
+
const Point& size = frame().size();
|
1065
|
+
b->add_box(size.x, size.y);
|
1066
|
+
}
|
1067
|
+
|
1068
|
+
void
|
1069
|
+
View::clear_body ()
|
1070
|
+
{
|
1071
|
+
Body* body = self->pbody.get();
|
1072
|
+
if (!body) return;
|
1073
|
+
|
1074
|
+
World* world = self->parent_world();
|
1075
|
+
if (!world)
|
1076
|
+
invalid_state_error(__FILE__, __LINE__);
|
1077
|
+
|
1078
|
+
world->destroy_body(body);
|
1079
|
+
self->pbody.reset();
|
1080
|
+
}
|
1081
|
+
|
982
1082
|
void
|
983
1083
|
View::set_name (const char* name)
|
984
1084
|
{
|
@@ -1224,15 +1324,100 @@ namespace Reflex
|
|
1224
1324
|
return const_cast<View*>(this)->window();
|
1225
1325
|
}
|
1226
1326
|
|
1227
|
-
|
1228
|
-
View::
|
1327
|
+
Body*
|
1328
|
+
View::body ()
|
1329
|
+
{
|
1330
|
+
if (!*this)
|
1331
|
+
invalid_state_error(__FILE__, __LINE__);
|
1332
|
+
|
1333
|
+
return self->body(this);
|
1334
|
+
}
|
1335
|
+
|
1336
|
+
const Body*
|
1337
|
+
View::body () const
|
1338
|
+
{
|
1339
|
+
return const_cast<View*>(this)->body();
|
1340
|
+
}
|
1341
|
+
|
1342
|
+
void
|
1343
|
+
View::set_density (float density)
|
1344
|
+
{
|
1345
|
+
Body* b = body();
|
1346
|
+
if (!b)
|
1347
|
+
invalid_state_error(__FILE__, __LINE__);
|
1348
|
+
|
1349
|
+
b->set_density(density);
|
1350
|
+
}
|
1351
|
+
|
1352
|
+
void
|
1353
|
+
View::set_friction (float friction)
|
1354
|
+
{
|
1355
|
+
Body* b = body();
|
1356
|
+
if (!b)
|
1357
|
+
invalid_state_error(__FILE__, __LINE__);
|
1358
|
+
|
1359
|
+
b->set_friction(friction);
|
1360
|
+
}
|
1361
|
+
|
1362
|
+
void
|
1363
|
+
View::set_restitution (float restitution)
|
1364
|
+
{
|
1365
|
+
Body* b = body();
|
1366
|
+
if (!b)
|
1367
|
+
invalid_state_error(__FILE__, __LINE__);
|
1368
|
+
|
1369
|
+
b->set_restitution(restitution);
|
1370
|
+
}
|
1371
|
+
|
1372
|
+
void
|
1373
|
+
View::set_gravity (float x, float y)
|
1374
|
+
{
|
1375
|
+
set_gravity(Point(x, y));
|
1376
|
+
}
|
1377
|
+
|
1378
|
+
void
|
1379
|
+
View::set_gravity (const Point& vector)
|
1380
|
+
{
|
1381
|
+
World* world = self->world();
|
1382
|
+
if (!world)
|
1383
|
+
invalid_state_error(__FILE__, __LINE__);
|
1384
|
+
|
1385
|
+
world->set_gravity(vector);
|
1386
|
+
}
|
1387
|
+
|
1388
|
+
Point
|
1389
|
+
View::gravity () const
|
1390
|
+
{
|
1391
|
+
World* world = self->pworld.get();
|
1392
|
+
return world ? world->gravity() : 0;
|
1393
|
+
}
|
1394
|
+
|
1395
|
+
void
|
1396
|
+
View::set_debug (bool state)
|
1397
|
+
{
|
1398
|
+
World* world = self->world();
|
1399
|
+
if (!world)
|
1400
|
+
invalid_state_error(__FILE__, __LINE__);
|
1401
|
+
|
1402
|
+
world->set_debug(state);
|
1403
|
+
}
|
1404
|
+
|
1405
|
+
bool
|
1406
|
+
View::is_debug () const
|
1407
|
+
{
|
1408
|
+
World* world = self->pworld.get();
|
1409
|
+
return world ? world->is_debug() : false;
|
1410
|
+
}
|
1411
|
+
|
1412
|
+
Point
|
1413
|
+
View::from_parent (const Point& point) const
|
1229
1414
|
{
|
1230
1415
|
not_implemented_error(__FILE__, __LINE__);
|
1231
1416
|
return 0;
|
1232
1417
|
}
|
1233
1418
|
|
1234
|
-
|
1235
|
-
View::to_parent (const
|
1419
|
+
Point
|
1420
|
+
View::to_parent (const Point& point) const
|
1236
1421
|
{
|
1237
1422
|
not_implemented_error(__FILE__, __LINE__);
|
1238
1423
|
return 0;
|
@@ -1247,22 +1432,22 @@ namespace Reflex
|
|
1247
1432
|
return p;
|
1248
1433
|
}
|
1249
1434
|
|
1250
|
-
|
1251
|
-
View::to_window (const
|
1435
|
+
Point
|
1436
|
+
View::to_window (const Point& point) const
|
1252
1437
|
{
|
1253
1438
|
not_implemented_error(__FILE__, __LINE__);
|
1254
1439
|
return 0;
|
1255
1440
|
}
|
1256
1441
|
|
1257
|
-
|
1258
|
-
View::from_screen (const
|
1442
|
+
Point
|
1443
|
+
View::from_screen (const Point& point) const
|
1259
1444
|
{
|
1260
1445
|
not_implemented_error(__FILE__, __LINE__);
|
1261
1446
|
return 0;
|
1262
1447
|
}
|
1263
1448
|
|
1264
|
-
|
1265
|
-
View::to_screen (const
|
1449
|
+
Point
|
1450
|
+
View::to_screen (const Point& point) const
|
1266
1451
|
{
|
1267
1452
|
not_implemented_error(__FILE__, __LINE__);
|
1268
1453
|
return 0;
|
@@ -1271,7 +1456,8 @@ namespace Reflex
|
|
1271
1456
|
void
|
1272
1457
|
View::on_attach (Event* e)
|
1273
1458
|
{
|
1274
|
-
|
1459
|
+
if (!e)
|
1460
|
+
argument_error(__FILE__, __LINE__);
|
1275
1461
|
}
|
1276
1462
|
|
1277
1463
|
void
|
@@ -1281,6 +1467,20 @@ namespace Reflex
|
|
1281
1467
|
argument_error(__FILE__, __LINE__);
|
1282
1468
|
}
|
1283
1469
|
|
1470
|
+
void
|
1471
|
+
View::on_show (Event* e)
|
1472
|
+
{
|
1473
|
+
if (!e)
|
1474
|
+
argument_error(__FILE__, __LINE__);
|
1475
|
+
}
|
1476
|
+
|
1477
|
+
void
|
1478
|
+
View::on_hide (Event* e)
|
1479
|
+
{
|
1480
|
+
if (!e)
|
1481
|
+
argument_error(__FILE__, __LINE__);
|
1482
|
+
}
|
1483
|
+
|
1284
1484
|
void
|
1285
1485
|
View::on_update (UpdateEvent* e)
|
1286
1486
|
{
|
data/src/window.cpp
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
#include "reflex/window.h"
|
2
2
|
|
3
3
|
|
4
|
-
#include <rays/bounds.h>
|
5
|
-
#include <rays/painter.h>
|
6
4
|
#include "reflex/view.h"
|
7
5
|
#include "reflex/exception.h"
|
8
6
|
|
@@ -11,11 +9,6 @@ namespace Reflex
|
|
11
9
|
{
|
12
10
|
|
13
11
|
|
14
|
-
void update_view_tree (View* v, const UpdateEvent& e);
|
15
|
-
|
16
|
-
void draw_view_tree (View* v, const DrawEvent& e, const Point& offset, const Bounds& clip);
|
17
|
-
|
18
|
-
|
19
12
|
const View*
|
20
13
|
Window::root () const
|
21
14
|
{
|
@@ -34,36 +27,53 @@ namespace Reflex
|
|
34
27
|
return const_cast<Window*>(this)->painter();
|
35
28
|
}
|
36
29
|
|
37
|
-
|
38
|
-
Window::from_screen (const
|
30
|
+
Point
|
31
|
+
Window::from_screen (const Point& point) const
|
39
32
|
{
|
40
33
|
not_implemented_error(__FILE__, __LINE__);
|
41
34
|
return 0;
|
42
35
|
}
|
43
36
|
|
44
|
-
|
45
|
-
Window::to_screen (const
|
37
|
+
Point
|
38
|
+
Window::to_screen (const Point& point) const
|
46
39
|
{
|
47
40
|
not_implemented_error(__FILE__, __LINE__);
|
48
41
|
return 0;
|
49
42
|
}
|
50
43
|
|
51
44
|
void
|
52
|
-
Window::
|
45
|
+
Window::on_show (Event* e)
|
53
46
|
{
|
54
47
|
if (!e)
|
55
48
|
argument_error(__FILE__, __LINE__);
|
49
|
+
}
|
56
50
|
|
57
|
-
|
51
|
+
void
|
52
|
+
Window::on_hide (Event* e)
|
53
|
+
{
|
54
|
+
if (!e)
|
55
|
+
argument_error(__FILE__, __LINE__);
|
58
56
|
}
|
59
57
|
|
60
58
|
void
|
61
|
-
Window::
|
59
|
+
Window::on_close (Event* e)
|
62
60
|
{
|
63
61
|
if (!e)
|
64
62
|
argument_error(__FILE__, __LINE__);
|
63
|
+
}
|
65
64
|
|
66
|
-
|
65
|
+
void
|
66
|
+
Window::on_update (UpdateEvent* e)
|
67
|
+
{
|
68
|
+
if (!e)
|
69
|
+
argument_error(__FILE__, __LINE__);
|
70
|
+
}
|
71
|
+
|
72
|
+
void
|
73
|
+
Window::on_draw (DrawEvent* e)
|
74
|
+
{
|
75
|
+
if (!e)
|
76
|
+
argument_error(__FILE__, __LINE__);
|
67
77
|
}
|
68
78
|
|
69
79
|
void
|
data/src/world.cpp
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
#include "world.h"
|
2
|
+
|
3
|
+
|
4
|
+
#include <assert.h>
|
5
|
+
#include <boost/scoped_array.hpp>
|
6
|
+
#include <Box2D/Dynamics/b2Body.h>
|
7
|
+
#include <Box2D/Common/b2Draw.h>
|
8
|
+
#include "xot/util.h"
|
9
|
+
#include "reflex/body.h"
|
10
|
+
|
11
|
+
|
12
|
+
namespace Reflex
|
13
|
+
{
|
14
|
+
|
15
|
+
|
16
|
+
class DebugDraw : public b2Draw
|
17
|
+
{
|
18
|
+
|
19
|
+
public:
|
20
|
+
|
21
|
+
DebugDraw (float scale)
|
22
|
+
: scale(scale), painter(NULL)
|
23
|
+
{
|
24
|
+
SetFlags(e_shapeBit);
|
25
|
+
}
|
26
|
+
|
27
|
+
void begin (Painter* painter)
|
28
|
+
{
|
29
|
+
this->painter = painter;
|
30
|
+
painter->push_attr();
|
31
|
+
}
|
32
|
+
|
33
|
+
void end ()
|
34
|
+
{
|
35
|
+
painter->pop_attr();
|
36
|
+
painter = NULL;
|
37
|
+
}
|
38
|
+
|
39
|
+
void DrawPolygon (
|
40
|
+
const b2Vec2* vertices, int32 vertexCount, const b2Color& color)
|
41
|
+
{
|
42
|
+
assert(painter);
|
43
|
+
|
44
|
+
painter->no_fill();
|
45
|
+
painter->set_stroke(color.r, color.g, color.b, color.a * 0.5);
|
46
|
+
|
47
|
+
boost::scoped_array<Coord2> points(new Coord2[vertexCount]);
|
48
|
+
for (int i = 0; i < vertexCount; ++i)
|
49
|
+
points[i] = to_coord2(vertices[i], scale);
|
50
|
+
|
51
|
+
painter->polygon(&points[0], vertexCount);
|
52
|
+
}
|
53
|
+
|
54
|
+
void DrawSolidPolygon (
|
55
|
+
const b2Vec2* vertices, int32 vertexCount, const b2Color& color)
|
56
|
+
{
|
57
|
+
assert(painter);
|
58
|
+
|
59
|
+
painter->set_fill(color.r, color.g, color.b, color.a * 0.5);
|
60
|
+
painter->no_stroke();
|
61
|
+
|
62
|
+
boost::scoped_array<Coord2> points(new Coord2[vertexCount]);
|
63
|
+
for (int i = 0; i < vertexCount; ++i)
|
64
|
+
points[i] = to_coord2(vertices[i], scale);
|
65
|
+
|
66
|
+
painter->polygon(&points[0], vertexCount);
|
67
|
+
}
|
68
|
+
|
69
|
+
void DrawCircle (
|
70
|
+
const b2Vec2& center, float32 radius, const b2Color& color)
|
71
|
+
{
|
72
|
+
assert(painter);
|
73
|
+
|
74
|
+
painter->no_fill();
|
75
|
+
painter->set_stroke(color.r, color.g, color.b, color.a * 0.5);
|
76
|
+
painter->ellipse(Point(center.x * scale, center.y * scale), radius * scale);
|
77
|
+
}
|
78
|
+
|
79
|
+
void DrawSolidCircle (
|
80
|
+
const b2Vec2& center, float32 radius, const b2Vec2& axis, const b2Color& color)
|
81
|
+
{
|
82
|
+
assert(painter);
|
83
|
+
|
84
|
+
painter->set_fill(color.r, color.g, color.b, color.a * 0.5);
|
85
|
+
painter->no_stroke();
|
86
|
+
painter->ellipse(Point(center.x * scale, center.y * scale), radius * scale);
|
87
|
+
}
|
88
|
+
|
89
|
+
void DrawSegment (
|
90
|
+
const b2Vec2& p1, const b2Vec2& p2, const b2Color& color)
|
91
|
+
{
|
92
|
+
assert(painter);
|
93
|
+
|
94
|
+
painter->no_fill();
|
95
|
+
painter->set_stroke(color.r, color.g, color.b, color.a * 0.5);
|
96
|
+
painter->line(p1.x * scale, p1.y * scale, p2.x * scale, p2.y * scale);
|
97
|
+
}
|
98
|
+
|
99
|
+
void DrawTransform (const b2Transform& transform)
|
100
|
+
{
|
101
|
+
assert(painter);
|
102
|
+
}
|
103
|
+
|
104
|
+
private:
|
105
|
+
|
106
|
+
float scale;
|
107
|
+
|
108
|
+
Painter* painter;
|
109
|
+
|
110
|
+
};// DebugDraw
|
111
|
+
|
112
|
+
|
113
|
+
World::World (float scale)
|
114
|
+
: world(b2Vec2(0, 0)), scale(scale), wall(NULL), debug_draw(NULL)
|
115
|
+
{
|
116
|
+
wall = create_body();
|
117
|
+
}
|
118
|
+
|
119
|
+
World::~World ()
|
120
|
+
{
|
121
|
+
delete debug_draw;
|
122
|
+
}
|
123
|
+
|
124
|
+
void
|
125
|
+
World::step (float dt)
|
126
|
+
{
|
127
|
+
world.Step(dt, 6, 2);
|
128
|
+
}
|
129
|
+
|
130
|
+
Body*
|
131
|
+
World::create_body (const Point& position, float degree)
|
132
|
+
{
|
133
|
+
b2BodyDef def;
|
134
|
+
def.position = to_box2d(position, scale);
|
135
|
+
def.angle = Xot::deg2rad(degree);
|
136
|
+
return new Body(world.CreateBody(&def), scale);
|
137
|
+
}
|
138
|
+
|
139
|
+
void
|
140
|
+
World::destroy_body (Body* body)
|
141
|
+
{
|
142
|
+
world.DestroyBody((b2Body*) body->handle);
|
143
|
+
}
|
144
|
+
|
145
|
+
void
|
146
|
+
World::resize (coord width, coord height)
|
147
|
+
{
|
148
|
+
wall->clear_fixtures();
|
149
|
+
|
150
|
+
coord w = width / scale;
|
151
|
+
coord h = height / scale;
|
152
|
+
const Point points[] = {
|
153
|
+
Point(0, 0),
|
154
|
+
Point(0, h),
|
155
|
+
Point(w, h),
|
156
|
+
Point(w, 0),
|
157
|
+
};
|
158
|
+
wall->add_edge(points, 4, true);
|
159
|
+
}
|
160
|
+
|
161
|
+
void
|
162
|
+
World::draw (Painter* painter)
|
163
|
+
{
|
164
|
+
if (!debug_draw) return;
|
165
|
+
|
166
|
+
debug_draw->begin(painter);
|
167
|
+
world.DrawDebugData();
|
168
|
+
debug_draw->end();
|
169
|
+
}
|
170
|
+
|
171
|
+
void
|
172
|
+
World::set_gravity (const Point& gravity)
|
173
|
+
{
|
174
|
+
world.SetGravity(to_box2d(gravity, scale));
|
175
|
+
}
|
176
|
+
|
177
|
+
Point
|
178
|
+
World::gravity () const
|
179
|
+
{
|
180
|
+
return to_point(world.GetGravity(), scale);
|
181
|
+
}
|
182
|
+
|
183
|
+
void
|
184
|
+
World::set_debug (bool state)
|
185
|
+
{
|
186
|
+
if (state == is_debug()) return;
|
187
|
+
|
188
|
+
if (!debug_draw)
|
189
|
+
debug_draw = new DebugDraw(scale);
|
190
|
+
else
|
191
|
+
{
|
192
|
+
delete debug_draw;
|
193
|
+
debug_draw = NULL;
|
194
|
+
}
|
195
|
+
|
196
|
+
world.SetDebugDraw(debug_draw);
|
197
|
+
}
|
198
|
+
|
199
|
+
bool
|
200
|
+
World::is_debug () const
|
201
|
+
{
|
202
|
+
return debug_draw;
|
203
|
+
}
|
204
|
+
|
205
|
+
|
206
|
+
}// Reflex
|