reflexion 0.1.12 → 0.1.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (333) hide show
  1. checksums.yaml +5 -5
  2. data/.doc/ext/reflex/application.cpp +9 -5
  3. data/.doc/ext/reflex/capture_event.cpp +4 -9
  4. data/.doc/ext/reflex/contact_event.cpp +17 -13
  5. data/.doc/ext/reflex/draw_event.cpp +3 -8
  6. data/.doc/ext/reflex/ellipse_shape.cpp +51 -24
  7. data/.doc/ext/reflex/event.cpp +0 -4
  8. data/.doc/ext/reflex/filter.cpp +81 -0
  9. data/.doc/ext/reflex/focus_event.cpp +9 -13
  10. data/.doc/ext/reflex/frame_event.cpp +47 -14
  11. data/.doc/ext/reflex/image_view.cpp +1 -10
  12. data/.doc/ext/reflex/key_event.cpp +9 -14
  13. data/.doc/ext/reflex/line_shape.cpp +99 -0
  14. data/.doc/ext/reflex/motion_event.cpp +73 -0
  15. data/.doc/ext/reflex/native.cpp +18 -18
  16. data/.doc/ext/reflex/pointer_event.cpp +27 -25
  17. data/.doc/ext/reflex/polygon_shape.cpp +65 -0
  18. data/.doc/ext/reflex/rect_shape.cpp +102 -23
  19. data/.doc/ext/reflex/reflex.cpp +24 -3
  20. data/.doc/ext/reflex/scroll_event.cpp +8 -15
  21. data/.doc/ext/reflex/selector.cpp +43 -15
  22. data/.doc/ext/reflex/shape.cpp +211 -0
  23. data/.doc/ext/reflex/style.cpp +359 -185
  24. data/.doc/ext/reflex/style_length.cpp +163 -35
  25. data/.doc/ext/reflex/timer.cpp +101 -0
  26. data/.doc/ext/reflex/timer_event.cpp +123 -0
  27. data/.doc/ext/reflex/update_event.cpp +12 -8
  28. data/.doc/ext/reflex/view.cpp +548 -144
  29. data/.doc/ext/reflex/wheel_event.cpp +5 -28
  30. data/.doc/ext/reflex/window.cpp +7 -15
  31. data/LICENSE +21 -0
  32. data/README.md +1 -1
  33. data/Rakefile +14 -12
  34. data/VERSION +1 -1
  35. data/ext/reflex/application.cpp +10 -5
  36. data/ext/reflex/capture_event.cpp +4 -9
  37. data/ext/reflex/contact_event.cpp +18 -13
  38. data/ext/reflex/defs.h +5 -2
  39. data/ext/reflex/draw_event.cpp +3 -8
  40. data/ext/reflex/ellipse_shape.cpp +56 -25
  41. data/ext/reflex/event.cpp +0 -4
  42. data/ext/reflex/extconf.rb +1 -2
  43. data/ext/reflex/filter.cpp +86 -0
  44. data/ext/reflex/focus_event.cpp +11 -15
  45. data/ext/reflex/frame_event.cpp +52 -14
  46. data/ext/reflex/image_view.cpp +1 -10
  47. data/ext/reflex/key_event.cpp +9 -14
  48. data/ext/reflex/line_shape.cpp +104 -0
  49. data/ext/reflex/motion_event.cpp +77 -0
  50. data/ext/reflex/native.cpp +18 -18
  51. data/ext/reflex/pointer_event.cpp +27 -25
  52. data/ext/reflex/polygon_shape.cpp +68 -0
  53. data/ext/reflex/rect_shape.cpp +113 -24
  54. data/ext/reflex/reflex.cpp +24 -3
  55. data/ext/reflex/scroll_event.cpp +8 -15
  56. data/ext/reflex/selector.cpp +46 -16
  57. data/ext/reflex/selector.h +130 -0
  58. data/ext/reflex/shape.cpp +231 -0
  59. data/ext/reflex/style.cpp +363 -192
  60. data/ext/reflex/style_length.cpp +164 -37
  61. data/ext/reflex/timer.cpp +108 -0
  62. data/ext/reflex/timer_event.cpp +133 -0
  63. data/ext/reflex/update_event.cpp +13 -8
  64. data/ext/reflex/view.cpp +594 -150
  65. data/ext/reflex/wheel_event.cpp +5 -30
  66. data/ext/reflex/window.cpp +7 -15
  67. data/include/reflex.h +5 -4
  68. data/include/reflex/application.h +2 -0
  69. data/include/reflex/debug.h +22 -0
  70. data/include/reflex/defs.h +45 -2
  71. data/include/reflex/event.h +55 -11
  72. data/include/reflex/exception.h +17 -2
  73. data/include/reflex/filter.h +56 -0
  74. data/include/reflex/image_view.h +1 -1
  75. data/include/reflex/ruby.h +6 -4
  76. data/include/reflex/ruby/application.h +17 -9
  77. data/include/reflex/ruby/event.h +22 -0
  78. data/include/reflex/ruby/filter.h +69 -0
  79. data/include/reflex/ruby/reflex.h +1 -0
  80. data/include/reflex/ruby/selector.h +1 -1
  81. data/include/reflex/ruby/shape.h +140 -0
  82. data/include/reflex/ruby/style.h +1 -1
  83. data/include/reflex/ruby/timer.h +69 -0
  84. data/include/reflex/ruby/view.h +43 -76
  85. data/include/reflex/ruby/window.h +17 -32
  86. data/include/reflex/selector.h +54 -2
  87. data/include/reflex/shape.h +211 -0
  88. data/include/reflex/style.h +136 -76
  89. data/include/reflex/timer.h +73 -0
  90. data/include/reflex/view.h +181 -59
  91. data/include/reflex/window.h +4 -3
  92. data/lib/reflex.rb +13 -6
  93. data/lib/reflex/application.rb +6 -3
  94. data/lib/reflex/button.rb +2 -2
  95. data/lib/reflex/{texture.rb → camera.rb} +2 -2
  96. data/lib/reflex/capture_event.rb +7 -6
  97. data/lib/reflex/contact_event.rb +10 -12
  98. data/lib/reflex/draw_event.rb +6 -1
  99. data/lib/reflex/ellipse_shape.rb +27 -0
  100. data/lib/reflex/filter.rb +18 -0
  101. data/lib/reflex/fixture.rb +4 -0
  102. data/lib/reflex/focus_event.rb +10 -12
  103. data/lib/reflex/frame_event.rb +1 -1
  104. data/lib/reflex/helper.rb +17 -29
  105. data/lib/reflex/key_event.rb +13 -11
  106. data/lib/reflex/line_shape.rb +18 -0
  107. data/lib/reflex/matrix.rb +13 -0
  108. data/lib/reflex/module.rb +4 -19
  109. data/lib/reflex/pointer_event.rb +28 -35
  110. data/lib/reflex/polygon.rb +14 -0
  111. data/lib/reflex/polygon_shape.rb +23 -0
  112. data/lib/reflex/polyline.rb +13 -0
  113. data/lib/reflex/rect_shape.rb +20 -0
  114. data/lib/reflex/reflex.rb +1 -3
  115. data/lib/reflex/scroll_event.rb +1 -1
  116. data/lib/reflex/selector.rb +2 -2
  117. data/lib/reflex/shape.rb +62 -0
  118. data/lib/reflex/style.rb +78 -11
  119. data/lib/reflex/style_length.rb +0 -11
  120. data/lib/reflex/text_view.rb +7 -24
  121. data/lib/reflex/timer.rb +30 -0
  122. data/lib/reflex/timer_event.rb +29 -0
  123. data/lib/reflex/update_event.rb +1 -1
  124. data/lib/reflex/view.rb +127 -32
  125. data/lib/reflex/wheel_event.rb +9 -1
  126. data/lib/reflex/window.rb +29 -9
  127. data/lib/reflexion.rb +23 -7
  128. data/reflex.gemspec +8 -10
  129. data/samples/bats.rb +4 -4
  130. data/samples/camera.rb +45 -0
  131. data/samples/fans.rb +1 -1
  132. data/samples/fps.rb +5 -3
  133. data/samples/hello.rb +4 -6
  134. data/samples/image.rb +5 -4
  135. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +0 -2
  136. data/samples/layout.rb +16 -7
  137. data/samples/model.rb +10 -7
  138. data/samples/physics.rb +22 -20
  139. data/samples/reflexion/breakout.rb +4 -5
  140. data/samples/reflexion/hello.rb +2 -2
  141. data/samples/reflexion/jump_action.rb +191 -0
  142. data/samples/reflexion/noise.rb +23 -0
  143. data/samples/reflexion/paint.rb +7 -6
  144. data/samples/reflexion/physics.rb +15 -8
  145. data/samples/reflexion/pulse.rb +24 -10
  146. data/samples/shader.rb +8 -6
  147. data/samples/shapes.rb +79 -14
  148. data/samples/tree.rb +9 -10
  149. data/samples/views.rb +3 -3
  150. data/samples/visuals.rb +2 -5
  151. data/src/body.cpp +146 -345
  152. data/src/body.h +91 -0
  153. data/src/event.cpp +65 -15
  154. data/src/exception.cpp +13 -3
  155. data/src/filter.cpp +76 -0
  156. data/src/fixture.cpp +164 -39
  157. data/src/fixture.h +85 -0
  158. data/src/image_view.cpp +4 -4
  159. data/src/ios/app_delegate.h +5 -10
  160. data/src/ios/app_delegate.mm +79 -41
  161. data/src/ios/application.h +32 -0
  162. data/src/ios/application.mm +35 -25
  163. data/src/ios/event.mm +8 -4
  164. data/src/ios/reflex.mm +0 -7
  165. data/src/ios/view_controller.h +37 -0
  166. data/src/ios/view_controller.mm +424 -0
  167. data/src/ios/window.h +40 -0
  168. data/src/ios/window.mm +59 -250
  169. data/src/osx/app_delegate.h +5 -10
  170. data/src/osx/app_delegate.mm +52 -55
  171. data/src/osx/application.h +32 -0
  172. data/src/osx/application.mm +44 -39
  173. data/src/osx/native_window.h +0 -15
  174. data/src/osx/native_window.mm +127 -127
  175. data/src/osx/opengl_view.h +0 -2
  176. data/src/osx/opengl_view.mm +12 -3
  177. data/src/osx/reflex.mm +0 -9
  178. data/src/osx/window.h +42 -0
  179. data/src/osx/window.mm +45 -252
  180. data/src/selector.cpp +232 -7
  181. data/src/selector.h +52 -0
  182. data/src/shape.cpp +1191 -0
  183. data/src/shape.h +61 -0
  184. data/src/style.cpp +573 -376
  185. data/src/style.h +39 -0
  186. data/src/timer.cpp +288 -0
  187. data/src/timer.h +55 -0
  188. data/src/view.cpp +1624 -984
  189. data/src/view.h +56 -0
  190. data/src/win32/window.cpp +3 -4
  191. data/src/window.cpp +302 -20
  192. data/src/window.h +94 -0
  193. data/src/world.cpp +112 -111
  194. data/src/world.h +34 -53
  195. data/task/box2d.rake +31 -10
  196. data/test/test_capture_event.rb +8 -6
  197. data/test/test_pointer_event.rb +130 -0
  198. data/test/test_selector.rb +1 -1
  199. data/test/test_shape.rb +71 -0
  200. data/test/test_style.rb +77 -11
  201. data/test/test_style_length.rb +42 -13
  202. data/test/test_view.rb +138 -14
  203. metadata +115 -213
  204. data/.doc/ext/reflex/arc_shape.cpp +0 -89
  205. data/.doc/ext/reflex/body.cpp +0 -299
  206. data/.doc/ext/reflex/fixture.cpp +0 -101
  207. data/.doc/ext/reflex/shape_view.cpp +0 -153
  208. data/ext/reflex/arc_shape.cpp +0 -94
  209. data/ext/reflex/body.cpp +0 -328
  210. data/ext/reflex/fixture.cpp +0 -108
  211. data/ext/reflex/shape_view.cpp +0 -161
  212. data/include/reflex/bitmap.h +0 -20
  213. data/include/reflex/body.h +0 -128
  214. data/include/reflex/bounds.h +0 -20
  215. data/include/reflex/color.h +0 -20
  216. data/include/reflex/color_space.h +0 -20
  217. data/include/reflex/fixture.h +0 -117
  218. data/include/reflex/font.h +0 -20
  219. data/include/reflex/image.h +0 -20
  220. data/include/reflex/matrix.h +0 -20
  221. data/include/reflex/painter.h +0 -20
  222. data/include/reflex/point.h +0 -24
  223. data/include/reflex/ruby/body.h +0 -41
  224. data/include/reflex/ruby/fixture.h +0 -41
  225. data/include/reflex/ruby/shape_view.h +0 -96
  226. data/include/reflex/shader.h +0 -20
  227. data/include/reflex/shape_view.h +0 -146
  228. data/include/reflex/texture.h +0 -20
  229. data/lib/reflex/body.rb +0 -22
  230. data/lib/reflex/flags.rb +0 -18
  231. data/lib/reflex/shape_view.rb +0 -25
  232. data/src/ios/application_data.h +0 -45
  233. data/src/ios/native_window.h +0 -39
  234. data/src/ios/native_window.mm +0 -224
  235. data/src/ios/opengl_view.h +0 -13
  236. data/src/ios/opengl_view.mm +0 -139
  237. data/src/ios/window_data.h +0 -75
  238. data/src/osx/application_data.h +0 -45
  239. data/src/osx/window_data.h +0 -75
  240. data/src/physics/Box2D/Box2D.h +0 -68
  241. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.cpp +0 -193
  242. data/src/physics/Box2D/Collision/Shapes/b2ChainShape.h +0 -105
  243. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.cpp +0 -99
  244. data/src/physics/Box2D/Collision/Shapes/b2CircleShape.h +0 -91
  245. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.cpp +0 -138
  246. data/src/physics/Box2D/Collision/Shapes/b2EdgeShape.h +0 -74
  247. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.cpp +0 -467
  248. data/src/physics/Box2D/Collision/Shapes/b2PolygonShape.h +0 -101
  249. data/src/physics/Box2D/Collision/Shapes/b2Shape.h +0 -101
  250. data/src/physics/Box2D/Collision/b2BroadPhase.cpp +0 -119
  251. data/src/physics/Box2D/Collision/b2BroadPhase.h +0 -257
  252. data/src/physics/Box2D/Collision/b2CollideCircle.cpp +0 -154
  253. data/src/physics/Box2D/Collision/b2CollideEdge.cpp +0 -698
  254. data/src/physics/Box2D/Collision/b2CollidePolygon.cpp +0 -239
  255. data/src/physics/Box2D/Collision/b2Collision.cpp +0 -252
  256. data/src/physics/Box2D/Collision/b2Collision.h +0 -277
  257. data/src/physics/Box2D/Collision/b2Distance.cpp +0 -603
  258. data/src/physics/Box2D/Collision/b2Distance.h +0 -141
  259. data/src/physics/Box2D/Collision/b2DynamicTree.cpp +0 -778
  260. data/src/physics/Box2D/Collision/b2DynamicTree.h +0 -289
  261. data/src/physics/Box2D/Collision/b2TimeOfImpact.cpp +0 -486
  262. data/src/physics/Box2D/Collision/b2TimeOfImpact.h +0 -58
  263. data/src/physics/Box2D/Common/b2BlockAllocator.cpp +0 -215
  264. data/src/physics/Box2D/Common/b2BlockAllocator.h +0 -62
  265. data/src/physics/Box2D/Common/b2Draw.cpp +0 -44
  266. data/src/physics/Box2D/Common/b2Draw.h +0 -86
  267. data/src/physics/Box2D/Common/b2GrowableStack.h +0 -85
  268. data/src/physics/Box2D/Common/b2Math.cpp +0 -94
  269. data/src/physics/Box2D/Common/b2Math.h +0 -720
  270. data/src/physics/Box2D/Common/b2Settings.cpp +0 -44
  271. data/src/physics/Box2D/Common/b2Settings.h +0 -151
  272. data/src/physics/Box2D/Common/b2StackAllocator.cpp +0 -83
  273. data/src/physics/Box2D/Common/b2StackAllocator.h +0 -60
  274. data/src/physics/Box2D/Common/b2Timer.cpp +0 -101
  275. data/src/physics/Box2D/Common/b2Timer.h +0 -50
  276. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.cpp +0 -53
  277. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndCircleContact.h +0 -39
  278. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.cpp +0 -53
  279. data/src/physics/Box2D/Dynamics/Contacts/b2ChainAndPolygonContact.h +0 -39
  280. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.cpp +0 -52
  281. data/src/physics/Box2D/Dynamics/Contacts/b2CircleContact.h +0 -39
  282. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.cpp +0 -247
  283. data/src/physics/Box2D/Dynamics/Contacts/b2Contact.h +0 -349
  284. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.cpp +0 -838
  285. data/src/physics/Box2D/Dynamics/Contacts/b2ContactSolver.h +0 -95
  286. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.cpp +0 -49
  287. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndCircleContact.h +0 -39
  288. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp +0 -49
  289. data/src/physics/Box2D/Dynamics/Contacts/b2EdgeAndPolygonContact.h +0 -39
  290. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.cpp +0 -49
  291. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonAndCircleContact.h +0 -38
  292. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.cpp +0 -52
  293. data/src/physics/Box2D/Dynamics/Contacts/b2PolygonContact.h +0 -39
  294. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.cpp +0 -260
  295. data/src/physics/Box2D/Dynamics/Joints/b2DistanceJoint.h +0 -169
  296. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.cpp +0 -251
  297. data/src/physics/Box2D/Dynamics/Joints/b2FrictionJoint.h +0 -119
  298. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.cpp +0 -419
  299. data/src/physics/Box2D/Dynamics/Joints/b2GearJoint.h +0 -125
  300. data/src/physics/Box2D/Dynamics/Joints/b2Joint.cpp +0 -211
  301. data/src/physics/Box2D/Dynamics/Joints/b2Joint.h +0 -226
  302. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.cpp +0 -304
  303. data/src/physics/Box2D/Dynamics/Joints/b2MotorJoint.h +0 -133
  304. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.cpp +0 -222
  305. data/src/physics/Box2D/Dynamics/Joints/b2MouseJoint.h +0 -129
  306. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.cpp +0 -629
  307. data/src/physics/Box2D/Dynamics/Joints/b2PrismaticJoint.h +0 -196
  308. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.cpp +0 -348
  309. data/src/physics/Box2D/Dynamics/Joints/b2PulleyJoint.h +0 -152
  310. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.cpp +0 -502
  311. data/src/physics/Box2D/Dynamics/Joints/b2RevoluteJoint.h +0 -204
  312. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.cpp +0 -241
  313. data/src/physics/Box2D/Dynamics/Joints/b2RopeJoint.h +0 -114
  314. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.cpp +0 -344
  315. data/src/physics/Box2D/Dynamics/Joints/b2WeldJoint.h +0 -126
  316. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.cpp +0 -419
  317. data/src/physics/Box2D/Dynamics/Joints/b2WheelJoint.h +0 -210
  318. data/src/physics/Box2D/Dynamics/b2Body.cpp +0 -549
  319. data/src/physics/Box2D/Dynamics/b2Body.h +0 -860
  320. data/src/physics/Box2D/Dynamics/b2ContactManager.cpp +0 -296
  321. data/src/physics/Box2D/Dynamics/b2ContactManager.h +0 -52
  322. data/src/physics/Box2D/Dynamics/b2Fixture.cpp +0 -303
  323. data/src/physics/Box2D/Dynamics/b2Fixture.h +0 -345
  324. data/src/physics/Box2D/Dynamics/b2Island.cpp +0 -539
  325. data/src/physics/Box2D/Dynamics/b2Island.h +0 -93
  326. data/src/physics/Box2D/Dynamics/b2TimeStep.h +0 -70
  327. data/src/physics/Box2D/Dynamics/b2World.cpp +0 -1339
  328. data/src/physics/Box2D/Dynamics/b2World.h +0 -354
  329. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.cpp +0 -36
  330. data/src/physics/Box2D/Dynamics/b2WorldCallbacks.h +0 -155
  331. data/src/physics/Box2D/Rope/b2Rope.cpp +0 -259
  332. data/src/physics/Box2D/Rope/b2Rope.h +0 -115
  333. data/src/shape_view.cpp +0 -306
