reflexion 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +7 -0
  2. data/.doc/ext/reflex/application.cpp +54 -39
  3. data/.doc/ext/reflex/capture_event.cpp +87 -0
  4. data/.doc/ext/reflex/draw_event.cpp +103 -0
  5. data/.doc/ext/reflex/event.cpp +73 -0
  6. data/.doc/ext/reflex/focus_event.cpp +98 -0
  7. data/.doc/ext/reflex/frame_event.cpp +133 -0
  8. data/.doc/ext/reflex/image_view.cpp +74 -0
  9. data/.doc/ext/reflex/key_event.cpp +124 -0
  10. data/.doc/ext/reflex/native.cpp +45 -6
  11. data/.doc/ext/reflex/pointer_event.cpp +181 -0
  12. data/.doc/ext/reflex/reflex.cpp +17 -41
  13. data/.doc/ext/reflex/scroll_event.cpp +141 -0
  14. data/.doc/ext/reflex/selector.cpp +135 -0
  15. data/.doc/ext/reflex/style.cpp +253 -0
  16. data/.doc/ext/reflex/style_length.cpp +133 -0
  17. data/.doc/ext/reflex/style_length2.cpp +149 -0
  18. data/.doc/ext/reflex/style_length4.cpp +192 -0
  19. data/.doc/ext/reflex/update_event.cpp +77 -0
  20. data/.doc/ext/reflex/view.cpp +408 -88
  21. data/.doc/ext/reflex/wheel_event.cpp +146 -0
  22. data/.doc/ext/reflex/window.cpp +95 -92
  23. data/Rakefile +6 -5
  24. data/VERSION +1 -1
  25. data/ext/reflex/application.cpp +67 -49
  26. data/ext/reflex/capture_event.cpp +92 -0
  27. data/ext/reflex/draw_event.cpp +110 -0
  28. data/ext/reflex/event.cpp +77 -0
  29. data/ext/reflex/extconf.rb +18 -68
  30. data/ext/reflex/focus_event.cpp +104 -0
  31. data/ext/reflex/frame_event.cpp +143 -0
  32. data/ext/reflex/image_view.cpp +77 -0
  33. data/ext/reflex/key_event.cpp +133 -0
  34. data/ext/reflex/native.cpp +45 -6
  35. data/ext/reflex/pointer_event.cpp +195 -0
  36. data/ext/reflex/reflex.cpp +21 -47
  37. data/ext/reflex/scroll_event.cpp +152 -0
  38. data/ext/reflex/selector.cpp +144 -0
  39. data/ext/reflex/style.cpp +277 -0
  40. data/ext/reflex/style_length.cpp +140 -0
  41. data/ext/reflex/style_length2.cpp +157 -0
  42. data/ext/reflex/style_length4.cpp +204 -0
  43. data/ext/reflex/update_event.cpp +81 -0
  44. data/ext/reflex/view.cpp +469 -114
  45. data/ext/reflex/wheel_event.cpp +158 -0
  46. data/ext/reflex/window.cpp +130 -123
  47. data/include/reflex/application.h +12 -7
  48. data/include/reflex/defs.h +13 -89
  49. data/include/reflex/event.h +260 -0
  50. data/include/reflex/exception.h +17 -11
  51. data/include/reflex/image_view.h +45 -0
  52. data/include/reflex/reflex.h +2 -6
  53. data/include/reflex/ruby/application.h +40 -13
  54. data/include/reflex/ruby/event.h +72 -0
  55. data/include/reflex/ruby/image_view.h +25 -0
  56. data/include/reflex/ruby/selector.h +27 -0
  57. data/include/reflex/ruby/style.h +27 -0
  58. data/include/reflex/ruby/style_length.h +37 -0
  59. data/include/reflex/ruby/view.h +193 -38
  60. data/include/reflex/ruby/window.h +123 -39
  61. data/include/reflex/ruby.h +3 -2
  62. data/include/reflex/selector.h +64 -0
  63. data/include/reflex/style.h +144 -0
  64. data/include/reflex/style_length.h +147 -0
  65. data/include/reflex/view.h +182 -19
  66. data/include/reflex/window.h +35 -19
  67. data/include/reflex.h +7 -0
  68. data/lib/reflex/application.rb +14 -5
  69. data/lib/reflex/arc_shape.rb +20 -0
  70. data/lib/reflex/button.rb +75 -0
  71. data/lib/reflex/capture_event.rb +37 -0
  72. data/lib/reflex/color.rb +13 -0
  73. data/lib/reflex/color_space.rb +13 -0
  74. data/lib/reflex/draw_event.rb +19 -0
  75. data/lib/reflex/ellipse_shape.rb +20 -0
  76. data/lib/reflex/ext.rb +1 -1
  77. data/lib/reflex/flags.rb +18 -0
  78. data/lib/reflex/focus_event.rb +38 -0
  79. data/lib/reflex/font.rb +13 -0
  80. data/lib/reflex/frame_event.rb +42 -0
  81. data/lib/reflex/helper.rb +87 -30
  82. data/lib/reflex/image_view.rb +25 -0
  83. data/lib/reflex/key_event.rb +38 -0
  84. data/lib/reflex/line_shape.rb +20 -0
  85. data/lib/reflex/list_view.rb +15 -0
  86. data/lib/reflex/model.rb +149 -0
  87. data/lib/reflex/model_owner.rb +57 -0
  88. data/lib/reflex/model_view.rb +22 -0
  89. data/lib/reflex/module.rb +11 -7
  90. data/lib/reflex/pointer_event.rb +85 -0
  91. data/lib/reflex/rect_shape.rb +20 -0
  92. data/lib/reflex/reflex.rb +13 -2
  93. data/lib/reflex/scroll_event.rb +19 -0
  94. data/lib/reflex/selector.rb +31 -0
  95. data/lib/reflex/shader.rb +13 -0
  96. data/lib/reflex/shape.rb +34 -0
  97. data/lib/reflex/style.rb +55 -0
  98. data/lib/reflex/style_length.rb +30 -0
  99. data/lib/reflex/style_length2.rb +34 -0
  100. data/lib/reflex/style_length4.rb +38 -0
  101. data/lib/reflex/text_view.rb +55 -0
  102. data/lib/reflex/update_event.rb +19 -0
  103. data/lib/reflex/view.rb +38 -4
  104. data/lib/reflex/wheel_event.rb +19 -0
  105. data/lib/reflex/window.rb +7 -5
  106. data/lib/reflex.rb +38 -1
  107. data/lib/reflexion/include.rb +5 -0
  108. data/lib/reflexion.rb +100 -0
  109. data/reflex.gemspec +3 -4
  110. data/samples/app.rb +13 -0
  111. data/samples/bats.rb +91 -0
  112. data/samples/checker.rb +36 -0
  113. data/{examples/ruby/shapes.rb → samples/fans.rb} +12 -16
  114. data/samples/fps.rb +46 -0
  115. data/samples/grid.rb +60 -0
  116. data/{examples/ruby → samples}/hello.rb +14 -16
  117. data/samples/image.rb +44 -0
  118. data/samples/ios/hello/hello/Images.xcassets/AppIcon.appiconset/Contents.json +53 -0
  119. data/samples/ios/hello/hello/Images.xcassets/LaunchImage.launchimage/Contents.json +51 -0
  120. data/samples/ios/hello/hello/en.lproj/InfoPlist.strings +2 -0
  121. data/samples/ios/hello/hello/hello-Info.plist +47 -0
  122. data/samples/ios/hello/hello/hello-Prefix.pch +10 -0
  123. data/samples/ios/hello/hello/main.cpp +79 -0
  124. data/samples/ios/hello/hello.xcodeproj/project.pbxproj +725 -0
  125. data/{examples/ruby → samples}/key.rb +11 -14
  126. data/samples/layout.rb +89 -0
  127. data/samples/model.rb +86 -0
  128. data/samples/osx/hello/hello/Images.xcassets/AppIcon.appiconset/Contents.json +58 -0
  129. data/samples/osx/hello/hello/en.lproj/Credits.rtf +29 -0
  130. data/samples/osx/hello/hello/en.lproj/InfoPlist.strings +2 -0
  131. data/samples/osx/hello/hello/hello-Info.plist +32 -0
  132. data/samples/osx/hello/hello/hello-Prefix.pch +3 -0
  133. data/samples/osx/hello/hello/main.cpp +79 -0
  134. data/samples/osx/hello/hello.xcodeproj/project.pbxproj +725 -0
  135. data/samples/reflexion/hello.rb +24 -0
  136. data/samples/reflexion/paint.rb +40 -0
  137. data/samples/reflexion/pulse.rb +34 -0
  138. data/samples/repl.rb +69 -0
  139. data/samples/shader.rb +41 -0
  140. data/samples/shapes.rb +30 -0
  141. data/{examples/ruby → samples}/text.rb +7 -8
  142. data/samples/tree.rb +71 -0
  143. data/samples/views.rb +41 -0
  144. data/samples/visuals.rb +22 -0
  145. data/src/event.cpp +225 -0
  146. data/src/exception.cpp +24 -15
  147. data/src/image_view.cpp +70 -0
  148. data/src/ios/app_delegate.h +17 -0
  149. data/src/ios/app_delegate.mm +120 -0
  150. data/src/ios/application.mm +116 -0
  151. data/src/{cocoa/applicationdata.h → ios/application_data.h} +6 -6
  152. data/src/ios/event.h +26 -0
  153. data/src/ios/event.mm +31 -0
  154. data/src/ios/native_window.h +37 -0
  155. data/src/ios/native_window.mm +220 -0
  156. data/src/ios/opengl_view.h +13 -0
  157. data/src/ios/opengl_view.mm +131 -0
  158. data/src/{cocoa → ios}/reflex.mm +8 -12
  159. data/src/ios/window.mm +303 -0
  160. data/src/ios/window_data.h +75 -0
  161. data/src/osx/app_delegate.h +17 -0
  162. data/src/{cocoa/cocoaapplication.mm → osx/app_delegate.mm} +90 -48
  163. data/src/osx/application.mm +132 -0
  164. data/src/osx/application_data.h +45 -0
  165. data/src/osx/event.h +42 -0
  166. data/src/osx/event.mm +112 -0
  167. data/src/osx/native_window.h +26 -0
  168. data/src/osx/native_window.mm +322 -0
  169. data/src/{cocoa/openglview.h → osx/opengl_view.h} +0 -4
  170. data/src/{cocoa/openglview.mm → osx/opengl_view.mm} +66 -23
  171. data/src/osx/reflex.mm +50 -0
  172. data/src/osx/window.mm +308 -0
  173. data/src/osx/window_data.h +75 -0
  174. data/src/selector.cpp +121 -0
  175. data/src/style.cpp +576 -0
  176. data/src/style_length.cpp +341 -0
  177. data/src/view.cpp +1228 -129
  178. data/src/win32/application.cpp +1 -1
  179. data/src/window.cpp +54 -26
  180. data/test/helper.rb +8 -4
  181. data/test/test_capture_event.rb +41 -0
  182. data/test/test_event.rb +20 -0
  183. data/test/test_has_frame.rb +45 -0
  184. data/test/test_model.rb +9 -0
  185. data/test/test_model_owner.rb +9 -0
  186. data/test/test_selector.rb +75 -0
  187. data/test/test_style.rb +70 -0
  188. data/test/test_style_length.rb +38 -0
  189. data/test/test_style_length2.rb +50 -0
  190. data/test/test_style_length4.rb +56 -0
  191. data/test/test_view.rb +97 -23
  192. data/test/test_window.rb +54 -46
  193. metadata +205 -84
  194. data/.doc/ext/reflex/defs.cpp +0 -8
  195. data/.doc/ext/reflex/key.cpp +0 -122
  196. data/.doc/ext/reflex/points.cpp +0 -151
  197. data/.gitignore +0 -14
  198. data/ChangeLog +0 -8
  199. data/examples/hello/.gitignore +0 -2
  200. data/examples/hello/Rakefile +0 -41
  201. data/examples/hello/main.cpp +0 -18
  202. data/examples/ruby/app.rb +0 -13
  203. data/examples/ruby/checker.rb +0 -41
  204. data/examples/ruby/fps.rb +0 -49
  205. data/examples/ruby/grid.rb +0 -65
  206. data/examples/ruby/views.rb +0 -88
  207. data/examples/ruby/visuals.rb +0 -27
  208. data/ext/reflex/defs.cpp +0 -8
  209. data/ext/reflex/key.cpp +0 -129
  210. data/ext/reflex/points.cpp +0 -161
  211. data/include/reflex/ruby/key.h +0 -39
  212. data/include/reflex/ruby/points.h +0 -39
  213. data/lib/reflex/visuals/string.rb +0 -53
  214. data/src/cocoa/application.mm +0 -101
  215. data/src/cocoa/cocoaapplication.h +0 -21
  216. data/src/cocoa/cocoawindow.h +0 -46
  217. data/src/cocoa/cocoawindow.mm +0 -230
  218. data/src/cocoa/defs.h +0 -34
  219. data/src/cocoa/defs.mm +0 -87
  220. data/src/cocoa/window.mm +0 -148
  221. data/src/cocoa/windowdata.h +0 -56
  222. data/src/defs.cpp +0 -47
  223. data/src/helper.h +0 -12
  224. data/src/reflex.cpp +0 -43
  225. /data/{README → README.md} +0 -0
