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
data/src/osx/window.h ADDED
@@ -0,0 +1,42 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __REFLEX_SRC_OSX_WINDOW_H__
4
+ #define __REFLEX_SRC_OSX_WINDOW_H__
5
+
6
+
7
+ #include "../window.h"
8
+
9
+
10
+ @class NativeWindow;
11
+
12
+
13
+ namespace Reflex
14
+ {
15
+
16
+
17
+ struct WindowData : public Window::Data
18
+ {
19
+
20
+ NativeWindow* native;
21
+
22
+ mutable String title_tmp;
23
+
24
+ WindowData ();
25
+
26
+ bool is_valid () const
27
+ {
28
+ return native;
29
+ }
30
+
31
+ };// WindowData
32
+
33
+
34
+ WindowData& Window_get_data (Window* window);
35
+
36
+ const WindowData& Window_get_data (const Window* window);
37
+
38
+
39
+ }// Reflex
40
+
41
+
42
+ #endif//EOH
data/src/osx/window.mm CHANGED
@@ -1,217 +1,110 @@
1
1
  // -*- objc -*-
2
- #include "reflex/window.h"
2
+ #include "window.h"
3
3
 
4
4
 
5
5
  #import <Cocoa/Cocoa.h>
6
- #include "reflex/event.h"
7
6
  #include "reflex/exception.h"
8
- #include "window_data.h"
9
7
  #import "native_window.h"
10
8
 
11
9
 
