rays 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/rays/bitmap.cpp +76 -53
  2. data/.doc/ext/rays/font.cpp +31 -27
  3. data/.doc/ext/rays/image.cpp +44 -37
  4. data/.doc/ext/rays/native.cpp +6 -0
  5. data/.doc/ext/rays/painter.cpp +276 -160
  6. data/.doc/ext/rays/rays.cpp +8 -9
  7. data/.doc/ext/rays/texture.cpp +50 -28
  8. data/.gitignore +14 -0
  9. data/Rakefile +5 -30
  10. data/VERSION +1 -1
  11. data/ext/rays/bitmap.cpp +77 -53
  12. data/ext/rays/bounds.cpp +426 -0
  13. data/ext/rays/color.cpp +199 -0
  14. data/ext/rays/defs.h +1 -18
  15. data/ext/rays/extconf.rb +10 -8
  16. data/ext/rays/font.cpp +31 -27
  17. data/ext/rays/image.cpp +44 -37
  18. data/ext/rays/matrix.cpp +154 -0
  19. data/ext/rays/native.cpp +6 -0
  20. data/ext/rays/painter.cpp +288 -163
  21. data/ext/rays/point.cpp +175 -0
  22. data/ext/rays/rays.cpp +8 -9
  23. data/ext/rays/texture.cpp +52 -28
  24. data/include/rays.h +1 -2
  25. data/include/rays/bitmap.h +5 -3
  26. data/include/rays/bounds.h +94 -0
  27. data/include/rays/color.h +53 -0
  28. data/include/rays/colorspace.h +2 -2
  29. data/include/rays/exception.h +1 -1
  30. data/include/rays/font.h +7 -3
  31. data/include/rays/image.h +6 -2
  32. data/include/rays/matrix.h +63 -0
  33. data/include/rays/opengl.h +1 -1
  34. data/include/rays/painter.h +138 -39
  35. data/include/rays/point.h +39 -0
  36. data/include/rays/ruby.h +3 -0
  37. data/include/rays/ruby/bitmap.h +5 -3
  38. data/include/rays/ruby/bounds.h +41 -0
  39. data/include/rays/ruby/color.h +41 -0
  40. data/include/rays/ruby/font.h +5 -3
  41. data/include/rays/ruby/image.h +5 -3
  42. data/include/rays/ruby/matrix.h +41 -0
  43. data/include/rays/ruby/painter.h +5 -3
  44. data/include/rays/ruby/point.h +41 -0
  45. data/include/rays/ruby/texture.h +5 -3
  46. data/include/rays/texture.h +6 -2
  47. data/lib/rays.rb +3 -0
  48. data/lib/rays/autoinit.rb +1 -1
  49. data/lib/rays/bitmap.rb +15 -1
  50. data/lib/rays/bounds.rb +138 -0
  51. data/lib/rays/color.rb +52 -0
  52. data/lib/rays/ext.rb +4 -0
  53. data/lib/rays/image.rb +1 -1
  54. data/lib/rays/module.rb +9 -2
  55. data/lib/rays/painter.rb +40 -41
  56. data/lib/rays/point.rb +82 -0
  57. data/lib/rays/texture.rb +1 -1
  58. data/rays.gemspec +16 -37
  59. data/src/bounds.cpp +234 -0
  60. data/src/cocoa/bitmap.mm +4 -4
  61. data/src/cocoa/font.mm +35 -30
  62. data/src/cocoa/rays.mm +2 -0
  63. data/src/color.cpp +77 -0
  64. data/src/colorspace.cpp +3 -3
  65. data/src/exception.cpp +3 -18
  66. data/src/image.cpp +9 -2
  67. data/src/matrix.cpp +103 -0
  68. data/src/painter.cpp +475 -224
  69. data/src/point.cpp +52 -0
  70. data/src/texture.cpp +14 -2
  71. data/src/win32/bitmap.cpp +2 -2
  72. data/src/win32/gdi.cpp +22 -13
  73. data/src/win32/gdi.h +7 -7
  74. data/test/helpers.rb +1 -5
  75. data/test/test_bitmap.rb +9 -0
  76. data/test/test_bounds.rb +246 -0
  77. data/test/test_color.rb +88 -0
  78. data/test/test_font.rb +28 -0
  79. data/test/test_image.rb +9 -0
  80. data/test/test_painter.rb +1 -3
  81. data/test/test_point.rb +121 -0
  82. data/test/test_rays.rb +2 -3
  83. data/test/test_texture.rb +1 -3
  84. metadata +146 -75
  85. data/include/rays/helpers.h +0 -37
  86. data/include/rays/transform.h +0 -35
  87. data/src/helpers.cpp +0 -22
  88. data/src/transform.cpp +0 -88