@@ -6,90 +6,96 @@
6
6
  #import <Cocoa/Cocoa.h>
7
7
  #include "reflex/event.h"
8
8
  #include "reflex/exception.h"
9
- #include "application_data.h"
10
9
 
11
10
 
12
- #define REF (*pref)
11
+ @implementation ReflexAppDelegate
13
12
 
14
-
15
- @implementation AppDelegate
13
+ {
14
+ Reflex::Application* application;
15
+ bool started;
16
+ }
16
17
 
17
18
  - (id) init
18
19
  {
19
20
  self = [super init];
20
21
  if (!self) return nil;
21
22
 
22
- pref = new Reflex::Application::Ref;
23
+ application = NULL;
24
+ started = false;
23
25
 
24
26
  return self;
25
27
  }
26
28
 
27
29
  - (void) dealloc
28
30
  {
29
- assert(pref && !REF);
30
-
31
- delete pref;
31
+ assert(!application);
32
32
 
33
33
  [super dealloc];
34
34
  }
35
35
 
36
- - (void) bind: (Reflex::Application*) instance
36
+ - (void) bind: (Reflex::Application*) app
37
37
  {
38
- assert(pref);
39
-
40
- if (instance && instance->self->delegate)
38
+ if (!app)
41
39
  Reflex::argument_error(__FILE__, __LINE__);
42
40
 
43
- if (REF)
41
+ if (app->self->delegate)
44
42
  Reflex::invalid_state_error(__FILE__, __LINE__);
45
43
 
46
- REF = instance;
47
- if (REF) REF->self->delegate = [self retain];
44
+ app->self->delegate = [self retain];
45
+ app->retain();
46
+
47
+ application = app;
48
48
  }
