rays 0.1.48 → 0.1.49
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.doc/ext/rays/color.cpp +11 -0
- data/.doc/ext/rays/image.cpp +3 -3
- data/.doc/ext/rays/matrix.cpp +65 -7
- data/.doc/ext/rays/painter.cpp +44 -6
- data/.doc/ext/rays/point.cpp +1 -11
- data/.doc/ext/rays/polygon.cpp +6 -4
- data/ChangeLog.md +23 -0
- data/VERSION +1 -1
- data/ext/rays/color.cpp +13 -1
- data/ext/rays/image.cpp +3 -3
- data/ext/rays/matrix.cpp +69 -7
- data/ext/rays/painter.cpp +52 -10
- data/ext/rays/point.cpp +1 -12
- data/ext/rays/polygon.cpp +6 -4
- data/include/rays/color.h +3 -1
- data/include/rays/image.h +1 -1
- data/include/rays/matrix.h +24 -0
- data/include/rays/painter.h +10 -0
- data/include/rays/polygon.h +12 -6
- data/lib/rays/color.rb +6 -0
- data/lib/rays/image.rb +11 -1
- data/lib/rays/matrix.rb +16 -0
- data/lib/rays/painter.rb +8 -8
- data/lib/rays/point.rb +4 -0
- data/lib/rays/polygon.rb +4 -4
- data/rays.gemspec +2 -2
- data/src/color.cpp +11 -2
- data/src/font.cpp +13 -16
- data/src/font.h +0 -6
- data/src/image.cpp +58 -14
- data/src/ios/font.mm +6 -10
- data/src/ios/helper.h +2 -2
- data/src/ios/helper.mm +2 -2
- data/src/matrix.cpp +45 -0
- data/src/osx/font.mm +3 -5
- data/src/painter.cpp +91 -29
- data/src/polygon.cpp +28 -18
- data/src/texture.cpp +21 -2
- data/src/texture.h +2 -0
- data/test/test_color.rb +21 -4
- data/test/test_font.rb +3 -0
- data/test/test_image.rb +26 -0
- data/test/test_matrix.rb +22 -0
- data/test/test_painter.rb +27 -0
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a16981d77f0cc82e3020f1a80757dc7620da39d9b309823b47b8dc49883128a
|
4
|
+
data.tar.gz: 0bffdff4eceb4b60326882341d2fd3f0b2ff583dabfbab05f28127b276a4ab83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e417b9f4f751adeda1108ed76818171896caf4476188a7b3e9116e81f3d1a5d2c9e023e092b202a81c48f6a7a17faed7b388a5cf8211363350efe351f3b3df5
|
7
|
+
data.tar.gz: 33ff8e0b58b215a1e654fcc9aec4864e35a004a5470f412ce0cec7b0a81865b5d8dad003367ee6630fde11e34fb43b83e0c5f973d0d0f0fbe5cdd00795ef1255
|
data/.doc/ext/rays/color.cpp
CHANGED
@@ -103,6 +103,16 @@ VALUE get_alpha(VALUE self)
|
|
103
103
|
return value(THIS->alpha);
|
104
104
|
}
|
105
105
|
|
106
|
+
static
|
107
|
+
VALUE to_hsv(VALUE self)
|
108
|
+
{
|
109
|
+
CHECK;
|
110
|
+
|
111
|
+
float h, s, v;
|
112
|
+
Rays::get_hsv(&h, &s, &v, *THIS);
|
113
|
+
return array(h, s, v, THIS->alpha);
|
114
|
+
}
|
115
|
+
|
106
116
|
|
107
117
|
typedef std::map<Rays::String, Rays::Color> ColorMap;
|
108
118
|
|
@@ -199,6 +209,7 @@ Init_rays_color ()
|
|
199
209
|
rb_define_method(cColor, "blue", RUBY_METHOD_FUNC(get_blue), 0);
|
200
210
|
rb_define_method(cColor, "alpha=", RUBY_METHOD_FUNC(set_alpha), 1);
|
201
211
|
rb_define_method(cColor, "alpha", RUBY_METHOD_FUNC(get_alpha), 0);
|
212
|
+
rb_define_method(cColor, "to_hsv", RUBY_METHOD_FUNC(to_hsv), 0);
|
202
213
|
rb_define_module_function(cColor, "hsv", RUBY_METHOD_FUNC(hsv), -1);
|
203
214
|
rb_define_module_function(cColor, "set_palette_color", RUBY_METHOD_FUNC(set_palette_color), -1);
|
204
215
|
}
|
data/.doc/ext/rays/image.cpp
CHANGED
@@ -104,10 +104,10 @@ VALUE painter(VALUE self)
|
|
104
104
|
}
|
105
105
|
|
106
106
|
static
|
107
|
-
VALUE
|
107
|
+
VALUE get_bitmap(VALUE self, VALUE modify)
|
108
108
|
{
|
109
109
|
CHECK;
|
110
|
-
return value(THIS->bitmap());
|
110
|
+
return value(THIS->bitmap(modify));
|
111
111
|
}
|
112
112
|
|
113
113
|
static
|
@@ -134,7 +134,7 @@ Init_rays_image ()
|
|
134
134
|
rb_define_method(cImage, "color_space", RUBY_METHOD_FUNC(color_space), 0);
|
135
135
|
rb_define_method(cImage, "pixel_density", RUBY_METHOD_FUNC(pixel_density), 0);
|
136
136
|
rb_define_method(cImage, "painter", RUBY_METHOD_FUNC(painter), 0);
|
137
|
-
|
137
|
+
rb_define_private_method(cImage, "get_bitmap", RUBY_METHOD_FUNC(get_bitmap), 1);
|
138
138
|
rb_define_module_function(cImage, "load", RUBY_METHOD_FUNC(load), 1);
|
139
139
|
}
|
140
140
|
|
data/.doc/ext/rays/matrix.cpp
CHANGED
@@ -67,6 +67,14 @@ VALUE reset(VALUE self)
|
|
67
67
|
return self;
|
68
68
|
}
|
69
69
|
|
70
|
+
static
|
71
|
+
VALUE transpose(VALUE self)
|
72
|
+
{
|
73
|
+
CHECK;
|
74
|
+
THIS->transpose();
|
75
|
+
return self;
|
76
|
+
}
|
77
|
+
|
70
78
|
static
|
71
79
|
VALUE translate(VALUE self)
|
72
80
|
{
|
@@ -108,10 +116,10 @@ VALUE to_a(VALUE self)
|
|
108
116
|
{
|
109
117
|
CHECK;
|
110
118
|
return array(
|
111
|
-
THIS->x0, THIS->
|
112
|
-
THIS->
|
113
|
-
THIS->
|
114
|
-
THIS->
|
119
|
+
THIS->x0, THIS->x1, THIS->x2, THIS->x3,
|
120
|
+
THIS->y0, THIS->y1, THIS->y2, THIS->y3,
|
121
|
+
THIS->z0, THIS->z1, THIS->z2, THIS->z3,
|
122
|
+
THIS->w0, THIS->w1, THIS->w2, THIS->w3);
|
115
123
|
}
|
116
124
|
|
117
125
|
static
|
@@ -190,6 +198,51 @@ VALUE s_rotate(VALUE self)
|
|
190
198
|
return rotate(argc, argv, value(Rays::Matrix()));
|
191
199
|
}
|
192
200
|
|
201
|
+
static
|
202
|
+
VALUE s_ortho(VALUE self)
|
203
|
+
{
|
204
|
+
check_arg_count(__FILE__, __LINE__, "Matrix#ortho", argc, 4, 6);
|
205
|
+
|
206
|
+
coord l = to<coord>(argv[0]);
|
207
|
+
coord r = to<coord>(argv[1]);
|
208
|
+
coord t = to<coord>(argv[2]);
|
209
|
+
coord b = to<coord>(argv[3]);
|
210
|
+
if (argc == 4)
|
211
|
+
return value(Rays::ortho(l, r, t, b));
|
212
|
+
else
|
213
|
+
return value(Rays::ortho(l, r, t, b, to<coord>(argv[4]), to<coord>(argv[5])));
|
214
|
+
}
|
215
|
+
|
216
|
+
static
|
217
|
+
VALUE s_perspective(VALUE self, VALUE fov_y, VALUE aspect_ratio, VALUE near, VALUE far)
|
218
|
+
{
|
219
|
+
return value(Rays::perspective(
|
220
|
+
to<float>(fov_y), to<float>(aspect_ratio), to<coord>(near), to<coord>(far)));
|
221
|
+
}
|
222
|
+
|
223
|
+
static
|
224
|
+
VALUE s_look_at(VALUE self)
|
225
|
+
{
|
226
|
+
check_arg_count(__FILE__, __LINE__, "Matrix#ortho", argc, 3, 6, 9);
|
227
|
+
|
228
|
+
if (argc == 3)
|
229
|
+
{
|
230
|
+
return value(Rays::look_at(
|
231
|
+
to<Rays::Point&>(argv[0]),
|
232
|
+
to<Rays::Point&>(argv[1]),
|
233
|
+
to<Rays::Point&>(argv[2])));
|
234
|
+
}
|
235
|
+
else
|
236
|
+
{
|
237
|
+
return value(Rays::look_at(
|
238
|
+
to<coord>(argv[0]), to<coord>(argv[1]), to<coord>(argv[2]),
|
239
|
+
to<coord>(argv[3]), to<coord>(argv[4]), to<coord>(argv[5]),
|
240
|
+
argc >= 7 ? to<coord>(argv[6]) : 0,
|
241
|
+
argc >= 8 ? to<coord>(argv[7]) : 1,
|
242
|
+
argc >= 9 ? to<coord>(argv[8]) : 0));
|
243
|
+
}
|
244
|
+
}
|
245
|
+
|
193
246
|
|
194
247
|
static Class cMatrix;
|
195
248
|
|
@@ -203,9 +256,10 @@ Init_rays_matrix ()
|
|
203
256
|
rb_define_private_method(cMatrix, "initialize", RUBY_METHOD_FUNC(initialize), -1);
|
204
257
|
rb_define_private_method(cMatrix, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
|
205
258
|
rb_define_method(cMatrix, "reset", RUBY_METHOD_FUNC(reset), -1);
|
206
|
-
|
207
|
-
|
208
|
-
|
259
|
+
cMatrix.define_method("transpose!", transpose);
|
260
|
+
cMatrix.define_method("translate!", translate);
|
261
|
+
cMatrix.define_method("scale!", scale);
|
262
|
+
cMatrix.define_method("rotate!", rotate);
|
209
263
|
rb_define_method(cMatrix, "to_a", RUBY_METHOD_FUNC(to_a), 0);
|
210
264
|
cMatrix.define_method("*", mult);
|
211
265
|
cMatrix.define_method("[]=", set_at);
|
@@ -216,6 +270,10 @@ Init_rays_matrix ()
|
|
216
270
|
rb_define_singleton_method(cMatrix, "translate", RUBY_METHOD_FUNC(s_translate), -1);
|
217
271
|
rb_define_singleton_method(cMatrix, "scale", RUBY_METHOD_FUNC(s_scale), -1);
|
218
272
|
rb_define_singleton_method(cMatrix, "rotate", RUBY_METHOD_FUNC(s_rotate), -1);
|
273
|
+
rb_define_singleton_method(cMatrix, "ortho", RUBY_METHOD_FUNC(s_ortho), -1);
|
274
|
+
rb_define_singleton_method(cMatrix, "perspective", RUBY_METHOD_FUNC(s_perspective), 4);
|
275
|
+
rb_define_singleton_method(cMatrix, "look_at", RUBY_METHOD_FUNC(s_look_at), -1);
|
276
|
+
|
219
277
|
}
|
220
278
|
|
221
279
|
|
data/.doc/ext/rays/painter.cpp
CHANGED
@@ -147,6 +147,18 @@ VALUE polygon(VALUE self)
|
|
147
147
|
return self;
|
148
148
|
}
|
149
149
|
|
150
|
+
static
|
151
|
+
VALUE point(VALUE self)
|
152
|
+
{
|
153
|
+
CHECK;
|
154
|
+
|
155
|
+
std::vector<Rays::Point> points;
|
156
|
+
get_points(&points, argc, argv);
|
157
|
+
|
158
|
+
THIS->points(&points[0], points.size());
|
159
|
+
return self;
|
160
|
+
}
|
161
|
+
|
150
162
|
static
|
151
163
|
VALUE line(VALUE self, VALUE args, VALUE loop)
|
152
164
|
{
|
@@ -458,6 +470,28 @@ VALUE get_nsegment(VALUE self)
|
|
458
470
|
return value(THIS->nsegment());
|
459
471
|
}
|
460
472
|
|
473
|
+
static
|
474
|
+
VALUE set_line_height(VALUE self, VALUE height)
|
475
|
+
{
|
476
|
+
CHECK;
|
477
|
+
THIS->set_line_height(height ? to<coord>(height) : -1);
|
478
|
+
return self;
|
479
|
+
}
|
480
|
+
|
481
|
+
static
|
482
|
+
VALUE get_line_height(VALUE self)
|
483
|
+
{
|
484
|
+
CHECK;
|
485
|
+
return value(THIS->line_height());
|
486
|
+
}
|
487
|
+
|
488
|
+
static
|
489
|
+
VALUE get_line_height_raw(VALUE self)
|
490
|
+
{
|
491
|
+
CHECK;
|
492
|
+
return value(THIS->line_height(true));
|
493
|
+
}
|
494
|
+
|
461
495
|
static
|
462
496
|
VALUE set_blend_mode(VALUE self, VALUE mode)
|
463
497
|
{
|
@@ -721,12 +755,13 @@ Init_rays_painter ()
|
|
721
755
|
cPainter.define_method( "painting?", is_painting);
|
722
756
|
rb_define_method(cPainter, "clear", RUBY_METHOD_FUNC(clear), 0);
|
723
757
|
rb_define_method(cPainter, "polygon", RUBY_METHOD_FUNC(polygon), -1);
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
758
|
+
rb_define_method(cPainter, "point", RUBY_METHOD_FUNC(point), -1);
|
759
|
+
cPainter.define_private_method("line!", line);
|
760
|
+
cPainter.define_private_method("polyline!", polyline);
|
761
|
+
cPainter.define_private_method("rect!", rect);
|
762
|
+
cPainter.define_private_method("ellipse!", ellipse);
|
763
|
+
cPainter.define_private_method("curve!", curve);
|
764
|
+
cPainter.define_private_method("bezier!", bezier);
|
730
765
|
rb_define_method(cPainter, "image", RUBY_METHOD_FUNC(image), -1);
|
731
766
|
rb_define_method(cPainter, "text", RUBY_METHOD_FUNC(text), -1);
|
732
767
|
|
@@ -751,6 +786,9 @@ Init_rays_painter ()
|
|
751
786
|
rb_define_method(cPainter, "miter_limit", RUBY_METHOD_FUNC(get_miter_limit), 0);
|
752
787
|
rb_define_method(cPainter, "nsegment=", RUBY_METHOD_FUNC(set_nsegment), 1);
|
753
788
|
rb_define_method(cPainter, "nsegment", RUBY_METHOD_FUNC(get_nsegment), 0);
|
789
|
+
rb_define_method(cPainter, "line_height=", RUBY_METHOD_FUNC(set_line_height), 1);
|
790
|
+
rb_define_method(cPainter, "line_height", RUBY_METHOD_FUNC(get_line_height), 0);
|
791
|
+
cPainter.define_method("line_height!", get_line_height_raw);
|
754
792
|
rb_define_method(cPainter, "blend_mode=", RUBY_METHOD_FUNC(set_blend_mode), 1);
|
755
793
|
rb_define_method(cPainter, "blend_mode", RUBY_METHOD_FUNC(get_blend_mode), 0);
|
756
794
|
rb_define_method(cPainter, "clip=", RUBY_METHOD_FUNC(set_clip), -1);
|
data/.doc/ext/rays/point.cpp
CHANGED
@@ -79,15 +79,6 @@ VALUE move_by(VALUE self)
|
|
79
79
|
|
80
80
|
static
|
81
81
|
VALUE rotate(VALUE self, VALUE degree)
|
82
|
-
{
|
83
|
-
CHECK;
|
84
|
-
Rays::Point p = *THIS;
|
85
|
-
p.rotate(to<float>(degree));
|
86
|
-
return value(p);
|
87
|
-
}
|
88
|
-
|
89
|
-
static
|
90
|
-
VALUE rotate_self(VALUE self, VALUE degree)
|
91
82
|
{
|
92
83
|
CHECK;
|
93
84
|
THIS->rotate(to<float>(degree));
|
@@ -258,8 +249,7 @@ Init_rays_point ()
|
|
258
249
|
rb_define_private_method(cPoint, "initialize_copy", RUBY_METHOD_FUNC(initialize_copy), 1);
|
259
250
|
cPoint.define_method("move_to!", move_to);
|
260
251
|
cPoint.define_method("move_by!", move_by);
|
261
|
-
|
262
|
-
cPoint.define_method("rotate!", rotate_self);
|
252
|
+
cPoint.define_method("rotate!", rotate);
|
263
253
|
rb_define_method(cPoint, "length", RUBY_METHOD_FUNC(length), 0);
|
264
254
|
rb_define_method(cPoint, "normalize", RUBY_METHOD_FUNC(normalize), 0);
|
265
255
|
rb_define_method(cPoint, "normal", RUBY_METHOD_FUNC(normal), 0);
|
data/.doc/ext/rays/polygon.cpp
CHANGED
@@ -319,17 +319,19 @@ VALUE create_ellipse(VALUE self, VALUE
|
|
319
319
|
}
|
320
320
|
|
321
321
|
static
|
322
|
-
VALUE create_curve(VALUE self, VALUE points, VALUE loop)
|
322
|
+
VALUE create_curve(VALUE self, VALUE points, VALUE loop, VALUE nsegment)
|
323
323
|
{
|
324
324
|
CreateParams params(points, nil(), nil());
|
325
|
-
|
325
|
+
uint nseg = nsegment ? 0 : to<uint>(nsegment);
|
326
|
+
return value(Rays::create_curve(params.ppoints(), params.size(), loop, nseg));
|
326
327
|
}
|
327
328
|
|
328
329
|
static
|
329
|
-
VALUE create_bezier(VALUE self, VALUE points, VALUE loop)
|
330
|
+
VALUE create_bezier(VALUE self, VALUE points, VALUE loop, VALUE nsegment)
|
330
331
|
{
|
331
332
|
CreateParams params(points, nil(), nil());
|
332
|
-
|
333
|
+
uint nseg = nsegment ? 0 : to<uint>(nsegment);
|
334
|
+
return value(Rays::create_bezier(params.ppoints(), params.size(), loop, nseg));
|
333
335
|
}
|
334
336
|
|
335
337
|
|
data/ChangeLog.md
CHANGED
@@ -1,6 +1,29 @@
|
|
1
1
|
# rays ChangeLog
|
2
2
|
|
3
3
|
|
4
|
+
## [v0.1.49] - 2024-02-07
|
5
|
+
|
6
|
+
- Add point(), line_height(), and line_height!() to Painter
|
7
|
+
- Add translate!(), scale!(), rotate!(), transpose(), and transpose!() to Rays::Matrix class
|
8
|
+
- Add ortho(), perspective(), and look_at() to Rays::Matrix
|
9
|
+
- Add Color#to_hsv
|
10
|
+
- Add get_hsv()
|
11
|
+
- hsb as an alias for hsv
|
12
|
+
|
13
|
+
- Font::get_width() handles multiple lines if there is a newline character
|
14
|
+
- Painter::curve() and Painter::bezier() use nsegment state
|
15
|
+
- Polygon.curve() and Polygon.bezier() can take 'nsegment' parameter
|
16
|
+
- When updating a texture with a bitmap, the texture is reused, not created anew
|
17
|
+
- If the texture is bound to the frame buffer, replacing it with a new texture will cause the drawing target to shift
|
18
|
+
- Set the modified flag on the texture in the framebuffer at the beginning of painting
|
19
|
+
- Set modified flag for bitmap if needed
|
20
|
+
- Throw error on conflict between bitmap and texture
|
21
|
+
|
22
|
+
- Fix a bug that dust was drawn on the right edge when drawing text
|
23
|
+
- Fix that Painter#point ignores stroke_cap
|
24
|
+
- Fix Matrix::to_a order
|
25
|
+
|
26
|
+
|
4
27
|
## [v0.1.48] - 2024-01-08
|
5
28
|
|
6
29
|
- Add Bitmap#pixels=
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.49
|
data/ext/rays/color.cpp
CHANGED
@@ -114,6 +114,17 @@ RUCY_DEF0(get_alpha)
|
|
114
114
|
}
|
115
115
|
RUCY_END
|
116
116
|
|
117
|
+
static
|
118
|
+
RUCY_DEF0(to_hsv)
|
119
|
+
{
|
120
|
+
CHECK;
|
121
|
+
|
122
|
+
float h, s, v;
|
123
|
+
Rays::get_hsv(&h, &s, &v, *THIS);
|
124
|
+
return array(h, s, v, THIS->alpha);
|
125
|
+
}
|
126
|
+
RUCY_END
|
127
|
+
|
117
128
|
|
118
129
|
typedef std::map<Rays::String, Rays::Color> ColorMap;
|
119
130
|
|
@@ -212,7 +223,8 @@ Init_rays_color ()
|
|
212
223
|
cColor.define_method("blue", get_blue);
|
213
224
|
cColor.define_method("alpha=", set_alpha);
|
214
225
|
cColor.define_method("alpha", get_alpha);
|
215
|
-
cColor.
|
226
|
+
cColor.define_method( "to_hsv", to_hsv);
|
227
|
+
cColor.define_module_function("hsv", hsv);
|
216
228
|
cColor.define_module_function("set_palette_color", set_palette_color);
|
217
229
|
}
|
218
230
|
|
data/ext/rays/image.cpp
CHANGED
@@ -113,10 +113,10 @@ RUCY_DEF0(painter)
|
|
113
113
|
RUCY_END
|
114
114
|
|
115
115
|
static
|
116
|
-
|
116
|
+
RUCY_DEF1(get_bitmap, modify)
|
117
117
|
{
|
118
118
|
CHECK;
|
119
|
-
return value(THIS->bitmap());
|
119
|
+
return value(THIS->bitmap(modify));
|
120
120
|
}
|
121
121
|
RUCY_END
|
122
122
|
|
@@ -145,7 +145,7 @@ Init_rays_image ()
|
|
145
145
|
cImage.define_method("color_space", color_space);
|
146
146
|
cImage.define_method("pixel_density", pixel_density);
|
147
147
|
cImage.define_method("painter", painter);
|
148
|
-
cImage.
|
148
|
+
cImage.define_private_method("get_bitmap", get_bitmap);
|
149
149
|
cImage.define_module_function("load", load);
|
150
150
|
}
|
151
151
|
|
data/ext/rays/matrix.cpp
CHANGED
@@ -71,6 +71,15 @@ RUCY_DEFN(reset)
|
|
71
71
|
}
|
72
72
|
RUCY_END
|
73
73
|
|
74
|
+
static
|
75
|
+
RUCY_DEFN(transpose)
|
76
|
+
{
|
77
|
+
CHECK;
|
78
|
+
THIS->transpose();
|
79
|
+
return self;
|
80
|
+
}
|
81
|
+
RUCY_END
|
82
|
+
|
74
83
|
static
|
75
84
|
RUCY_DEFN(translate)
|
76
85
|
{
|
@@ -115,10 +124,10 @@ RUCY_DEF0(to_a)
|
|
115
124
|
{
|
116
125
|
CHECK;
|
117
126
|
return array(
|
118
|
-
THIS->x0, THIS->
|
119
|
-
THIS->
|
120
|
-
THIS->
|
121
|
-
THIS->
|
127
|
+
THIS->x0, THIS->x1, THIS->x2, THIS->x3,
|
128
|
+
THIS->y0, THIS->y1, THIS->y2, THIS->y3,
|
129
|
+
THIS->z0, THIS->z1, THIS->z2, THIS->z3,
|
130
|
+
THIS->w0, THIS->w1, THIS->w2, THIS->w3);
|
122
131
|
}
|
123
132
|
RUCY_END
|
124
133
|
|
@@ -206,6 +215,54 @@ RUCY_DEFN(s_rotate)
|
|
206
215
|
}
|
207
216
|
RUCY_END
|
208
217
|
|
218
|
+
static
|
219
|
+
RUCY_DEFN(s_ortho)
|
220
|
+
{
|
221
|
+
check_arg_count(__FILE__, __LINE__, "Matrix#ortho", argc, 4, 6);
|
222
|
+
|
223
|
+
coord l = to<coord>(argv[0]);
|
224
|
+
coord r = to<coord>(argv[1]);
|
225
|
+
coord t = to<coord>(argv[2]);
|
226
|
+
coord b = to<coord>(argv[3]);
|
227
|
+
if (argc == 4)
|
228
|
+
return value(Rays::ortho(l, r, t, b));
|
229
|
+
else
|
230
|
+
return value(Rays::ortho(l, r, t, b, to<coord>(argv[4]), to<coord>(argv[5])));
|
231
|
+
}
|
232
|
+
RUCY_END
|
233
|
+
|
234
|
+
static
|
235
|
+
RUCY_DEF4(s_perspective, fov_y, aspect_ratio, near, far)
|
236
|
+
{
|
237
|
+
return value(Rays::perspective(
|
238
|
+
to<float>(fov_y), to<float>(aspect_ratio), to<coord>(near), to<coord>(far)));
|
239
|
+
}
|
240
|
+
RUCY_END
|
241
|
+
|
242
|
+
static
|
243
|
+
RUCY_DEFN(s_look_at)
|
244
|
+
{
|
245
|
+
check_arg_count(__FILE__, __LINE__, "Matrix#ortho", argc, 3, 6, 9);
|
246
|
+
|
247
|
+
if (argc == 3)
|
248
|
+
{
|
249
|
+
return value(Rays::look_at(
|
250
|
+
to<Rays::Point&>(argv[0]),
|
251
|
+
to<Rays::Point&>(argv[1]),
|
252
|
+
to<Rays::Point&>(argv[2])));
|
253
|
+
}
|
254
|
+
else
|
255
|
+
{
|
256
|
+
return value(Rays::look_at(
|
257
|
+
to<coord>(argv[0]), to<coord>(argv[1]), to<coord>(argv[2]),
|
258
|
+
to<coord>(argv[3]), to<coord>(argv[4]), to<coord>(argv[5]),
|
259
|
+
argc >= 7 ? to<coord>(argv[6]) : 0,
|
260
|
+
argc >= 8 ? to<coord>(argv[7]) : 1,
|
261
|
+
argc >= 9 ? to<coord>(argv[8]) : 0));
|
262
|
+
}
|
263
|
+
}
|
264
|
+
RUCY_END
|
265
|
+
|
209
266
|
|
210
267
|
static Class cMatrix;
|
211
268
|
|
@@ -219,9 +276,10 @@ Init_rays_matrix ()
|
|
219
276
|
cMatrix.define_private_method("initialize", initialize);
|
220
277
|
cMatrix.define_private_method("initialize_copy", initialize_copy);
|
221
278
|
cMatrix.define_method("reset", reset);
|
222
|
-
cMatrix.define_method("
|
223
|
-
cMatrix.define_method("
|
224
|
-
cMatrix.define_method("
|
279
|
+
cMatrix.define_method("transpose!", transpose);
|
280
|
+
cMatrix.define_method("translate!", translate);
|
281
|
+
cMatrix.define_method("scale!", scale);
|
282
|
+
cMatrix.define_method("rotate!", rotate);
|
225
283
|
cMatrix.define_method("to_a", to_a);
|
226
284
|
cMatrix.define_method("*", mult);
|
227
285
|
cMatrix.define_method("[]=", set_at);
|
@@ -232,6 +290,10 @@ Init_rays_matrix ()
|
|
232
290
|
cMatrix.define_singleton_method("translate", s_translate);
|
233
291
|
cMatrix.define_singleton_method("scale", s_scale);
|
234
292
|
cMatrix.define_singleton_method("rotate", s_rotate);
|
293
|
+
cMatrix.define_singleton_method("ortho", s_ortho);
|
294
|
+
cMatrix.define_singleton_method("perspective", s_perspective);
|
295
|
+
cMatrix.define_singleton_method("look_at", s_look_at);
|
296
|
+
|
235
297
|
}
|
236
298
|
|
237
299
|
|
data/ext/rays/painter.cpp
CHANGED
@@ -156,6 +156,19 @@ RUCY_DEFN(polygon)
|
|
156
156
|
}
|
157
157
|
RUCY_END
|
158
158
|
|
159
|
+
static
|
160
|
+
RUCY_DEFN(point)
|
161
|
+
{
|
162
|
+
CHECK;
|
163
|
+
|
164
|
+
std::vector<Rays::Point> points;
|
165
|
+
get_points(&points, argc, argv);
|
166
|
+
|
167
|
+
THIS->points(&points[0], points.size());
|
168
|
+
return self;
|
169
|
+
}
|
170
|
+
RUCY_END
|
171
|
+
|
159
172
|
static
|
160
173
|
RUCY_DEF2(line, args, loop)
|
161
174
|
{
|
@@ -496,6 +509,31 @@ RUCY_DEF0(get_nsegment)
|
|
496
509
|
}
|
497
510
|
RUCY_END
|
498
511
|
|
512
|
+
static
|
513
|
+
RUCY_DEF1(set_line_height, height)
|
514
|
+
{
|
515
|
+
CHECK;
|
516
|
+
THIS->set_line_height(height ? to<coord>(height) : -1);
|
517
|
+
return self;
|
518
|
+
}
|
519
|
+
RUCY_END
|
520
|
+
|
521
|
+
static
|
522
|
+
RUCY_DEF0(get_line_height)
|
523
|
+
{
|
524
|
+
CHECK;
|
525
|
+
return value(THIS->line_height());
|
526
|
+
}
|
527
|
+
RUCY_END
|
528
|
+
|
529
|
+
static
|
530
|
+
RUCY_DEF0(get_line_height_raw)
|
531
|
+
{
|
532
|
+
CHECK;
|
533
|
+
return value(THIS->line_height(true));
|
534
|
+
}
|
535
|
+
RUCY_END
|
536
|
+
|
499
537
|
static
|
500
538
|
RUCY_DEF1(set_blend_mode, mode)
|
501
539
|
{
|
@@ -783,16 +821,17 @@ Init_rays_painter ()
|
|
783
821
|
cPainter.define_private_method("begin_paint", begin_paint);
|
784
822
|
cPainter.define_private_method( "end_paint", end_paint);
|
785
823
|
cPainter.define_method( "painting?", is_painting);
|
786
|
-
cPainter.define_method("clear",
|
787
|
-
cPainter.define_method("polygon",
|
788
|
-
cPainter.
|
789
|
-
cPainter.define_private_method("
|
790
|
-
cPainter.define_private_method("
|
791
|
-
cPainter.define_private_method("
|
792
|
-
cPainter.define_private_method("
|
793
|
-
cPainter.define_private_method("
|
794
|
-
cPainter.
|
795
|
-
cPainter.define_method("
|
824
|
+
cPainter.define_method("clear", clear);
|
825
|
+
cPainter.define_method( "polygon", polygon);
|
826
|
+
cPainter.define_method( "point", point);
|
827
|
+
cPainter.define_private_method("line!", line);
|
828
|
+
cPainter.define_private_method("polyline!", polyline);
|
829
|
+
cPainter.define_private_method("rect!", rect);
|
830
|
+
cPainter.define_private_method("ellipse!", ellipse);
|
831
|
+
cPainter.define_private_method("curve!", curve);
|
832
|
+
cPainter.define_private_method("bezier!", bezier);
|
833
|
+
cPainter.define_method( "image", image);
|
834
|
+
cPainter.define_method( "text", text);
|
796
835
|
|
797
836
|
cPainter.define_method( "background=", set_background);
|
798
837
|
cPainter.define_method( "background", get_background);
|
@@ -815,6 +854,9 @@ Init_rays_painter ()
|
|
815
854
|
cPainter.define_method("miter_limit", get_miter_limit);
|
816
855
|
cPainter.define_method("nsegment=", set_nsegment);
|
817
856
|
cPainter.define_method("nsegment", get_nsegment);
|
857
|
+
cPainter.define_method("line_height=", set_line_height);
|
858
|
+
cPainter.define_method("line_height", get_line_height);
|
859
|
+
cPainter.define_method("line_height!", get_line_height_raw);
|
818
860
|
cPainter.define_method("blend_mode=", set_blend_mode);
|
819
861
|
cPainter.define_method("blend_mode", get_blend_mode);
|
820
862
|
cPainter.define_method( "clip=", set_clip);
|
data/ext/rays/point.cpp
CHANGED
@@ -84,16 +84,6 @@ RUCY_END
|
|
84
84
|
|
85
85
|
static
|
86
86
|
RUCY_DEF1(rotate, degree)
|
87
|
-
{
|
88
|
-
CHECK;
|
89
|
-
Rays::Point p = *THIS;
|
90
|
-
p.rotate(to<float>(degree));
|
91
|
-
return value(p);
|
92
|
-
}
|
93
|
-
RUCY_END
|
94
|
-
|
95
|
-
static
|
96
|
-
RUCY_DEF1(rotate_self, degree)
|
97
87
|
{
|
98
88
|
CHECK;
|
99
89
|
THIS->rotate(to<float>(degree));
|
@@ -283,8 +273,7 @@ Init_rays_point ()
|
|
283
273
|
cPoint.define_private_method("initialize_copy", initialize_copy);
|
284
274
|
cPoint.define_method("move_to!", move_to);
|
285
275
|
cPoint.define_method("move_by!", move_by);
|
286
|
-
cPoint.define_method("rotate", rotate);
|
287
|
-
cPoint.define_method("rotate!", rotate_self);
|
276
|
+
cPoint.define_method("rotate!", rotate);
|
288
277
|
cPoint.define_method("length", length);
|
289
278
|
cPoint.define_method("normalize", normalize);
|
290
279
|
cPoint.define_method("normal", normal);
|
data/ext/rays/polygon.cpp
CHANGED
@@ -342,18 +342,20 @@ RUCY_DEF7(create_ellipse,
|
|
342
342
|
RUCY_END
|
343
343
|
|
344
344
|
static
|
345
|
-
|
345
|
+
RUCY_DEF3(create_curve, points, loop, nsegment)
|
346
346
|
{
|
347
347
|
CreateParams params(points, nil(), nil());
|
348
|
-
|
348
|
+
uint nseg = nsegment ? 0 : to<uint>(nsegment);
|
349
|
+
return value(Rays::create_curve(params.ppoints(), params.size(), loop, nseg));
|
349
350
|
}
|
350
351
|
RUCY_END
|
351
352
|
|
352
353
|
static
|
353
|
-
|
354
|
+
RUCY_DEF3(create_bezier, points, loop, nsegment)
|
354
355
|
{
|
355
356
|
CreateParams params(points, nil(), nil());
|
356
|
-
|
357
|
+
uint nseg = nsegment ? 0 : to<uint>(nsegment);
|
358
|
+
return value(Rays::create_bezier(params.ppoints(), params.size(), loop, nseg));
|
357
359
|
}
|
358
360
|
RUCY_END
|
359
361
|
|
data/include/rays/color.h
CHANGED
@@ -72,7 +72,9 @@ namespace Rays
|
|
72
72
|
|
73
73
|
Color rgb8 (int red, int green, int blue, int alpha = 255);
|
74
74
|
|
75
|
-
Color
|
75
|
+
Color hsv (float hue, float saturation, float value, float alpha = 1);
|
76
|
+
|
77
|
+
void get_hsv (float* hue, float* saturation, float* value, const Color& color);
|
76
78
|
|
77
79
|
|
78
80
|
}// Rays
|