reflexion 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. data/.doc/ext/reflex/application.cpp +35 -76
  2. data/.doc/ext/reflex/defs.cpp +8 -0
  3. data/.doc/ext/reflex/key.cpp +38 -43
  4. data/.doc/ext/reflex/native.cpp +6 -4
  5. data/.doc/ext/reflex/points.cpp +47 -52
  6. data/.doc/ext/reflex/reflex.cpp +12 -13
  7. data/.doc/ext/reflex/view.cpp +242 -0
  8. data/.doc/ext/reflex/window.cpp +87 -178
  9. data/.gitignore +14 -0
  10. data/Rakefile +6 -31
  11. data/VERSION +1 -1
  12. data/examples/hello/.gitignore +2 -0
  13. data/examples/ruby/app.rb +2 -2
  14. data/examples/ruby/checker.rb +3 -3
  15. data/examples/ruby/fps.rb +14 -14
  16. data/examples/ruby/grid.rb +65 -0
  17. data/examples/ruby/hello.rb +19 -7
  18. data/examples/ruby/key.rb +4 -4
  19. data/examples/ruby/shapes.rb +6 -6
  20. data/examples/ruby/text.rb +20 -17
  21. data/examples/ruby/views.rb +88 -0
  22. data/examples/ruby/visuals.rb +27 -0
  23. data/ext/reflex/application.cpp +36 -76
  24. data/ext/reflex/defs.cpp +8 -0
  25. data/ext/reflex/defs.h +1 -18
  26. data/ext/reflex/extconf.rb +16 -8
  27. data/ext/reflex/key.cpp +39 -43
  28. data/ext/reflex/native.cpp +6 -4
  29. data/ext/reflex/points.cpp +48 -52
  30. data/ext/reflex/reflex.cpp +12 -13
  31. data/ext/reflex/view.cpp +260 -0
  32. data/ext/reflex/window.cpp +89 -178
  33. data/include/reflex/application.h +14 -7
  34. data/include/reflex/defs.h +8 -6
  35. data/include/reflex/exception.h +1 -1
  36. data/include/reflex/ruby/application.h +31 -10
  37. data/include/reflex/ruby/key.h +3 -3
  38. data/include/reflex/ruby/points.h +3 -3
  39. data/include/reflex/ruby/view.h +106 -0
  40. data/include/reflex/ruby/window.h +83 -12
  41. data/include/reflex/ruby.h +3 -2
  42. data/include/reflex/view.h +103 -0
  43. data/include/reflex/window.h +43 -18
  44. data/include/reflex.h +2 -1
  45. data/lib/reflex/application.rb +8 -7
  46. data/lib/reflex/autoinit.rb +1 -1
  47. data/lib/reflex/bitmap.rb +13 -0
  48. data/lib/reflex/bounds.rb +2 -122
  49. data/lib/reflex/ext.rb +5 -0
  50. data/lib/reflex/helpers.rb +36 -31
  51. data/lib/reflex/image.rb +13 -0
  52. data/lib/reflex/module.rb +9 -2
  53. data/lib/reflex/painter.rb +13 -0
  54. data/lib/reflex/point.rb +3 -59
  55. data/lib/reflex/reflex.rb +1 -1
  56. data/lib/reflex/texture.rb +13 -0
  57. data/lib/reflex/view.rb +33 -0
  58. data/lib/reflex/visuals/string.rb +53 -0
  59. data/lib/reflex/window.rb +18 -43
  60. data/lib/reflex.rb +3 -3
  61. data/reflex.gemspec +16 -42
  62. data/src/cocoa/application.mm +17 -23
  63. data/src/cocoa/applicationdata.h +3 -9
  64. data/src/cocoa/cocoaapplication.h +6 -4
  65. data/src/cocoa/cocoaapplication.mm +61 -19
  66. data/src/cocoa/cocoawindow.h +7 -5
  67. data/src/cocoa/cocoawindow.mm +109 -50
  68. data/src/cocoa/defs.mm +5 -2
  69. data/src/cocoa/window.mm +71 -41
  70. data/src/cocoa/windowdata.h +14 -9
  71. data/src/defs.cpp +1 -1
  72. data/src/exception.cpp +3 -18
  73. data/src/helpers.h +12 -0
  74. data/src/reflex.cpp +11 -5
  75. data/src/view.cpp +326 -0
  76. data/src/win32/application.cpp +7 -8
  77. data/src/win32/defs.h +1 -1
  78. data/src/win32/window.cpp +137 -41
  79. data/src/window.cpp +38 -1
  80. data/test/helpers.rb +2 -5
  81. data/test/test_application.rb +17 -0
  82. data/test/test_reflex.rb +4 -2
  83. data/test/test_view.rb +74 -0
  84. data/test/test_window.rb +33 -2
  85. metadata +157 -97
  86. data/include/reflex/helpers.h +0 -32
  87. data/test/test_bounds.rb +0 -163
  88. data/test/test_point.rb +0 -81