49
49
 
50
- - (void) unbind: (Reflex::Application*) instance
50
+ - (void) unbind
51
51
  {
52
- assert(pref);
52
+ if (!application) return;
53
53
 
54
- if (!REF) return;
54
+ if (application->self->delegate)
55
+ {
56
+ [application->self->delegate release];
57
+ application->self->delegate = nil;
58
+ }
55
59
 
56
- if (instance && instance != REF.get())
57
- Reflex::invalid_state_error(__FILE__, __LINE__);
60
+ application->release();
61
+ application = NULL;
62
+ }
58
63
 
59
- if (REF->self->delegate) [REF->self->delegate release];
60
- REF->self->delegate = nil;
61
- REF.reset();
64
+ - (BOOL) callOnStart
65
+ {
66
+ if (!application || started)
67
+ return YES;
68
+
69
+ Reflex::Event e;
70
+ application->on_start(&e);
71
+ started = true;
72
+
73
+ if (e.is_blocked()) [self quit];
74
+ return !e.is_blocked();
62
75
  }
63
76
 
64
77
  - (void) quit
65
78
  {
66
- assert(pref);
67
-
68
- if (REF)
69
- REF->quit();
79
+ if (application)
80
+ application->quit();
70
81
  else
71
82
  [NSApp terminate: nil];
72
83
  }