12
- namespace Reflex
13
- {
14
-
15
-
16
- void set_window (View* view, Window* window);
17
-
18
- void call_key_event (View* v, const KeyEvent& e);
19
-
20
- void call_pointer_event (View* v, const PointerEvent& e);
21
-
22
- void call_wheel_event (View* v, const WheelEvent& e);
23
-
24
-
25
- void
26
- set_focus (Window* window, View* view)
27
- {
28
- if (!window || !view)
29
- argument_error(__FILE__, __LINE__);
30
-
31
- View* current = window->self->focus.get();
32
- if (current == view) return;
10
+ @interface NativeWindow (Bind)
11
+ - (void) bind: (Reflex::Window*) window;
12
+ @end
33
13
 
34
- window->self->focus.reset(view);
35
14
 
36
- FocusEvent e(FocusEvent::BLUR, view, current);
37
-
38
- if (current)
39
- {
40
- current->on_blur(&e);
41
- current->redraw();
42
- }
15
+ namespace Reflex
16
+ {
43
17
 
44
- if (view)
45
- {
46
- e.type = FocusEvent::FOCUS;
47
- view->on_focus(&e);
48
- view->redraw();
49
- }
50
- }
51
18
 
52
- void
53
- register_capture (View* view)
19
+ WindowData&
20
+ Window_get_data (Window* window)
54
21
  {
55
- if (!view)
56
- argument_error(__FILE__, __LINE__);
57
-
58
- const Window* window = view->window();
59
22
  if (!window)
60
- invalid_state_error(__FILE__, __LINE__, "this view does not belong to any Window.");
61
-
62
- window->self->capturing_views[view] = true;
63
- }
64
-
65
- void
66
- unregister_capture (View* view)
67
- {
68
- if (!view)
69
23
  argument_error(__FILE__, __LINE__);
70
24
 
71
- const Window* window = view->window();
72
- if (!window) return;
73
-
74
- CapturingViews::iterator it = window->self->capturing_views.find(view);
75
- if (it == window->self->capturing_views.end()) return;
76
-
77
- it->second = false;
25
+ return (WindowData&) *window->self;
78
26
  }
79
27
 
80
- void
81
- cleanup_capturing_views (Window* window)
28
+ const WindowData&
29
+ Window_get_data (const Window* window)
82
30
  {
83
- CapturingViews::iterator end = window->self->capturing_views.end();
84
- for (CapturingViews::iterator it = window->self->capturing_views.begin(); it != end;)
85
- {
86
- CapturingViews::iterator t = it++;
87
- if (!t->second) window->self->capturing_views.erase(t);
88
- }
31
+ return Window_get_data(const_cast<Window*>(window));
89
32
  }
90
33
 
91
-
92
- Window::Window ()
34
+ static NativeWindow*
35
+ get_native (const Window* window)
93
36
  {
94
- [[[NativeWindow alloc] init] bind: this];
95
-
96
- set_window(self->root.get(), this);
37
+ NativeWindow* p = Window_get_data(const_cast<Window*>(window)).native;
38
+ if (!p)
39
+ invalid_state_error(__FILE__, __LINE__);
97
40
 
98
- self->painter.canvas(0, 0, 1, 1);
41
+ return p;
99
42
  }
100
43
 
101
- Window::~Window ()
102
- {
103
- //close();
104
44
 
105
- set_window(self->root.get(), NULL);
45
+ Window::Data*
46
+ Window_create_data ()
47
+ {
48
+ return new WindowData();
106
49
  }
107
50
 
108
51
  void
109
- Window::show ()
52
+ Window_initialize (Window* window)
110
53
  {
111
- if (!*this)
112
- invalid_state_error(__FILE__, __LINE__);
113
-
114
- int new_count = self->hide_count - 1;
115
- if (new_count == 0)
116
- {
117
- Event e;
118
- on_show(&e);
119
- if (e.is_blocked()) return;
120
-
121
- [self->native makeKeyAndOrderFront: nil];
122
- }
123
-
124
- self->hide_count = new_count;
54
+ [[[NativeWindow alloc] init] bind: window];
125
55
  }
126
56
 
127
57
  void
128
- Window::hide ()
58
+ Window_show (Window* window)
129
59
  {
130
- if (!*this)
131
- invalid_state_error(__FILE__, __LINE__);
132
-
133
- int new_count = self->hide_count + 1;
134
- if (new_count == 1)
135
- {
136
- Event e;
137
- on_hide(&e);
138
- if (e.is_blocked()) return;
139
-
140
- [self->native orderOut: self->native];
141
- }
142
-
143
- self->hide_count = new_count;
60
+ [get_native(window) makeKeyAndOrderFront: nil];
144
61
  }
145
62
 
146
63
  void
147
- Window::close ()
64
+ Window_hide (Window* window)
148
65
  {
149
- if (!*this)
150
- invalid_state_error(__FILE__, __LINE__);
151
-
152
- Event e;
153
- on_close(&e);
154
- if (e.is_blocked()) return;
155
-
156
- [self->native close];
66
+ NativeWindow* native = get_native(window);
67
+ [native orderOut: native];
157
68
  }
158
69
 
159
70
  void
160
- Window::redraw ()
71
+ Window_close (Window* window)
161
72
  {
162
- if (!*this)
163
- invalid_state_error(__FILE__, __LINE__);
164
-
165
- self->redraw = true;
73
+ [get_native(window) close];
166
74
  }
167
75
 
168
76
  void
169
- Window::set_title (const char* title)
77
+ Window_set_title (Window* window, const char* title)
170
78
  {
171
79
  if (!title)
172
80
  argument_error(__FILE__, __LINE__);
173
81
 
174
- if (!*this)
175
- invalid_state_error(__FILE__, __LINE__);
176
-
177
- [self->native setTitle: [NSString stringWithUTF8String: title]];
82
+ [get_native(window) setTitle: [NSString stringWithUTF8String: title]];
178
83
  }
179
84
 
180
85
  const char*
181
- Window::title () const
86
+ Window_get_title (const Window& window)
182
87
  {
183
- if (!*this)
184
- invalid_state_error(__FILE__, __LINE__);
88
+ const WindowData& data = Window_get_data(&window);
185
89
 
186
- NSString* s = [self->native title];
187
- self->title_tmp = s ? [s UTF8String] : "";
188
- return self->title_tmp.c_str();
90
+ NSString* s = [get_native(&window) title];
91
+ data.title_tmp = s ? [s UTF8String] : "";
92
+ return data.title_tmp.c_str();
189
93
  }
190
94
 
191
95
  void
192
- Window::set_frame (coord x, coord y, coord width, coord height)
96
+ Window_set_frame (Window* window, coord x, coord y, coord width, coord height)
193
97
  {
194
- if (!*this)
195
- invalid_state_error(__FILE__, __LINE__);
196
-
197
98
  NSRect frame =
198
99
  [NativeWindow frameRectForContentRect: NSMakeRect(x, y, width, height)];
199
- [self->native setFrame: frame display: NO animate: NO];
200
- }
201
-
202
- void
203
- Window::set_frame (const Bounds& bounds)
204
- {
205
- set_frame(bounds.x, bounds.y, bounds.width, bounds.height);
100
+ [get_native(window) setFrame: frame display: NO animate: NO];
206
101
  }
207
102
 
208
103
  Bounds
209
- Window::frame () const
104
+ Window_get_frame (const Window& window)
210
105
  {
211
- if (!*this)
212
- invalid_state_error(__FILE__, __LINE__);
213
-
214
- NSRect rect = [self->native contentRectForFrameRect: [self->native frame]];
106
+ NativeWindow* native = get_native(&window);
107
+ NSRect rect = [native contentRectForFrameRect: [native frame]];
215
108
  return Bounds(
216
109
  rect.origin.x,
217
110
  rect.origin.y,
@@ -219,110 +112,10 @@ namespace Reflex
219
112
  rect.size.height);
220
113
  }
221
114
 
222
- bool
223
- Window::hidden () const
224
- {
225
- if (!*this)
226
- invalid_state_error(__FILE__, __LINE__);
227
-
228
- return self->hide_count > 0;
229
- }
230
-
231
- View*
232
- Window::root ()
233
- {
234
- if (!*this)
235
- invalid_state_error(__FILE__, __LINE__);
236
-
237
- return self->root.get();
238
- }
239
-
240
- View*
241
- Window::focus ()
242
- {
243
- if (!*this)
244
- invalid_state_error(__FILE__, __LINE__);
245
-
246
- return self->focus.get();
247
- }
248
-
249
- Painter*
250
- Window::painter ()
251
- {
252
- if (!*this)
253
- invalid_state_error(__FILE__, __LINE__);
254
-
255
- return &self->painter;
256
- }
257
-
258
- void
259
- Window::on_key (KeyEvent* e)
260
- {
261
- if (!e)
262
- argument_error(__FILE__, __LINE__);
263
-
264
- switch (e->type)
265
- {
266
- case KeyEvent::DOWN: on_key_down(e); break;
267
- case KeyEvent::UP: on_key_up(e); break;
268
- case KeyEvent::NONE: break;
269
- }
270
-
271
- CapturingViews::iterator end = self->capturing_views.end();
272
- for (CapturingViews::iterator it = self->capturing_views.begin(); it != end; ++it)
273
- {
274
- KeyEvent event = *e;
275
- event.capture = true;
276
- call_key_event(const_cast<View*>(it->first.get()), event);
277
- }
278
-
279
- if (self->focus)
280
- call_key_event(self->focus.get(), *e);
281
-
282
- cleanup_capturing_views(this);
283
- }
284
-
285
- void
286
- Window::on_pointer (PointerEvent* e)
287
- {
288
- if (!e)
289
- argument_error(__FILE__, __LINE__);
290
-
291
- switch (e->type)
292
- {
293
- case PointerEvent::DOWN: on_pointer_down(e); break;
294
- case PointerEvent::UP: on_pointer_up(e); break;
295
- case PointerEvent::MOVE: on_pointer_move(e); break;
296
- case PointerEvent::NONE: break;
297
- }
298
-
299
- CapturingViews::iterator end = self->capturing_views.end();
300
- for (CapturingViews::iterator it = self->capturing_views.begin(); it != end; ++it)
301
- {
302
- PointerEvent event = *e;
303
- event.capture = true;
304
- for (size_t i = 0; i < event.size; ++i)
305
- event[i] = it->first.get()->from_window(event[i]);
306
- call_pointer_event(const_cast<View*>(it->first.get()), event);
307
- }
308
-
309
- call_pointer_event(root(), *e);
310
-
311
- cleanup_capturing_views(this);
312
- }
313
-
314
- void
315
- Window::on_wheel (WheelEvent* e)
316
- {
317
- if (!e)
318
- argument_error(__FILE__, __LINE__);
319
-
320
- call_wheel_event(root(), *e);
321
- }
322
115
 
323
- Window::operator bool () const
116
+ WindowData::WindowData ()
324
117
  {
325
- return self && *self;
118
+ native = nil;
326
119
  }
327
120
 
328
121
 
data/src/selector.cpp CHANGED
@@ -1,7 +1,9 @@
1
1
  #include "reflex/selector.h"
2
2
 
3
3
 
4
+ #include <assert.h>
4
5
  #include "reflex/exception.h"
6
+ #include "selector.h"
5
7
 
6
8
 
7
9
  namespace Reflex
@@ -45,10 +47,12 @@ namespace Reflex
45
47
  const TagSet& tags = self->tags;
46
48
  const_iterator tags_end = tags.end();
47
49
 
48
- iterator end = selector.end();
49
- for (iterator tag = selector.begin(); tag != end; ++tag)
50
+ const_iterator end = selector.end();
51
+ for (const_iterator tag = selector.begin(); tag != end; ++tag)
52
+ {
50
53
  if (tags.find(*tag) == tags_end)
51
54
  return false;
55
+ }
52
56
 
53
57
  return selector.self->name.empty() || selector.self->name == self->name;
54
58
  }
@@ -56,13 +60,17 @@ namespace Reflex
56
60
  void
57
61
  Selector::set_name (const char* name)
58
62
  {
59
- self->name = name ? name : "";
63
+ if (name && *name != '\0')
64
+ self->name = name;
65
+ else
66
+ self->name.clear();
60
67
  }
61
68
 
62
69
  const char*
63
70
  Selector::name () const
64
71
  {
65
- return self->name.c_str();
72
+ const String& s = self->name;
73
+ return !s.empty() ? s.c_str() : NULL;
66
74
  }
67
75
 
68
76
  void
@@ -72,7 +80,8 @@ namespace Reflex
72
80
  argument_error(__FILE__, __LINE__);
73
81
 
74
82
  iterator it = self->tags.find(tag);
75
- if (it != self->tags.end()) return;
83
+ if (it != self->tags.end())
84
+ return;
76
85
 
77
86
  self->tags.insert(tag);
78
87
  }
@@ -80,15 +89,31 @@ namespace Reflex
80
89
  void
81
90
  Selector::remove_tag (const char* tag)
82
91
  {
83
- if (!tag || *tag == '\0')
92
+ if (!tag)
84
93
  argument_error(__FILE__, __LINE__);
85
94
 
86
95
  iterator it = self->tags.find(tag);
87
- if (it == self->tags.end()) return;
96
+ if (it == self->tags.end())
97
+ return;
88
98
 
89
99
  self->tags.erase(it);
90
100
  }
91
101
 
102
+ void
103
+ Selector::clear_tags ()
104
+ {
105
+ self->tags.clear();
106
+ }
107
+
108
+ bool
109
+ Selector::has_tag (const char* tag) const
110
+ {
111
+ if (!tag || *tag == '\0')
112
+ return false;
113
+
114
+ return self->tags.find(tag) != self->tags.end();
115
+ }
116
+
92
117
  Selector::iterator
93
118
  Selector::begin ()
94
119
  {
@@ -140,4 +165,204 @@ namespace Reflex
140
165
  }
141
166
 
142
167
 
168
+ static Selector*
169
+ get_selector (SelectorPtr* this_, bool create = false)
170
+ {
171
+ assert(this_);
172
+
173
+ SelectorPtr& ptr = *this_;
174
+
175
+ if (create && !ptr) ptr.reset(new Selector());
176
+ return ptr.get();
177
+ }
178
+
179
+ static const Selector*
180
+ get_selector (const SelectorPtr* this_)
181
+ {
182
+ return get_selector(const_cast<SelectorPtr*>(this_));
183
+ }
184
+
185
+ void
186
+ SelectorPtr::set_name (const char* name)
187
+ {
188
+ get_selector(this, true)->set_name(name);
189
+ }
190
+
191
+ const char*
192
+ SelectorPtr::name () const
193
+ {
194
+ const Selector* sel = get_selector(this);
195
+ return sel ? sel->name() : NULL;
196
+ }
197
+
198
+ void
199
+ SelectorPtr::add_tag (const char* tag)
200
+ {
201
+ get_selector(this, true)->add_tag(tag);
202
+ }
203
+
204
+ void
205
+ SelectorPtr::remove_tag (const char* tag)
206
+ {
207
+ Selector* sel = get_selector(this);
208
+ if (sel) sel->remove_tag(tag);
209
+ }
210
+
211
+ void
212
+ SelectorPtr::clear_tags ()
213
+ {
214
+ Selector* sel = get_selector(this);
215
+ if (sel) sel->clear_tags();
216
+ }
217
+
218
+ bool
219
+ SelectorPtr::has_tag (const char* tag) const
220
+ {
221
+ const Selector* sel = get_selector(this);
222
+ return sel ? sel->has_tag(tag) : false;
223
+ }
224
+
225
+ static Selector::TagSet empty_tags;
226
+
227
+ Selector::iterator
228
+ SelectorPtr::tag_begin ()
229
+ {
230
+ assert(empty_tags.empty());
231
+
232
+ Selector* sel = get_selector(this);
233
+ return sel ? sel->begin() : empty_tags.begin();
234
+ }
235
+
236
+ Selector::const_iterator
237
+ SelectorPtr::tag_begin () const
238
+ {
239
+ return selector().begin();
240
+ }
241
+
242
+ Selector::iterator
243
+ SelectorPtr::tag_end ()
244
+ {
245
+ assert(empty_tags.empty());
246
+
247
+ Selector* sel = get_selector(this);
248
+ return sel ? sel->end() : empty_tags.end();
249
+ }
250
+
251
+ Selector::const_iterator
252
+ SelectorPtr::tag_end () const
253
+ {
254
+ return selector().end();
255
+ }
256
+
257
+ void
258
+ SelectorPtr::set_selector (const Selector& selector)
259
+ {
260
+ *get_selector(this, true) = selector;
261
+ }
262
+
263
+ Selector&
264
+ SelectorPtr::selector ()
265
+ {
266
+ return *get_selector(this, true);
267
+ }
268
+
269
+ const Selector&
270
+ SelectorPtr::selector () const
271
+ {
272
+ static const Selector EMPTY;
273
+
274
+ const Selector* sel = get_selector(this);
275
+ return sel ? *sel : EMPTY;
276
+ }
277
+
278
+
279
+ HasSelector::~HasSelector ()
280
+ {
281
+ }
282
+
283
+ void
284
+ HasSelector::set_name (const char* name)
285
+ {
286
+ get_selector_ptr()->set_name(name);
287
+ }
288
+
289
+ const char*
290
+ HasSelector::name () const
291
+ {
292
+ return get_selector_ptr()->name();
293
+ }
294
+
295
+ void
296
+ HasSelector::add_tag (const char* tag)
297
+ {
298
+ get_selector_ptr()->add_tag(tag);
299
+ }
300
+
301
+ void
302
+ HasSelector::remove_tag (const char* tag)
303
+ {
304
+ get_selector_ptr()->remove_tag(tag);
305
+ }
306
+
307
+ void
308
+ HasSelector::clear_tags ()
309
+ {
310
+ get_selector_ptr()->clear_tags();
311
+ }
312
+
313
+ bool
314
+ HasSelector::has_tag (const char* tag) const
315
+ {
316
+ return get_selector_ptr()->has_tag(tag);
317
+ }
318
+
319
+ Selector::iterator
320
+ HasSelector::tag_begin ()
321
+ {
322
+ return get_selector_ptr()->tag_begin();
323
+ }
324
+
325
+ Selector::const_iterator
326
+ HasSelector::tag_begin () const
327
+ {
328
+ return get_selector_ptr()->tag_begin();
329
+ }
330
+
331
+ Selector::iterator
332
+ HasSelector::tag_end ()
333
+ {
334
+ return get_selector_ptr()->tag_end();
335
+ }
336
+
337
+ Selector::const_iterator
338
+ HasSelector::tag_end () const
339
+ {
340
+ return get_selector_ptr()->tag_end();
341
+ }
342
+
343
+ void
344
+ HasSelector::set_selector (const Selector& selector)
345
+ {
346
+ get_selector_ptr()->set_selector(selector);
347
+ }
348
+
349
+ Selector&
350
+ HasSelector::selector ()
351
+ {
352
+ return get_selector_ptr()->selector();
353
+ }
354
+
355
+ const Selector&
356
+ HasSelector::selector () const
357
+ {
358
+ return get_selector_ptr()->selector();
359
+ }
360
+
361
+ const SelectorPtr*
362
+ HasSelector::get_selector_ptr () const
363
+ {
364
+ return const_cast<HasSelector*>(this)->get_selector_ptr();
365
+ }
366
+
367
+
143
368
  }// Reflex