data/ext/reflex/defs.h CHANGED
@@ -7,24 +7,7 @@
7
7
  #include <reflex/exception.h>
8
8
 
9
9
 
10
- using Reflex::error;
11
-
12
-
13
- #define CHECK_OBJ(obj, type, klass) \
14
- do \
15
- { \
16
- type* p = Rucy::get_type<type>(obj, klass); \
17
- if (!p) Rucy::invalid_object_error(); \
18
- } \
19
- while(0)
20
-
21
- #define CHECK_OBJECT(obj, type, klass) \
22
- do \
23
- { \
24
- type* p = Rucy::get_type<type>(obj, klass); \
25
- if (!p || !*p) Rucy::invalid_object_error(); \
26
- } \
27
- while(0)
10
+ using Reflex::reflex_error;
28
11
 
29
12
 
30
13
  #endif//EOH
@@ -1,21 +1,19 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
 
4
- %w[. ../xot ../rucy].map {|s| "../../#{s}/lib"}.each do |path|
5
- $: << File.expand_path(File.join File.dirname(__FILE__), *path.split('/'))
6
- end
7
-
8
- require 'rubygems'
4
+ require 'bundler/setup'
9
5
  require 'mkmf'
10
6
  require 'xot/rake/helpers'
11
7
  require 'xot/module'
12
8
  require 'rucy/module'
9
+ require 'rays/module'
13
10
  require 'reflex/module'
14
11
 
15
12
  include Xot::Rake
16
13
 
17
14
 
18
- DEBUG = env :DEBUG, false
15
+ debug = env :DEBUG, false
16
+
19
17
 
20
18
  DEFS = []
