rays 0.1.47 → 0.1.49

Sign up to get free protection for your applications and to get access to all the features.
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);