73
84
 
74
85
  - (void) showPreference
75
86
  {
76
- assert(pref);
87
+ if (!application) return;
77
88
 
78
- if (REF)
79
- {
80
- Reflex::Event e;
81
- REF->on_preference(&e);
82
- }
89
+ Reflex::Event e;
90
+ application->on_preference(&e);
83
91
  }
84
92
 
85
93
  - (void) showAbout
86
94
  {
87
- assert(pref);
88
-
89
- if (REF)
95
+ if (application)
90
96
  {
91
97
  Reflex::Event e;
92
- REF->on_about(&e);
98
+ application->on_about(&e);
93
99
  }
94
100
  else
95
101
  [NSApp orderFrontStandardAboutPanel: nil];
@@ -100,26 +106,18 @@
100
106
  [NSApp setActivationPolicy: NSApplicationActivationPolicyRegular];
101
107
  [NSApp activateIgnoringOtherApps: YES];
102
108
 
103
- if (REF)
104
- {
105
- Reflex::Event e;
106
- REF->on_start(&e);
107
- if (e.is_blocked())
108
- {
109
- [self quit];
110
- return;
111
- }
112
- }
109
+ if (![self callOnStart])
110
+ return;
113
111
 
114
112
  [self setupMenu];
115
113
  }
116
114
 
