reflexion 0.1.8 → 0.1.9

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/reflex/application.cpp +5 -1
  3. data/.doc/ext/reflex/arc_shape.cpp +89 -0
  4. data/.doc/ext/reflex/body.cpp +91 -12
  5. data/.doc/ext/reflex/contact_event.cpp +90 -0
  6. data/.doc/ext/reflex/ellipse_shape.cpp +89 -0
  7. data/.doc/ext/reflex/image_view.cpp +0 -16
  8. data/.doc/ext/reflex/native.cpp +18 -6
  9. data/.doc/ext/reflex/rect_shape.cpp +83 -0
  10. data/.doc/ext/reflex/shape_view.cpp +153 -0
  11. data/.doc/ext/reflex/view.cpp +63 -26
  12. data/.doc/ext/reflex/window.cpp +5 -1
  13. data/VERSION +1 -1
  14. data/ext/reflex/application.cpp +6 -2
  15. data/ext/reflex/arc_shape.cpp +94 -0
  16. data/ext/reflex/body.cpp +101 -13
  17. data/ext/reflex/contact_event.cpp +95 -0
  18. data/ext/reflex/ellipse_shape.cpp +94 -0
  19. data/ext/reflex/image_view.cpp +0 -18
  20. data/ext/reflex/native.cpp +18 -6
  21. data/ext/reflex/rect_shape.cpp +86 -0
  22. data/ext/reflex/shape_view.cpp +161 -0
  23. data/ext/reflex/view.cpp +71 -30
  24. data/ext/reflex/window.cpp +5 -1
  25. data/include/reflex/body.h +42 -12
  26. data/include/reflex/event.h +27 -1
  27. data/include/reflex/fixture.h +6 -5
  28. data/include/reflex/image_view.h +5 -5
  29. data/include/reflex/ruby/application.h +27 -6
  30. data/include/reflex/ruby/event.h +11 -0
  31. data/include/reflex/ruby/shape_view.h +96 -0
  32. data/include/reflex/ruby/view.h +60 -5
  33. data/include/reflex/ruby/window.h +12 -3
  34. data/include/reflex/shape_view.h +146 -0
  35. data/include/reflex/view.h +17 -5
  36. data/lib/reflex/application.rb +9 -9
  37. data/lib/reflex/body.rb +2 -0
  38. data/lib/reflex/contact_event.rb +38 -0
  39. data/lib/reflex/image_view.rb +1 -1
  40. data/lib/reflex/shape_view.rb +25 -0
  41. data/lib/reflex/view.rb +19 -9
  42. data/lib/reflex/window.rb +11 -10
  43. data/lib/reflex.rb +15 -13
  44. data/lib/reflexion.rb +25 -18
  45. data/samples/osx/hello/hello/main.cpp +6 -0
  46. data/samples/physics.rb +22 -12
  47. data/samples/reflexion/breakout.rb +52 -0
  48. data/samples/reflexion/hello.rb +5 -7
  49. data/samples/reflexion/paint.rb +10 -11
  50. data/samples/reflexion/physics.rb +28 -0
  51. data/samples/reflexion/pulse.rb +10 -8
  52. data/samples/shapes.rb +2 -2
  53. data/src/body.cpp +241 -40
  54. data/src/event.cpp +32 -2
  55. data/src/shape_view.cpp +306 -0
  56. data/src/view.cpp +232 -66
  57. data/src/world.cpp +110 -30
  58. data/src/world.h +61 -14
  59. metadata +24 -7
  60. data/lib/reflex/arc_shape.rb +0 -20
  61. data/lib/reflex/ellipse_shape.rb +0 -20
  62. data/lib/reflex/line_shape.rb +0 -20
  63. data/lib/reflex/rect_shape.rb +0 -20
  64. data/lib/reflex/shape.rb +0 -34
@@ -14,11 +14,9 @@ array = []
14
14
  draw do
15
15
  gray += 0.01
16
16
  gray %= 1
17
- painter.tap do |p|
18
- p.background gray, gray, gray
19
- array.unshift fps
20
- array.slice! 32..-1
21
- p.text "#{array.reduce(0) {|sum, n| sum + n}.tap {|n| break n / array.size}.to_i} FPS", 10, 30
22
- p.text "#{fps} FPS", 10, 10
23
- end
17
+ background gray, gray, gray
18
+ array.unshift event.fps
19
+ array.slice! 32..-1
20
+ text "#{array.reduce(0) {|sum, n| sum + n}.tap {|n| break n / array.size}.to_i} FPS", 10, 30
21
+ text "#{event.fps} FPS", 10, 10
24
22
  end
