rays 0.1.47 → 0.1.49

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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/.doc/ext/rays/bitmap.cpp +287 -46
  3. data/.doc/ext/rays/camera.cpp +2 -2
  4. data/.doc/ext/rays/color.cpp +11 -0
  5. data/.doc/ext/rays/defs.cpp +32 -8
  6. data/.doc/ext/rays/font.cpp +50 -2
  7. data/.doc/ext/rays/image.cpp +3 -3
  8. data/.doc/ext/rays/matrix.cpp +65 -7
  9. data/.doc/ext/rays/native.cpp +2 -4
  10. data/.doc/ext/rays/painter.cpp +117 -9
  11. data/.doc/ext/rays/point.cpp +1 -11
  12. data/.doc/ext/rays/polygon.cpp +133 -97
  13. data/.doc/ext/rays/polyline.cpp +89 -10
  14. data/.doc/ext/rays/rays.cpp +80 -0
  15. data/.doc/ext/rays/{noise.cpp → util.cpp} +2 -2
  16. data/ChangeLog.md +46 -0
  17. data/VERSION +1 -1
  18. data/ext/rays/bitmap.cpp +288 -46
  19. data/ext/rays/camera.cpp +2 -2
  20. data/ext/rays/color.cpp +13 -1
  21. data/ext/rays/defs.cpp +32 -8
  22. data/ext/rays/defs.h +56 -3
  23. data/ext/rays/font.cpp +56 -4
  24. data/ext/rays/image.cpp +3 -3
  25. data/ext/rays/matrix.cpp +69 -7
  26. data/ext/rays/native.cpp +2 -4
  27. data/ext/rays/painter.cpp +132 -13
  28. data/ext/rays/point.cpp +1 -12
  29. data/ext/rays/polygon.cpp +136 -99
  30. data/ext/rays/polyline.cpp +95 -9
  31. data/ext/rays/rays.cpp +80 -0
  32. data/ext/rays/{noise.cpp → util.cpp} +2 -2
  33. data/include/rays/color.h +3 -1
  34. data/include/rays/defs.h +24 -26
  35. data/include/rays/font.h +17 -3
  36. data/include/rays/image.h +1 -1
  37. data/include/rays/matrix.h +24 -0
  38. data/include/rays/painter.h +24 -0
  39. data/include/rays/polygon.h +68 -43
  40. data/include/rays/polyline.h +17 -2
  41. data/include/rays/ruby/polygon.h +0 -11
  42. data/include/rays/ruby/rays.h +4 -0
  43. data/include/rays/{noise.h → util.h} +2 -2
  44. data/lib/rays/color.rb +7 -1
  45. data/lib/rays/font.rb +1 -1
  46. data/lib/rays/image.rb +11 -1
  47. data/lib/rays/matrix.rb +16 -0
  48. data/lib/rays/painter.rb +18 -7
  49. data/lib/rays/point.rb +5 -1
  50. data/lib/rays/polygon.rb +44 -35
  51. data/lib/rays/polyline.rb +54 -8
  52. data/lib/rays.rb +0 -1
  53. data/rays.gemspec +2 -2
  54. data/src/color.cpp +11 -2
  55. data/src/font.cpp +37 -18
  56. data/src/font.h +6 -5
  57. data/src/image.cpp +58 -14
  58. data/src/ios/font.mm +89 -32
  59. data/src/ios/helper.h +2 -2
  60. data/src/ios/helper.mm +2 -2
  61. data/src/matrix.cpp +45 -0
  62. data/src/osx/font.mm +93 -33
  63. data/src/osx/helper.h +2 -2
  64. data/src/osx/helper.mm +2 -2
  65. data/src/painter.cpp +246 -114
  66. data/src/painter.h +11 -3
  67. data/src/polygon.cpp +431 -332
  68. data/src/polyline.cpp +138 -27
  69. data/src/polyline.h +3 -5
  70. data/src/shader.cpp +36 -4
  71. data/src/shader.h +1 -1
  72. data/src/texture.cpp +23 -4
  73. data/src/texture.h +2 -0
  74. data/src/{noise.cpp → util.cpp} +1 -1
  75. data/src/win32/font.cpp +1 -1
  76. data/test/test_bitmap.rb +12 -5
  77. data/test/test_color.rb +25 -4
  78. data/test/test_font.rb +23 -2
  79. data/test/test_image.rb +44 -18
  80. data/test/test_matrix.rb +22 -0
  81. data/test/test_painter.rb +27 -0
  82. data/test/test_point.rb +1 -1
  83. data/test/test_polygon.rb +52 -45
  84. data/test/test_polyline.rb +191 -72
  85. metadata +12 -18
  86. data/.doc/ext/rays/polygon_line.cpp +0 -97
  87. data/ext/rays/polygon_line.cpp +0 -100
  88. data/lib/rays/polygon_line.rb +0 -33
  89. data/test/test_polygon_line.rb +0 -164