117
115
  - (NSApplicationTerminateReply) applicationShouldTerminate: (NSApplication*) application
118
116
  {
119
- if (REF)
117
+ if (self->application)
120
118
  {
121
119
  Reflex::Event e;
122
- REF->on_quit(&e);
120
+ self->application->on_quit(&e);
123
121
  if (e.is_blocked()) return NSTerminateCancel;
124
122
  }
125
123
 
@@ -133,13 +131,12 @@
133
131
 
134
132
  - (void) applicationWillTerminate: (NSNotification*) notification
135
133
  {
136
- [self unbind: NULL];
134
+ [self unbind];
137
135
  }
138
136
 
139
137
  - (BOOL) setupApplicationMenu: (NSMenu*) parent
140
138
  {
141
- assert(pref);
142
- if (!REF || !parent) return NO;
139
+ if (!application || !parent) return NO;
143
140
 
144
141
  NSMenu* menu = [[[NSMenu alloc]
145
142
  initWithTitle: @"Application"]
@@ -147,8 +144,8 @@
147
144
  if ([NSApp respondsToSelector: @selector(setAppleMenu:)])
148
145
  [NSApp performSelector: @selector(setAppleMenu:) withObject: menu];
149
146
 
150
- NSString* name = !REF->self->name.empty() ?
151
- [NSString stringWithUTF8String: REF->self->name.c_str()] : @"";
147
+ NSString* name = !application->self->name.empty() ?
148
+ [NSString stringWithUTF8String: application->self->name.c_str()] : @"";
152
149
  if ([name length] > 0)
153
150
  name = [@" " stringByAppendingString: name];
154
151
 
@@ -261,4 +258,4 @@
261
258
  return YES;
262
259
  }
263
260
 
264
- @end// AppDelegate
261
+ @end// ReflexAppDelegate
@@ -0,0 +1,32 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __REFLEX_SRC_OSX_APPLICATION_H__
4
+ #define __REFLEX_SRC_OSX_APPLICATION_H__
5
+
6
+
7
+ #include <reflex/application.h>
8
+
9
+
10
+ @class ReflexAppDelegate;
11
+
12
+
13
+ namespace Reflex
14
+ {
15
+
16
+
17
+ struct Application::Data
18
+ {
19
+
20
+ ReflexAppDelegate* delegate;
21
+
22
+ String name;
23
+
24
+ Data ();
25
+
26
+ };// Application::Data
27
+
28
+
29
+ }// Reflex
30
+
31
+
32
+ #endif//EOH
@@ -1,11 +1,10 @@
1
1
  // -*- objc -*-
2
- #include "reflex/application.h"
2
+ #include "application.h"
3
3
 
4
4
 
5
5
  #include <assert.h>
6
6
  #import <AppKit/NSApplication.h>
7
7
  #include "reflex/exception.h"
8
- #include "application_data.h"
9
8
  #import "app_delegate.h"
10
9
 
11
10
 
@@ -13,56 +12,66 @@ namespace Reflex
13
12
  {
14
13
 
15
14
 
16
- bool initialized ();
15
+ namespace global
16
+ {
17
17
 
18
+ static Application* instance = NULL;
18
19
 
19
- static Application* instance = NULL;
20
+ }// global
20
21
 
21
22
 
22
23
  Application*
23
24
  app ()
24
25
  {
25
- return instance;
26
+ return global::instance;
26
27
  }
27
28
 
28
29
 
29
30
  Application::Application ()
30
31
  {
31
- if (!initialized() || !NSApp)
32
- reflex_error(__FILE__, __LINE__, "not initialized.");
33
-
34
- if (instance)
32
+ if (global::instance)
35
33
  reflex_error(__FILE__, __LINE__, "multiple application instances.");
36
34
 
37
- AppDelegate* delegate = (AppDelegate*) [NSApp delegate];
38
- if (!delegate)
39
- invalid_state_error(__FILE__, __LINE__);
40
-
41
- [delegate bind: this];
42
-
43
- instance = this;
35
+ global::instance = this;
44
36
  }
45
37
 
46
38
  Application::~Application ()
47
39
  {
48
- instance = NULL;
40
+ global::instance = NULL;
41
+ }
42
+
43
+ static ReflexAppDelegate*
44
+ setup_app_delegate (NSApplication* app)
45
+ {
46
+ id<NSApplicationDelegate> delegate = [app delegate];
47
+ if (!delegate)
48
+ {
49
+ delegate = [[[ReflexAppDelegate alloc] init] autorelease];
50
+ [app setDelegate: delegate];
51
+ }
52
+
53
+ if (![delegate isKindOfClass: ReflexAppDelegate.class])
54
+ reflex_error(__FILE__, __LINE__);
55
+
56
+ return (ReflexAppDelegate*) delegate;
49
57
  }
50
58
 
51
59
  void
52
60
  Application::start ()
53
61
  {
54
- if (!*this)
55
- invalid_state_error(__FILE__, __LINE__);
62
+ NSApplication* app = [NSApplication sharedApplication];
63
+ ReflexAppDelegate* delegate = setup_app_delegate(app);
64
+ [delegate bind: this];
56
65
 
57
- [NSApp run];
66
+ if (![app isRunning])
67
+ [app run];
68
+ else
69
+ [delegate callOnStart];
58
70
  }
59
71
 
60
72
  void
61
73
  Application::quit ()
62
74
  {
63
- if (!*this)
64
- invalid_state_error(__FILE__, __LINE__);
65
-
66
75
  [NSApp terminate: nil];
67
76
  }
68
77
 
@@ -72,54 +81,44 @@ namespace Reflex
72
81
  if (!name)
73
82
  argument_error(__FILE__, __LINE__);
74
83
 
75
- if (!*this)
76
- invalid_state_error(__FILE__, __LINE__);
77
-
78
84
  self->name = name;
79
85
  }
80
86
 
81
87
  const char*
82
88
  Application::name () const
83
89
  {
84
- if (!*this)
85
- invalid_state_error(__FILE__, __LINE__);
86
-
87
90
  return self->name.c_str();
88
91
  }
89
92
 
90
93
  void
91
94
  Application::on_start (Event* e)
92
95
  {
93
- if (!*this)
94
- invalid_state_error(__FILE__, __LINE__);
95
96
  }
96
97
 
97
98
  void
98
99
  Application::on_quit (Event* e)
99
100
  {
100
- if (!*this)
101
- invalid_state_error(__FILE__, __LINE__);
101
+ }
102
+
103
+ void
104
+ Application::on_motion (MotionEvent* e)
105
+ {
102
106
  }
103
107
 
104
108
  void
105
109
  Application::on_preference (Event* e)
106
110
  {
107
- if (!*this)
108
- invalid_state_error(__FILE__, __LINE__);
109
111
  }
110
112
 
111
113
  void
112
114
  Application::on_about (Event* e)
113
115
  {
114
- if (!*this)
115
- invalid_state_error(__FILE__, __LINE__);
116
-
117
116
  [NSApp orderFrontStandardAboutPanel: nil];
118
117
  }
119
118
 
120
119
  Application::operator bool () const
121
120
  {
122
- return self && *self;
121
+ return true;
123
122
  }
124
123
 
125
124
  bool
@@ -129,4 +128,10 @@ namespace Reflex
129
128
  }
130
129
 
131
130
 
131
+ Application::Data::Data ()
132
+ : delegate(nil)
133
+ {
134
+ }
135
+
136
+
132
137
  }// Reflex