@@ -10,30 +10,29 @@ require 'reflexion/include'
10
10
 
11
11
  FILENAME = 'paint.png'
12
12
 
13
- canvas = Image.load(FILENAME) rescue nil || Image.new(512, 512).paint {
14
- background :white
15
- clear
16
- }
13
+ canvas =
14
+ Image.load(FILENAME) rescue nil ||
15
+ Image.new(512, 512).paint {background :white}
17
16
 
18
17
  setup do
19
18
  size canvas.size
20
19
  end
21
20
 
22
21
  draw do
23
- painter.image canvas
22
+ image canvas
24
23
  end
25
24
 
26
- pointer do |e|
27
- if e.down? || e.drag?
25
+ pointer do
26
+ if down? || drag?
28
27
  canvas.paint do
29
- fill e.left? ? :red : e.right? ? :blue : :white
30
- ellipse e.x - 10, e.y - 10, 20, 20
28
+ fill event.left? ? :red : event.right? ? :blue : :white
29
+ ellipse *(event.pos - 10).to_a, 20, 20
31
30
  end
32
31
  end
33
32
  end
34
33
 
35
- key do |e|
36
- case e.chars
34
+ key do
35
+ case chars
37
36
  when /s/i then canvas.save FILENAME
38
37
  when /q/i, "\e" then quit
39
38
  end
@@ -0,0 +1,28 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ %w[xot rays reflex]
5
+ .map {|s| File.expand_path "../../../../#{s}/lib", __FILE__}
6
+ .each {|s| $:.unshift s if !$:.include?(s) && File.directory?(s)}
7
+
8
+ require 'reflexion/include'
9
+
10
+
11
+ setup do
12
+ set size: [600, 400], gravity: Point.new(0, 9.8) * meter #, debug: true
13
+ end
14
+
15
+ draw do
16
+ text "#{event.fps.to_i} FPS", 10, 10
17
+ end
18
+
19
+ pointer do
20
+ if down? || drag?
21
+ window.add [RectShape, EllipseShape].sample.new {
22
+ size = rand 20..40
23
+ color = event.right? ? :gray : [:red, :green, :blue].sample
24
+ set frame: [*event.pos.to_a, size, size], fill: color
25
+ set dynamic: event.left?, density: 1
26
+ }
27
+ end
28
+ end
@@ -17,18 +17,20 @@ setup do
17
17
  painter.font = Font.new nil, 24
18
18
  end
19
19
 
20
- draw do |e|
20
+ draw do
21
21
  frame += 1
22
- fps = e.fps.to_i if (frame % 5) == 0
23
- e.painter.text "#{fps} FPS | FRAME: #{frame}", 10, 10
22
+ fps = event.fps.to_i if (frame % 5) == 0
23
+ text "#{fps} FPS | FRAME: #{frame}", 10, 10
24
24
  end
25
25
 
26
- key do |e|
27
- quit if e.chars == 'q' || e.code == 53
26
+ key do
27
+ quit if chars == 'q' || code == 53
28
28
  end
29
29
 
30
- pointer do |e|
31
- if e.down? || e.drag?
32
- window.add EllipseShape.new {set frame: [e.x - 10, e.y - 10, 20, 20], color: :red}
30
+ pointer do
31
+ if down? || drag?
32
+ window.add EllipseShape.new {
33
+ set frame: [*(event.pos - 10).to_a, 20, 20], fill: :red
34
+ }
33
35
  end
34
36
  end
data/samples/shapes.rb CHANGED
@@ -17,9 +17,9 @@ win = Window.new do
17
17
  p.background 0
18
18
  p.fill 1
19
19
 
20
- %w[line rect ellipse arc].each.with_index do |shape, i|
20
+ %w[rect ellipse arc].each.with_index do |shape, i|
21
21
  add Reflex.const_get("#{shape.capitalize}Shape").new {
22
- set frame: [32 + 64 * i, 32, 50, 50], color: :gray, border: :white
22
+ set frame: [32 + 64 * i, 32, 50, 50], fill: :gray, stroke: :white
23
23
  }