21
19
  INCDIRS = %w[
@@ -30,19 +28,24 @@ HEADERS = %w[
30
28
  ruby.h
31
29
  xot.h
32
30
  rucy.h
31
+ rays.h
33
32
  reflex.h
34
33
  ]
35
34
  LIBS = %w[
36
35
  stdc++
37
36
  xot
38
37
  rucy
38
+ rays
39
39
  reflex
40
40
  ]
41
41
  FRAMEWORKS = []
42
42
 
43
43
 
44
- DEFS << '_DEBUG' if DEBUG
44
+ DEFS << '_DEBUG' if debug
45
+ DEFS << 'NDEBUG' unless debug
45
46
  DEFS << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
47
+ LIBDIRS.concat Rays.library_dirs
48
+ LIBS << 'rays/native' unless cocoa?
46
49
  if win32?
47
50
  DEFS << 'WINDOWS' << 'WIN32'
48
51
  LIBS.unshift 'gdi32', 'opengl32'
@@ -55,14 +58,19 @@ $CPPFLAGS << DEFS.map {|s| " -D#{s}"}.join
55
58
  $CPPFLAGS << INCDIRS.map {|s| " -I#{s}"}.join
56
59
  $LDFLAGS << LIBDIRS.map {|s| " -L#{s}"}.join
57
60
  $LDFLAGS << FRAMEWORKS.map {|s| " -framework #{s}"}.join
61
+ $LDFLAGS << ' -Wl,--out-implib=native.dll.a' if cygwin?
62
+ $CFLAGS << ' --stdlib=libc++' if clang?
58
63
  $LOCAL_LIBS << ' -lrucy'
59
64
 
60
- Config::CONFIG.each {|key, val| val.gsub!(/gcc/, 'g++')}
65
+ RbConfig::CONFIG.each do |key, val|
66
+ {'gcc' => 'g++', 'clang' => 'clang++'}.each {|from, to| val.gsub! from, to}
67
+ end
61
68
 
62
69
 
63
70
  dir_config 'boost'
64
71
  dir_config 'xot', Xot.root_dir
65
72
  dir_config 'rucy', Rucy.root_dir
73
+ dir_config 'rays', Rays.root_dir
66
74
  dir_config 'reflex', Reflex.root_dir
67
75
 
68
76
  exit 1 unless HEADERS.all? {|s| have_header(s)}
data/ext/reflex/key.cpp CHANGED
@@ -8,12 +8,13 @@
8
8
  using namespace Rucy;
9
9
 
10
10
 
11
+ static Class cKey;
12
+
13
+
11
14
  namespace Reflex
12
15
  {
13
16
 
14
17
 
15
- static Class cKey;
16
-
17
18
  Class
18
19
  key_class ()
19
20
  {
@@ -31,63 +32,59 @@ namespace Rucy
31
32
  Value
32
33
  value (const Reflex::Key& key)
33
34
  {
34
- return new_type<Reflex::Key>(
35
- Reflex::key_class(), new Reflex::Key(key));
35
+ return new_type(cKey, new Reflex::Key(key));
36
36
  }
37
37
 
38
38
 
39
39
  }// Rucy
40
40
 
41
41
 
42
- struct RubyKey : public Reflex::Key
43
- {
44
-
45
- operator bool () const
46
- {
47
- return true;
48
- }
49
-
50
- bool operator ! () const
51
- {
52
- return !operator bool();
53
- }
54
-
55
- };// RubyKey
56
-
42
+ #define THIS to<Reflex::Key*>(self)
57
43
 
58
- #define this ((RubyKey*) to<Reflex::Key*>(self))
59
-
60
- #define CHECK CHECK_OBJECT(self, RubyKey, Reflex::key_class())
44
+ #define CHECK RUCY_CHECK_OBJ(self, Reflex::Key, cKey)
61
45
 
62
46
 
63
47
  static
64
48
  RUBY_DEF_ALLOC(alloc, klass)
65
49
  {
66
- return new_type<RubyKey>(klass, new RubyKey);
50
+ return new_type<Reflex::Key>(klass);
67
51
  }
68
52
  RUBY_END
69
53
 
70
54
  static
71
55
  RUBY_DEFN(initialize)
72
56
  {
73
- CHECK_OBJ(self, RubyKey, Reflex::key_class());
57
+ RUCY_CHECK_OBJ(self, Reflex::Key, cKey);
74
58
  if (argc < 0 || 4 < argc)
75
59
  argument_error("Key#initialize", argc, 0, 1, 2);
76
60
 
77
- this->chars = (argc >= 1) ? argv[0].c_str() : NULL;
78
- this->code = (argc >= 2) ? to<int>(argv[1]) : Reflex::KEY_NONE;
79
- this->repeat = (argc >= 3) ? to<int>(argv[2]) : 1;
80
- this->modifiers = (argc >= 4) ? to<uint>(argv[3]) : (uint) Reflex::MOD_NONE;
61
+ THIS->chars = (argc >= 1) ? argv[0].c_str() : NULL;
62
+ THIS->code = (argc >= 2) ? to<int>(argv[1]) : Reflex::KEY_NONE;
63
+ THIS->repeat = (argc >= 3) ? to<int>(argv[2]) : 1;
64
+ THIS->modifiers = (argc >= 4) ? to<uint>(argv[3]) : (uint) Reflex::MOD_NONE;
81
65
 
82
66
  return self;
83
67
  }
84
68
  RUBY_END
85
69
 
70
+ static
71
+ RUBY_DEF1(initialize_copy, obj)
72
+ {
73
+ RUCY_CHECK_OBJ(self, Reflex::Key, cKey);
74
+
75
+ Reflex::Key* key = to<Reflex::Key*>(obj);
76
+ if (!key) argument_error();
77
+
78
+ *THIS = *key;
79
+ return self;
80
+ }
81
+ RUBY_END
82
+
86
83
  static
87
84
  RUBY_DEF0(chars)
88
85
  {
89
86
  CHECK;
90
- return value(this->chars.c_str());
87
+ return value(THIS->chars.c_str());
91
88
  }
92
89
  RUBY_END
93
90
 
@@ -95,7 +92,7 @@ static
95
92
  RUBY_DEF0(code)
96
93
  {
97
94
  CHECK;
98
- return value(this->code);
95
+ return value(THIS->code);
99
96
  }
100
97
  RUBY_END
101
98
 
@@ -103,7 +100,7 @@ static
103
100
  RUBY_DEF0(repeat)
104
101
  {
105
102
  CHECK;
106
- return value(this->repeat);
103
+ return value(THIS->repeat);
107
104
  }
108
105
  RUBY_END
109
106
 
@@ -111,7 +108,7 @@ static
111
108
  RUBY_DEF0(modifiers)
112
109
  {
113
110
  CHECK;
114
- return value(this->modifiers);
111
+ return value(THIS->modifiers);
115
112
  }
116
113
  RUBY_END
117
114
 
@@ -119,15 +116,14 @@ RUBY_END
119
116
  void
120
117
  Init_key ()
121
118
  {
122
- Module m = define_module("Reflex");
123
-
124
- Class c = m.define_class("Key");
125
- Reflex::cKey = c;
126
-
127
- c.define_alloc_func(alloc);
128
- c.define_method("initialize", initialize);
129
- c.define_method("chars", chars);
130
- c.define_method("code", code);
131
- c.define_method("repeat", repeat);
132
- c.define_method("modifiers", modifiers);
119
+ Module mReflex = define_module("Reflex");
120
+
121
+ cKey = mReflex.define_class("Key");
122
+ cKey.define_alloc_func(alloc);
123
+ cKey.define_private_method("initialize", initialize);
124
+ cKey.define_private_method("initialize_copy", initialize_copy);
125
+ cKey.define_method("chars", chars);
126
+ cKey.define_method("code", code);
127
+ cKey.define_method("repeat", repeat);
128
+ cKey.define_method("modifiers", modifiers);
133
129
  }
@@ -6,10 +6,11 @@ using namespace Rucy;
6
6
 
7
7
 
8
8
  void Init_reflex ();
9
- void Init_application ();
10
- void Init_window ();
11
9
  void Init_key ();
12
10
  void Init_points ();
11
+ void Init_application ();
12
+ void Init_window ();
13
+ void Init_view ();
13
14
 
14
15
 
15
16
  extern "C" void
@@ -19,8 +20,9 @@ Init_native ()
19
20
  raise(rb_eLoadError, "Rucy::init() failed.");
20
21
 
21
22
  Init_reflex();
22
- Init_application();
23
- Init_window();
24
23
  Init_key();
25
24
  Init_points();
25
+ Init_application();
26
+ Init_window();
27
+ Init_view();
26
28
  }
@@ -10,12 +10,13 @@ using namespace Rucy;
10
10
  using Reflex::coord;
11
11
 
12
12
 
13
+ static Class cPoints;
14
+
15
+
13
16
  namespace Reflex
14
17
  {
15
18
 
16
19
 
17
- static Class cPoints;
18
-
19
20
  Class
20
21
  points_class ()
21
22
  {
@@ -33,57 +34,53 @@ namespace Rucy
33
34
  Value
34
35
  value (const Reflex::Points& points)
35
36
  {
36
- return new_type<Reflex::Points>(
37
- Reflex::points_class(), new Reflex::Points(points));
37
+ return new_type(cPoints, new Reflex::Points(points));
38
38
  }
39
39
 
40
40
 
41
41
  }// Rucy
42
42
 
43
43
 
44
- struct RubyPoints : public Reflex::Points
45
- {
46
-
47
- operator bool () const
48
- {
49
- return true;
50
- }
51
-
52
- bool operator ! () const
53
- {
54
- return !operator bool();
55
- }
56
-
57
- };// RubyPoints
44
+ #define THIS to<Reflex::Points*>(self)
58
45
 
59
-
60
- #define this ((RubyPoints*) to<Reflex::Points*>(self))
61
-
62
- #define CHECK CHECK_OBJECT(self, RubyPoints, Reflex::points_class())
46
+ #define CHECK RUCY_CHECK_OBJ(self, Reflex::Points, cPoints)
63
47
 
64
48
 
65
49
  static
66
50
  RUBY_DEF_ALLOC(alloc, klass)
67
51
  {
68
- return new_type<RubyPoints>(klass, new RubyPoints);
52
+ return new_type<Reflex::Points>(klass);
69
53
  }
70
54
  RUBY_END
71
55
 
72
56
  static
73
57
  RUBY_DEFN(initialize)
74
58
  {
75
- CHECK_OBJ(self, RubyPoints, Reflex::points_class());
59
+ RUCY_CHECK_OBJ(self, Reflex::Points, cPoints);
76
60
  if (argc < 0 || 6 < argc)
77
61
  arg_count_error("Points#initialize", argc, 0, 1, 2, 3, 4, 5, 6);
78
62
 
79
- this->type = (argc >= 1) ? to<int>(argv[0]) : Reflex::POINT_NONE;
80
- this->x = (argc >= 2) ? to<coord>(argv[1]) : 0;
81
- this->y = (argc >= 3) ? to<coord>(argv[2]) : 0;
82
- this->size = 1;
83
- this->modifiers = (argc >= 4) ? to<uint>(argv[3]) : (uint) Reflex::MOD_NONE;
84
- this->count = (argc >= 5) ? to<uint>(argv[4]) : 0;
85
- this->drag = (argc >= 6) ? to<bool>(argv[5]) : false;
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();
86
82
 
83
+ *THIS = *points;
87
84
  return self;
88
85
  }
89
86
  RUBY_END
@@ -92,7 +89,7 @@ static
92
89
  RUBY_DEF0(type)
93
90
  {
94
91
  CHECK;
95
- return value(this->type);
92
+ return value(THIS->type);
96
93
  }
97
94
  RUBY_END
98
95
 
@@ -100,7 +97,7 @@ static
100
97
  RUBY_DEF0(x)
101
98
  {
102
99
  CHECK;
103
- return value(this->x);
100
+ return value(THIS->x);
104
101
  }
105
102
  RUBY_END
106
103
 
@@ -108,7 +105,7 @@ static
108
105
  RUBY_DEF0(y)
109
106
  {
110
107
  CHECK;
111
- return value(this->y);
108
+ return value(THIS->y);
112
109
  }
113
110
  RUBY_END
114
111
 
@@ -116,7 +113,7 @@ static
116
113
  RUBY_DEF0(size)
117
114
  {
118
115
  CHECK;
119
- return value(this->size);
116
+ return value(THIS->size);
120
117
  }
121
118
  RUBY_END
122
119
 
@@ -124,7 +121,7 @@ static
124
121
  RUBY_DEF0(modifiers)
125
122
  {
126
123
  CHECK;
127
- return value(this->modifiers);
124
+ return value(THIS->modifiers);
128
125
  }
129
126
  RUBY_END
130
127
 
@@ -132,7 +129,7 @@ static
132
129
  RUBY_DEF0(count)
133
130
  {
134
131
  CHECK;
135
- return value(this->count);
132
+ return value(THIS->count);
136
133
  }
137
134
  RUBY_END
138
135
 
@@ -140,7 +137,7 @@ static
140
137
  RUBY_DEF0(drag)
141
138
  {
142
139
  CHECK;
143
- return value(this->drag);
140
+ return value(THIS->drag);
144
141
  }
145
142
  RUBY_END
146
143
 
@@ -148,18 +145,17 @@ RUBY_END
148
145
  void
149
146
  Init_points ()
150
147
  {
151
- Module m = define_module("Reflex");
152
-
153
- Class c = m.define_class("Points");
154
- Reflex::cPoints = c;
155
-
156
- c.define_alloc_func(alloc);
157
- c.define_method("initialize", initialize);
158
- c.define_method("type", type);
159
- c.define_method("x", x);
160
- c.define_method("y", y);
161
- c.define_method("size", size);
162
- c.define_method("modifiers", modifiers);
163
- c.define_method("count", count);
164
- c.define_method("drag", drag);
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);
165
161
  }
@@ -6,12 +6,13 @@
6
6
  using namespace Rucy;
7
7
 
8
8
 
9
+ static Module mReflex;
10
+
11
+
9
12
  namespace Reflex
10
13
  {
11
14
 
12
15
 
13
- static Module mReflex;
14
-
15
16
  Module
16
17
  reflex_module ()
17
18
  {
@@ -26,7 +27,7 @@ static
26
27
  RUBY_DEF0(init)
27
28
  {
28
29
  if (!Reflex::init())
29
- error("Reflex::init() failed.");
30
+ reflex_error("Reflex::init() failed.");
30
31
 
31
32
  return self;
32
33
  }
@@ -36,7 +37,7 @@ static
36
37
  RUBY_DEF0(fin)
37
38
  {
38
39
  if (!Reflex::fin())
39
- error("Reflex::fin() failed.");
40
+ reflex_error("Reflex::fin() failed.");
40
41
 
41
42
  return self;
42
43
  }
@@ -46,7 +47,7 @@ static
46
47
  RUBY_DEF1(run, name)
47
48
  {
48
49
  if (!Reflex::run(name ? name.c_str() : NULL))
49
- error("Reflex::run() failed.");
50
+ reflex_error("Reflex::run() failed.");
50
51
 
51
52
  return self;
52
53
  }
@@ -56,7 +57,7 @@ static
56
57
  RUBY_DEF0(quit)
57
58
  {
58
59
  if (!Reflex::quit())
59
- error("Reflex::quit() failed.");
60
+ reflex_error("Reflex::quit() failed.");
60
61
 
61
62
  return self;
62
63
  }
@@ -66,11 +67,9 @@ RUBY_END
66
67
  void
67
68
  Init_reflex ()
68
69
  {
69
- Module m = define_module("Reflex");
70
- Reflex::mReflex = m;
71
-
72
- m.define_singleton_method("init!", init);
73
- m.define_singleton_method("fin!", fin);
74
- m.define_singleton_method("run!", run);
75
- m.define_singleton_method("quit", quit);
70
+ mReflex = define_module("Reflex");
71
+ mReflex.define_singleton_method("init!", init);
72
+ mReflex.define_singleton_method("fin!", fin);
73
+ mReflex.define_singleton_method("run!", run);
74
+ mReflex.define_singleton_method("quit", quit);
76
75
  }