@@ -1,24 +1,9 @@
1
1
  // -*- objc -*-
2
2
  #import <AppKit/NSWindow.h>
3
- #include <reflex/window.h>
4
-
5
-
6
- @class OpenGLView;
7
3
 
8
4
 
9
5
  @interface NativeWindow : NSWindow <NSWindowDelegate>
10
6
 
11
- {
12
- @private
13
- Reflex::Window::Ref* pref;
14
- OpenGLView* view;
15
- NSTimer* timer;
16
- }
17
-
18
- - (void) bind: (Reflex::Window*) instance;
19
-
20
- - (void) unbind: (Reflex::Window*) instance;
21
-
22
7
  - (void) draw;
23
8
 
24
9
  + (NSRect) frameRectForContentRect: (NSRect) contentRect;
@@ -4,27 +4,14 @@
4
4
 
5
5
  #include <assert.h>
6
6
  #import <Cocoa/Cocoa.h>
7
- #include "reflex/bounds.h"
8
- #include "reflex/window.h"
7
+ #include "rays/bounds.h"
9
8
  #include "reflex/exception.h"
9
+ #include "../view.h"
10
10
  #include "event.h"
11
- #include "window_data.h"
11
+ #include "window.h"
12
12
  #import "opengl_view.h"
13
13
 
14
14
 
15
- #define REF (*pref)
16
-
17
-
18
- namespace Reflex
19
- {
20
-
21
- void update_view_tree (View* v, const UpdateEvent& e);
22
-
23
- void draw_view_tree (View* v, const DrawEvent& e, const Point& offset, const Bounds& clip);
24
-
25
- }// Reflex
26
-
27
-
28
15
  static const NSUInteger WINDOW_STYLE_MASK =
29
16
  NSTitledWindowMask |
30
17
  NSClosableWindowMask |
@@ -35,6 +22,12 @@ static const NSUInteger WINDOW_STYLE_MASK =
35
22
 
36
23
  @implementation NativeWindow
37
24
 
25
+ {
26
+ Reflex::Window *pwindow, *ptr_for_rebind;
27
+ OpenGLView* view;
28
+ NSTimer* timer;
29
+ }
30
+
38
31
  - (id) init
39
32
  {
40
33
  self = [super
@@ -44,54 +37,73 @@ static const NSUInteger WINDOW_STYLE_MASK =
44
37
  defer: NO];
45
38
  if (!self) return nil;
46
39
 
47
- pref = new Reflex::Window::Ref;
48
- view = nil;
49
- timer = nil;
40
+ pwindow = ptr_for_rebind = NULL;
41
+ view = nil;
42
+ timer = nil;
50
43
 
51
44
  [self setDelegate: self];
52
45
  [self setupContentView];
53
- [self startTimer: 60];
46
+ [self startTimer];
54
47
 
55
48
  return self;
56
49
  }
57
50
 
58
51
  - (void) dealloc
59
52
  {
60
- assert(pref && !REF);
53
+ assert(!pwindow);
61
54
 
62
55
  if (view) [view release];
63
56
 
64
- delete pref;
65
-
66
57
  [super dealloc];
67
58
  }
68
59
 
69
- - (void) bind: (Reflex::Window*) instance
60
+ - (void) bind: (Reflex::Window*) window
70
61
  {
71
- assert(pref);
72
-
73
- if (instance && instance->self->native)
62
+ if (!window)
74
63
  Reflex::argument_error(__FILE__, __LINE__);
75
64
 
76
- if (REF)
65
+ Reflex::WindowData& data = Window_get_data(window);
66
+ if (data.native)
77
67
  Reflex::invalid_state_error(__FILE__, __LINE__);
78
68
 
79
- REF = instance;
80
- if (REF) REF->self->native = [self retain];
69
+ // ruby value references native window weakly.
70
+ data.native = self;
71
+
72
+ // Reflex::Window is not constructed completely,
73
+ // so can not call ClassWrapper::retain().
74
+ window->Xot::template RefCountable<>::retain();
75
+
76
+ // defer calling ClassWrapper::retain() to rebind.
77
+ ptr_for_rebind = window;
81
78
  }