@@ -1,161 +0,0 @@
1
- #include "reflex/ruby/points.h"
2
-
3
-
4
- #include <rucy.h>
5
- #include "defs.h"
6
-
7
-
8
- using namespace Rucy;
9
-
10
- using Reflex::coord;
11
-
12
-
13
- static Class cPoints;
14
-
15
-
16
- namespace Reflex
17
- {
18
-
19
-
20
- Class
21
- points_class ()
22
- {
23
- return cPoints;
24
- }
25
-
26
-
27
- }// Reflex
28
-
29
-
30
- namespace Rucy
31
- {
32
-
33
-
34
- Value
35
- value (const Reflex::Points& points)
36
- {
37
- return new_type(cPoints, new Reflex::Points(points));
38
- }
39
-
40
-
41
- }// Rucy
42
-
43
-
44
- #define THIS to<Reflex::Points*>(self)
45
-
46
- #define CHECK RUCY_CHECK_OBJ(self, Reflex::Points, cPoints)
47
-
48
-
49
- static
50
- RUBY_DEF_ALLOC(alloc, klass)
51
- {
52
- return new_type<Reflex::Points>(klass);
53
- }
54
- RUBY_END
55
-
56
- static
57
- RUBY_DEFN(initialize)
58
- {
59
- RUCY_CHECK_OBJ(self, Reflex::Points, cPoints);
60
- if (argc < 0 || 6 < argc)
61
- arg_count_error("Points#initialize", argc, 0, 1, 2, 3, 4, 5, 6);
62
-
63
- THIS->type = (argc >= 1) ? to<int>(argv[0]) : Reflex::POINT_NONE;
64
- THIS->x = (argc >= 2) ? to<coord>(argv[1]) : 0;
65
- THIS->y = (argc >= 3) ? to<coord>(argv[2]) : 0;
66
- THIS->size = 1;
67
- THIS->modifiers = (argc >= 4) ? to<uint>(argv[3]) : (uint) Reflex::MOD_NONE;
68
- THIS->count = (argc >= 5) ? to<uint>(argv[4]) : 0;
69
- THIS->drag = (argc >= 6) ? to<bool>(argv[5]) : false;
70
-
71
- return self;
72
- }
73
- RUBY_END
74
-
75
- static
76
- RUBY_DEF1(initialize_copy, obj)
77
- {
78
- RUCY_CHECK_OBJ(self, Reflex::Points, cPoints);
79
-
80
- Reflex::Points* points = to<Reflex::Points*>(obj);
81
- if (!points) argument_error();
82
-
83
- *THIS = *points;
84
- return self;
85
- }
86
- RUBY_END
87
-
88
- static
89
- RUBY_DEF0(type)
90
- {
91
- CHECK;
92
- return value(THIS->type);
93
- }
94
- RUBY_END
95
-
96
- static
97
- RUBY_DEF0(x)
98
- {
99
- CHECK;
100
- return value(THIS->x);
101
- }
102
- RUBY_END
103
-
104
- static
105
- RUBY_DEF0(y)
106
- {
107
- CHECK;
108
- return value(THIS->y);
109
- }
110
- RUBY_END
111
-
112
- static
113
- RUBY_DEF0(size)
114
- {
115
- CHECK;
116
- return value(THIS->size);
117
- }
118
- RUBY_END
119
-
120
- static
121
- RUBY_DEF0(modifiers)
122
- {
123
- CHECK;
124
- return value(THIS->modifiers);
125
- }
126
- RUBY_END
127
-
128
- static
129
- RUBY_DEF0(count)
130
- {
131
- CHECK;
132
- return value(THIS->count);
133
- }
134
- RUBY_END
135
-
136
- static
137
- RUBY_DEF0(drag)
138
- {
139
- CHECK;
140
- return value(THIS->drag);
141
- }
142
- RUBY_END
143
-
144
-
145
- void
146
- Init_points ()
147
- {
148
- Module mReflex = define_module("Reflex");
149
-
150
- cPoints = mReflex.define_class("Points");
151
- cPoints.define_alloc_func(alloc);
152
- cPoints.define_private_method("initialize", initialize);
153
- cPoints.define_private_method("initialize_copy", initialize_copy);
154
- cPoints.define_method("type", type);
155
- cPoints.define_method("x", x);
156
- cPoints.define_method("y", y);
157
- cPoints.define_method("size", size);
158
- cPoints.define_method("modifiers", modifiers);
159
- cPoints.define_method("count", count);
160
- cPoints.define_method("drag", drag);
161
- }
@@ -1,39 +0,0 @@
1
- // -*- c++ -*-
2
- #pragma once
3
- #ifndef __REFLEX_RUBY_KEY_H__
4
- #define __REFLEX_RUBY_KEY_H__
5
-
6
-
7
- #include <rucy/rucy.h>
8
- #include <rucy/class.h>
9
- #include <reflex/defs.h>
10
-
11
-
12
- namespace Reflex
13
- {
14
-
15
-
16
- Rucy::Class key_class ();
17
- // class Reflex::Key
18
-
19
-
20
- }// Reflex
21
-
22
-
23
- namespace Rucy
24
- {
25
-
26
-
27
- Value value (const Reflex::Key& obj);
28
-
29
- template <> inline Reflex::Key*
30
- value_to<Reflex::Key*> (Value val, bool)
31
- {
32
- return get_type_ptr<Reflex::Key>(val, Reflex::key_class());
33
- }
34
-
35
-
36
- }// Rucy
37
-
38
-
39
- #endif//EOH
@@ -1,39 +0,0 @@
1
- // -*- c++ -*-
2
- #pragma once
3
- #ifndef __REFLEX_RUBY_POINTS_H__
4
- #define __REFLEX_RUBY_POINTS_H__
5
-
6
-
7
- #include <rucy/rucy.h>
8
- #include <rucy/class.h>
9
- #include <reflex/defs.h>
10
-
11
-
12
- namespace Reflex
13
- {
14
-
15
-
16
- Rucy::Class points_class ();
17
- // class Reflex::Points
18
-
19
-
20
- }// Reflex
21
-
22
-
23
- namespace Rucy
24
- {
25
-
26
-
27
- Value value (const Reflex::Points& obj);
28
-
29
- template <> inline Reflex::Points*
30
- value_to<Reflex::Points*> (Value val, bool)
31
- {
32
- return get_type_ptr<Reflex::Points>(val, Reflex::points_class());
33
- }
34
-
35
-
36
- }// Rucy
37
-
38
-
39
- #endif//EOH
@@ -1,53 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
-
4
- require 'reflex/image'
5
- require 'reflex/bitmap'
6
- require 'reflex/view'
7
-
8
-
9
- module Reflex
10
-
11
-
12
- module Visuals
13
-
14
-
15
- class String < View
16
-
17
- attr_reader :data
18
-
19
- def data= (data)
20
- if data != @data
21
- @data = data
22
- @image = nil
23
- end
24
- @data
25
- end
26
-
27
- def draw (painter, bounds)
28
- return unless @image ||= create_image(painter)
29
- painter.fill = 0
30
- painter.image @image
31
- end
32
-
33
- private
34
-
35
- def create_image (painter)
36
- dat = self.data
37
- return nil unless dat
38
- str = dat.to_s
39
- font = painter.font
40
- size = font.width(str), font.height * 10
41
- resize_to *size
42
- bmp = Bitmap.new *size, :GRAY
43
- bmp.draw_string str
44
- Image.new bmp, true
45
- end
46
-
47
- end# String
48
-
49
-
50
- end# Visuals
51
-
52
-
53
- end# Reflex
@@ -1,101 +0,0 @@
1
- // -*- objc -*-
2
- #include "reflex/application.h"
3
-
4
-
5
- #include <assert.h>
6
- #import <Cocoa/Cocoa.h>
7
- #include <reflex/exception.h>
8
- #include "applicationdata.h"
9
- #import "cocoaapplication.h"
10
-
11
-
12
- namespace Reflex
13
- {
14
-
15
-
16
- static Application* instance = NULL;
17
-
18
-
19
- Application*
20
- app ()
21
- {
22
- return instance;
23
- }
24
-
25
-
26
- Application::Application ()
27
- {
28
- if (instance) reflex_error("multiple application instance.");
29
- instance = this;
30
-
31
- if (NSApp) [NSApp bind: this];
32
- }
33
-
34
- Application::~Application ()
35
- {
36
- instance = NULL;
37
- }
38
-
39
- bool
40
- Application::run ()
41
- {
42
- if (!*this) return false;
43
-
44
- [self->cocoa run];
45
- return true;
46
- }
47
-
48
- bool
49
- Application::quit ()
50
- {
51
- if (!*this) return false;
52
-
53
- [self->cocoa terminate: nil];
54
- return true;
55
- }
56
-
57
- bool
58
- Application::preference ()
59
- {
60
- return *this;
61
- }
62
-
63
- bool
64
- Application::about ()
65
- {
66
- if (!*this) return false;
67
-
68
- [self->cocoa orderFrontStandardAboutPanel: nil];
69
- return true;
70
- }
71
-
72
- bool
73
- Application::set_name (const char* name)
74
- {
75
- if (!*this || !name) return false;
76
-
77
- self->name = name;
78
- return true;
79
- }
80
-
81
- const char*
82
- Application::name () const
83
- {
84
- if (!*this) return NULL;
85
-
86
- return self->name.c_str();
87
- }
88
-
89
- Application::operator bool () const
90
- {
91
- return self && *self;
92
- }
93
-
94
- bool
95
- Application::operator ! () const
96
- {
97
- return !operator bool();
98
- }
99
-
100
-
101
- }// Reflex
@@ -1,21 +0,0 @@
1
- // -*- objc -*-
2
- #import <AppKit/NSApplication.h>
3
- #include "reflex/application.h"
4
-
5
-
6
- @interface CocoaApplication : NSApplication <NSApplicationDelegate>
7
-
8
- {
9
- @private
10
- Reflex::Application::Ref* pref;
11
- }
12
-
13
- - (BOOL) bind: (Reflex::Application*) instance;
14
-
15
- - (void) unbind;
16
-
17
- - (void) about;
18
-
19
- - (void) quit;
20
-
21
- @end// CocoaApplication
@@ -1,46 +0,0 @@
1
- // -*- objc -*-
2
- #import <AppKit/NSWindow.h>
3
- #include "reflex/window.h"
4
-
5
-
6
- @class OpenGLView;
7
-
8
-
9
- @interface CocoaWindow : NSWindow <NSWindowDelegate>
10
-
11
- {
12
- @private
13
- Reflex::Window::Ref* pref;
14
- OpenGLView* view;
15
- NSTimer* timer;
16
- }
17
-
18
- - (BOOL) bind: (Reflex::Window*) instance;
19
-
20
- - (void) unbind;
21
-
22
- - (void) setupContentView;
23
-
24
- - (void) startTimer: (int) fps;
25
-
26
- - (void) stopTimer;
27
-
28
- - (void) update: (NSTimer*) t;
29
-
30
- - (void) draw;
31
-
32
- - (void) keyDown: (NSEvent*) event;
33
-
34
- - (void) keyUp: (NSEvent*) event;
35
-
36
- - (void) mouseDown: (NSEvent*) event;
37
-
38
- - (void) mouseUp: (NSEvent*) event;
39
-
40
- - (void) mouseMoved: (NSEvent*) event;
41
-
42
- - (void) mouseDragged: (NSEvent*) event;
43
-
44
- + (NSRect) frameRectForContentRect: (NSRect) contentRect;
45
-
46
- @end// CocoaWindow
@@ -1,230 +0,0 @@
1
- // -*- objc -*-
2
- #import "cocoawindow.h"
3
-
4
-
5
- #include <assert.h>
6
- #import <Cocoa/Cocoa.h>
7
- #include <rays/bounds.h>
8
- #include <reflex/window.h>
9
- #include "defs.h"
10
- #include "windowdata.h"
11
- #import "openglview.h"
12
-
13
-
14
- static const NSUInteger WINDOW_STYLE_MASK =
15
- NSTitledWindowMask |
16
- NSClosableWindowMask |
17
- NSMiniaturizableWindowMask |
18
- NSResizableWindowMask |
19
- 0;//NSTexturedBackgroundWindowMask
20
-
21
-
22
- @implementation CocoaWindow
23
-
24
- - (id) init
25
- {
26
- self = [super
27
- initWithContentRect: NSMakeRect(0, 0, 0, 0)
28
- styleMask: WINDOW_STYLE_MASK
29
- backing: NSBackingStoreBuffered
30
- defer: NO];
31
- if (!self) return nil;
32
-
33
- pref = new Reflex::Window::Ref;
34
- view = nil;
35
- timer = nil;
36
-
37
- [self setDelegate: self];
38
- //[self setReleasedWhenClosed: NO];
39
-
40
- [self setupContentView];
41
- [self startTimer: 60];
42
-
43
- return self;
44
- }
45
-
46
- - (void) dealloc
47
- {
48
- [self stopTimer];
49
-
50
- if (view) [view release];
51
-
52
- [self unbind];
53
- delete pref;
54
-
55
- [super dealloc];
56
- }
57
-
58
- - (BOOL) bind: (Reflex::Window*) instance
59
- {
60
- if (instance && instance->self->cocoa)
61
- return NO;
62
-
63
- [self unbind];
64
-
65
- assert(pref);
66
- Reflex::Window::Ref& ref = *pref;
67
-
68
- ref = instance;
69
- if (ref) ref->self->cocoa = [self retain];
70
- return YES;
71
- }
72
-
73
- - (void) unbind
74
- {
75
- assert(pref);
76
- Reflex::Window::Ref& ref = *pref;
77
- if (!ref) return;
78
-
79
- if (ref->self->cocoa) [ref->self->cocoa release];
80
- ref->self->cocoa = nil;
81
- ref.reset();
82
- }
83
-
84
- - (void) setupContentView
85
- {
86
- NSRect rect = [self contentRectForFrameRect: [self frame]];
87
- rect.origin.x = rect.origin.y = 0;
88
- view = [[OpenGLView alloc] initWithFrame: rect];
89
- [self setContentView: view];
90
- }
91
-
92
- - (void) startTimer: (int) fps
93
- {
94
- [self stopTimer];
95
-
96
- if (fps <= 0) return;
97
-
98
- timer = [[NSTimer
99
- timerWithTimeInterval: 1.f / (float) fps
100
- target: self
101
- selector: @selector(update:)
102
- userInfo: nil
103
- repeats: YES] retain];
104
- if (!timer) return;
105
-
106
- [[NSRunLoop currentRunLoop]
107
- addTimer: timer forMode: NSDefaultRunLoopMode];
108
- [[NSRunLoop currentRunLoop]
109
- addTimer: timer forMode: NSEventTrackingRunLoopMode];
110
- }
111
-
112
- - (void) stopTimer
113
- {
114
- if (!timer) return;
115
-
116
- [timer invalidate];
117
- timer = nil;
118
- }
119
-
120
- - (void) update: (NSTimer*) t
121
- {
122
- assert(pref);
123
- if (!*pref) return;
124
-
125
- (*pref)->update(1);
126
-
127
- if ((*pref)->self->redraw)
128
- {
129
- [self display];
130
- (*pref)->self->redraw = false;
131
- }
132
- }
133
-
134
- - (void) draw
135
- {
136
- assert(pref);
137
- if (!*pref) return;
138
-
139
- (*pref)->draw();
140
- }
141
-
142
- - (BOOL) windowShouldClose: (id) sender
143
- {
144
- assert(pref);
145
- if (!*pref) return YES;
146
-
147
- (*pref)->close();
148
- return NO;
149
- }
150
-
151
- - (void) windowWillClose: (NSNotification*) notification
152
- {
153
- [self stopTimer];
154
- [self unbind];
155
- }
156
-
157
- - (void) windowDidMove: (NSNotification*) notification
158
- {
159
- assert(pref);
160
- if (!*pref) return;
161
-
162
- const Reflex::Bounds& b = (*pref)->bounds();
163
- (*pref)->moved(b.x, b.y);
164
- }
165
-
166
- - (void) windowDidResize: (NSNotification*) notification
167
- {
168
- assert(pref);
169
- if (!*pref) return;
170
-
171
- const Reflex::Bounds& b = (*pref)->bounds();
172
- (*pref)->resized(b.width, b.height);
173
- }
174
-
175
- - (void) keyDown: (NSEvent*) event
176
- {
177
- assert(pref);
178
- if (!*pref) return;
179
-
180
- (*pref)->key_down(Reflex::CocoaKey(event));
181
- }
182
-
183
- - (void) keyUp: (NSEvent*) event
184
- {
185
- assert(pref);
186
- if (!*pref) return;
187
-
188
- (*pref)->key_up(Reflex::CocoaKey(event));
189
- }
190
-
191
- - (void) mouseDown: (NSEvent*) event
192
- {
193
- assert(pref);
194
- if (!*pref) return;
195
-
196
- (*pref)->points_down(Reflex::CocoaPoints(event, view));
197
- }
198
-
199
- - (void) mouseUp: (NSEvent*) event
200
- {
201
- assert(pref);
202
- if (!*pref) return;
203
-
204
- (*pref)->points_up(Reflex::CocoaPoints(event, view));
205
- }
206
-
207
- - (void) mouseMoved: (NSEvent*) event
208
- {
209
- assert(pref);
210
- if (!*pref) return;
211
-
212
- (*pref)->points_moved(Reflex::CocoaPoints(event, view));
213
- }
214
-
215
- - (void) mouseDragged: (NSEvent*) event
216
- {
217
- assert(pref);
218
- if (!*pref) return;
219
-
220
- (*pref)->points_moved(Reflex::CocoaPoints(event, view));
221
- }
222
-
223
- + (NSRect) frameRectForContentRect: (NSRect) contentRect
224
- {
225
- return [NSWindow
226
- frameRectForContentRect: contentRect
227
- styleMask: WINDOW_STYLE_MASK];
228
- }
229
-
230
- @end// CocoaWindow
data/src/cocoa/defs.h DELETED
@@ -1,34 +0,0 @@
1
- // -*- c++ -*-
2
- #pragma once
3
- #ifndef __REFLEX_COCOA_DEFS_H__
4
- #define __REFLEX_COCOA_DEFS_H__
5
-
6
-
7
- #import <AppKit/NSEvent.h>
8
- #include <reflex/defs.h>
9
-
10
-
11
- namespace Reflex
12
- {
13
-
14
-
15
- struct CocoaKey : public Key
16
- {
17
-
18
- CocoaKey (NSEvent* event);
19
-
20
- };// CocoaKey
21
-
22
-
23
- struct CocoaPoints : public Points
24
- {
25
-
26
- CocoaPoints (NSEvent* event, NSView* view);
27
-
28
- };// CocoaPoints
29
-
30
-
31
- }// Reflex
32
-
33
-
34
- #endif//EOH