data/ext/rays/defs.h CHANGED
@@ -7,24 +7,7 @@
7
7
  #include <rays/exception.h>
8
8
 
9
9
 
10
- using Rays::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 Rays::rays_error;
28
11
 
29
12
 
30
13
  #endif//EOH
data/ext/rays/extconf.rb CHANGED
@@ -1,11 +1,7 @@
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'
@@ -15,7 +11,8 @@ require 'rays/module'
15
11
  include Xot::Rake
16
12
 
17
13
 
18
- DEBUG = env :DEBUG, false
14
+ debug = env :DEBUG, false
15
+
19
16
 
20
17
  DEFS = []
21
18
  INCDIRS = %w[
@@ -40,7 +37,8 @@ LIBS = %w[
40
37
  FRAMEWORKS = []
41
38
 
42
39
 
43
- DEFS << '_DEBUG' if DEBUG
40
+ DEFS << '_DEBUG' if debug
41
+ DEFS << 'NDEBUG' unless debug
44
42
  DEFS << $~[0].upcase if RUBY_PLATFORM =~ /mswin|ming|cygwin|darwin/i
45
43
  if win32?
46
44
  DEFS << 'WINDOWS' << 'WIN32'
@@ -54,9 +52,13 @@ $CPPFLAGS << DEFS.map {|s| " -D#{s}"}.join
54
52
  $CPPFLAGS << INCDIRS.map {|s| " -I#{s}"}.join
55
53
  $LDFLAGS << LIBDIRS.map {|s| " -L#{s}"}.join
56
54
  $LDFLAGS << FRAMEWORKS.map {|s| " -framework #{s}"}.join
55
+ $LDFLAGS << ' -Wl,--out-implib=native.dll.a' if cygwin?
56
+ $CFLAGS << ' --stdlib=libc++' if clang?
57
57
  $LOCAL_LIBS << ' -lrucy'
58
58
 
59
- Config::CONFIG.each {|key, val| val.gsub!(/gcc/, 'g++')}
59
+ RbConfig::CONFIG.each do |key, val|
60
+ {'gcc' => 'g++', 'clang' => 'clang++'}.each {|from, to| val.gsub! from, to}
61
+ end
60
62
 
61
63
 
62
64
  dir_config 'boost'
data/ext/rays/font.cpp CHANGED
@@ -10,12 +10,13 @@ using namespace Rucy;
10
10
  using Rays::coord;
11
11
 
12
12
 
13
+ static Class cFont;
14
+
15
+
13
16
  namespace Rays
14
17
  {
15
18
 
16
19
 
17
- static Class cFont;
18
-
19
20
  Class
20
21
  font_class ()
21
22
  {
@@ -31,38 +32,43 @@ namespace Rucy
31
32
 
32
33
 
33
34
  Value
34
- value (const Rays::Font& font)
35
+ value (const Rays::Font& obj)
35
36
  {
36
- return new_type<Rays::Font>(
37
- Rays::font_class(), new Rays::Font(font));
37
+ return new_type(cFont, new Rays::Font(obj));
38
+ }
39
+
40
+ Value
41
+ value (const Rays::Font* obj)
42
+ {
43
+ return obj ? value(*obj) : nil();
38
44
  }
39
45
 
40
46
 
41
47
  }// Rucy
42
48
 
43
49
 
44
- #define this to<Rays::Font*>(self)
50
+ #define THIS to<Rays::Font*>(self)
45
51
 
46
- #define CHECK CHECK_OBJECT(self, Rays::Font, Rays::font_class())
52
+ #define CHECK RUCY_CHECK_OBJECT(self, Rays::Font, cFont)
47
53
 
48
54
 
49
55
  static
50
56
  RUBY_DEF_ALLOC(alloc, klass)
51
57
  {
52
- return new_type<Rays::Font>(klass, new Rays::Font);
58
+ return new_type<Rays::Font>(klass);
53
59
  }
54
60
  RUBY_END
55
61
 
56
62
  static
57
63
  RUBY_DEFN(initialize)
58
64
  {
59
- CHECK_OBJ(self, Rays::Font, Rays::font_class());
65
+ RUCY_CHECK_OBJ(self, Rays::Font, cFont);
60
66
  if (argc < 0 || 2 < argc)
61
67
  arg_count_error("Font#initialize", argc, 0, 1, 2);
62
68
 
63
69
  const char* name = (argc >= 1) ? argv[0].c_str() : NULL;
64
70
  float size = (argc >= 2) ? to<float>(argv[1]) : 0;
65
- *this = Rays::Font(name, size);
71
+ *THIS = Rays::Font(name, size);
66
72
 
67
73
  return self;
68
74
  }
@@ -73,7 +79,7 @@ RUBY_DEF0(name)
73
79
  {
74
80
  CHECK;
75
81
 
76
- return value(this->name().c_str());
82
+ return value(THIS->name().c_str());
77
83
  }
78
84
  RUBY_END
79
85
 
@@ -82,7 +88,7 @@ RUBY_DEF0(size)
82
88
  {
83
89
  CHECK;
84
90
 
85
- return value(this->size());
91
+ return value(THIS->size());
86
92
  }
87
93
  RUBY_END
88
94
 
@@ -92,8 +98,8 @@ RUBY_DEF1(width, str)
92
98
  CHECK;
93
99
 
94
100
  coord width = 0;
95
- if (!this->get_extent(&width, NULL, str.c_str()))
96
- error("Font#width(%s) failed.", str.inspect().c_str());
101
+ if (!THIS->get_width(&width, str.c_str()))
102
+ rays_error("Font#width(%s) failed.", str.inspect().c_str());
97
103
 
98
104
  return value(width);
99
105
  }
@@ -105,8 +111,8 @@ RUBY_DEF0(height)
105
111
  CHECK;
106
112
 
107
113
  coord height = 0;
108
- if (!this->get_extent(NULL, &height, NULL))
109
- error("Font#height() failed.");
114
+ if (!THIS->get_height(&height))
115
+ rays_error("Font#height() failed.");
110
116
 
111
117
  return value(height);
112
118
  }
@@ -116,15 +122,13 @@ RUBY_END
116
122
  void
117
123
  Init_font ()
118
124
  {
119
- Module m = define_module("Rays");
120
-
121
- Class c = m.define_class("Font");
122
- Rays::cFont = c;
123
-
124
- c.define_alloc_func(alloc);
125
- c.define_method("initialize", initialize);
126
- c.define_method("name", name);
127
- c.define_method("size", size);
128
- c.define_method("width", width);
129
- c.define_method("height", height);
125
+ Module mRays = define_module("Rays");
126
+
127
+ cFont = mRays.define_class("Font");
128
+ cFont.define_alloc_func(alloc);
129
+ cFont.define_private_method("initialize", initialize);
130
+ cFont.define_method("name", name);
131
+ cFont.define_method("size", size);
132
+ cFont.define_method("width", width);
133
+ cFont.define_method("height", height);
130
134
  }
data/ext/rays/image.cpp CHANGED
@@ -12,12 +12,13 @@ using namespace Rucy;
12
12
  using Rays::coord;
13
13
 
14
14
 
15
+ static Class cImage;
16
+
17
+
15
18
  namespace Rays
16
19
  {
17
20
 
18
21
 
19
- static Class cImage;
20
-
21
22
  Class
22
23
  image_class ()
23
24
  {
@@ -33,52 +34,60 @@ namespace Rucy
33
34
 
34
35
 
35
36
  Value
36
- value (const Rays::Image& image)
37
+ value (const Rays::Image& obj)
37
38
  {
38
- return new_type<Rays::Image>(
39
- Rays::image_class(), new Rays::Image(image));
39
+ return new_type(cImage, new Rays::Image(obj));
40
+ }
41
+
42
+ Value
43
+ value (const Rays::Image* obj)
44
+ {
45
+ return obj ? value(*obj) : nil();
40
46
  }
41
47
 
42
48
 
43
49
  }// Rucy
44
50
 
45
51
 
46
- #define this to<Rays::Image*>(self)
52
+ #define THIS to<Rays::Image*>(self)
47
53
 
48
- #define CHECK CHECK_OBJECT(self, Rays::Image, Rays::image_class())
54
+ #define CHECK RUCY_CHECK_OBJECT(self, Rays::Image, cImage)
49
55
 
50
56
 
51
57
  static
52
58
  RUBY_DEF_ALLOC(alloc, klass)
53
59
  {
54
- return new_type<Rays::Image>(klass, new Rays::Image);
60
+ return new_type<Rays::Image>(klass);
55
61
  }
56
62
  RUBY_END
57
63
 
58
64
  static
59
65
  RUBY_DEFN(initialize)
60
66
  {
61
- CHECK_OBJ(self, Rays::Image, Rays::image_class());
62
- if (argc != 0 && argc != 1 && argc != 2 && argc != 3)
63
- arg_count_error("Image#initialize", argc, 0, 1, 2, 3);
67
+ RUCY_CHECK_OBJ(self, Rays::Image, cImage);
68
+
69
+ if (argc < 1 || 3 < argc)
70
+ arg_count_error("Image#initialize", argc, 1, 2, 3);
64
71
 
65
72
  if (argc == 0) return self;
66
73
 
67
- if (argv[1].is_kind_of(Rays::bitmap_class()))
74
+ if (argv[0].is_kind_of(Rays::bitmap_class()))
68
75
  {
69
- if (argc != 1 && argc != 2)
70
- arg_count_error("Image#initialize", argc, 0, 1, 2, 3);
76
+ if (argc < 1 || 2 < argc)
77
+ arg_count_error("Image#initialize", argc, 1, 2);
78
+
79
+ const Rays::Bitmap* bitmap = to<Rays::Bitmap*>(argv[0]);
80
+ if (!bitmap) argument_error();
71
81
 
72
- const Rays::Bitmap& bitmap = *to<Rays::Bitmap*>(argv[1]);
73
- bool alphaonly = (argc == 2) ? to<bool>(argv[2]) : false;
74
- *this = Rays::Image(bitmap, alphaonly);
82
+ bool alphaonly = (argc == 2) ? to<bool>(argv[1]) : false;
83
+ *THIS = Rays::Image(*bitmap, alphaonly);
75
84
  }
76
85
  else
77
86
  {
78
87
  int width = to<int>(argv[0]);
79
88
  int height = to<int>(argv[1]);
80
89
  uint colorspace = (argc == 3) ? to<uint>(argv[2]) : (uint) Rays::RGBA;
81
- *this = Rays::Image(width, height, (Rays::ColorSpaceType) colorspace);
90
+ *THIS = Rays::Image(width, height, (Rays::ColorSpaceType) colorspace);
82
91
  }
83
92
 
84
93
  return self;
@@ -90,7 +99,7 @@ RUBY_DEF0(width)
90
99
  {
91
100
  CHECK;
92
101
 
93
- return value(this->width());
102
+ return value(THIS->width());
94
103
  }
95
104
  RUBY_END
96
105
 
@@ -99,7 +108,7 @@ RUBY_DEF0(height)
99
108
  {
100
109
  CHECK;
101
110
 
102
- return value(this->height());
111
+ return value(THIS->height());
103
112
  }
104
113
  RUBY_END
105
114
 
@@ -108,7 +117,7 @@ RUBY_DEF0(color_space)
108
117
  {
109
118
  CHECK;
110
119
 
111
- return value(this->color_space().type());
120
+ return value(THIS->color_space().type());
112
121
  }
113
122
  RUBY_END
114
123
 
@@ -117,7 +126,7 @@ RUBY_DEF0(bitmap)
117
126
  {
118
127
  CHECK;
119
128
 
120
- return value(this->bitmap());
129
+ return value(THIS->bitmap());
121
130
  }
122
131
  RUBY_END
123
132
 
@@ -126,7 +135,7 @@ RUBY_DEF0(texture)
126
135
  {
127
136
  CHECK;
128
137
 
129
- return value(this->texture());
138
+ return value(THIS->texture());
130
139
  }
131
140
  RUBY_END
132
141
 
@@ -142,7 +151,7 @@ RUBY_DEFN(load)
142
151
  Rays::Image img;
143
152
  if (!Rays::load_image(&img, path.c_str(), alphaonly))
144
153
  {
145
- error(
154
+ rays_error(
146
155
  "Image.load('%s', %s) failed.",
147
156
  path.c_str(), alphaonly ? "true" : "false");
148
157
  }
@@ -155,17 +164,15 @@ RUBY_END
155
164
  void
156
165
  Init_image ()
157
166
  {
158
- Module m = define_module("Rays");
159
-
160
- Class c = m.define_class("Image");
161
- Rays::cImage = c;
162
-
163
- c.define_alloc_func(alloc);
164
- c.define_method("initialize", initialize);
165
- c.define_method("width", width);
166
- c.define_method("height", height);
167
- c.define_method("color_space", color_space);
168
- c.define_method("bitmap", bitmap);
169
- c.define_method("texture", texture);
170
- c.define_function("load", load);
167
+ Module mRays = define_module("Rays");
168
+
169
+ cImage = mRays.define_class("Image");
170
+ cImage.define_alloc_func(alloc);
171
+ cImage.define_private_method("initialize", initialize);
172
+ cImage.define_method("width", width);
173
+ cImage.define_method("height", height);
174
+ cImage.define_method("color_space", color_space);
175
+ cImage.define_method("bitmap", bitmap);
176
+ cImage.define_method("texture", texture);
177
+ cImage.define_function("load", load);
171
178
  }
@@ -0,0 +1,154 @@
1
+ #include "rays/ruby/matrix.h"
2
+
3
+
4
+ #include <rucy.h>
5
+ #include "defs.h"
6
+
7
+
8
+ using namespace Rucy;
9
+
10
+
11
+ static Class cMatrix;
12
+
13
+
14
+ namespace Rays
15
+ {
16
+
17
+
18
+ Class
19
+ matrix_class ()
20
+ {
21
+ return cMatrix;
22
+ }
23
+
24
+
25
+ }// Rays
26
+
27
+
28
+ namespace Rucy
29
+ {
30
+
31
+
32
+ Value
33
+ value (const Rays::Matrix& obj)
34
+ {
35
+ return new_type(cMatrix, new Rays::Matrix(obj));
36
+ }
37
+
38
+ Value
39
+ value (const Rays::Matrix* obj)
40
+ {
41
+ return obj ? value(*obj) : nil();
42
+ }
43
+
44
+
45
+ }// Rucy
46
+
47
+
48
+ #define THIS to<Rays::Matrix*>(self)
49
+
50
+ #define CHECK RUCY_CHECK_OBJ(self, Rays::Matrix, cMatrix)
51
+
52
+
53
+ static
54
+ RUBY_DEF_ALLOC(alloc, klass)
55
+ {
56
+ return new_type<Rays::Matrix>(klass);
57
+ }
58
+ RUBY_END
59
+
60
+ static
61
+ RUBY_DEFN(initialize)
62
+ {
63
+ RUCY_CHECK_OBJ(self, Rays::Matrix, cMatrix);
64
+
65
+ if (argc != 0 && argc != 1 && argc != 16)
66
+ arg_count_error("Matrix#initialize", argc, 0, 1, 16);
67
+
68
+ if (argc == 0) return self;
69
+
70
+ switch (argc)
71
+ {
72
+ case 1:
73
+ *THIS = Rays::Matrix(to<float>(argv[0]));
74
+ break;
75
+
76
+ case 16:
77
+ *THIS = Rays::Matrix(
78
+ to<float>(argv[0]), to<float>(argv[1]), to<float>(argv[2]), to<float>(argv[3]),
79
+ to<float>(argv[4]), to<float>(argv[5]), to<float>(argv[6]), to<float>(argv[7]),
80
+ to<float>(argv[8]), to<float>(argv[9]), to<float>(argv[10]), to<float>(argv[11]),
81
+ to<float>(argv[12]), to<float>(argv[13]), to<float>(argv[14]), to<float>(argv[15]));
82
+ break;
83
+ }
84
+
85
+ return self;
86
+ }
87
+ RUBY_END
88
+
89
+ static
90
+ RUBY_DEF1(initialize_copy, obj)
91
+ {
92
+ RUCY_CHECK_OBJ(self, Rays::Matrix, cMatrix);
93
+
94
+ Rays::Matrix* matrix = to<Rays::Matrix*>(obj);
95
+ if (!matrix) argument_error();
96
+
97
+ *THIS = *matrix;
98
+ return self;
99
+ }
100
+ RUBY_END
101
+
102
+ static
103
+ RUBY_DEFN(set)
104
+ {
105
+ CHECK;
106
+
107
+ if (argc != 0 && argc != 1 && argc != 16)
108
+ arg_count_error("Matrix#initialize", argc, 0, 1, 16);
109
+
110
+ switch (argc)
111
+ {
112
+ case 0:
113
+ *THIS = Rays::Matrix();
114
+ break;
115
+
116
+ case 1:
117
+ *THIS = Rays::Matrix(to<float>(argv[0]));
118
+ break;
119
+
120
+ case 16:
121
+ *THIS = Rays::Matrix(
122
+ to<float>(argv[0]), to<float>(argv[1]), to<float>(argv[2]), to<float>(argv[3]),
123
+ to<float>(argv[4]), to<float>(argv[5]), to<float>(argv[6]), to<float>(argv[7]),
124
+ to<float>(argv[8]), to<float>(argv[9]), to<float>(argv[10]), to<float>(argv[11]),
125
+ to<float>(argv[12]), to<float>(argv[13]), to<float>(argv[14]), to<float>(argv[15]));
126
+ break;
127
+ }
128
+
129
+ return self;
130
+ }
131
+ RUBY_END
132
+
133
+ static
134
+ RUBY_DEF2(at, row, column)
135
+ {
136
+ CHECK;
137
+
138
+ return value(THIS->at(row.as_i(), column.as_i()));
139
+ }
140
+ RUBY_END
141
+
142
+
143
+ void
144
+ Init_matrix ()
145
+ {
146
+ Module mRays = define_module("Rays");
147
+
148
+ cMatrix = mRays.define_class("Matrix");
149
+ cMatrix.define_alloc_func(alloc);
150
+ cMatrix.define_private_method("initialize", initialize);
151
+ cMatrix.define_private_method("initialize_copy", initialize_copy);
152
+ cMatrix.define_method("set", set);
153
+ cMatrix.define_method("at", at);
154
+ }