82
79
 
83
- - (void) unbind: (Reflex::Window*) instance
80
+ - (void) rebind
84
81
  {
85
- assert(pref);
82
+ if (!pwindow && ptr_for_rebind)
83
+ {
84
+ pwindow = ptr_for_rebind;
85
+ pwindow->retain();
86
86
 
87
- if (!REF) return;
87
+ ptr_for_rebind->Xot::template RefCountable<>::release();
88
+ ptr_for_rebind = NULL;
89
+ }
90
+ }
88
91
 
89
- if (instance && instance != REF.get())
90
- Reflex::invalid_state_error(__FILE__, __LINE__);
92
+ - (void) unbind
93
+ {
94
+ [self rebind];
95
+ if (!pwindow) return;
91
96
 
92
- if (REF->self->native) [REF->self->native release];
93
- REF->self->native = nil;
94
- REF.reset();
97
+ Window_get_data(pwindow).native = nil;
98
+
99
+ pwindow->release();
100
+ pwindow = NULL;
101
+ }
102
+
103
+ - (Reflex::Window*) window
104
+ {
105
+ [self rebind];
106
+ return pwindow;
95
107
  }
96
108
 
97
109
  - (void) setupContentView
@@ -102,6 +114,11 @@ static const NSUInteger WINDOW_STYLE_MASK =
102
114
  [self setContentView: view];
103
115
  }
104
116
 
117
+ - (void) startTimer
118
+ {
119
+ [self startTimer: 60];
120
+ }
121
+
105
122
  - (void) startTimer: (int) fps
106
123
  {
107
124
  [self stopTimer];
@@ -116,9 +133,9 @@ static const NSUInteger WINDOW_STYLE_MASK =
116
133
  repeats: YES] retain];
117
134
  if (!timer) return;
118
135
 
