rays 0.1.15 → 0.1.16

Sign up to get free protection for your applications and to get access to all the features.
@@ -211,9 +211,8 @@ Init_color ()
211
211
  cColor.define_method("blue", get_blue);
212
212
  cColor.define_method("alpha=", set_alpha);
213
213
  cColor.define_method("alpha", get_alpha);
214
-
215
- cColor.define_function("hsv", hsv);
216
- cColor.define_function("set_palette_color", set_palette_color);
214
+ cColor.define_module_function("hsv", hsv);
215
+ cColor.define_module_function("set_palette_color", set_palette_color);
217
216
  }
218
217
 
219
218
 
@@ -17,7 +17,7 @@ Xot::ExtConf.new Xot, Rucy, Rays do
17
17
  headers << 'ruby.h'
18
18
  local_libs << 'rucy'
19
19
  libs.unshift 'gdi21', 'opengl32' if win32?
20
- frameworks << 'AppKit' << 'OpenGL' if osx?
20
+ frameworks << 'AppKit' << 'OpenGL' << 'AVFoundation' if osx?
21
21
  $LDFLAGS << ' -Wl,--out-implib=native.dll.a' if cygwin?
22
22
  end
23
23
 
@@ -61,6 +61,36 @@ RUCY_DEF0(height)
61
61
  }
62
62
  RUCY_END
63
63
 
64
+ static
65
+ RUCY_DEF0(ascent)
66
+ {
67
+ CHECK;
68
+ coord ascent = 0;
69
+ THIS->get_height(&ascent);
70
+ return value(ascent);
71
+ }
72
+ RUCY_END
73
+
74
+ static
75
+ RUCY_DEF0(descent)
76
+ {
77
+ CHECK;
78
+ coord descent = 0;
79
+ THIS->get_height(NULL, &descent);
80
+ return value(descent);
81
+ }
82
+ RUCY_END
83
+
84
+ static
85
+ RUCY_DEF0(leading)
86
+ {
87
+ CHECK;
88
+ coord leading = 0;
89
+ THIS->get_height(NULL, NULL, &leading);
90
+ return value(leading);
91
+ }
92
+ RUCY_END
93
+
64
94
 
65
95
  static Class cFont;
66
96
 
@@ -74,8 +104,11 @@ Init_font ()
74
104
  cFont.define_private_method("initialize", initialize);
75
105
  cFont.define_method("name", name);
76
106
  cFont.define_method("size", size);
77
- cFont.define_method("width", width);
78
- cFont.define_method("height", height);
107
+ cFont.define_method("width", width);
108
+ cFont.define_method("height", height);
109
+ cFont.define_method("ascent", ascent);
110
+ cFont.define_method("descent", descent);
111
+ cFont.define_method("leading", leading);
79
112
  }
80
113
 
81
114
 
@@ -142,14 +142,14 @@ Init_image ()
142
142
  cImage.define_alloc_func(alloc);
143
143
  cImage.define_private_method("initialize", initialize);
144
144
  cImage.define_private_method("initialize_copy", initialize_copy);
145
- cImage.define_method("width", width);
145
+ cImage.define_method("width", width);
146
146
  cImage.define_method("height", height);
147
147
  cImage.define_method("color_space", color_space);
148
148
  cImage.define_method("pixel_density", pixel_density);
149
149
  cImage.define_method("painter", painter);
150
150
  cImage.define_method("bitmap", bitmap);
151
151
  cImage.define_method("save", save);
152
- cImage.define_function("load", load);
152
+ cImage.define_module_function("load", load);
153
153
  }
154
154
 
155
155
 
@@ -9,6 +9,7 @@ void Init_color ();
9
9
  void Init_color_space ();
10
10
  void Init_matrix ();
11
11
 
12
+ void Init_painter ();
12
13
  void Init_polyline ();
13
14
  void Init_polygon_line ();
14
15
  void Init_polygon ();
@@ -16,8 +17,7 @@ void Init_bitmap ();
16
17
  void Init_image ();
17
18
  void Init_font ();
18
19
  void Init_shader ();
19
-
20
- void Init_painter ();
20
+ void Init_camera ();
21
21
 
22
22
  void Init_noise ();
23
23
 
@@ -41,6 +41,7 @@ extern "C" void
41
41
  Init_color_space();
42
42
  Init_matrix();
