reflexion 0.1.12 → 0.1.13

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