data/ext/rays/font.cpp CHANGED
@@ -30,6 +30,16 @@ RUCY_DEFN(initialize)
30
30
  }
31
31
  RUCY_END
32
32
 
33
+ static
34
+ RUCY_DEF1(initialize_copy, obj)
35
+ {
36
+ RUCY_CHECK_OBJ(Rays::Font, self);
37
+
38
+ *THIS = to<Rays::Font&>(obj).dup();
39
+ return self;
40
+ }
41
+ RUCY_END
42
+
33
43
  static
34
44
  RUCY_DEF0(name)
35
45
  {
@@ -38,6 +48,15 @@ RUCY_DEF0(name)
38
48
  }
39
49
  RUCY_END
40
50
 
51
+ static
52
+ RUCY_DEF1(set_size, size)
53
+ {
54
+ CHECK;
55
+ THIS->set_size(to<coord>(size));
56
+ return size;
57
+ }
58
+ RUCY_END
59
+
41
60
  static
42
61
  RUCY_DEF0(size)
43
62
  {
@@ -92,6 +111,35 @@ RUCY_DEF0(leading)
92
111
  }
93
112
  RUCY_END
94
113
 
114
+ static
115
+ RUCY_DEF0(families)
116
+ {
117
+ Hash hash;
118
+ for (const auto& family : Rays::get_font_families())
119
+ {
120
+ std::vector<Value> members;
121
+ for (const auto& member : family.second)
122
+ members.emplace_back(member.c_str());
123
+ hash.set(family.first.c_str(), value(members.size(), &members[0]));
124
+ }
125
+ return hash;
126
+ }
127
+ RUCY_END
128
+
129
+ static
130
+ RUCY_DEFN(load)
131
+ {
132
+ check_arg_count(__FILE__, __LINE__, "Font.load", argc, 1, 2);
133
+
134
+ const char* path = argv[0].c_str();
135
+
136
+ if (argc >= 2)
137
+ return value(Rays::load_font(path, to<Rays::coord>(argv[1])));
138
+ else
139
+ return value(Rays::load_font(path));
140
+ }
141
+ RUCY_END
142
+
95
143
 
96
144
  static Class cFont;
97
145
 
@@ -102,14 +150,18 @@ Init_rays_font ()
102
150
 
103
151
  cFont = mRays.define_class("Font");
104
152
  cFont.define_alloc_func(alloc);
105
- cFont.define_private_method("initialize", initialize);
153
+ cFont.define_private_method("initialize", initialize);
154
+ cFont.define_private_method("initialize_copy", initialize_copy);
106
155
  cFont.define_method("name", name);
107
- cFont.define_method("size", size);
156
+ cFont.define_method("size=", set_size);
157
+ cFont.define_method("size", size);
108
158
  cFont.define_method("width", width);
109
159
  cFont.define_method("height", height);
110
160
  cFont.define_method("ascent", ascent);
111
161
  cFont.define_method("descent", descent);
112
162
  cFont.define_method("leading", leading);
163
+ cFont.define_module_function("families", families);
164
+ cFont.define_module_function("load", load);
113
165
  }
114
166
 
115
167
 
@@ -131,9 +183,9 @@ namespace Rucy
131
183
  if (convert)