43
43
 
44
+ Init_painter();
44
45
  Init_polyline();
45
46
  Init_polygon_line();
46
47
  Init_polygon();
@@ -48,8 +49,7 @@ extern "C" void
48
49
  Init_image();
49
50
  Init_font();
50
51
  Init_shader();
51
-
52
- Init_painter();
52
+ Init_camera();
53
53
 
54
54
  Init_noise();
55
55
 
@@ -353,12 +353,7 @@ static
353
353
  RUCY_DEF1(set_stroke_cap, cap)
354
354
  {
355
355
  CHECK;
356
-
357
- int type = to<int>(cap);
358
- if (type < 0 || Rays::CAP_MAX <= type)
359
- argument_error(__FILE__, __LINE__, "invalid stroke cap -- %d", type);
360
-
361
- THIS->set_stroke_cap((Rays::CapType) type);
356
+ THIS->set_stroke_cap(to<Rays::CapType>(cap));
362
357
  return self;
363
358
  }
364
359
  RUCY_END
@@ -375,12 +370,7 @@ static
375
370
  RUCY_DEF1(set_stroke_join, join)
376
371
  {
377
372
  CHECK;
378
-
379
- int type = to<int>(join);
380
- if (type < 0 || Rays::JOIN_MAX <= type)
381
- argument_error(__FILE__, __LINE__, "invalid stroke join -- %d", type);
382
-
383
- THIS->set_stroke_join((Rays::JoinType) type);
373
+ THIS->set_stroke_join(to<Rays::JoinType>(join));
384
374
  return self;
385
375
  }
386
376
  RUCY_END
@@ -262,6 +262,20 @@ RUCY_DEF0(inspect)
262
262
  }
263
263
  RUCY_END
264
264
 
265
+ static
266
+ RUCY_DEF2(dot, p1, p2)
267
+ {
268
+ return value(Rays::dot(to<Rays::Point>(p1), to<Rays::Point>(p2)));
269
+ }
270
+ RUCY_END
271
+
272
+ static
273
+ RUCY_DEF2(cross, p1, p2)
274
+ {
275
+ return value(Rays::cross(to<Rays::Point>(p1), to<Rays::Point>(p2)));
276
+ }
277
+ RUCY_END
278
+
265
279
 
266
280
  static Class cPoint;
267
281
 
@@ -295,6 +309,8 @@ Init_point ()
295
309
  cPoint.define_method("[]=", set_at);
296
310
  cPoint.define_method("[]", get_at);
297
311
  cPoint.define_method("inspect", inspect);
312
+ cPoint.define_module_function("dot", dot);
313
+ cPoint.define_module_function("cross", cross);
298
314
  }
299
315
 
300
316
 
@@ -80,7 +80,7 @@ RUCY_DEF0(empty)
80
80
  RUCY_END
81
81
 
82
82
  static