24
24
  end
25
25
  end
data/src/body.cpp CHANGED
@@ -1,6 +1,7 @@
1
1
  #include "reflex/body.h"
2
2
 
3
3
 
4
+ #include <math.h>
4
5
  #include <assert.h>
5
6
  #include <vector>
6
7
  #include <Box2D/Common/b2Math.h>
@@ -10,7 +11,9 @@
10
11
  #include <Box2D/Collision/Shapes/b2EdgeShape.h>
11
12
  #include <Box2D/Collision/Shapes/b2ChainShape.h>
12
13
  #include <Box2D/Collision/Shapes/b2PolygonShape.h>
14
+ #include "xot/util.h"
13
15
  #include "reflex/exception.h"
16
+ #include "reflex/painter.h"
14
17
  #include "world.h"
15
18
 
16
19
 
@@ -21,18 +24,26 @@ namespace Reflex
21
24
  {
22
25
 
23
26
 
24
- Body::Body (Handle h, float scale)
25
- : handle(h), scale(scale)
27
+ static const float PI = M_PI;
28
+
29
+ static const float PI_2 = PI * 2;
30
+
31
+
32
+ Body::Body (Handle h, float pixels_per_meter)
33
+ : handle(h), ppm(pixels_per_meter)
26
34
  {
27
35
  assert(h);
28
36
  }
29
37
 
30
38
  Fixture
31
- Body::add_box (float width, float height)
39
+ Body::add_box (coord width, coord height)
32
40
  {
33
- assert(PTR);
41
+ assert(PTR && PTR->GetWorld());
34
42
 
35
- b2Vec2 size(width / scale / 2, height / scale / 2);
43
+ if (PTR->GetWorld()->IsLocked())
44
+ invalid_state_error(__FILE__, __LINE__);
45
+
46
+ b2Vec2 size(width / ppm / 2, height / ppm / 2);
36
47
 
37
48
  b2PolygonShape shape;
38
49
  shape.SetAsBox(size.x, size.y);
@@ -46,11 +57,9 @@ namespace Reflex
46
57
  }
47
58
 
48
59
  Fixture
49
- Body::add_circle (float size)
60
+ add_circle (b2Body* handle, coord size, float ppm)
50
61
  {
51
- assert(PTR);
52
-
53
- float radius = size / scale / 2.f;
62
+ coord radius = size / ppm / 2.f;
54
63
 
55
64
  b2CircleShape shape;
56
65
  shape.m_radius = radius;
@@ -62,13 +71,81 @@ namespace Reflex
62
71
  return PTR->CreateFixture(&fixture);
63
72
  }
64
73
 
74
+ Fixture
75
+ add_ellipse (
76
+ b2Body* handle, coord width, coord height, float from, float to,
77
+ coord radius_min, uint nsegment, float ppm)
78
+ {
79
+ coord w = width / 2, h = height / 2;
80
+
81
+ if (nsegment == 0) nsegment = Painter::ELLIPSE_NSEGMENT;
82
+
83
+ std::vector<b2Vec2> vecs;
84
+ vecs.reserve(nsegment);
85
+ for (uint seg = 0; seg < nsegment; ++seg)
86
+ {
87
+ float pos = (float) seg / (float) nsegment;
88
+ float radian = (from + (to - from) * pos) * PI_2;
89
+ float x = cos(radian);
90
+ float y = -sin(radian);
91
+ vecs.push_back(b2Vec2(to_b2coord(w + w * x, ppm), to_b2coord(h + h * y, ppm)));
92
+ }
93
+
94
+ b2PolygonShape shape;
95
+ shape.Set(&vecs[0], (int32) nsegment);
96
+
97
+ b2FixtureDef fixture;
98
+ fixture.shape = &shape;
99
+
100
+ return PTR->CreateFixture(&fixture);
101
+ }
102
+
103
+ Fixture
104
+ Body::add_ellipse (coord width, coord height, coord radius_min, uint nsegment)
105
+ {
106
+ assert(PTR && PTR->GetWorld());
107
+
108
+ if (PTR->GetWorld()->IsLocked())
109
+ invalid_state_error(__FILE__, __LINE__);
110
+
111
+ if (width == height && radius_min == 0)
112
+ return add_circle(PTR, width, ppm);
113
+ else
114
+ {
115
+ return Reflex::add_ellipse(
116
+ PTR, width, height, 0, 360, radius_min, nsegment, ppm);
117
+ }
118
+ }
119
+
120
+ Fixture
121
+ Body::add_arc (
122
+ coord width, coord height, float angle_from, float angle_to,
123
+ coord radius_min, uint nsegment)
124
+ {
125
+ assert(PTR && PTR->GetWorld());
126
+
127
+ if (PTR->GetWorld()->IsLocked())
128
+ invalid_state_error(__FILE__, __LINE__);
129
+
130
+ if (width == height && angle_from == 0 && angle_to == 360 && radius_min == 0)
131
+ return add_circle(PTR, width, ppm);
132
+ else
133
+ {
134
+ return Reflex::add_ellipse(
135
+ PTR, width, height, angle_from, angle_to, radius_min, nsegment, ppm);
136
+ }
137
+ }
138
+
65
139
  Fixture
66
140
  Body::add_edge (const Point& begin, const Point& end)
67
141
  {
68
- assert(PTR);
142
+ assert(PTR && PTR->GetWorld());
143
+
144
+ if (PTR->GetWorld()->IsLocked())
145
+ invalid_state_error(__FILE__, __LINE__);
69
146
 
70
147
  b2EdgeShape shape;
71
- shape.Set(to_box2d(begin, scale), to_box2d(end, scale));
148
+ shape.Set(to_b2vec2(begin, ppm), to_b2vec2(end, ppm));
72
149
 
73
150
  b2FixtureDef fixture;
74
151
  fixture.shape = &shape;
@@ -79,7 +156,10 @@ namespace Reflex
79
156
  Fixture
80
157
  Body::add_edge (const Point* points, size_t size, bool loop)
81
158
  {
82
- assert(PTR);
159
+ assert(PTR && PTR->GetWorld());
160
+
161
+ if (PTR->GetWorld()->IsLocked())
162
+ invalid_state_error(__FILE__, __LINE__);
83
163
 
84
164
  if (size == 2)
85
165
  return add_edge(points[0], points[1]);
@@ -87,7 +167,7 @@ namespace Reflex
87
167
  std::vector<b2Vec2> vecs;
88
168
  vecs.reserve(size);
89
169
  for (size_t i = 0; i < size; ++i)
90
- vecs.push_back(to_box2d(points[i], scale));
170
+ vecs.push_back(to_b2vec2(points[i], ppm));
91
171
 
92
172
  b2ChainShape shape;
93
173
  if (loop)
@@ -104,12 +184,15 @@ namespace Reflex
104
184
  Fixture
105
185
  Body::add_polygon (const Point* points, size_t size)
106
186
  {
107
- assert(PTR);
187
+ assert(PTR && PTR->GetWorld());
188
+
189
+ if (PTR->GetWorld()->IsLocked())
190
+ invalid_state_error(__FILE__, __LINE__);
108
191
 
109
192
  std::vector<b2Vec2> vecs;
110
193
  vecs.reserve(size);
111
194
  for (size_t i = 0; i < size; ++i)
112
- vecs.push_back(to_box2d(points[i], scale));
195
+ vecs.push_back(to_b2vec2(points[i], ppm));
113
196
 
114
197
  b2PolygonShape shape;
115
198
  shape.Set(&vecs[0], (int32) size);
@@ -123,19 +206,66 @@ namespace Reflex
123
206
  void
124
207
  Body::clear_fixtures ()
125
208
  {
126
- assert(PTR);
209
+ assert(PTR && PTR->GetWorld());
210
+
211
+ if (PTR->GetWorld()->IsLocked())
212
+ invalid_state_error(__FILE__, __LINE__);
127
213
 
128
214
  b2Fixture* f;
129
215
  while (f = PTR->GetFixtureList())
130
216
  PTR->DestroyFixture(f);
131
217
  }
132
218
 
219
+ float
220
+ Body::meter2pixel (float meter) const
221
+ {
222
+ return meter * ppm;
223
+ }
224
+
225
+ void
226
+ Body::set_static (bool state)
227
+ {
228
+ assert(PTR && PTR->GetWorld());
229
+
230
+ if (PTR->GetWorld()->IsLocked())
231
+ invalid_state_error(__FILE__, __LINE__);
232
+
233
+ PTR->SetType(state ? b2_staticBody : b2_dynamicBody);
234
+ }
235
+
236
+ bool
237
+ Body::is_static () const
238
+ {
239
+ assert(PTR);
240
+
241
+ return PTR->GetType() == b2_staticBody;
242
+ }
243
+
244
+ void
245
+ Body::set_dynamic (bool state)
246
+ {
247
+ assert(PTR && PTR->GetWorld());
248
+
249
+ if (PTR->GetWorld()->IsLocked())
250
+ invalid_state_error(__FILE__, __LINE__);
251
+
252
+ PTR->SetType(state ? b2_dynamicBody : b2_staticBody);
253
+ }
254
+
255
+ bool
256
+ Body::is_dynamic () const
257
+ {
258
+ assert(PTR);
259
+
260
+ return PTR->GetType() == b2_dynamicBody;
261
+ }
262
+
133
263
  Point
134
264
  Body::position () const
135
265
  {
136
266
  assert(PTR);
137
267
 
138
- return to_point(PTR->GetPosition(), scale);
268
+ return to_point(PTR->GetPosition(), ppm);
139
269
  }
140
270
 
141
271
  float
@@ -143,69 +273,129 @@ namespace Reflex
143
273
  {
144
274
  assert(PTR);
145
275
 
146
- return PTR->GetAngle();
276
+ return Xot::rad2deg(PTR->GetAngle());
147
277
  }
148
278
 
149
279
  void
150
- Body::set_static (bool state)
280
+ Body::set_linear_velocity (coord x, coord y)
281
+ {
282
+ set_linear_velocity(Point(x, y));
283
+ }
284
+
285
+ void
286
+ Body::set_linear_velocity (const Point& velocity)
151
287
  {
152
288
  assert(PTR);
153
289
 
154
- PTR->SetType(state ? b2_staticBody : b2_dynamicBody);
290
+ PTR->SetLinearVelocity(to_b2vec2(velocity, ppm));
155
291
  }
156
292
 
157
- bool
158
- Body::is_static () const
293
+ Point
294
+ Body::linear_velocity () const
159
295
  {
160
296
  assert(PTR);
161
297
 
162
- return PTR->GetType() == b2_staticBody;
298
+ return to_point(PTR->GetLinearVelocity(), ppm);
163
299
  }
164
300
 
165
301
  void
166
- Body::set_dynamic (bool state)
302
+ Body::set_angular_velocity (float velocity)
167
303
  {
168
304
  assert(PTR);
169
305
 
170
- PTR->SetType(state ? b2_dynamicBody : b2_staticBody);
306
+ PTR->SetAngularVelocity(Xot::deg2rad(velocity));
171
307
  }
172
308
 
173
- bool
174
- Body::is_dynamic () const
309
+ float
310
+ Body::angular_velocity () const
175
311
  {
176
312
  assert(PTR);
177
313
 
178
- return PTR->GetType() == b2_dynamicBody;
314
+ return Xot::rad2deg(PTR->GetAngularVelocity());
179
315
  }
180
316
 
181
317
  void
182
318
  Body::set_density (float density)
183
319
  {
184
- iterator first = begin();
185
- if (!first)
186
- invalid_state_error(__FILE__, __LINE__, "no fixture");
320
+ iterator end_ = end();
321
+ for (iterator it = begin(); it != end_; ++it)
322
+ it->set_density(density);
323
+ }
187
324
 
188
- first->set_density(density);
325
+ float
326
+ Body::density () const
327
+ {
328
+ const_iterator it = begin(), end_ = end();
329
+ if (it == end_)
330
+ invalid_state_error(__FILE__, __LINE__, "no fixture.");
331
+
332
+ float val = it->density();
333
+ for (; it != end_; ++it)
334
+ {
335
+ if (val != it->density())
336
+ {
337
+ invalid_state_error(
338
+ __FILE__, __LINE__,
339
+ "each fixture have different values.");
340
+ }
341
+ }
342
+ return val;
189
343
  }
190
344
 
191
345
  void
192
346
  Body::set_friction (float friction)
193
347
  {
194
- iterator first = begin();
195
- if (!first)
196
- invalid_state_error(__FILE__, __LINE__, "no fixture");
348
+ iterator end_ = end();
349
+ for (iterator it = begin(); it != end_; ++it)
350
+ it->set_friction(friction);
351
+ }
197
352
 
198
- first->set_friction(friction);
353
+ float
354
+ Body::friction () const
355
+ {
356
+ const_iterator it = begin(), end_ = end();
357
+ if (it == end_)
358
+ invalid_state_error(__FILE__, __LINE__, "no fixture.");
359
+
360
+ float val = it->friction();
361
+ for (; it != end_; ++it)
362
+ {
363
+ if (val != it->friction())
364
+ {
365
+ invalid_state_error(
366
+ __FILE__, __LINE__,
367
+ "each fixture have different values.");
368
+ }
369
+ }
370
+ return val;
199
371
  }
200
372
 
201
373
  void
202
374
  Body::set_restitution (float restitution)
203
375
  {
204
- iterator first = begin();
205
- if (!first)
206
- invalid_state_error(__FILE__, __LINE__, "no fixture");
376
+ iterator end_ = end();
377
+ for (iterator it = begin(); it != end_; ++it)
378
+ it->set_restitution(restitution);
379
+ }
207
380
 
208
- first->set_restitution(restitution);
381
+ float
382
+ Body::restitution () const
383
+ {
384
+ const_iterator it = begin(), end_ = end();
385
+ if (it == end_)
386
+ invalid_state_error(__FILE__, __LINE__, "no fixture.");
387
+
388
+ float val = it->restitution();
389
+ for (; it != end_; ++it)
390
+ {
391
+ if (val != it->restitution())
392
+ {
393
+ invalid_state_error(
394
+ __FILE__, __LINE__,
395
+ "each fixture have different values.");
396
+ }
397
+ }
398
+ return val;
209
399
  }
210
400
 
211
401
  Body::iterator
@@ -240,5 +430,16 @@ namespace Reflex
240
430
  return Fixture(NULL);
241
431
  }
242
432
 
433
+ void
434
+ Body::set_transform (coord x, coord y, float degree)
435
+ {
436
+ assert(PTR && PTR->GetWorld());
437
+
438
+ if (PTR->GetWorld()->IsLocked())
439
+ invalid_state_error(__FILE__, __LINE__);
440
+
441
+ PTR->SetTransform(to_b2vec2(x, y, ppm), Xot::deg2rad(degree));
442
+ }
443
+
243
444
 
244
445
  }// Reflex
data/src/event.cpp CHANGED
@@ -38,8 +38,21 @@ namespace Reflex
38
38
  }
39
39
 
40
40
 
41
- FrameEvent::FrameEvent (const Bounds& frame, coord dx, coord dy, coord dwidth, coord dheight)
42
- : frame(frame), dx(dx), dy(dy), dwidth(dwidth), dheight(dheight)
41
+ FrameEvent::FrameEvent (
42
+ const Bounds& frame, coord dx, coord dy, coord dwidth, coord dheight,
43
+ float angle, float dangle)
44
+ : frame(frame), dx(dx), dy(dy), dwidth(dwidth), dheight(dheight),
45
+ angle(angle), dangle(dangle)
46
+ {
47
+ }
48
+
49
+ FrameEvent::FrameEvent (
50
+ const Bounds& frame, const Bounds& prev_frame,
51
+ float angle, float prev_angle)
52
+ : frame(frame),
53
+ dx( frame.x - prev_frame.x), dy( frame.y - prev_frame.y),
54
+ dwidth(frame.w - prev_frame.w), dheight(frame.h - prev_frame.h),
55
+ angle(angle), dangle(angle - prev_angle)
43
56
  {
44
57
  }
45
58
 
@@ -55,6 +68,12 @@ namespace Reflex
55
68
  return dwidth != 0 || dheight != 0;
56
69
  }
57
70
 
71
+ bool
72
+ FrameEvent::is_rotate () const
73
+ {
74
+ return dangle != 0;
75
+ }
76
+
58
77
 
59
78
  ScrollEvent::ScrollEvent ()
60
79
  : x(0), y(0), z(0), dx(0), dy(0), dz(0)
@@ -222,4 +241,15 @@ namespace Reflex
222
241
  }
223
242
 
224
243
 
244
+ ContactEvent::ContactEvent ()
245
+ : type(NONE), view(NULL)
246
+ {
247
+ }
248
+
249
+ ContactEvent::ContactEvent (Type type, View* view)
250
+ : type(type), view(view)
251
+ {
252
+ }
253
+
254
+
225
255
  }// Reflex