132
184
  {
133
185
  if (argc == 0)
134
- return Rays::default_font();
186
+ return Rays::get_default_font();
135
187
 
136
- coord size = argc >= 2 ? to<coord>(argv[1]) : 0;
188
+ coord size = argc >= 2 ? to<coord>(argv[1]) : Rays::Font::DEFAULT_SIZE;
137
189
  if (argv->is_nil())
138
190
  return Rays::Font(NULL, size);
139
191
  else if (argv->is_s() || argv->is_sym())
data/ext/rays/image.cpp CHANGED
@@ -113,10 +113,10 @@ RUCY_DEF0(painter)
113
113
  RUCY_END
114
114
 
115
115
  static
116
- RUCY_DEF0(bitmap)
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.define_method("bitmap", bitmap);
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->y0, THIS->z0, THIS->w0,
119
- THIS->x1, THIS->y1, THIS->z1, THIS->w1,
120
- THIS->x2, THIS->y2, THIS->z2, THIS->w2,
121
- THIS->x3, THIS->y3, THIS->z3, THIS->w3);
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("translate", translate);
223
- cMatrix.define_method("scale", scale);
224
- cMatrix.define_method("rotate", rotate);
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/native.cpp CHANGED
@@ -12,7 +12,6 @@ void Init_rays_matrix ();
12
12
 
13
13
  void Init_rays_painter ();
14
14
  void Init_rays_polyline ();
15
- void Init_rays_polygon_line ();
16
15
  void Init_rays_polygon ();
17
16
  void Init_rays_bitmap ();
18
17
  void Init_rays_image ();
@@ -20,7 +19,7 @@ void Init_rays_font ();
20
19
  void Init_rays_shader ();
21
20
  void Init_rays_camera ();
22
21
 
23
- void Init_rays_noise ();
22
+ void Init_rays_util ();
24
23
 
25
24
 
26
25
  extern "C" void
@@ -45,7 +44,6 @@ extern "C" void
45
44
 
46
45
  Init_rays_painter();
47
46
  Init_rays_polyline();
48
- Init_rays_polygon_line();
49
47
  Init_rays_polygon();
50
48
  Init_rays_bitmap();
51
49
  Init_rays_image();
@@ -53,7 +51,7 @@ extern "C" void
53
51
  Init_rays_shader();
54
52
  Init_rays_camera();
55
53
 
56
- Init_rays_noise();
54
+ Init_rays_util();
57
55
 
58
56
  RUCY_CATCH
59
57
  }