83
- RUCY_DEF1(at, index)
83
+ RUCY_DEF1(get_at, index)
84
84
  {
85
85
  CHECK;
86
86
 
@@ -100,7 +100,7 @@ RUCY_DEF0(each)
100
100
  {
101
101
  CHECK;
102
102
 
103
- Value ret;
103
+ Value ret = Qnil;
104
104
  for (const auto& line : *THIS)
105
105
  ret = rb_yield(value(line));
106
106
  return ret;
@@ -260,7 +260,7 @@ Init_polygon ()
260
260
  cPolygon.define_method("bounds", bounds);
261
261
  cPolygon.define_method("size", size);
262
262
  cPolygon.define_method("empty?", empty);
263
- cPolygon.define_method("[]", at);
263
+ cPolygon.define_method("[]", get_at);
264
264
  cPolygon.define_method("each", each);
265
265
  cPolygon.define_method("+", op_or);
266
266
  cPolygon.define_method("-", op_sub);
@@ -83,7 +83,7 @@ RUCY_DEF0(empty)
83
83
  RUCY_END
84
84
 
85
85
  static
86
- RUCY_DEF1(at, index)
86
+ RUCY_DEF1(get_at, index)
87
87
  {
88
88
  CHECK;
89
89
 
@@ -103,7 +103,7 @@ RUCY_DEF0(each)
103
103
  {
104
104
  CHECK;
105
105
 
106
- Value ret;
106
+ Value ret = Qnil;
107
107
  for (const auto& point : *THIS)
108
108
  ret = rb_yield(value(point));
109
109
  return ret;
@@ -126,7 +126,7 @@ Init_polyline ()
126
126
  cPolyline.define_method("loop?", loop);
127
127
  cPolyline.define_method("size", size);
128
128
  cPolyline.define_method("empty?", empty);
129
- cPolyline.define_method("[]", at);
129
+ cPolyline.define_method("[]", get_at);
130
130
  cPolyline.define_method("each", each);
131
131
  }
132
132
 
@@ -1,43 +1,33 @@
1
1
  #include "rays/ruby/rays.h"
2
2
 
3
3
 
4
+ #include <vector>
4
5
  #include "defs.h"
5
6
 
6
7
 
7
- RUCY_DEFINE_VALUE_OR_ARRAY_TO(Rays::CapType)
8
- RUCY_DEFINE_VALUE_OR_ARRAY_TO(Rays::JoinType)
8
+ RUCY_DEFINE_CONVERT_TO(Rays::CapType)
9
+ RUCY_DEFINE_CONVERT_TO(Rays::JoinType)
9
10
 
10
11
 
11
- static struct CapTypeEnum
12
+ template <typename T>
13
+ struct EnumType
12
14
  {
13
15
  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},
16
+ const char* short_name;
17
+ T type;
21
18
  };
22
19
 
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
- };
20
+ static std::vector<EnumType<Rays::CapType>> CAP_TYPES({
21
+ {"CAP_BUTT", "BUTT", Rays::CAP_BUTT},
22
+ {"CAP_ROUND", "ROUND", Rays::CAP_ROUND},
23
+ {"CAP_SQUARE", "SQUARE", Rays::CAP_SQUARE},
24
+ });
38
25
 
39
- static const size_t JOIN_TYPES_SIZE =
40
- sizeof(JOIN_TYPES) / sizeof(JOIN_TYPES[0]);
26
+ static std::vector<EnumType<Rays::JoinType>> JOIN_TYPES({
27
+ {"JOIN_MITER", "MITER", Rays::JOIN_MITER},
28
+ {"JOIN_ROUND", "ROUND", Rays::JOIN_ROUND},
29
+ {"JOIN_SQUARE", "SQUARE", Rays::JOIN_SQUARE},
30
+ });
41
31
 
42
32
 
43
33
  static
@@ -67,11 +57,11 @@ Init_rays ()
67
57
  mRays.define_singleton_method("init!", init);
68
58
  mRays.define_singleton_method("fin!", fin);
69
59
 
70
- for (size_t i = 0; i < CAP_TYPES_SIZE; ++i)
71
- mRays.define_const(CAP_TYPES[i].name, CAP_TYPES[i].type);
60
+ for (auto it = CAP_TYPES.begin(); it != CAP_TYPES.end(); ++it)
61
+ mRays.define_const(it->name, it->type);
72
62
 
73
- for (size_t i = 0; i < JOIN_TYPES_SIZE; ++i)
74
- mRays.define_const(JOIN_TYPES[i].name, JOIN_TYPES[i].type);
63
+ for (auto it = JOIN_TYPES.begin(); it != JOIN_TYPES.end(); ++it)
64
+ mRays.define_const(it->name, it->type);
75
65
  }
76
66
 
77
67
 
@@ -89,16 +79,21 @@ namespace Rucy
89
79
  if (argv->is_s() || argv->is_sym())
90
80
  {
91
81
  const char* str = argv->c_str();
92
- for (size_t i = 0; i < CAP_TYPES_SIZE; ++i)
82
+ for (auto it = CAP_TYPES.begin(); it != CAP_TYPES.end(); ++it)
93
83
  {
94
- if (strcasecmp(str, CAP_TYPES[i].name) == 0)
95
- return CAP_TYPES[i].type;
84
+ if (
85
+ strcasecmp(str, it->name) == 0 ||
86
+ strcasecmp(str, it->short_name) == 0)
87
+ {
88
+ return it->type;
89
+ }
96
90
  }
91
+ argument_error(__FILE__, __LINE__, "invalid cap type -- %s", str);
97
92
  }
98
93
  }
99
94
 
100
- uint type = value_to<uint>(*argv, convert);
101
- if (type >= Rays::CAP_MAX)
95
+ int type = value_to<int>(*argv, convert);
96
+ if (type < 0 || Rays::CAP_MAX <= type)
102
97
  argument_error(__FILE__, __LINE__, "invalid cap type -- %d", type);
