rays 0.1.14 → 0.1.15
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.
- checksums.yaml +4 -4
- data/.doc/ext/rays/color_space.cpp +22 -14
- data/.doc/ext/rays/painter.cpp +93 -0
- data/.doc/ext/rays/polygon.cpp +30 -4
- data/.doc/ext/rays/polyline.cpp +9 -3
- data/.doc/ext/rays/rays.cpp +105 -1
- data/Rakefile +3 -0
- data/VERSION +1 -1
- data/ext/rays/color_space.cpp +22 -14
- data/ext/rays/painter.cpp +104 -3
- data/ext/rays/polygon.cpp +31 -3
- data/ext/rays/polyline.cpp +8 -2
- data/ext/rays/rays.cpp +105 -1
- data/include/rays/color_space.h +4 -2
- data/include/rays/defs.h +33 -0
- data/include/rays/image.h +1 -1
- data/include/rays/painter.h +38 -0
- data/include/rays/polygon.h +35 -1
- data/include/rays/polyline.h +7 -1
- data/include/rays/ruby/rays.h +8 -0
- data/lib/rays/image.rb +1 -1
- data/lib/rays/painter.rb +23 -1
- data/lib/rays/polygon.rb +8 -0
- data/src/color_space.cpp +2 -2
- data/src/ios/bitmap.mm +4 -4
- data/src/ios/font.mm +2 -2
- data/src/osx/bitmap.mm +4 -4
- data/src/osx/font.mm +2 -2
- data/src/painter.cpp +100 -10
- data/src/polygon.cpp +199 -37
- data/src/polyline.cpp +4 -2
- data/src/polyline.h +3 -1
- data/test/test_painter_shape.rb +48 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c784fe46265f04062957d138081db6de0d9e257600be215741d120563534420c
|
4
|
+
data.tar.gz: d58b4c10a2e9f0591a6465aea2b36f01de4f0720187acd2fbf98608162bb77d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a4771e03c225cd3f84c0d723ee3072d3a1403eec5028e38c1cc00ddda5e27dbd6ed4db14bee3fa9c8f412e49928cf4b9fd13f5cc5ae79b80149438dd3f9c96c
|
7
|
+
data.tar.gz: 17567e4b335014d772f80f35c1a44859893605c65912469f00aac2ecc6f6a9a1c024d1303b42a24e78dd59b8797cc41f2af1b47627755250e74f5eac12dbc031
|
@@ -181,6 +181,9 @@ Init_color_space ()
|
|
181
181
|
{
|
182
182
|
Module mRays = rb_define_module("Rays");
|
183
183
|
|
184
|
+
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
185
|
+
mRays.define_const(COLOR_SPACES[i].name, COLOR_SPACES[i].type);
|
186
|
+
|
184
187
|
cColorSpace = rb_define_class_under(mRays, "ColorSpace", rb_cObject);
|
185
188
|
rb_define_alloc_func(cColorSpace, alloc);
|
186
189
|
rb_define_private_method(cColorSpace, "initialize", RUBY_METHOD_FUNC(initialize), -1);
|
@@ -195,9 +198,6 @@ Init_color_space ()
|
|
195
198
|
cColorSpace.define_method("has_skip?", has_skip);
|
196
199
|
cColorSpace.define_method("premult?", is_premult);
|
197
200
|
rb_define_method(cColorSpace, "to_s", RUBY_METHOD_FUNC(to_s), 0);
|
198
|
-
|
199
|
-
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
200
|
-
cColorSpace.define_const(COLOR_SPACES[i].name, COLOR_SPACES[i].type);
|
201
201
|
}
|
202
202
|
|
203
203
|
|
@@ -218,16 +218,7 @@ namespace Rucy
|
|
218
218
|
|
219
219
|
if (convert)
|
220
220
|
{
|
221
|
-
if (argv->is_s() || argv->is_sym())
|
222
|
-
{
|
223
|
-
const char* str = argv[0].c_str();
|
224
|
-
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
225
|
-
{
|
226
|
-
if (strcasecmp(str, COLOR_SPACES[i].name) == 0)
|
227
|
-
return Rays::ColorSpace(COLOR_SPACES[i].type);
|
228
|
-
}
|
229
|
-
}
|
230
|
-
else if (argv->is_i())
|
221
|
+
if (argv->is_i() || argv->is_s() || argv->is_sym())
|
231
222
|
{
|
232
223
|
return Rays::ColorSpace(
|
233
224
|
to<Rays::ColorSpaceType>(argv[0]),
|
@@ -245,7 +236,24 @@ namespace Rucy
|
|
245
236
|
template <> Rays::ColorSpaceType
|
246
237
|
value_to<Rays::ColorSpaceType> (Value value, bool convert)
|
247
238
|
{
|
248
|
-
|
239
|
+
if (convert)
|
240
|
+
{
|
241
|
+
if (value.is_s() || value.is_sym())
|
242
|
+
{
|
243
|
+
const char* str = value.c_str();
|
244
|
+
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
245
|
+
{
|
246
|
+
if (strcasecmp(str, COLOR_SPACES[i].name) == 0)
|
247
|
+
return COLOR_SPACES[i].type;
|
248
|
+
}
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
252
|
+
uint type = value_to<uint>(value, convert);
|
253
|
+
if (type >= Rays::COLORSPACE_MAX)
|
254
|
+
argument_error(__FILE__, __LINE__, "invalid color space type -- %d", type);
|
255
|
+
|
256
|
+
return (Rays::ColorSpaceType) type;
|
249
257
|
}
|
250
258
|
|
251
259
|
|
data/.doc/ext/rays/painter.cpp
CHANGED
@@ -141,6 +141,36 @@ VALUE ellipse(VALUE self, VALUE args, VALUE center, VALUE radius, VALUE hole, VA
|
|
141
141
|
return self;
|
142
142
|
}
|
143
143
|
|
144
|
+
static
|
145
|
+
VALUE curve(VALUE self, VALUE args, VALUE loop)
|
146
|
+
{
|
147
|
+
CHECK;
|
148
|
+
|
149
|
+
if (args.empty())
|
150
|
+
argument_error(__FILE__, __LINE__);
|
151
|
+
|
152
|
+
std::vector<Rays::Point> points;
|
153
|
+
get_line_args(&points, args.size(), args.as_array());
|
154
|
+
|
155
|
+
THIS->curve(&points[0], points.size(), loop);
|
156
|
+
return self;
|
157
|
+
}
|
158
|
+
|
159
|
+
static
|
160
|
+
VALUE bezier(VALUE self, VALUE args, VALUE loop)
|
161
|
+
{
|
162
|
+
CHECK;
|
163
|
+
|
164
|
+
if (args.empty())
|
165
|
+
argument_error(__FILE__, __LINE__);
|
166
|
+
|
167
|
+
std::vector<Rays::Point> points;
|
168
|
+
get_line_args(&points, args.size(), args.as_array());
|
169
|
+
|
170
|
+
THIS->bezier(&points[0], points.size(), loop);
|
171
|
+
return self;
|
172
|
+
}
|
173
|
+
|
144
174
|
static
|
145
175
|
VALUE image(VALUE self)
|
146
176
|
{
|
@@ -292,6 +322,61 @@ VALUE get_stroke_width(VALUE self)
|
|
292
322
|
return value(THIS->stroke_width());
|
293
323
|
}
|
294
324
|
|
325
|
+
static
|
326
|
+
VALUE set_stroke_cap(VALUE self, VALUE cap)
|
327
|
+
{
|
328
|
+
CHECK;
|
329
|
+
|
330
|
+
int type = to<int>(cap);
|
331
|
+
if (type < 0 || Rays::CAP_MAX <= type)
|
332
|
+
argument_error(__FILE__, __LINE__, "invalid stroke cap -- %d", type);
|
333
|
+
|
334
|
+
THIS->set_stroke_cap((Rays::CapType) type);
|
335
|
+
return self;
|
336
|
+
}
|
337
|
+
|
338
|
+
static
|
339
|
+
VALUE get_stroke_cap(VALUE self)
|
340
|
+
{
|
341
|
+
CHECK;
|
342
|
+
return value(THIS->stroke_cap());
|
343
|
+
}
|
344
|
+
|
345
|
+
static
|
346
|
+
VALUE set_stroke_join(VALUE self, VALUE join)
|
347
|
+
{
|
348
|
+
CHECK;
|
349
|
+
|
350
|
+
int type = to<int>(join);
|
351
|
+
if (type < 0 || Rays::JOIN_MAX <= type)
|
352
|
+
argument_error(__FILE__, __LINE__, "invalid stroke join -- %d", type);
|
353
|
+
|
354
|
+
THIS->set_stroke_join((Rays::JoinType) type);
|
355
|
+
return self;
|
356
|
+
}
|
357
|
+
|
358
|
+
static
|
359
|
+
VALUE get_stroke_join(VALUE self)
|
360
|
+
{
|
361
|
+
CHECK;
|
362
|
+
return value(THIS->stroke_join());
|
363
|
+
}
|
364
|
+
|
365
|
+
static
|
366
|
+
VALUE set_miter_limit(VALUE self, VALUE limit)
|
367
|
+
{
|
368
|
+
CHECK;
|
369
|
+
THIS->set_miter_limit(to<coord>(limit));
|
370
|
+
return self;
|
371
|
+
}
|
372
|
+
|
373
|
+
static
|
374
|
+
VALUE get_miter_limit(VALUE self)
|
375
|
+
{
|
376
|
+
CHECK;
|
377
|
+
return value(THIS->miter_limit());
|
378
|
+
}
|
379
|
+
|
295
380
|
static
|
296
381
|
VALUE set_nsegment(VALUE self, VALUE nsegment)
|
297
382
|
{
|
@@ -490,6 +575,8 @@ Init_painter ()
|
|
490
575
|
rb_define_private_method(cPainter, "draw_polyline", RUBY_METHOD_FUNC(polyline), 1);
|
491
576
|
rb_define_private_method(cPainter, "draw_rect", RUBY_METHOD_FUNC(rect), 6);
|
492
577
|
rb_define_private_method(cPainter, "draw_ellipse", RUBY_METHOD_FUNC(ellipse), 6);
|
578
|
+
rb_define_private_method(cPainter, "draw_curve", RUBY_METHOD_FUNC(curve), 2);
|
579
|
+
rb_define_private_method(cPainter, "draw_bezier", RUBY_METHOD_FUNC(bezier), 2);
|
493
580
|
rb_define_method(cPainter, "image", RUBY_METHOD_FUNC(image), -1);
|
494
581
|
rb_define_method(cPainter, "text", RUBY_METHOD_FUNC(text), -1);
|
495
582
|
|
@@ -504,6 +591,12 @@ Init_painter ()
|
|
504
591
|
rb_define_method(cPainter, "no_stroke", RUBY_METHOD_FUNC(no_stroke), 0);
|
505
592
|
rb_define_method(cPainter, "stroke_width=", RUBY_METHOD_FUNC(set_stroke_width), 1);
|
506
593
|
rb_define_method(cPainter, "stroke_width", RUBY_METHOD_FUNC(get_stroke_width), 0);
|
594
|
+
rb_define_method(cPainter, "stroke_cap=", RUBY_METHOD_FUNC(set_stroke_cap), 1);
|
595
|
+
rb_define_method(cPainter, "stroke_cap", RUBY_METHOD_FUNC(get_stroke_cap), 0);
|
596
|
+
rb_define_method(cPainter, "stroke_join=", RUBY_METHOD_FUNC(set_stroke_join), 1);
|
597
|
+
rb_define_method(cPainter, "stroke_join", RUBY_METHOD_FUNC(get_stroke_join), 0);
|
598
|
+
rb_define_method(cPainter, "miter_limit=", RUBY_METHOD_FUNC(set_miter_limit), 1);
|
599
|
+
rb_define_method(cPainter, "miter_limit", RUBY_METHOD_FUNC(get_miter_limit), 0);
|
507
600
|
rb_define_method(cPainter, "nsegment=", RUBY_METHOD_FUNC(set_nsegment), 1);
|
508
601
|
rb_define_method(cPainter, "nsegment", RUBY_METHOD_FUNC(get_nsegment), 0);
|
509
602
|
rb_define_method(cPainter, "clip=", RUBY_METHOD_FUNC(set_clip), -1);
|
data/.doc/ext/rays/polygon.cpp
CHANGED
@@ -26,7 +26,7 @@ VALUE setup(VALUE self, VALUE args, VALUE loop)
|
|
26
26
|
{
|
27
27
|
CHECK;
|
28
28
|
|
29
|
-
if (
|
29
|
+
if (args[0].is_kind_of(Rays::polyline_class()))
|
30
30
|
*THIS = to<Rays::Polygon>(args.size(), args.as_array());
|
31
31
|
else
|
32
32
|
{
|
@@ -37,12 +37,18 @@ VALUE setup(VALUE self, VALUE args, VALUE loop)
|
|
37
37
|
}
|
38
38
|
|
39
39
|
static
|
40
|
-
VALUE expand(VALUE self
|
40
|
+
VALUE expand(VALUE self)
|
41
41
|
{
|
42
42
|
CHECK;
|
43
|
+
check_arg_count(__FILE__, __LINE__, "Polygon#expand", argc, 1, 2, 3, 4);
|
44
|
+
|
45
|
+
coord width = to<coord> (argv[0]);
|
46
|
+
Rays::CapType cap = argc >= 2 ? to<Rays::CapType> (argv[1]) : Rays::CAP_DEFAULT;
|
47
|
+
Rays::JoinType join = argc >= 3 ? to<Rays::JoinType>(argv[2]) : Rays::JOIN_DEFAULT;
|
48
|
+
coord ml = argc >= 4 ? to<coord> (argv[3]) : Rays::JOIN_DEFAULT_MITER_LIMIT;
|
43
49
|
|
44
50
|
Rays::Polygon polygon;
|
45
|
-
THIS->expand(&polygon,
|
51
|
+
THIS->expand(&polygon, width, cap, join, ml);
|
46
52
|
return value(polygon);
|
47
53
|
}
|
48
54
|
|
@@ -205,6 +211,24 @@ VALUE create_ellipse(VALUE self, VALUE
|
|
205
211
|
return value(Rays::create_ellipse(x, y, w, h, hole_size, from, to_, nseg));
|
206
212
|
}
|
207
213
|
|
214
|
+
static
|
215
|
+
VALUE create_curve(VALUE self, VALUE args, VALUE loop)
|
216
|
+
{
|
217
|
+
std::vector<Rays::Point> points;
|
218
|
+
get_line_args(&points, args.size(), args.as_array());
|
219
|
+
|
220
|
+
return value(Rays::create_curve(&points[0], points.size(), loop));
|
221
|
+
}
|
222
|
+
|
223
|
+
static
|
224
|
+
VALUE create_bezier(VALUE self, VALUE args, VALUE loop)
|
225
|
+
{
|
226
|
+
std::vector<Rays::Point> points;
|
227
|
+
get_line_args(&points, args.size(), args.as_array());
|
228
|
+
|
229
|
+
return value(Rays::create_bezier(&points[0], points.size(), loop));
|
230
|
+
}
|
231
|
+
|
208
232
|
|
209
233
|
static Class cPolygon;
|
210
234
|
|
@@ -216,7 +240,7 @@ Init_polygon ()
|
|
216
240
|
cPolygon = rb_define_class_under(mRays, "Polygon", rb_cObject);
|
217
241
|
rb_define_alloc_func(cPolygon, alloc);
|
218
242
|
rb_define_private_method(cPolygon, "setup", RUBY_METHOD_FUNC(setup), 2);
|
219
|
-
rb_define_method(cPolygon, "expand", RUBY_METHOD_FUNC(expand), 1);
|
243
|
+
rb_define_method(cPolygon, "expand", RUBY_METHOD_FUNC(expand), -1);
|
220
244
|
rb_define_method(cPolygon, "bounds", RUBY_METHOD_FUNC(bounds), 0);
|
221
245
|
rb_define_method(cPolygon, "size", RUBY_METHOD_FUNC(size), 0);
|
222
246
|
cPolygon.define_method("empty?", empty);
|
@@ -229,6 +253,8 @@ Init_polygon ()
|
|
229
253
|
cPolygon.define_method("^", op_xor);
|
230
254
|
rb_define_singleton_method(cPolygon, "create_rect", RUBY_METHOD_FUNC(create_rect), 7);
|
231
255
|
rb_define_singleton_method(cPolygon, "create_ellipse", RUBY_METHOD_FUNC(create_ellipse), 7);
|
256
|
+
rb_define_singleton_method(cPolygon, "create_curve", RUBY_METHOD_FUNC(create_curve), 2);
|
257
|
+
rb_define_singleton_method(cPolygon, "create_bezier", RUBY_METHOD_FUNC(create_bezier), 2);
|
232
258
|
}
|
233
259
|
|
234
260
|
|
data/.doc/ext/rays/polyline.cpp
CHANGED
@@ -32,12 +32,18 @@ VALUE setup(VALUE self, VALUE points, VALUE loop)
|
|
32
32
|
}
|
33
33
|
|
34
34
|
static
|
35
|
-
VALUE expand(VALUE self
|
35
|
+
VALUE expand(VALUE self)
|
36
36
|
{
|
37
37
|
CHECK;
|
38
|
+
check_arg_count(__FILE__, __LINE__, "Polyline#expand", argc, 1, 2, 3, 4);
|
39
|
+
|
40
|
+
coord width = to<coord> (argv[0]);
|
41
|
+
Rays::CapType cap = argc >= 2 ? to<Rays::CapType> (argv[1]) : Rays::CAP_DEFAULT;
|
42
|
+
Rays::JoinType join = argc >= 3 ? to<Rays::JoinType>(argv[2]) : Rays::JOIN_DEFAULT;
|
43
|
+
coord ml = argc >= 4 ? to<coord> (argv[3]) : Rays::JOIN_DEFAULT_MITER_LIMIT;
|
38
44
|
|
39
45
|
Rays::Polygon polygon;
|
40
|
-
THIS->expand(&polygon,
|
46
|
+
THIS->expand(&polygon, width, cap, join, ml);
|
41
47
|
return value(polygon);
|
42
48
|
}
|
43
49
|
|
@@ -106,7 +112,7 @@ Init_polyline ()
|
|
106
112
|
cPolyline = rb_define_class_under(mRays, "Polyline", rb_cObject);
|
107
113
|
rb_define_alloc_func(cPolyline, alloc);
|
108
114
|
rb_define_private_method(cPolyline, "setup", RUBY_METHOD_FUNC(setup), 2);
|
109
|
-
rb_define_method(cPolyline, "expand", RUBY_METHOD_FUNC(expand), 1);
|
115
|
+
rb_define_method(cPolyline, "expand", RUBY_METHOD_FUNC(expand), -1);
|
110
116
|
rb_define_method(cPolyline, "bounds", RUBY_METHOD_FUNC(bounds), 0);
|
111
117
|
cPolyline.define_method("loop?", loop);
|
112
118
|
rb_define_method(cPolyline, "size", RUBY_METHOD_FUNC(size), 0);
|
data/.doc/ext/rays/rays.cpp
CHANGED
@@ -1,7 +1,45 @@
|
|
1
|
-
#include "rays/rays.h"
|
1
|
+
#include "rays/ruby/rays.h"
|
2
|
+
|
3
|
+
|
2
4
|
#include "defs.h"
|
3
5
|
|
4
6
|
|
7
|
+
RUCY_DEFINE_VALUE_OR_ARRAY_TO(Rays::CapType)
|
8
|
+
RUCY_DEFINE_VALUE_OR_ARRAY_TO(Rays::JoinType)
|
9
|
+
|
10
|
+
|
11
|
+
static struct CapTypeEnum
|
12
|
+
{
|
13
|
+
const char* name;
|
14
|
+
Rays::CapType type;
|
15
|
+
}
|
16
|
+
CAP_TYPES[] =
|
17
|
+
{
|
18
|
+
{"CAP_BUTT", Rays::CAP_BUTT},
|
19
|
+
{"CAP_ROUND", Rays::CAP_ROUND},
|
20
|
+
{"CAP_SQUARE", Rays::CAP_SQUARE},
|
21
|
+
};
|
22
|
+
|
23
|
+
static const size_t CAP_TYPES_SIZE =
|
24
|
+
sizeof(CAP_TYPES) / sizeof(CAP_TYPES[0]);
|
25
|
+
|
26
|
+
|
27
|
+
static struct JoinTypeEnum
|
28
|
+
{
|
29
|
+
const char* name;
|
30
|
+
Rays::JoinType type;
|
31
|
+
}
|
32
|
+
JOIN_TYPES[] =
|
33
|
+
{
|
34
|
+
{"JOIN_MITER", Rays::JOIN_MITER},
|
35
|
+
{"JOIN_ROUND", Rays::JOIN_ROUND},
|
36
|
+
{"JOIN_SQUARE", Rays::JOIN_SQUARE},
|
37
|
+
};
|
38
|
+
|
39
|
+
static const size_t JOIN_TYPES_SIZE =
|
40
|
+
sizeof(JOIN_TYPES) / sizeof(JOIN_TYPES[0]);
|
41
|
+
|
42
|
+
|
5
43
|
static
|
6
44
|
VALUE init(VALUE self)
|
7
45
|
{
|
@@ -23,11 +61,77 @@ void
|
|
23
61
|
Init_rays ()
|
24
62
|
{
|
25
63
|
mRays = rb_define_module("Rays");
|
64
|
+
|
26
65
|
mRays.define_singleton_method("init!", init);
|
27
66
|
mRays.define_singleton_method("fin!", fin);
|
67
|
+
|
68
|
+
for (size_t i = 0; i < CAP_TYPES_SIZE; ++i)
|
69
|
+
mRays.define_const(CAP_TYPES[i].name, CAP_TYPES[i].type);
|
70
|
+
|
71
|
+
for (size_t i = 0; i < JOIN_TYPES_SIZE; ++i)
|
72
|
+
mRays.define_const(JOIN_TYPES[i].name, JOIN_TYPES[i].type);
|
28
73
|
}
|
29
74
|
|
30
75
|
|
76
|
+
namespace Rucy
|
77
|
+
{
|
78
|
+
|
79
|
+
|
80
|
+
template <> Rays::CapType
|
81
|
+
value_to<Rays::CapType> (int argc, const Value* argv, bool convert)
|
82
|
+
{
|
83
|
+
assert(argc > 0 && argv);
|
84
|
+
|
85
|
+
if (convert)
|
86
|
+
{
|
87
|
+
if (argv->is_s() || argv->is_sym())
|
88
|
+
{
|
89
|
+
const char* str = argv->c_str();
|
90
|
+
for (size_t i = 0; i < CAP_TYPES_SIZE; ++i)
|
91
|
+
{
|
92
|
+
if (strcasecmp(str, CAP_TYPES[i].name) == 0)
|
93
|
+
return CAP_TYPES[i].type;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
uint type = value_to<uint>(*argv, convert);
|
99
|
+
if (type >= Rays::CAP_MAX)
|
100
|
+
argument_error(__FILE__, __LINE__, "invalid cap type -- %d", type);
|
101
|
+
|
102
|
+
return (Rays::CapType) type;
|
103
|
+
}
|
104
|
+
|
105
|
+
|
106
|
+
template <> Rays::JoinType
|
107
|
+
value_to<Rays::JoinType> (int argc, const Value* argv, bool convert)
|
108
|
+
{
|
109
|
+
assert(argc > 0 && argv);
|
110
|
+
|
111
|
+
if (convert)
|
112
|
+
{
|
113
|
+
if (argv->is_s() || argv->is_sym())
|
114
|
+
{
|
115
|
+
const char* str = argv->c_str();
|
116
|
+
for (size_t i = 0; i < JOIN_TYPES_SIZE; ++i)
|
117
|
+
{
|
118
|
+
if (strcasecmp(str, JOIN_TYPES[i].name) == 0)
|
119
|
+
return JOIN_TYPES[i].type;
|
120
|
+
}
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
uint type = value_to<uint>(*argv, convert);
|
125
|
+
if (type >= Rays::JOIN_MAX)
|
126
|
+
argument_error(__FILE__, __LINE__, "invalid join type -- %d", type);
|
127
|
+
|
128
|
+
return (Rays::JoinType) type;
|
129
|
+
}
|
130
|
+
|
131
|
+
|
132
|
+
}// Rucy
|
133
|
+
|
134
|
+
|
31
135
|
namespace Rays
|
32
136
|
{
|
33
137
|
|
data/Rakefile
CHANGED
@@ -29,6 +29,9 @@ use_external_library 'https://github.com/greenm01/poly2tri',
|
|
29
29
|
incdir: 'poly2tri',
|
30
30
|
srcdir: 'poly2tri'
|
31
31
|
|
32
|
+
use_external_library 'https://github.com/andrewwillmott/splines-lib.git',
|
33
|
+
excludes: 'Test\.cpp'
|
34
|
+
|
32
35
|
build_native_library
|
33
36
|
build_ruby_extension
|
34
37
|
test_ruby_extension
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.15
|
data/ext/rays/color_space.cpp
CHANGED
@@ -194,6 +194,9 @@ Init_color_space ()
|
|
194
194
|
{
|
195
195
|
Module mRays = define_module("Rays");
|
196
196
|
|
197
|
+
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
198
|
+
mRays.define_const(COLOR_SPACES[i].name, COLOR_SPACES[i].type);
|
199
|
+
|
197
200
|
cColorSpace = mRays.define_class("ColorSpace");
|
198
201
|
cColorSpace.define_alloc_func(alloc);
|
199
202
|
cColorSpace.define_private_method("initialize", initialize);
|
@@ -208,9 +211,6 @@ Init_color_space ()
|
|
208
211
|
cColorSpace.define_method("has_skip?", has_skip);
|
209
212
|
cColorSpace.define_method("premult?", is_premult);
|
210
213
|
cColorSpace.define_method("to_s", to_s);
|
211
|
-
|
212
|
-
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
213
|
-
cColorSpace.define_const(COLOR_SPACES[i].name, COLOR_SPACES[i].type);
|
214
214
|
}
|
215
215
|
|
216
216
|
|
@@ -231,16 +231,7 @@ namespace Rucy
|
|
231
231
|
|
232
232
|
if (convert)
|
233
233
|
{
|
234
|
-
if (argv->is_s() || argv->is_sym())
|
235
|
-
{
|
236
|
-
const char* str = argv[0].c_str();
|
237
|
-
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
238
|
-
{
|
239
|
-
if (strcasecmp(str, COLOR_SPACES[i].name) == 0)
|
240
|
-
return Rays::ColorSpace(COLOR_SPACES[i].type);
|
241
|
-
}
|
242
|
-
}
|
243
|
-
else if (argv->is_i())
|
234
|
+
if (argv->is_i() || argv->is_s() || argv->is_sym())
|
244
235
|
{
|
245
236
|
return Rays::ColorSpace(
|
246
237
|
to<Rays::ColorSpaceType>(argv[0]),
|
@@ -258,7 +249,24 @@ namespace Rucy
|
|
258
249
|
template <> Rays::ColorSpaceType
|
259
250
|
value_to<Rays::ColorSpaceType> (Value value, bool convert)
|
260
251
|
{
|
261
|
-
|
252
|
+
if (convert)
|
253
|
+
{
|
254
|
+
if (value.is_s() || value.is_sym())
|
255
|
+
{
|
256
|
+
const char* str = value.c_str();
|
257
|
+
for (size_t i = 0; i < COLOR_SPACES_SIZE; ++i)
|
258
|
+
{
|
259
|
+
if (strcasecmp(str, COLOR_SPACES[i].name) == 0)
|
260
|
+
return COLOR_SPACES[i].type;
|
261
|
+
}
|
262
|
+
}
|
263
|
+
}
|
264
|
+
|
265
|
+
uint type = value_to<uint>(value, convert);
|
266
|
+
if (type >= Rays::COLORSPACE_MAX)
|
267
|
+
argument_error(__FILE__, __LINE__, "invalid color space type -- %d", type);
|
268
|
+
|
269
|
+
return (Rays::ColorSpaceType) type;
|
262
270
|
}
|
263
271
|
|
264
272
|
|