data/ext/rays/painter.cpp CHANGED
@@ -156,13 +156,26 @@ 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
  {
162
175
  CHECK;
163
176
 
164
177
  std::vector<Rays::Point> points;
165
- get_line_args(&points, args.size(), args.as_array());
178
+ get_points(&points, args.size(), args.as_array());
166
179
 
167
180
  THIS->line(&points[0], points.size(), loop);
168
181
  return self;
@@ -224,7 +237,7 @@ RUCY_DEF2(curve, args, loop)
224
237
  argument_error(__FILE__, __LINE__);
225
238
 
226
239
  std::vector<Rays::Point> points;
227
- get_line_args(&points, args.size(), args.as_array());
240
+ get_points(&points, args.size(), args.as_array());
228
241
 
229
242
  THIS->curve(&points[0], points.size(), loop);
230
243
  return self;
@@ -240,7 +253,7 @@ RUCY_DEF2(bezier, args, loop)
240
253
  argument_error(__FILE__, __LINE__);
241
254
 
242
255
  std::vector<Rays::Point> points;
243
- get_line_args(&points, args.size(), args.as_array());
256
+ get_points(&points, args.size(), args.as_array());
244
257
 
245
258
  THIS->bezier(&points[0], points.size(), loop);
246
259
  return self;
@@ -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
  {
@@ -558,6 +596,76 @@ RUCY_DEF0(get_font)
558
596
  }
559
597
  RUCY_END
560
598
 
599
+ static
600
+ RUCY_DEF1(set_texture, image)
601
+ {
602
+ CHECK;
603
+
604
+ if (!image)
605
+ THIS->no_texture();
606
+ else
607
+ THIS->set_texture(to<Rays::Image&>(image));
608
+ return self;
609
+ }
610
+ RUCY_END
611
+
612
+ static
613
+ RUCY_DEF0(get_texture)
614
+ {
615
+ CHECK;
616
+
617
+ const Rays::Image& image = THIS->texture();
618
+ return image ? value(image) : nil();
619
+ }
620
+ RUCY_END
621
+
622
+ static
623
+ RUCY_DEF0(no_texture)
624
+ {
625
+ CHECK;
626
+ THIS->no_texture();
627
+ return self;
628
+ }
629
+ RUCY_END
630
+
631
+ static
632
+ RUCY_DEF1(set_texcoord_mode, mode)
633
+ {
634
+ CHECK;
635
+
636
+ THIS->set_texcoord_mode(to<Rays::TexCoordMode>(mode));
637
+ return self;
638
+ }
639
+ RUCY_END
640
+
641
+ static
642
+ RUCY_DEF0(get_texcoord_mode)
643
+ {
644
+ CHECK;
645
+
646
+ return value(THIS->texcoord_mode());
647
+ }
648
+ RUCY_END
649
+
650
+ static
651
+ RUCY_DEF1(set_texcoord_wrap, wrap)
652
+ {
653
+ CHECK;
654
+
655
+ THIS->set_texcoord_wrap(to<Rays::TexCoordWrap>(wrap));
656
+ return self;
657
+ }
658
+ RUCY_END
659
+
660
+ static
661
+ RUCY_DEF0(get_texcoord_wrap)
662
+ {
663
+ CHECK;
664
+
665
+ return value(THIS->texcoord_wrap());
666
+ }
667
+ RUCY_END
668
+
561
669
  static
562
670
  RUCY_DEFN(set_shader)
563
671
  {
@@ -713,16 +821,17 @@ Init_rays_painter ()
713
821
  cPainter.define_private_method("begin_paint", begin_paint);
714
822
  cPainter.define_private_method( "end_paint", end_paint);
715
823
  cPainter.define_method( "painting?", is_painting);
716
- cPainter.define_method("clear", clear);
717
- cPainter.define_method("polygon", polygon);
718
- cPainter.define_private_method("draw_line", line);
719
- cPainter.define_private_method("draw_polyline", polyline);
720
- cPainter.define_private_method("draw_rect", rect);
721
- cPainter.define_private_method("draw_ellipse", ellipse);
722
- cPainter.define_private_method("draw_curve", curve);
723
- cPainter.define_private_method("draw_bezier", bezier);
724
- cPainter.define_method("image", image);
725
- cPainter.define_method("text", text);
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);
726
835
 
727
836
  cPainter.define_method( "background=", set_background);
728
837
  cPainter.define_method( "background", get_background);
@@ -745,6 +854,9 @@ Init_rays_painter ()
745
854
  cPainter.define_method("miter_limit", get_miter_limit);
746
855
  cPainter.define_method("nsegment=", set_nsegment);
747
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);
748
860
  cPainter.define_method("blend_mode=", set_blend_mode);
749
861
  cPainter.define_method("blend_mode", get_blend_mode);
750
862
  cPainter.define_method( "clip=", set_clip);
@@ -752,6 +864,13 @@ Init_rays_painter ()
752
864
  cPainter.define_method("no_clip", no_clip);
753
865
  cPainter.define_method("font=", set_font);
754
866
  cPainter.define_method("font", get_font);
867
+ cPainter.define_method( "texture=", set_texture);
868
+ cPainter.define_method( "texture", get_texture);
869
+ cPainter.define_method("no_texture", no_texture);
870
+ cPainter.define_method("texcoord_mode=", set_texcoord_mode);
871
+ cPainter.define_method("texcoord_mode", get_texcoord_mode);
872
+ cPainter.define_method("texcoord_wrap=", set_texcoord_wrap);
873
+ cPainter.define_method("texcoord_wrap", get_texcoord_wrap);
755
874
  cPainter.define_private_method("set_shader", set_shader);
756
875
  cPainter.define_method( "shader", get_shader);
757
876
  cPainter.define_method( "no_shader", no_shader);
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);