103
98
 
104
99
  return (Rays::CapType) type;
@@ -115,16 +110,21 @@ namespace Rucy
115
110
  if (argv->is_s() || argv->is_sym())
116
111
  {
117
112
  const char* str = argv->c_str();
118
- for (size_t i = 0; i < JOIN_TYPES_SIZE; ++i)
113
+ for (auto it = JOIN_TYPES.begin(); it != JOIN_TYPES.end(); ++it)
119
114
  {
120
- if (strcasecmp(str, JOIN_TYPES[i].name) == 0)
121
- return JOIN_TYPES[i].type;
115
+ if (
116
+ strcasecmp(str, it->name) == 0 ||
117
+ strcasecmp(str, it->short_name) == 0)
118
+ {
119
+ return it->type;
120
+ }
122
121
  }
122
+ argument_error(__FILE__, __LINE__, "invalid join type -- %s", str);
123
123
  }
124
124
  }
125
125
 
126
- uint type = value_to<uint>(*argv, convert);
127
- if (type >= Rays::JOIN_MAX)
126
+ int type = value_to<int>(*argv, convert);
127
+ if (type < 0 || Rays::JOIN_MAX <= type)
128
128
  argument_error(__FILE__, __LINE__, "invalid join type -- %d", type);
129
129
 
130
130
  return (Rays::JoinType) type;
@@ -0,0 +1,49 @@
1
+ // -*- mode: c++ -*-
2
+ #pragma once
3
+ #ifndef __RAYS_CAMERA_H__
4
+ #define __RAYS_CAMERA_H__
5
+
6
+
7
+ #include <xot/pimpl.h>
8
+ #include <rays/defs.h>
9
+ #include <rays/image.h>
10
+
11
+
12
+ namespace Rays
13
+ {
14
+
15
+
16
+ class Camera
17
+ {
18
+
19
+ typedef Camera This;
20
+
21
+ public:
22
+
23
+ Camera ();
24
+
25
+ ~Camera ();
26
+
27
+ bool start ();
28
+
29
+ void stop ();
30
+
31
+ bool is_active () const;
32
+
33
+ const Image* image () const;
34
+
35
+ operator bool () const;
36
+
37
+ bool operator ! () const;
38
+
39
+ struct Data;
40
+
41
+ Xot::PSharedImpl<Data> self;
42
+
43
+ };// Camera
44
+
45
+
46
+ }// Rays
47
+
48
+
49
+ #endif//EOH
@@ -31,9 +31,13 @@ namespace Rays
31
31
 
32
32
  using namespace Xot::ErrorFunctions;
33
33
 
34
- void rays_error (const char* file, int line, const char* format = NULL, ...);
34
+ [[noreturn]]
35
+ void rays_error (
36
+ const char* file, int line, const char* format = NULL, ...);
35
37
 
36
- void opengl_error (const char* file, int line, const char* format = NULL, ...);
38
+ [[noreturn]]
39
+ void opengl_error (
40
+ const char* file, int line, const char* format = NULL, ...);
37
41
 
38
42
  }// ErrorFunctions
39
43
 
@@ -0,0 +1,41 @@
1
+ // -*- c++ -*-
2
+ #pragma once
3
+ #ifndef __RAYS_RUBY_CAMERA_H__
4
+ #define __RAYS_RUBY_CAMERA_H__
5
+
6
+
7
+ #include <rucy/rucy.h>
8
+ #include <rucy/class.h>
9
+ #include <rucy/extension.h>
10
+ #include <rays/camera.h>
11
+
12
+
13
+ namespace Rays
14
+ {
15
+
16
+
17
+ Rucy::Class camera_class ();
18
+ // class Rays::Camera
19
+
20
+
21
+ }// Rays
22
+
23
+
24
+ RUCY_DECLARE_VALUE_FROM_TO(Rays::Camera)
25
+
26
+
27
+ namespace Rucy
28
+ {
29
+
30
+
31
+ template <> inline Class
32
+ get_ruby_class<Rays::Camera> ()
33
+ {
34
+ return Rays::camera_class();
35
+ }
36
+
37
+
38
+ }// Rucy
39
+
40
+
41
+ #endif//EOH