119
- [[NSRunLoop currentRunLoop]
136
+ [[NSRunLoop mainRunLoop]
120
137
  addTimer: timer forMode: NSDefaultRunLoopMode];
121
- [[NSRunLoop currentRunLoop]
138
+ [[NSRunLoop mainRunLoop]
122
139
  addTimer: timer forMode: NSEventTrackingRunLoopMode];
123
140
  }
124
141
 
@@ -132,82 +149,64 @@ static const NSUInteger WINDOW_STYLE_MASK =
132
149
 
133
150
  - (void) update: (NSTimer*) t
134
151
  {
135
- assert(pref);
136
-
137
- if (!REF) return;
152
+ Reflex::Window* win = self.window;
153
+ if (!win) return;
138
154
 
139
155
  double now = Xot::time();
140
- Reflex::UpdateEvent e(now - REF->self->prev_time_update);
141
- REF->self->prev_time_update = now;
156
+ Reflex::UpdateEvent e(now, now - win->self->prev_time_update);
157
+ win->self->prev_time_update = now;
142
158
 
143
- REF->on_update(&e);
159
+ win->on_update(&e);
144
160
  if (!e.is_blocked())
145
- Reflex::update_view_tree(REF->root(), e);
161
+ Reflex::View_update_tree(win->root(), e);
146
162
 
147
- if (REF->self->redraw)
163
+ if (win->self->redraw)
148
164
  {
149
- [self display];
150
- REF->self->redraw = false;
165
+ view.needsDisplay = YES;
166
+ win->self->redraw = false;
151
167
  }
152
168
  }
153
169
 
154
170
  - (void) draw
155
171
  {
156
- assert(pref);
157
-
158
- if (!REF) return;
172
+ Reflex::Window* win = self.window;
173
+ if (!win) return;
159
174
 
160
175
  double now = Xot::time();
161
- double dt = now - REF->self->prev_time_draw;
176
+ double dt = now - win->self->prev_time_draw;
162
177
  double fps = 1. / dt;
163
178
 
164
- fps = REF->self->prev_fps * 0.9 + fps * 0.1;// LPF
165
- REF->self->prev_time_draw = now;
166
- REF->self->prev_fps = fps;
167
-
168
- Reflex::DrawEvent e(dt, fps);
169
-
170
- e.painter = REF->painter();
171
- if (!e.painter)
172
- Xot::invalid_state_error(__FILE__, __LINE__);
173
-
174
- Rays::Bounds b = REF->frame();
175
- e.bounds.reset(0, 0, b.width, b.height);
179
+ fps = win->self->prev_fps * 0.9 + fps * 0.1;// LPF
176
180
 
177
- e.painter->begin();
178
- e.painter->clear();
181
+ win->self->prev_time_draw = now;
182
+ win->self->prev_fps = fps;
179
183
 
180
- REF->on_draw(&e);
181
- if (!e.is_blocked())
182
- draw_view_tree(REF->root(), e, 0, REF->frame().dup().move_to(0));
183
-
184
- e.painter->end();
184
+ Reflex::DrawEvent e(dt, fps);
185
+ Window_call_draw_event(win, &e);
185
186
  }
186
187
 
187
188
  - (BOOL) windowShouldClose: (id) sender
188
189
  {
189
- assert(pref);
190
-
191
- if (!REF) return YES;
190
+ Reflex::Window* win = self.window;
191
+ if (!win) return YES;
192
192
 
193
- REF->close();
193
+ win->close();
194
194
  return NO;
195
195
  }
196
196
 
197
197
  - (void) windowWillClose: (NSNotification*) notification
198
198
  {
199
199
  [self stopTimer];
200
- [self unbind: NULL];
200
+ [self unbind];
201
201
  [self setDelegate: nil];
202
202
  }
203
203
 
204
204
  - (void) windowWillMove: (NSNotification*) notification
205
205
  {
206
- assert(pref);
206
+ Reflex::Window* win = self.window;
207
+ if (!win) return;
207
208
 
208
- if (!REF) return;
209
-
210
- REF->self->prev_position = REF->frame().position();
209
+ win->self->prev_position = win->frame().position();
211
210
  }
212
211
 
213
212
  - (void) windowDidMove: (NSNotification*) notification
@@ -217,11 +216,10 @@ static const NSUInteger WINDOW_STYLE_MASK =
217
216
 
218
217
  - (NSSize) windowWillResize: (NSWindow*) sender toSize: (NSSize) frameSize
219
218
  {
220
- assert(pref);
221
-
222
- if (!REF) return frameSize;
219
+ Reflex::Window* win = self.window;
220
+ if (!win) return frameSize;
223
221
 
224
- REF->self->prev_size = REF->frame().size();
222
+ win->self->prev_size = win->frame().size();
225
223
 
226
224
  return frameSize;
227
225
  }
@@ -233,99 +231,101 @@ static const NSUInteger WINDOW_STYLE_MASK =
233
231
 
234
232
  - (void) frameChanged
235
233
  {
236
- assert(pref);
237
-
238
- if (!REF) return;
234
+ Reflex::Window* win = self.window;
235
+ if (!win) return;
239
236
 
240
- Rays::Bounds b = REF->frame();
241
- Rays::Point dpos = b.position() - REF->self->prev_position;
242
- Rays::Point dsize = b.size() - REF->self->prev_size;
243
- REF->self->prev_position = b.position();
244
- REF->self->prev_size = b.size();
237
+ Rays::Bounds b = win->frame();
238
+ Rays::Point dpos = b.position() - win->self->prev_position;
239
+ Rays::Point dsize = b.size() - win->self->prev_size;
240
+ win->self->prev_position = b.position();
241
+ win->self->prev_size = b.size();
245
242
 
246
243
  if (dpos != 0 || dsize != 0)
247
244
  {
248
245
  Reflex::FrameEvent e(b, dpos.x, dpos.y, dsize.x, dsize.y);
249
- if (dpos != 0) REF->on_move(&e);
246
+ if (dpos != 0) win->on_move(&e);
250
247
  if (dsize != 0)
251
248
  {
252
- Rays::Bounds b = REF->frame();
249
+ Rays::Bounds b = win->frame();
253
250
  b.move_to(0, 0);
254
- if (REF->painter()) REF->painter()->canvas(b);
255
- if (REF->root()) REF->root()->set_frame(b);
256
- REF->on_resize(&e);
251
+
252
+ if (win->painter())
253
+ win->painter()->canvas(b, self.backingScaleFactor);
254
+
255
+ if (win->root())
256
+ View_set_frame(win->root(), b);
257
+
258
+ win->on_resize(&e);
257
259
  }
258
260
  }
259
261
  }
260
262
 
261
263
  - (void) keyDown: (NSEvent*) event
262
264
  {
263
- assert(pref);
264
-
265
- if (!REF) return;
265
+ Reflex::Window* win = self.window;
266
+ if (!win) return;
266
267
 
267
268
  Reflex::NativeKeyEvent e(event, Reflex::KeyEvent::DOWN);
268
- REF->on_key(&e);
269
+ win->on_key(&e);
269
270
  }
270
271
 
271
272
  - (void) keyUp: (NSEvent*) event
272
273
  {
273
- assert(pref);
274
-
275
- if (!REF) return;
274
+ Reflex::Window* win = self.window;
275
+ if (!win) return;
276
276
 
277
277
  Reflex::NativeKeyEvent e(event, Reflex::KeyEvent::UP);
278
- REF->on_key(&e);
278
+ win->on_key(&e);
279
279
  }
280
280
 
281
- - (void) mouseDown: (NSEvent*) event
281
+ - (void) flagsChanged: (NSEvent*) event
282
282
  {
283
- assert(pref);
283
+ // TODO: implement later.
284
+ }
284
285
 
285
- if (!REF) return;
286
+ - (void) mouseDown: (NSEvent*) event
287
+ {
288
+ Reflex::Window* win = self.window;
289
+ if (!win) return;
286
290
 
287
291
  Reflex::NativePointerEvent e(event, view, Reflex::PointerEvent::DOWN);
288
- REF->on_pointer(&e);
292
+ win->on_pointer(&e);
289
293
  }
290
294
 
291
295
  - (void) mouseUp: (NSEvent*) event
292
296
  {
293
- assert(pref);
294
-
295
- if (!REF) return;
297
+ Reflex::Window* win = self.window;
298
+ if (!win) return;
296
299
 
297
300
  Reflex::NativePointerEvent e(event, view, Reflex::PointerEvent::UP);
298
- REF->on_pointer(&e);
301
+ win->on_pointer(&e);
299
302
  }
300
303
 
301
304
  - (void) mouseDragged: (NSEvent*) event
302
305
  {
303
- assert(pref);
304
-
305
- if (!REF) return;
306
+ Reflex::Window* win = self.window;
307
+ if (!win) return;
306
308
 
307
309
  Reflex::NativePointerEvent e(event, view, Reflex::PointerEvent::MOVE);
308
- REF->on_pointer(&e);
310
+ win->on_pointer(&e);
309
311
  }
310
312
 
311
313
  - (void) mouseMoved: (NSEvent*) event
312
314
  {
313
- assert(pref);
314
-
315
- if (!REF) return;
315
+ Reflex::Window* win = self.window;
316
+ if (!win) return;
316
317
 
317
318
  Reflex::NativePointerEvent e(event, view, Reflex::PointerEvent::MOVE);
318
- REF->on_pointer(&e);
319
+ win->on_pointer(&e);
319
320
  }
320
321
 
321
322
  - (void) scrollWheel: (NSEvent*) event
322
323
  {
323
- assert(pref);
324
-
325
- if (!REF) return;
324
+ Reflex::Window* win = self.window;
325
+ if (!win) return;
326
326
 
327
327
  Reflex::NativeWheelEvent e(event, view);
328
- REF->on_wheel(&e);
328
+ win->on_wheel(&e);
329
329
  }
330
330
 
331
331
  + (NSRect) frameRectForContentRect: (NSRect) contentRect