cairo 1.12.1 → 1.12.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of cairo might be problematic. Click here for more details.
- data/Gemfile +1 -1
- data/NEWS +23 -0
- data/ext/cairo/extconf.rb +121 -1
- data/ext/cairo/rb_cairo.h +1 -1
- data/ext/cairo/rb_cairo_device.c +35 -0
- data/ext/cairo/rb_cairo_pattern.c +81 -7
- data/ext/cairo/rb_cairo_surface.c +632 -444
- data/lib/cairo.rb +3 -0
- data/lib/cairo/device.rb +13 -0
- data/lib/cairo/pattern.rb +12 -0
- data/lib/cairo/surface.rb +11 -0
- data/test/cairo-test-utils.rb +12 -6
- data/test/run-test.rb +1 -1
- data/test/test_raster_source_pattern.rb +15 -1
- metadata +102 -69
data/Gemfile
CHANGED
data/NEWS
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
Release 1.12.2 (2012-06-03) Kouhei Sutou <kou@cozmixng.org>)
|
2
|
+
============================================================
|
3
|
+
|
4
|
+
Improvements
|
5
|
+
------------
|
6
|
+
|
7
|
+
* Added Cairo::Device.supported?.
|
8
|
+
[GitHub#11] [Reported by Cédric Boutillier]
|
9
|
+
* Added Cairo::Device.gl_texture_supported?.
|
10
|
+
* Added Cairo::Surface.supported?.
|
11
|
+
* Defined all surfaces even if a surface isn't available. Use
|
12
|
+
Cairo::Surface.XXX_supported? method to check surface
|
13
|
+
availability.
|
14
|
+
* Added Cairo::Pattern.xxx_supported?.
|
15
|
+
[GitHub#12] [Reported by Mamoru Tasaka]
|
16
|
+
* [experimental] Supported auto native package install.
|
17
|
+
|
18
|
+
Thanks
|
19
|
+
------
|
20
|
+
|
21
|
+
* Cédric Boutillier
|
22
|
+
* Mamoru Tasaka
|
23
|
+
|
1
24
|
Release 1.12.1 (2012-03-31) Kouhei Sutou <kou@cozmixng.org>)
|
2
25
|
============================================================
|
3
26
|
|
data/ext/cairo/extconf.rb
CHANGED
@@ -68,7 +68,127 @@ checking_for(checking_message("Mac OS X")) do
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
|
71
|
+
def package_platform
|
72
|
+
if File.exist?("/etc/debian_version")
|
73
|
+
:debian
|
74
|
+
elsif File.exist?("/etc/fedora-release")
|
75
|
+
:fedora
|
76
|
+
elsif File.exist?("/etc/redhat-release")
|
77
|
+
:redhat
|
78
|
+
elsif find_executable("brew")
|
79
|
+
:homebrew
|
80
|
+
elsif find_executable("port")
|
81
|
+
:macports
|
82
|
+
else
|
83
|
+
:unknown
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def super_user?
|
88
|
+
Process.uid.zero?
|
89
|
+
end
|
90
|
+
|
91
|
+
def normalize_native_package_info(native_package_info)
|
92
|
+
native_package_info ||= {}
|
93
|
+
native_package_info = native_package_info.dup
|
94
|
+
native_package_info[:fedora] ||= native_package_info[:redhat]
|
95
|
+
native_package_info
|
96
|
+
end
|
97
|
+
|
98
|
+
def install_missing_native_package(native_package_info)
|
99
|
+
platform = package_platform
|
100
|
+
native_package_info = normalize_native_package_info(native_package_info)
|
101
|
+
package = native_package_info[platform]
|
102
|
+
return false if package.nil?
|
103
|
+
|
104
|
+
need_super_user_priviledge = true
|
105
|
+
case platform
|
106
|
+
when :debian
|
107
|
+
install_command = "apt-get install -V -y #{package}"
|
108
|
+
when :fedora, :redhat
|
109
|
+
install_command = "yum install -y #{package}"
|
110
|
+
when :homebrew
|
111
|
+
need_super_user_priviledge = false
|
112
|
+
install_command = "brew install #{package}"
|
113
|
+
when :macports
|
114
|
+
install_command = "port install -y #{package}"
|
115
|
+
else
|
116
|
+
return false
|
117
|
+
end
|
118
|
+
|
119
|
+
have_priviledge = (not need_super_user_priviledge or super_user?)
|
120
|
+
unless have_priviledge
|
121
|
+
sudo = find_executable("sudo")
|
122
|
+
end
|
123
|
+
|
124
|
+
installing_message = "installing '#{package}' native package... "
|
125
|
+
message("%s", installing_message)
|
126
|
+
failed_to_get_super_user_priviledge = false
|
127
|
+
if have_priviledge
|
128
|
+
succeeded = xsystem(install_command)
|
129
|
+
else
|
130
|
+
if sudo
|
131
|
+
install_command = "#{sudo} #{install_command}"
|
132
|
+
succeeded = xsystem(install_command)
|
133
|
+
else
|
134
|
+
succeeded = false
|
135
|
+
failed_to_get_super_user_priviledge = true
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
if failed_to_get_super_user_priviledge
|
140
|
+
result_message = "require super user privilege"
|
141
|
+
else
|
142
|
+
result_message = succeeded ? "succeeded" : "failed"
|
143
|
+
end
|
144
|
+
Logging.postpone do
|
145
|
+
"#{installing_message}#{result_message}\n"
|
146
|
+
end
|
147
|
+
message("#{result_message}\n")
|
148
|
+
|
149
|
+
error_message = nil
|
150
|
+
unless succeeded
|
151
|
+
if failed_to_get_super_user_priviledge
|
152
|
+
error_message = <<-EOM
|
153
|
+
'#{package}' native package is required.
|
154
|
+
run the following command as super user to install required native package:
|
155
|
+
\# #{install_command}
|
156
|
+
EOM
|
157
|
+
else
|
158
|
+
error_message = <<-EOM
|
159
|
+
failed to run '#{install_command}'.
|
160
|
+
EOM
|
161
|
+
end
|
162
|
+
end
|
163
|
+
if error_message
|
164
|
+
message("%s", error_message)
|
165
|
+
Logging.message("%s", error_message)
|
166
|
+
end
|
167
|
+
|
168
|
+
Logging.message("--------------------\n\n")
|
169
|
+
|
170
|
+
succeeded
|
171
|
+
end
|
172
|
+
|
173
|
+
def required_pkg_config_package(package_info, native_package_info=nil)
|
174
|
+
if package_info.is_a?(Array)
|
175
|
+
required_package_info = package_info
|
176
|
+
else
|
177
|
+
required_package_info = [package_info]
|
178
|
+
end
|
179
|
+
return true if PKGConfig.have_package(*required_package_info)
|
180
|
+
|
181
|
+
native_package_info ||= {}
|
182
|
+
return false unless install_missing_native_package(native_package_info)
|
183
|
+
|
184
|
+
PKGConfig.have_package(*required_package_info)
|
185
|
+
end
|
186
|
+
|
187
|
+
unless required_pkg_config_package([package, major, minor, micro],
|
188
|
+
:debian => "libcairo2-dev",
|
189
|
+
:redhat => "cairo-devel")
|
190
|
+
exit(false)
|
191
|
+
end
|
72
192
|
|
73
193
|
$defs << "-DRB_CAIRO_COMPILATION"
|
74
194
|
|
data/ext/cairo/rb_cairo.h
CHANGED
data/ext/cairo/rb_cairo_device.c
CHANGED
@@ -96,6 +96,26 @@ cr_device_get_klass (cairo_device_t *device)
|
|
96
96
|
return klass;
|
97
97
|
}
|
98
98
|
|
99
|
+
static VALUE
|
100
|
+
cr_device_script_supported_p (VALUE klass)
|
101
|
+
{
|
102
|
+
#ifdef CAIRO_HAS_SCRIPT_SURFACE
|
103
|
+
return Qtrue;
|
104
|
+
#else
|
105
|
+
return Qfalse;
|
106
|
+
#endif
|
107
|
+
}
|
108
|
+
|
109
|
+
static VALUE
|
110
|
+
cr_device_xml_supported_p (VALUE klass)
|
111
|
+
{
|
112
|
+
#ifdef CAIRO_HAS_XML_SURFACE
|
113
|
+
return Qtrue;
|
114
|
+
#else
|
115
|
+
return Qfalse;
|
116
|
+
#endif
|
117
|
+
}
|
118
|
+
|
99
119
|
/* constructor/de-constructor */
|
100
120
|
cairo_device_t *
|
101
121
|
rb_cairo_device_from_ruby_object (VALUE obj)
|
@@ -168,6 +188,16 @@ cr_device_allocate (VALUE klass)
|
|
168
188
|
return Data_Wrap_Struct (klass, NULL, cr_device_free, NULL);
|
169
189
|
}
|
170
190
|
|
191
|
+
static VALUE
|
192
|
+
cr_device_initialize (int argc, VALUE *argv, VALUE self)
|
193
|
+
{
|
194
|
+
rb_raise(rb_eNotImpError,
|
195
|
+
"%s class creation isn't supported on this cairo installation",
|
196
|
+
rb_obj_classname(self));
|
197
|
+
|
198
|
+
return Qnil;
|
199
|
+
}
|
200
|
+
|
171
201
|
/* Backend device manipulation */
|
172
202
|
static VALUE
|
173
203
|
cr_device_destroy (VALUE self)
|
@@ -377,7 +407,12 @@ Init_cairo_device (void)
|
|
377
407
|
rb_cairo__initialize_gc_guard_holder_class (rb_cCairo_Device);
|
378
408
|
rb_set_end_proc(cr_finish_all_guarded_devices_at_end, Qnil);
|
379
409
|
|
410
|
+
rb_define_singleton_method (rb_cCairo_Device, "script_supported?",
|
411
|
+
cr_device_script_supported_p, 0);
|
412
|
+
rb_define_singleton_method (rb_cCairo_Device, "xml_supported?",
|
413
|
+
cr_device_xml_supported_p, 0);
|
380
414
|
|
415
|
+
rb_define_method (rb_cCairo_Device, "initialize", cr_device_initialize, -1);
|
381
416
|
rb_define_method (rb_cCairo_Device, "destroy", cr_device_destroy, 0);
|
382
417
|
rb_define_method (rb_cCairo_Device, "finish", cr_device_finish, 0);
|
383
418
|
rb_define_method (rb_cCairo_Device, "flush", cr_device_flush, 0);
|
@@ -29,6 +29,11 @@ static ID id_parse, id_to_rgb, id_to_a, id_inspect, id_new, id_call;
|
|
29
29
|
|
30
30
|
#define _SELF(self) (RVAL2CRPATTERN(self))
|
31
31
|
|
32
|
+
#if CAIRO_CHECK_VERSION(1, 11, 4)
|
33
|
+
# define RB_CAIRO_HAS_MESH_PATTERN
|
34
|
+
# define RB_CAIRO_HAS_RASTER_SOURCE_PATTERN
|
35
|
+
#endif
|
36
|
+
|
32
37
|
static VALUE
|
33
38
|
cr_color_parse (VALUE color)
|
34
39
|
{
|
@@ -78,6 +83,55 @@ cr_pattern_get_klass (cairo_pattern_t *pattern)
|
|
78
83
|
return klass;
|
79
84
|
}
|
80
85
|
|
86
|
+
static VALUE
|
87
|
+
cr_pattern_solid_supported_p (VALUE klass)
|
88
|
+
{
|
89
|
+
return Qtrue;
|
90
|
+
}
|
91
|
+
|
92
|
+
static VALUE
|
93
|
+
cr_pattern_surface_supported_p (VALUE klass)
|
94
|
+
{
|
95
|
+
return Qtrue;
|
96
|
+
}
|
97
|
+
|
98
|
+
static VALUE
|
99
|
+
cr_pattern_gradient_supported_p (VALUE klass)
|
100
|
+
{
|
101
|
+
return Qtrue;
|
102
|
+
}
|
103
|
+
|
104
|
+
static VALUE
|
105
|
+
cr_pattern_linear_supported_p (VALUE klass)
|
106
|
+
{
|
107
|
+
return Qtrue;
|
108
|
+
}
|
109
|
+
|
110
|
+
static VALUE
|
111
|
+
cr_pattern_radial_supported_p (VALUE klass)
|
112
|
+
{
|
113
|
+
return Qtrue;
|
114
|
+
}
|
115
|
+
|
116
|
+
static VALUE
|
117
|
+
cr_pattern_mesh_supported_p (VALUE klass)
|
118
|
+
{
|
119
|
+
#ifdef RB_CAIRO_HAS_MESH_PATTERN
|
120
|
+
return Qtrue;
|
121
|
+
#else
|
122
|
+
return Qfalse;
|
123
|
+
#endif
|
124
|
+
}
|
125
|
+
|
126
|
+
static VALUE
|
127
|
+
cr_pattern_raster_source_supported_p (VALUE klass)
|
128
|
+
{
|
129
|
+
#ifdef RB_CAIRO_HAS_RASTER_SOURCE_PATTERN
|
130
|
+
return Qtrue;
|
131
|
+
#else
|
132
|
+
return Qfalse;
|
133
|
+
#endif
|
134
|
+
}
|
81
135
|
|
82
136
|
cairo_pattern_t *
|
83
137
|
rb_cairo_pattern_from_ruby_object (VALUE obj)
|
@@ -123,9 +177,12 @@ cr_pattern_allocate (VALUE klass)
|
|
123
177
|
}
|
124
178
|
|
125
179
|
static VALUE
|
126
|
-
cr_pattern_initialize (VALUE self)
|
180
|
+
cr_pattern_initialize (int argc, VALUE *argv, VALUE self)
|
127
181
|
{
|
128
|
-
rb_raise
|
182
|
+
rb_raise(rb_eNotImpError,
|
183
|
+
"%s class instantiation isn't supported on this cairo installation",
|
184
|
+
rb_obj_classname(self));
|
185
|
+
|
129
186
|
return Qnil;
|
130
187
|
}
|
131
188
|
|
@@ -452,7 +509,7 @@ cr_radial_pattern_get_radial_circles (VALUE self)
|
|
452
509
|
/* Cairo::SurfacePattern */
|
453
510
|
/* none */
|
454
511
|
|
455
|
-
#
|
512
|
+
#ifdef RB_CAIRO_HAS_MESH_PATTERN
|
456
513
|
/* Cairo::MeshPattern */
|
457
514
|
static VALUE
|
458
515
|
cr_mesh_pattern_initialize (VALUE self)
|
@@ -683,8 +740,10 @@ cr_mesh_pattern_get_control_point (VALUE self,
|
|
683
740
|
rb_cairo_check_status (status);
|
684
741
|
return rb_ary_new3 (2, rb_float_new (x), rb_float_new (y));
|
685
742
|
}
|
743
|
+
#endif
|
686
744
|
|
687
|
-
|
745
|
+
#ifdef RB_CAIRO_HAS_RASTER_SOURCE_PATTERN
|
746
|
+
/* Cairo::RasterSourcePattern */
|
688
747
|
static cairo_surface_t *
|
689
748
|
cr_raster_source_acquire_callback (cairo_pattern_t *pattern,
|
690
749
|
void *callback_data,
|
@@ -978,7 +1037,22 @@ Init_cairo_pattern (void)
|
|
978
1037
|
|
979
1038
|
rb_define_alloc_func (rb_cCairo_Pattern, cr_pattern_allocate);
|
980
1039
|
|
981
|
-
|
1040
|
+
rb_define_singleton_method (rb_cCairo_Pattern, "solid_supported?",
|
1041
|
+
cr_pattern_solid_supported_p, 0);
|
1042
|
+
rb_define_singleton_method (rb_cCairo_Pattern, "surface_supported?",
|
1043
|
+
cr_pattern_surface_supported_p, 0);
|
1044
|
+
rb_define_singleton_method (rb_cCairo_Pattern, "gradient_supported?",
|
1045
|
+
cr_pattern_gradient_supported_p, 0);
|
1046
|
+
rb_define_singleton_method (rb_cCairo_Pattern, "linear_supported?",
|
1047
|
+
cr_pattern_linear_supported_p, 0);
|
1048
|
+
rb_define_singleton_method (rb_cCairo_Pattern, "radial_supported?",
|
1049
|
+
cr_pattern_radial_supported_p, 0);
|
1050
|
+
rb_define_singleton_method (rb_cCairo_Pattern, "mesh_supported?",
|
1051
|
+
cr_pattern_mesh_supported_p, 0);
|
1052
|
+
rb_define_singleton_method (rb_cCairo_Pattern, "raster_source_supported?",
|
1053
|
+
cr_pattern_raster_source_supported_p, 0);
|
1054
|
+
|
1055
|
+
rb_define_method (rb_cCairo_Pattern, "initialize", cr_pattern_initialize, -1);
|
982
1056
|
|
983
1057
|
rb_define_method (rb_cCairo_Pattern, "set_matrix", cr_pattern_set_matrix, 1);
|
984
1058
|
rb_define_method (rb_cCairo_Pattern, "matrix", cr_pattern_get_matrix, 0);
|
@@ -1065,7 +1139,7 @@ Init_cairo_pattern (void)
|
|
1065
1139
|
rb_cCairo_MeshPattern =
|
1066
1140
|
rb_define_class_under (rb_mCairo, "MeshPattern",
|
1067
1141
|
rb_cCairo_Pattern);
|
1068
|
-
#
|
1142
|
+
#ifdef RB_CAIRO_HAS_MESH_PATTERN
|
1069
1143
|
rb_define_method (rb_cCairo_MeshPattern, "initialize",
|
1070
1144
|
cr_mesh_pattern_initialize, 0);
|
1071
1145
|
rb_define_method (rb_cCairo_MeshPattern, "begin_patch",
|
@@ -1100,7 +1174,7 @@ Init_cairo_pattern (void)
|
|
1100
1174
|
rb_cCairo_RasterSourcePattern =
|
1101
1175
|
rb_define_class_under (rb_mCairo, "RasterSourcePattern",
|
1102
1176
|
rb_cCairo_Pattern);
|
1103
|
-
#
|
1177
|
+
#ifdef RB_CAIRO_HAS_RASTER_SOURCE_PATTERN
|
1104
1178
|
rb_define_method (rb_cCairo_RasterSourcePattern, "initialize",
|
1105
1179
|
cr_raster_source_pattern_initialize, -1);
|
1106
1180
|
rb_define_method (rb_cCairo_RasterSourcePattern, "acquire",
|
@@ -23,10 +23,21 @@
|
|
23
23
|
# include <st.h>
|
24
24
|
#endif
|
25
25
|
|
26
|
+
#if CAIRO_CHECK_VERSION(1, 5, 2)
|
27
|
+
# define RB_CAIRO_HAS_WIN32_PRINTING_SURFACE_TYPE
|
28
|
+
#endif
|
29
|
+
|
30
|
+
#if CAIRO_CHECK_VERSION(1, 5, 12)
|
31
|
+
# define RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE_TYPE
|
32
|
+
#endif
|
33
|
+
|
26
34
|
#ifdef CAIRO_HAS_WIN32_SURFACE
|
27
35
|
# define OpenFile OpenFile_win32
|
28
36
|
# include <cairo-win32.h>
|
29
37
|
# undef OpenFile
|
38
|
+
# ifdef RB_CAIRO_HAS_WIN32_PRINTING_SURFACE_TYPE
|
39
|
+
# define RB_CAIRO_HAS_WIN32_PRINTING_SURFACE
|
40
|
+
# endif
|
30
41
|
#endif
|
31
42
|
|
32
43
|
#ifdef HAVE_RUBY_IO_H
|
@@ -44,6 +55,12 @@ enum ruby_value_type {
|
|
44
55
|
# undef T_DATA
|
45
56
|
# include <cairo-quartz.h>
|
46
57
|
# define T_DATA RUBY_T_DATA
|
58
|
+
# ifdef HAVE_RUBY_COCOA
|
59
|
+
# define RB_CAIRO_HAS_QUARTZ_SURFACE
|
60
|
+
# ifdef RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE_TYPE
|
61
|
+
# define RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE
|
62
|
+
# endif
|
63
|
+
# endif
|
47
64
|
#endif
|
48
65
|
|
49
66
|
#ifdef CAIRO_HAS_XML_SURFACE
|
@@ -151,12 +168,12 @@ cr_surface_get_klass (cairo_surface_t *surface)
|
|
151
168
|
case CAIRO_SURFACE_TYPE_SVG:
|
152
169
|
klass = rb_cCairo_SVGSurface;
|
153
170
|
break;
|
154
|
-
#
|
171
|
+
#ifdef RB_CAIRO_HAS_WIN32_PRINTING_SURFACE_TYPE
|
155
172
|
case CAIRO_SURFACE_TYPE_WIN32_PRINTING:
|
156
173
|
klass = rb_cCairo_Win32PrintingSurface;
|
157
174
|
break;
|
158
175
|
#endif
|
159
|
-
#
|
176
|
+
#ifdef RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE_TYPE
|
160
177
|
case CAIRO_SURFACE_TYPE_QUARTZ_IMAGE:
|
161
178
|
klass = rb_cCairo_QuartzImageSurface;
|
162
179
|
break;
|
@@ -209,6 +226,138 @@ cr_surface_get_klass (cairo_surface_t *surface)
|
|
209
226
|
return klass;
|
210
227
|
}
|
211
228
|
|
229
|
+
static VALUE
|
230
|
+
cr_surface_image_supported_p (VALUE klass)
|
231
|
+
{
|
232
|
+
return Qtrue;
|
233
|
+
}
|
234
|
+
|
235
|
+
static VALUE
|
236
|
+
cr_surface_pdf_supported_p (VALUE klass)
|
237
|
+
{
|
238
|
+
#ifdef CAIRO_HAS_PDF_SURFACE
|
239
|
+
return Qtrue;
|
240
|
+
#else
|
241
|
+
return Qfalse;
|
242
|
+
#endif
|
243
|
+
}
|
244
|
+
|
245
|
+
static VALUE
|
246
|
+
cr_surface_ps_supported_p (VALUE klass)
|
247
|
+
{
|
248
|
+
#ifdef CAIRO_HAS_PS_SURFACE
|
249
|
+
return Qtrue;
|
250
|
+
#else
|
251
|
+
return Qfalse;
|
252
|
+
#endif
|
253
|
+
}
|
254
|
+
|
255
|
+
static VALUE
|
256
|
+
cr_surface_quartz_supported_p (VALUE klass)
|
257
|
+
{
|
258
|
+
#ifdef RB_CAIRO_HAS_QUARTZ_SURFACE
|
259
|
+
return Qtrue;
|
260
|
+
#else
|
261
|
+
return Qfalse;
|
262
|
+
#endif
|
263
|
+
}
|
264
|
+
|
265
|
+
static VALUE
|
266
|
+
cr_surface_win32_supported_p (VALUE klass)
|
267
|
+
{
|
268
|
+
#ifdef CAIRO_HAS_WIN32_SURFACE
|
269
|
+
return Qtrue;
|
270
|
+
#else
|
271
|
+
return Qfalse;
|
272
|
+
#endif
|
273
|
+
}
|
274
|
+
|
275
|
+
static VALUE
|
276
|
+
cr_surface_svg_supported_p (VALUE klass)
|
277
|
+
{
|
278
|
+
#ifdef CAIRO_HAS_SVG_SURFACE
|
279
|
+
return Qtrue;
|
280
|
+
#else
|
281
|
+
return Qfalse;
|
282
|
+
#endif
|
283
|
+
}
|
284
|
+
|
285
|
+
static VALUE
|
286
|
+
cr_surface_win32_printing_supported_p (VALUE klass)
|
287
|
+
{
|
288
|
+
#ifdef RB_CAIRO_HAS_WIN32_PRINTING_SURFACE
|
289
|
+
return Qtrue;
|
290
|
+
#else
|
291
|
+
return Qfalse;
|
292
|
+
#endif
|
293
|
+
}
|
294
|
+
|
295
|
+
static VALUE
|
296
|
+
cr_surface_quartz_image_supported_p (VALUE klass)
|
297
|
+
{
|
298
|
+
#ifdef RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE
|
299
|
+
return Qtrue;
|
300
|
+
#else
|
301
|
+
return Qfalse;
|
302
|
+
#endif
|
303
|
+
}
|
304
|
+
|
305
|
+
static VALUE
|
306
|
+
cr_surface_script_supported_p (VALUE klass)
|
307
|
+
{
|
308
|
+
#ifdef CAIRO_HAS_SCRIPT_SURFACE
|
309
|
+
return Qtrue;
|
310
|
+
#else
|
311
|
+
return Qfalse;
|
312
|
+
#endif
|
313
|
+
}
|
314
|
+
|
315
|
+
static VALUE
|
316
|
+
cr_surface_recording_supported_p (VALUE klass)
|
317
|
+
{
|
318
|
+
#ifdef CAIRO_HAS_RECORDING_SURFACE
|
319
|
+
return Qtrue;
|
320
|
+
#else
|
321
|
+
return Qfalse;
|
322
|
+
#endif
|
323
|
+
}
|
324
|
+
|
325
|
+
static VALUE
|
326
|
+
cr_surface_gl_supported_p (VALUE klass)
|
327
|
+
{
|
328
|
+
#ifdef RB_CAIRO_HAS_GL_SURFACE
|
329
|
+
return Qtrue;
|
330
|
+
#else
|
331
|
+
return Qfalse;
|
332
|
+
#endif
|
333
|
+
}
|
334
|
+
|
335
|
+
static VALUE
|
336
|
+
cr_surface_gl_texture_supported_p (VALUE klass)
|
337
|
+
{
|
338
|
+
return cr_surface_gl_supported_p(klass);
|
339
|
+
}
|
340
|
+
|
341
|
+
static VALUE
|
342
|
+
cr_surface_tee_supported_p (VALUE klass)
|
343
|
+
{
|
344
|
+
#ifdef CAIRO_HAS_TEE_SURFACE
|
345
|
+
return Qtrue;
|
346
|
+
#else
|
347
|
+
return Qfalse;
|
348
|
+
#endif
|
349
|
+
}
|
350
|
+
|
351
|
+
static VALUE
|
352
|
+
cr_surface_xml_supported_p (VALUE klass)
|
353
|
+
{
|
354
|
+
#ifdef CAIRO_HAS_XML_SURFACE
|
355
|
+
return Qtrue;
|
356
|
+
#else
|
357
|
+
return Qfalse;
|
358
|
+
#endif
|
359
|
+
}
|
360
|
+
|
212
361
|
/* constructor/de-constructor */
|
213
362
|
cairo_surface_t *
|
214
363
|
rb_cairo_surface_from_ruby_object (VALUE obj)
|
@@ -279,6 +428,16 @@ cr_surface_allocate (VALUE klass)
|
|
279
428
|
return Data_Wrap_Struct (klass, NULL, cr_surface_free, NULL);
|
280
429
|
}
|
281
430
|
|
431
|
+
static VALUE
|
432
|
+
cr_surface_initialize (int argc, VALUE *argv, VALUE self)
|
433
|
+
{
|
434
|
+
rb_raise(rb_eNotImpError,
|
435
|
+
"%s class creation isn't supported on this cairo installation",
|
436
|
+
rb_obj_classname(self));
|
437
|
+
|
438
|
+
return Qnil;
|
439
|
+
}
|
440
|
+
|
282
441
|
/* Surface manipulation */
|
283
442
|
static VALUE
|
284
443
|
cr_surface_destroy (VALUE self)
|
@@ -617,7 +776,7 @@ cr_surface_mark_dirty (int argc, VALUE *argv, VALUE self)
|
|
617
776
|
{
|
618
777
|
VALUE x, y, width, height;
|
619
778
|
int n;
|
620
|
-
|
779
|
+
|
621
780
|
n = rb_scan_args (argc, argv, "04", &x, &y, &width, &height);
|
622
781
|
|
623
782
|
if (n == 0)
|
@@ -717,7 +876,7 @@ cr_surface_show_page (VALUE self)
|
|
717
876
|
}
|
718
877
|
#endif
|
719
878
|
|
720
|
-
/*
|
879
|
+
/* image surface functions */
|
721
880
|
#ifdef CAIRO_HAS_PNG_FUNCTIONS
|
722
881
|
static cairo_surface_t *
|
723
882
|
cr_image_surface_create_from_png_stream (VALUE target)
|
@@ -777,7 +936,7 @@ cr_image_surface_create_for_data (VALUE self, VALUE rb_data, VALUE format,
|
|
777
936
|
unsigned char *data;
|
778
937
|
|
779
938
|
data = (unsigned char *)StringValuePtr (rb_data);
|
780
|
-
|
939
|
+
|
781
940
|
return cairo_image_surface_create_for_data (data,
|
782
941
|
RVAL2CRFORMAT (format),
|
783
942
|
NUM2INT (width),
|
@@ -791,7 +950,7 @@ cr_image_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
791
950
|
cairo_surface_t *surface;
|
792
951
|
VALUE arg1, arg2, arg3, arg4, arg5;
|
793
952
|
int n;
|
794
|
-
|
953
|
+
|
795
954
|
n = rb_scan_args (argc, argv, "23", &arg1, &arg2, &arg3, &arg4, &arg5);
|
796
955
|
|
797
956
|
if (n == 2)
|
@@ -857,94 +1016,7 @@ cr_image_surface_get_stride (VALUE self)
|
|
857
1016
|
return INT2NUM (cairo_image_surface_get_stride (_SELF));
|
858
1017
|
}
|
859
1018
|
|
860
|
-
|
861
|
-
/* Recording-surface functions */
|
862
|
-
static VALUE
|
863
|
-
cr_recording_surface_initialize (int argc, VALUE *argv, VALUE self)
|
864
|
-
{
|
865
|
-
VALUE arg1, arg2, arg3, arg4, arg5;
|
866
|
-
cairo_surface_t *surface;
|
867
|
-
cairo_content_t content = CAIRO_CONTENT_COLOR_ALPHA;
|
868
|
-
cairo_rectangle_t extents;
|
869
|
-
const char *error_message =
|
870
|
-
"invalid argument (expect "
|
871
|
-
"(x, y, width, height), "
|
872
|
-
"([x, y, width, height]),"
|
873
|
-
"(x, y, width, height, content) or "
|
874
|
-
"([x, y, width, height], content)): %s";
|
875
|
-
|
876
|
-
rb_scan_args (argc, argv, "14", &arg1, &arg2, &arg3, &arg4, &arg5);
|
877
|
-
if (argc == 1 || argc == 2)
|
878
|
-
{
|
879
|
-
VALUE rb_extents;
|
880
|
-
|
881
|
-
rb_extents = rb_check_array_type (arg1);
|
882
|
-
if (RARRAY_LEN (rb_extents) != 4)
|
883
|
-
rb_raise (rb_eArgError, error_message, rb_cairo__inspect (arg1));
|
884
|
-
extents.x = NUM2DBL (RARRAY_PTR (rb_extents)[0]);
|
885
|
-
extents.y = NUM2DBL (RARRAY_PTR (rb_extents)[1]);
|
886
|
-
extents.width = NUM2DBL (RARRAY_PTR (rb_extents)[2]);
|
887
|
-
extents.height = NUM2DBL (RARRAY_PTR (rb_extents)[3]);
|
888
|
-
if (!NIL_P (arg2))
|
889
|
-
content = RVAL2CRCONTENT (arg2);
|
890
|
-
}
|
891
|
-
else if (argc == 4 || argc == 5)
|
892
|
-
{
|
893
|
-
extents.x = NUM2DBL (arg1);
|
894
|
-
extents.y = NUM2DBL (arg2);
|
895
|
-
extents.width = NUM2DBL (arg3);
|
896
|
-
extents.height = NUM2DBL (arg4);
|
897
|
-
if (!NIL_P (arg5))
|
898
|
-
content = RVAL2CRCONTENT (arg5);
|
899
|
-
}
|
900
|
-
else
|
901
|
-
{
|
902
|
-
rb_raise (rb_eArgError, error_message,
|
903
|
-
rb_cairo__inspect (rb_ary_new4 (argc, argv)));
|
904
|
-
}
|
905
|
-
|
906
|
-
surface = cairo_recording_surface_create (content, &extents);
|
907
|
-
cr_surface_check_status (surface);
|
908
|
-
DATA_PTR (self) = surface;
|
909
|
-
if (rb_block_given_p ())
|
910
|
-
yield_and_finish (self);
|
911
|
-
return Qnil;
|
912
|
-
}
|
913
|
-
|
914
|
-
static VALUE
|
915
|
-
cr_recording_surface_get_ink_extents (VALUE self)
|
916
|
-
{
|
917
|
-
cairo_surface_t *surface;
|
918
|
-
double x, y, width, height;
|
919
|
-
|
920
|
-
surface = _SELF;
|
921
|
-
cairo_recording_surface_ink_extents (surface, &x, &y, &width, &height);
|
922
|
-
cr_surface_check_status (surface);
|
923
|
-
return rb_ary_new3 (4,
|
924
|
-
rb_float_new (x), rb_float_new (y),
|
925
|
-
rb_float_new (width), rb_float_new (height));
|
926
|
-
}
|
927
|
-
|
928
|
-
# if CAIRO_CHECK_VERSION(1, 11, 4)
|
929
|
-
static VALUE
|
930
|
-
cr_recording_surface_get_extents (VALUE self)
|
931
|
-
{
|
932
|
-
cairo_surface_t *surface;
|
933
|
-
cairo_rectangle_t extents;
|
934
|
-
|
935
|
-
surface = _SELF;
|
936
|
-
cairo_recording_surface_get_extents (surface, &extents);
|
937
|
-
cr_surface_check_status (surface);
|
938
|
-
return rb_ary_new3 (4,
|
939
|
-
rb_float_new (extents.x),
|
940
|
-
rb_float_new (extents.y),
|
941
|
-
rb_float_new (extents.width),
|
942
|
-
rb_float_new (extents.height));
|
943
|
-
}
|
944
|
-
# endif
|
945
|
-
#endif
|
946
|
-
|
947
|
-
/* Printing surfaces */
|
1019
|
+
/* printing surfaces */
|
948
1020
|
#define DEFINE_SURFACE(type) \
|
949
1021
|
static VALUE \
|
950
1022
|
cr_ ## type ## _surface_initialize (int argc, VALUE *argv, VALUE self) \
|
@@ -1045,6 +1117,22 @@ cr_ ## type ## _surface_set_size (int argc, VALUE *argv, VALUE self) \
|
|
1045
1117
|
return Qnil; \
|
1046
1118
|
}
|
1047
1119
|
|
1120
|
+
#ifdef CAIRO_HAS_PDF_SURFACE
|
1121
|
+
/* PDF-surface functions */
|
1122
|
+
DEFINE_SURFACE(pdf)
|
1123
|
+
DEFINE_SURFACE_SET_SIZE(pdf)
|
1124
|
+
|
1125
|
+
# if CAIRO_CHECK_VERSION(1, 10, 0)
|
1126
|
+
static VALUE
|
1127
|
+
cr_pdf_surface_restrict_to_version (VALUE self, VALUE version)
|
1128
|
+
{
|
1129
|
+
cairo_pdf_surface_restrict_to_version (_SELF, RVAL2CRPDFVERSION (version));
|
1130
|
+
cr_surface_check_status (_SELF);
|
1131
|
+
return Qnil;
|
1132
|
+
}
|
1133
|
+
# endif
|
1134
|
+
#endif
|
1135
|
+
|
1048
1136
|
#ifdef CAIRO_HAS_PS_SURFACE
|
1049
1137
|
/* PS-surface functions */
|
1050
1138
|
DEFINE_SURFACE(ps)
|
@@ -1105,64 +1193,108 @@ cr_ps_surface_set_eps (VALUE self, VALUE eps)
|
|
1105
1193
|
# endif
|
1106
1194
|
#endif
|
1107
1195
|
|
1108
|
-
#ifdef
|
1109
|
-
/*
|
1110
|
-
|
1111
|
-
DEFINE_SURFACE_SET_SIZE(pdf)
|
1112
|
-
|
1113
|
-
# if CAIRO_CHECK_VERSION(1, 10, 0)
|
1114
|
-
static VALUE
|
1115
|
-
cr_pdf_surface_restrict_to_version (VALUE self, VALUE version)
|
1116
|
-
{
|
1117
|
-
cairo_pdf_surface_restrict_to_version (_SELF, RVAL2CRPDFVERSION (version));
|
1118
|
-
cr_surface_check_status (_SELF);
|
1119
|
-
return Qnil;
|
1120
|
-
}
|
1121
|
-
# endif
|
1122
|
-
#endif
|
1196
|
+
#ifdef RB_CAIRO_HAS_QUARTZ_SURFACE
|
1197
|
+
/* Quartz-surface functions */
|
1198
|
+
#include <objc/objc-runtime.h>
|
1123
1199
|
|
1124
|
-
|
1125
|
-
|
1126
|
-
cr_xlib_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1127
|
-
{
|
1128
|
-
rb_notimplement();
|
1129
|
-
return Qnil;
|
1130
|
-
}
|
1131
|
-
#endif
|
1200
|
+
BOOL rbobj_to_nsobj (VALUE obj, id* nsobj);
|
1201
|
+
VALUE ocid_to_rbobj (VALUE context_obj, id ocid);
|
1132
1202
|
|
1133
|
-
#ifdef CAIRO_HAS_XCB_SURFACE
|
1134
1203
|
static VALUE
|
1135
|
-
|
1204
|
+
cr_quartz_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1136
1205
|
{
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1206
|
+
id objc_object = nil;
|
1207
|
+
CGContextRef context;
|
1208
|
+
unsigned int width, height;
|
1209
|
+
cairo_surface_t *surface = NULL;
|
1210
|
+
cairo_format_t format = CAIRO_FORMAT_ARGB32;
|
1211
|
+
VALUE arg1, arg2, arg3, rb_width, rb_height;
|
1212
|
+
static VALUE rb_cOSXCGContextRef = Qnil;
|
1141
1213
|
|
1142
|
-
|
1143
|
-
/* SVG-surface functions */
|
1144
|
-
DEFINE_SURFACE(svg)
|
1214
|
+
rb_scan_args (argc, argv, "21", &arg1, &arg2, &arg3);
|
1145
1215
|
|
1146
|
-
|
1147
|
-
|
1148
|
-
|
1149
|
-
|
1150
|
-
|
1151
|
-
|
1152
|
-
|
1216
|
+
if (argc == 2)
|
1217
|
+
{
|
1218
|
+
rb_width = arg1;
|
1219
|
+
rb_height = arg2;
|
1220
|
+
}
|
1221
|
+
else
|
1222
|
+
{
|
1223
|
+
switch (TYPE (arg1))
|
1224
|
+
{
|
1225
|
+
case T_NIL:
|
1226
|
+
break;
|
1227
|
+
case T_STRING:
|
1228
|
+
case T_SYMBOL:
|
1229
|
+
case T_FIXNUM:
|
1230
|
+
format = RVAL2CRFORMAT (arg1);
|
1231
|
+
break;
|
1232
|
+
default:
|
1233
|
+
if (NIL_P (rb_cOSXCGContextRef))
|
1234
|
+
rb_cOSXCGContextRef =
|
1235
|
+
rb_const_get (rb_const_get (rb_cObject, rb_intern ("OSX")),
|
1236
|
+
rb_intern ("CGContextRef"));
|
1237
|
+
|
1238
|
+
if (RTEST (rb_obj_is_kind_of (arg1, rb_cOSXCGContextRef)))
|
1239
|
+
rbobj_to_nsobj (arg1, &objc_object);
|
1240
|
+
else
|
1241
|
+
rb_raise (rb_eArgError,
|
1242
|
+
"invalid argument (expect "
|
1243
|
+
"(width, height), "
|
1244
|
+
"(format, width, height) or "
|
1245
|
+
"(cg_context, width, height)): %s",
|
1246
|
+
rb_cairo__inspect (rb_ary_new3 (3, arg1, arg2, arg3)));
|
1247
|
+
break;
|
1248
|
+
}
|
1249
|
+
|
1250
|
+
rb_width = arg2;
|
1251
|
+
rb_height = arg3;
|
1252
|
+
}
|
1253
|
+
|
1254
|
+
width = NUM2UINT (rb_width);
|
1255
|
+
height = NUM2UINT (rb_height);
|
1256
|
+
|
1257
|
+
if (objc_object == nil)
|
1258
|
+
{
|
1259
|
+
surface = cairo_quartz_surface_create (format, width, height);
|
1260
|
+
}
|
1261
|
+
else
|
1262
|
+
{
|
1263
|
+
context = (CGContextRef)objc_object;
|
1264
|
+
surface =
|
1265
|
+
cairo_quartz_surface_create_for_cg_context (context, width, height);
|
1266
|
+
}
|
1267
|
+
|
1268
|
+
cr_surface_check_status (surface);
|
1269
|
+
DATA_PTR (self) = surface;
|
1270
|
+
if (rb_block_given_p ())
|
1271
|
+
yield_and_finish (self);
|
1272
|
+
return Qnil;
|
1273
|
+
}
|
1274
|
+
|
1275
|
+
static VALUE
|
1276
|
+
cr_quartz_surface_get_cg_context (VALUE self)
|
1277
|
+
{
|
1278
|
+
CGContextRef context;
|
1279
|
+
id objc_object;
|
1280
|
+
|
1281
|
+
context = cairo_quartz_surface_get_cg_context (_SELF);
|
1282
|
+
objc_object = (id)context;
|
1283
|
+
return ocid_to_rbobj (Qnil, objc_object);
|
1284
|
+
}
|
1153
1285
|
#endif
|
1154
1286
|
|
1155
1287
|
#ifdef CAIRO_HAS_WIN32_SURFACE
|
1156
|
-
/*
|
1288
|
+
/* Win32 surface functions */
|
1157
1289
|
|
1158
1290
|
/* from dl/dl.h (ruby 1.9) */
|
1159
|
-
#if SIZEOF_LONG == SIZEOF_VOIDP
|
1160
|
-
#
|
1161
|
-
#
|
1162
|
-
#else
|
1163
|
-
#
|
1164
|
-
#
|
1165
|
-
#endif
|
1291
|
+
# if SIZEOF_LONG == SIZEOF_VOIDP
|
1292
|
+
# define PTR2NUM(x) (ULONG2NUM((unsigned long)(x)))
|
1293
|
+
# define NUM2PTR(x) ((void *)(NUM2ULONG(x)))
|
1294
|
+
# else
|
1295
|
+
# define PTR2NUM(x) (ULL2NUM((unsigned long long)(x)))
|
1296
|
+
# define NUM2PTR(x) ((void *)(NUM2ULL(x)))
|
1297
|
+
# endif
|
1166
1298
|
|
1167
1299
|
static VALUE
|
1168
1300
|
cr_win32_surface_initialize (int argc, VALUE *argv, VALUE self)
|
@@ -1248,21 +1380,6 @@ cr_win32_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
1248
1380
|
return Qnil;
|
1249
1381
|
}
|
1250
1382
|
|
1251
|
-
# if CAIRO_CHECK_VERSION(1, 5, 2)
|
1252
|
-
static VALUE
|
1253
|
-
cr_win32_printing_surface_initialize (VALUE self, VALUE hdc)
|
1254
|
-
{
|
1255
|
-
cairo_surface_t *surface = NULL;
|
1256
|
-
|
1257
|
-
surface = cairo_win32_printing_surface_create (NUM2PTR (hdc));
|
1258
|
-
cr_surface_check_status (surface);
|
1259
|
-
DATA_PTR (self) = surface;
|
1260
|
-
if (rb_block_given_p ())
|
1261
|
-
yield_and_finish (self);
|
1262
|
-
return Qnil;
|
1263
|
-
}
|
1264
|
-
# endif
|
1265
|
-
|
1266
1383
|
static VALUE
|
1267
1384
|
cr_win32_surface_get_hdc (VALUE self)
|
1268
1385
|
{
|
@@ -1290,98 +1407,37 @@ cr_win32_surface_get_image (VALUE self)
|
|
1290
1407
|
# endif
|
1291
1408
|
#endif
|
1292
1409
|
|
1293
|
-
#
|
1294
|
-
/*
|
1295
|
-
|
1296
|
-
#include <objc/objc-runtime.h>
|
1410
|
+
#ifdef CAIRO_HAS_SVG_SURFACE
|
1411
|
+
/* SVG-surface functions */
|
1412
|
+
DEFINE_SURFACE(svg)
|
1297
1413
|
|
1298
|
-
|
1299
|
-
|
1414
|
+
static VALUE
|
1415
|
+
cr_svg_surface_restrict_to_version (VALUE self, VALUE version)
|
1416
|
+
{
|
1417
|
+
cairo_svg_surface_restrict_to_version (_SELF, RVAL2CRSVGVERSION (version));
|
1418
|
+
cr_surface_check_status (_SELF);
|
1419
|
+
return Qnil;
|
1420
|
+
}
|
1421
|
+
#endif
|
1300
1422
|
|
1423
|
+
#ifdef RB_CAIRO_HAS_WIN32_PRINTING_SURFACE
|
1424
|
+
/* Win32 printing surface functions */
|
1301
1425
|
static VALUE
|
1302
|
-
|
1426
|
+
cr_win32_printing_surface_initialize (VALUE self, VALUE hdc)
|
1303
1427
|
{
|
1304
|
-
id objc_object = nil;
|
1305
|
-
CGContextRef context;
|
1306
|
-
unsigned int width, height;
|
1307
1428
|
cairo_surface_t *surface = NULL;
|
1308
|
-
cairo_format_t format = CAIRO_FORMAT_ARGB32;
|
1309
|
-
VALUE arg1, arg2, arg3, rb_width, rb_height;
|
1310
|
-
static VALUE rb_cOSXCGContextRef = Qnil;
|
1311
|
-
|
1312
|
-
rb_scan_args (argc, argv, "21", &arg1, &arg2, &arg3);
|
1313
|
-
|
1314
|
-
if (argc == 2)
|
1315
|
-
{
|
1316
|
-
rb_width = arg1;
|
1317
|
-
rb_height = arg2;
|
1318
|
-
}
|
1319
|
-
else
|
1320
|
-
{
|
1321
|
-
switch (TYPE (arg1))
|
1322
|
-
{
|
1323
|
-
case T_NIL:
|
1324
|
-
break;
|
1325
|
-
case T_STRING:
|
1326
|
-
case T_SYMBOL:
|
1327
|
-
case T_FIXNUM:
|
1328
|
-
format = RVAL2CRFORMAT (arg1);
|
1329
|
-
break;
|
1330
|
-
default:
|
1331
|
-
if (NIL_P (rb_cOSXCGContextRef))
|
1332
|
-
rb_cOSXCGContextRef =
|
1333
|
-
rb_const_get (rb_const_get (rb_cObject, rb_intern ("OSX")),
|
1334
|
-
rb_intern ("CGContextRef"));
|
1335
|
-
|
1336
|
-
if (RTEST (rb_obj_is_kind_of (arg1, rb_cOSXCGContextRef)))
|
1337
|
-
rbobj_to_nsobj (arg1, &objc_object);
|
1338
|
-
else
|
1339
|
-
rb_raise (rb_eArgError,
|
1340
|
-
"invalid argument (expect "
|
1341
|
-
"(width, height), "
|
1342
|
-
"(format, width, height) or "
|
1343
|
-
"(cg_context, width, height)): %s",
|
1344
|
-
rb_cairo__inspect (rb_ary_new3 (3, arg1, arg2, arg3)));
|
1345
|
-
break;
|
1346
|
-
}
|
1347
|
-
|
1348
|
-
rb_width = arg2;
|
1349
|
-
rb_height = arg3;
|
1350
|
-
}
|
1351
|
-
|
1352
|
-
width = NUM2UINT (rb_width);
|
1353
|
-
height = NUM2UINT (rb_height);
|
1354
|
-
|
1355
|
-
if (objc_object == nil)
|
1356
|
-
{
|
1357
|
-
surface = cairo_quartz_surface_create (format, width, height);
|
1358
|
-
}
|
1359
|
-
else
|
1360
|
-
{
|
1361
|
-
context = (CGContextRef)objc_object;
|
1362
|
-
surface =
|
1363
|
-
cairo_quartz_surface_create_for_cg_context (context, width, height);
|
1364
|
-
}
|
1365
1429
|
|
1430
|
+
surface = cairo_win32_printing_surface_create (NUM2PTR (hdc));
|
1366
1431
|
cr_surface_check_status (surface);
|
1367
1432
|
DATA_PTR (self) = surface;
|
1368
1433
|
if (rb_block_given_p ())
|
1369
1434
|
yield_and_finish (self);
|
1370
1435
|
return Qnil;
|
1371
1436
|
}
|
1437
|
+
#endif
|
1372
1438
|
|
1373
|
-
|
1374
|
-
|
1375
|
-
{
|
1376
|
-
CGContextRef context;
|
1377
|
-
id objc_object;
|
1378
|
-
|
1379
|
-
context = cairo_quartz_surface_get_cg_context (_SELF);
|
1380
|
-
objc_object = (id)context;
|
1381
|
-
return ocid_to_rbobj (Qnil, objc_object);
|
1382
|
-
}
|
1383
|
-
|
1384
|
-
# if CAIRO_CHECK_VERSION(1, 5, 12)
|
1439
|
+
#ifdef RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE
|
1440
|
+
/* Quartz image surface functions */
|
1385
1441
|
static VALUE
|
1386
1442
|
cr_quartz_image_surface_initialize (VALUE self, VALUE image_surface)
|
1387
1443
|
{
|
@@ -1406,10 +1462,10 @@ cr_quartz_image_surface_get_image (VALUE self)
|
|
1406
1462
|
cr_surface_check_status (surface);
|
1407
1463
|
return CRSURFACE2RVAL (surface);
|
1408
1464
|
}
|
1409
|
-
# endif
|
1410
1465
|
#endif
|
1411
1466
|
|
1412
1467
|
#ifdef CAIRO_HAS_SCRIPT_SURFACE
|
1468
|
+
/* script surface functions */
|
1413
1469
|
static VALUE
|
1414
1470
|
cr_script_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1415
1471
|
{
|
@@ -1463,13 +1519,101 @@ cr_script_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
1463
1519
|
}
|
1464
1520
|
#endif
|
1465
1521
|
|
1466
|
-
#ifdef
|
1522
|
+
#ifdef CAIRO_HAS_RECORDING_SURFACE
|
1523
|
+
/* recording surface functions */
|
1467
1524
|
static VALUE
|
1468
|
-
|
1525
|
+
cr_recording_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1526
|
+
{
|
1527
|
+
VALUE arg1, arg2, arg3, arg4, arg5;
|
1528
|
+
cairo_surface_t *surface;
|
1529
|
+
cairo_content_t content = CAIRO_CONTENT_COLOR_ALPHA;
|
1530
|
+
cairo_rectangle_t extents;
|
1531
|
+
const char *error_message =
|
1532
|
+
"invalid argument (expect "
|
1533
|
+
"(x, y, width, height), "
|
1534
|
+
"([x, y, width, height]),"
|
1535
|
+
"(x, y, width, height, content) or "
|
1536
|
+
"([x, y, width, height], content)): %s";
|
1537
|
+
|
1538
|
+
rb_scan_args (argc, argv, "14", &arg1, &arg2, &arg3, &arg4, &arg5);
|
1539
|
+
if (argc == 1 || argc == 2)
|
1540
|
+
{
|
1541
|
+
VALUE rb_extents;
|
1542
|
+
|
1543
|
+
rb_extents = rb_check_array_type (arg1);
|
1544
|
+
if (RARRAY_LEN (rb_extents) != 4)
|
1545
|
+
rb_raise (rb_eArgError, error_message, rb_cairo__inspect (arg1));
|
1546
|
+
extents.x = NUM2DBL (RARRAY_PTR (rb_extents)[0]);
|
1547
|
+
extents.y = NUM2DBL (RARRAY_PTR (rb_extents)[1]);
|
1548
|
+
extents.width = NUM2DBL (RARRAY_PTR (rb_extents)[2]);
|
1549
|
+
extents.height = NUM2DBL (RARRAY_PTR (rb_extents)[3]);
|
1550
|
+
if (!NIL_P (arg2))
|
1551
|
+
content = RVAL2CRCONTENT (arg2);
|
1552
|
+
}
|
1553
|
+
else if (argc == 4 || argc == 5)
|
1554
|
+
{
|
1555
|
+
extents.x = NUM2DBL (arg1);
|
1556
|
+
extents.y = NUM2DBL (arg2);
|
1557
|
+
extents.width = NUM2DBL (arg3);
|
1558
|
+
extents.height = NUM2DBL (arg4);
|
1559
|
+
if (!NIL_P (arg5))
|
1560
|
+
content = RVAL2CRCONTENT (arg5);
|
1561
|
+
}
|
1562
|
+
else
|
1563
|
+
{
|
1564
|
+
rb_raise (rb_eArgError, error_message,
|
1565
|
+
rb_cairo__inspect (rb_ary_new4 (argc, argv)));
|
1566
|
+
}
|
1567
|
+
|
1568
|
+
surface = cairo_recording_surface_create (content, &extents);
|
1569
|
+
cr_surface_check_status (surface);
|
1570
|
+
DATA_PTR (self) = surface;
|
1571
|
+
if (rb_block_given_p ())
|
1572
|
+
yield_and_finish (self);
|
1573
|
+
return Qnil;
|
1574
|
+
}
|
1575
|
+
|
1576
|
+
static VALUE
|
1577
|
+
cr_recording_surface_get_ink_extents (VALUE self)
|
1578
|
+
{
|
1579
|
+
cairo_surface_t *surface;
|
1580
|
+
double x, y, width, height;
|
1581
|
+
|
1582
|
+
surface = _SELF;
|
1583
|
+
cairo_recording_surface_ink_extents (surface, &x, &y, &width, &height);
|
1584
|
+
cr_surface_check_status (surface);
|
1585
|
+
return rb_ary_new3 (4,
|
1586
|
+
rb_float_new (x), rb_float_new (y),
|
1587
|
+
rb_float_new (width), rb_float_new (height));
|
1588
|
+
}
|
1589
|
+
|
1590
|
+
# if CAIRO_CHECK_VERSION(1, 11, 4)
|
1591
|
+
static VALUE
|
1592
|
+
cr_recording_surface_get_extents (VALUE self)
|
1593
|
+
{
|
1594
|
+
cairo_surface_t *surface;
|
1595
|
+
cairo_rectangle_t extents;
|
1596
|
+
|
1597
|
+
surface = _SELF;
|
1598
|
+
cairo_recording_surface_get_extents (surface, &extents);
|
1599
|
+
cr_surface_check_status (surface);
|
1600
|
+
return rb_ary_new3 (4,
|
1601
|
+
rb_float_new (extents.x),
|
1602
|
+
rb_float_new (extents.y),
|
1603
|
+
rb_float_new (extents.width),
|
1604
|
+
rb_float_new (extents.height));
|
1605
|
+
}
|
1606
|
+
# endif
|
1607
|
+
#endif
|
1608
|
+
|
1609
|
+
#ifdef RB_CAIRO_HAS_GL_SURFACE
|
1610
|
+
/* GL surface functions */
|
1611
|
+
static VALUE
|
1612
|
+
cr_gl_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1469
1613
|
{
|
1470
1614
|
cairo_surface_t *surface;
|
1471
1615
|
cairo_device_t *device;
|
1472
|
-
|
1616
|
+
int width, height;
|
1473
1617
|
cairo_content_t content = CAIRO_CONTENT_COLOR_ALPHA;
|
1474
1618
|
VALUE rb_device, rb_width, rb_height, rb_content;
|
1475
1619
|
|
@@ -1477,8 +1621,8 @@ cr_xml_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
1477
1621
|
&rb_device, &rb_width, &rb_height, &rb_content);
|
1478
1622
|
|
1479
1623
|
device = RVAL2CRDEVICE (rb_device);
|
1480
|
-
width =
|
1481
|
-
height =
|
1624
|
+
width = NUM2INT (rb_width);
|
1625
|
+
height = NUM2INT (rb_height);
|
1482
1626
|
switch (TYPE (rb_content))
|
1483
1627
|
{
|
1484
1628
|
case T_NIL:
|
@@ -1497,17 +1641,99 @@ cr_xml_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
1497
1641
|
break;
|
1498
1642
|
}
|
1499
1643
|
|
1500
|
-
surface =
|
1644
|
+
surface = cairo_gl_surface_create (device, content, width, height);
|
1645
|
+
|
1646
|
+
cr_surface_check_status (surface);
|
1647
|
+
DATA_PTR (self) = surface;
|
1648
|
+
if (rb_block_given_p ())
|
1649
|
+
yield_and_finish (self);
|
1650
|
+
return Qnil;
|
1651
|
+
}
|
1652
|
+
|
1653
|
+
static VALUE
|
1654
|
+
cr_gl_texture_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1655
|
+
{
|
1656
|
+
cairo_surface_t *surface;
|
1657
|
+
cairo_device_t *device;
|
1658
|
+
unsigned int texture;
|
1659
|
+
int width, height;
|
1660
|
+
cairo_content_t content = CAIRO_CONTENT_COLOR_ALPHA;
|
1661
|
+
VALUE rb_device, rb_texture, rb_width, rb_height, rb_content;
|
1662
|
+
|
1663
|
+
rb_scan_args (argc, argv, "41",
|
1664
|
+
&rb_device, &rb_texture, &rb_width, &rb_height, &rb_content);
|
1665
|
+
|
1666
|
+
device = RVAL2CRDEVICE (rb_device);
|
1667
|
+
texture = NUM2UINT (rb_texture);
|
1668
|
+
width = NUM2INT (rb_width);
|
1669
|
+
height = NUM2INT (rb_height);
|
1670
|
+
switch (TYPE (rb_content))
|
1671
|
+
{
|
1672
|
+
case T_NIL:
|
1673
|
+
break;
|
1674
|
+
case T_STRING:
|
1675
|
+
case T_SYMBOL:
|
1676
|
+
case T_FIXNUM:
|
1677
|
+
content = RVAL2CRCONTENT (rb_content);
|
1678
|
+
break;
|
1679
|
+
default:
|
1680
|
+
rb_raise (rb_eArgError,
|
1681
|
+
"invalid argument (expect "
|
1682
|
+
"(device, texture, width, height) or "
|
1683
|
+
"(device, texture, width, height, content)): %s",
|
1684
|
+
rb_cairo__inspect (rb_ary_new4 (argc, argv)));
|
1685
|
+
break;
|
1686
|
+
}
|
1687
|
+
|
1688
|
+
surface = cairo_gl_surface_create_for_texture (device, content,
|
1689
|
+
texture,
|
1690
|
+
width,
|
1691
|
+
height);
|
1692
|
+
|
1693
|
+
cr_surface_check_status (surface);
|
1694
|
+
DATA_PTR (self) = surface;
|
1695
|
+
if (rb_block_given_p ())
|
1696
|
+
yield_and_finish (self);
|
1697
|
+
return Qnil;
|
1698
|
+
}
|
1699
|
+
|
1700
|
+
static VALUE
|
1701
|
+
cr_gl_surface_set_size (VALUE self, VALUE width, VALUE height)
|
1702
|
+
{
|
1703
|
+
cairo_surface_t *surface = NULL;
|
1704
|
+
|
1705
|
+
surface = _SELF;
|
1706
|
+
cairo_gl_surface_set_size (surface, NUM2INT (width), NUM2INT (height));
|
1707
|
+
cr_surface_check_status (surface);
|
1708
|
+
return Qnil;
|
1709
|
+
}
|
1710
|
+
|
1711
|
+
static VALUE
|
1712
|
+
cr_gl_surface_get_width (VALUE self)
|
1713
|
+
{
|
1714
|
+
return INT2NUM (cairo_gl_surface_get_width (_SELF));
|
1715
|
+
}
|
1716
|
+
|
1717
|
+
static VALUE
|
1718
|
+
cr_gl_surface_get_height (VALUE self)
|
1719
|
+
{
|
1720
|
+
return INT2NUM (cairo_gl_surface_get_height (_SELF));
|
1721
|
+
}
|
1722
|
+
|
1723
|
+
static VALUE
|
1724
|
+
cr_gl_surface_swap_buffers (VALUE self)
|
1725
|
+
{
|
1726
|
+
cairo_surface_t *surface = NULL;
|
1501
1727
|
|
1728
|
+
surface = _SELF;
|
1729
|
+
cairo_gl_surface_swapbuffers (surface);
|
1502
1730
|
cr_surface_check_status (surface);
|
1503
|
-
DATA_PTR (self) = surface;
|
1504
|
-
if (rb_block_given_p ())
|
1505
|
-
yield_and_finish (self);
|
1506
1731
|
return Qnil;
|
1507
1732
|
}
|
1508
1733
|
#endif
|
1509
1734
|
|
1510
1735
|
#ifdef CAIRO_HAS_TEE_SURFACE
|
1736
|
+
/* tee surface functions */
|
1511
1737
|
static VALUE
|
1512
1738
|
cr_tee_surface_initialize (VALUE self, VALUE master)
|
1513
1739
|
{
|
@@ -1599,13 +1825,14 @@ cr_tee_surface_array_reference (VALUE self, VALUE index)
|
|
1599
1825
|
}
|
1600
1826
|
#endif
|
1601
1827
|
|
1602
|
-
#ifdef
|
1828
|
+
#ifdef CAIRO_HAS_XML_SURFACE
|
1829
|
+
/* XML surface functions */
|
1603
1830
|
static VALUE
|
1604
|
-
|
1831
|
+
cr_xml_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1605
1832
|
{
|
1606
1833
|
cairo_surface_t *surface;
|
1607
1834
|
cairo_device_t *device;
|
1608
|
-
|
1835
|
+
double width, height;
|
1609
1836
|
cairo_content_t content = CAIRO_CONTENT_COLOR_ALPHA;
|
1610
1837
|
VALUE rb_device, rb_width, rb_height, rb_content;
|
1611
1838
|
|
@@ -1613,8 +1840,8 @@ cr_gl_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
1613
1840
|
&rb_device, &rb_width, &rb_height, &rb_content);
|
1614
1841
|
|
1615
1842
|
device = RVAL2CRDEVICE (rb_device);
|
1616
|
-
width =
|
1617
|
-
height =
|
1843
|
+
width = NUM2DBL (rb_width);
|
1844
|
+
height = NUM2DBL (rb_height);
|
1618
1845
|
switch (TYPE (rb_content))
|
1619
1846
|
{
|
1620
1847
|
case T_NIL:
|
@@ -1633,54 +1860,7 @@ cr_gl_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
1633
1860
|
break;
|
1634
1861
|
}
|
1635
1862
|
|
1636
|
-
surface =
|
1637
|
-
|
1638
|
-
cr_surface_check_status (surface);
|
1639
|
-
DATA_PTR (self) = surface;
|
1640
|
-
if (rb_block_given_p ())
|
1641
|
-
yield_and_finish (self);
|
1642
|
-
return Qnil;
|
1643
|
-
}
|
1644
|
-
|
1645
|
-
static VALUE
|
1646
|
-
cr_gl_texture_surface_initialize (int argc, VALUE *argv, VALUE self)
|
1647
|
-
{
|
1648
|
-
cairo_surface_t *surface;
|
1649
|
-
cairo_device_t *device;
|
1650
|
-
unsigned int texture;
|
1651
|
-
int width, height;
|
1652
|
-
cairo_content_t content = CAIRO_CONTENT_COLOR_ALPHA;
|
1653
|
-
VALUE rb_device, rb_texture, rb_width, rb_height, rb_content;
|
1654
|
-
|
1655
|
-
rb_scan_args (argc, argv, "41",
|
1656
|
-
&rb_device, &rb_texture, &rb_width, &rb_height, &rb_content);
|
1657
|
-
|
1658
|
-
device = RVAL2CRDEVICE (rb_device);
|
1659
|
-
texture = NUM2UINT (rb_texture);
|
1660
|
-
width = NUM2INT (rb_width);
|
1661
|
-
height = NUM2INT (rb_height);
|
1662
|
-
switch (TYPE (rb_content))
|
1663
|
-
{
|
1664
|
-
case T_NIL:
|
1665
|
-
break;
|
1666
|
-
case T_STRING:
|
1667
|
-
case T_SYMBOL:
|
1668
|
-
case T_FIXNUM:
|
1669
|
-
content = RVAL2CRCONTENT (rb_content);
|
1670
|
-
break;
|
1671
|
-
default:
|
1672
|
-
rb_raise (rb_eArgError,
|
1673
|
-
"invalid argument (expect "
|
1674
|
-
"(device, texture, width, height) or "
|
1675
|
-
"(device, texture, width, height, content)): %s",
|
1676
|
-
rb_cairo__inspect (rb_ary_new4 (argc, argv)));
|
1677
|
-
break;
|
1678
|
-
}
|
1679
|
-
|
1680
|
-
surface = cairo_gl_surface_create_for_texture (device, content,
|
1681
|
-
texture,
|
1682
|
-
width,
|
1683
|
-
height);
|
1863
|
+
surface = cairo_xml_surface_create (device, content, width, height);
|
1684
1864
|
|
1685
1865
|
cr_surface_check_status (surface);
|
1686
1866
|
DATA_PTR (self) = surface;
|
@@ -1688,40 +1868,6 @@ cr_gl_texture_surface_initialize (int argc, VALUE *argv, VALUE self)
|
|
1688
1868
|
yield_and_finish (self);
|
1689
1869
|
return Qnil;
|
1690
1870
|
}
|
1691
|
-
|
1692
|
-
static VALUE
|
1693
|
-
cr_gl_surface_set_size (VALUE self, VALUE width, VALUE height)
|
1694
|
-
{
|
1695
|
-
cairo_surface_t *surface = NULL;
|
1696
|
-
|
1697
|
-
surface = _SELF;
|
1698
|
-
cairo_gl_surface_set_size (surface, NUM2INT (width), NUM2INT (height));
|
1699
|
-
cr_surface_check_status (surface);
|
1700
|
-
return Qnil;
|
1701
|
-
}
|
1702
|
-
|
1703
|
-
static VALUE
|
1704
|
-
cr_gl_surface_get_width (VALUE self)
|
1705
|
-
{
|
1706
|
-
return INT2NUM (cairo_gl_surface_get_width (_SELF));
|
1707
|
-
}
|
1708
|
-
|
1709
|
-
static VALUE
|
1710
|
-
cr_gl_surface_get_height (VALUE self)
|
1711
|
-
{
|
1712
|
-
return INT2NUM (cairo_gl_surface_get_height (_SELF));
|
1713
|
-
}
|
1714
|
-
|
1715
|
-
static VALUE
|
1716
|
-
cr_gl_surface_swap_buffers (VALUE self)
|
1717
|
-
{
|
1718
|
-
cairo_surface_t *surface = NULL;
|
1719
|
-
|
1720
|
-
surface = _SELF;
|
1721
|
-
cairo_gl_surface_swapbuffers (surface);
|
1722
|
-
cr_surface_check_status (surface);
|
1723
|
-
return Qnil;
|
1724
|
-
}
|
1725
1871
|
#endif
|
1726
1872
|
|
1727
1873
|
static int
|
@@ -1753,6 +1899,37 @@ Init_cairo_surface (void)
|
|
1753
1899
|
rb_cairo__initialize_gc_guard_holder_class (rb_cCairo_Surface);
|
1754
1900
|
rb_set_end_proc(cr_finish_all_guarded_surfaces_at_end, Qnil);
|
1755
1901
|
|
1902
|
+
rb_define_singleton_method (rb_cCairo_Surface, "image_supported?",
|
1903
|
+
cr_surface_image_supported_p, 0);
|
1904
|
+
rb_define_singleton_method (rb_cCairo_Surface, "pdf_supported?",
|
1905
|
+
cr_surface_pdf_supported_p, 0);
|
1906
|
+
rb_define_singleton_method (rb_cCairo_Surface, "ps_supported?",
|
1907
|
+
cr_surface_ps_supported_p, 0);
|
1908
|
+
rb_define_singleton_method (rb_cCairo_Surface, "quartz_supported?",
|
1909
|
+
cr_surface_quartz_supported_p, 0);
|
1910
|
+
rb_define_singleton_method (rb_cCairo_Surface, "win32_supported?",
|
1911
|
+
cr_surface_win32_supported_p, 0);
|
1912
|
+
rb_define_singleton_method (rb_cCairo_Surface, "svg_supported?",
|
1913
|
+
cr_surface_svg_supported_p, 0);
|
1914
|
+
rb_define_singleton_method (rb_cCairo_Surface, "win32_printing_supported?",
|
1915
|
+
cr_surface_win32_printing_supported_p, 0);
|
1916
|
+
rb_define_singleton_method (rb_cCairo_Surface, "quartz_image_supported?",
|
1917
|
+
cr_surface_quartz_image_supported_p, 0);
|
1918
|
+
rb_define_singleton_method (rb_cCairo_Surface, "script_supported?",
|
1919
|
+
cr_surface_script_supported_p, 0);
|
1920
|
+
rb_define_singleton_method (rb_cCairo_Surface, "recording_supported?",
|
1921
|
+
cr_surface_recording_supported_p, 0);
|
1922
|
+
rb_define_singleton_method (rb_cCairo_Surface, "gl_supported?",
|
1923
|
+
cr_surface_gl_supported_p, 0);
|
1924
|
+
rb_define_singleton_method (rb_cCairo_Surface, "gl_texture_supported?",
|
1925
|
+
cr_surface_gl_texture_supported_p, 0);
|
1926
|
+
rb_define_singleton_method (rb_cCairo_Surface, "tee_supported?",
|
1927
|
+
cr_surface_tee_supported_p, 0);
|
1928
|
+
rb_define_singleton_method (rb_cCairo_Surface, "xml_supported?",
|
1929
|
+
cr_surface_xml_supported_p, 0);
|
1930
|
+
|
1931
|
+
rb_define_method (rb_cCairo_Surface, "initialize",
|
1932
|
+
cr_surface_initialize, -1);
|
1756
1933
|
|
1757
1934
|
rb_define_method (rb_cCairo_Surface, "create_similar",
|
1758
1935
|
cr_surface_create_similar, -1);
|
@@ -1814,15 +1991,15 @@ Init_cairo_surface (void)
|
|
1814
1991
|
|
1815
1992
|
RB_CAIRO_DEF_SETTERS (rb_cCairo_Surface);
|
1816
1993
|
|
1817
|
-
/*
|
1994
|
+
/* image surface */
|
1818
1995
|
rb_cCairo_ImageSurface =
|
1819
1996
|
rb_define_class_under (rb_mCairo, "ImageSurface", rb_cCairo_Surface);
|
1820
|
-
|
1997
|
+
|
1821
1998
|
#ifdef CAIRO_HAS_PNG_FUNCTIONS
|
1822
1999
|
rb_define_singleton_method (rb_cCairo_ImageSurface, "from_png",
|
1823
2000
|
cr_image_surface_create_from_png_generic, 1);
|
1824
2001
|
#endif
|
1825
|
-
|
2002
|
+
|
1826
2003
|
rb_define_method (rb_cCairo_ImageSurface, "initialize",
|
1827
2004
|
cr_image_surface_initialize, -1);
|
1828
2005
|
|
@@ -1837,34 +2014,30 @@ Init_cairo_surface (void)
|
|
1837
2014
|
rb_define_method (rb_cCairo_ImageSurface, "stride",
|
1838
2015
|
cr_image_surface_get_stride, 0);
|
1839
2016
|
|
1840
|
-
|
1841
|
-
|
1842
|
-
|
1843
|
-
|
2017
|
+
/* PDF surface */
|
2018
|
+
rb_cCairo_PDFSurface =
|
2019
|
+
rb_define_class_under (rb_mCairo, "PDFSurface", rb_cCairo_Surface);
|
2020
|
+
#ifdef CAIRO_HAS_PDF_SURFACE
|
2021
|
+
rb_define_method (rb_cCairo_PDFSurface, "initialize",
|
2022
|
+
cr_pdf_surface_initialize, -1);
|
1844
2023
|
|
1845
|
-
rb_define_method (
|
1846
|
-
|
2024
|
+
rb_define_method (rb_cCairo_PDFSurface, "set_size",
|
2025
|
+
cr_pdf_surface_set_size, -1);
|
1847
2026
|
|
1848
|
-
|
1849
|
-
|
1850
|
-
|
1851
|
-
rb_define_method (rb_cCairo_RecordingSurface, "extents",
|
1852
|
-
cr_recording_surface_get_extents, 0);
|
2027
|
+
# if CAIRO_CHECK_VERSION(1, 10, 0)
|
2028
|
+
rb_define_method (rb_cCairo_PDFSurface, "restrict_to_version",
|
2029
|
+
cr_pdf_surface_restrict_to_version, 1);
|
1853
2030
|
# endif
|
1854
|
-
#endif
|
1855
2031
|
|
1856
|
-
|
1857
|
-
|
1858
|
-
rb_define_class_under (rb_mCairo, # name "Surface", \
|
1859
|
-
rb_cCairo_Surface); \
|
1860
|
-
\
|
1861
|
-
rb_define_method (rb_cCairo_ ## name ## Surface, "initialize", \
|
1862
|
-
cr_ ## type ## _surface_initialize, -1);
|
2032
|
+
RB_CAIRO_DEF_SETTERS (rb_cCairo_PDFSurface);
|
2033
|
+
#endif
|
1863
2034
|
|
2035
|
+
/* PS surface */
|
2036
|
+
rb_cCairo_PSSurface =
|
2037
|
+
rb_define_class_under (rb_mCairo, "PSSurface", rb_cCairo_Surface);
|
1864
2038
|
#ifdef CAIRO_HAS_PS_SURFACE
|
1865
|
-
|
1866
|
-
|
1867
|
-
|
2039
|
+
rb_define_method (rb_cCairo_PSSurface, "initialize",
|
2040
|
+
cr_ps_surface_initialize, -1);
|
1868
2041
|
rb_define_method (rb_cCairo_PSSurface, "set_size", cr_ps_surface_set_size, -1);
|
1869
2042
|
rb_define_method (rb_cCairo_PSSurface, "dsc_comment",
|
1870
2043
|
cr_ps_surface_dsc_comment, 1);
|
@@ -1883,50 +2056,28 @@ Init_cairo_surface (void)
|
|
1883
2056
|
RB_CAIRO_DEF_SETTERS (rb_cCairo_PSSurface);
|
1884
2057
|
#endif
|
1885
2058
|
|
1886
|
-
|
1887
|
-
|
1888
|
-
|
1889
|
-
|
1890
|
-
rb_define_method (rb_cCairo_PDFSurface, "set_size",
|
1891
|
-
cr_pdf_surface_set_size, -1);
|
1892
|
-
|
1893
|
-
# if CAIRO_CHECK_VERSION(1, 10, 0)
|
1894
|
-
rb_define_method (rb_cCairo_PDFSurface, "restrict_to_version",
|
1895
|
-
cr_pdf_surface_restrict_to_version, 1);
|
1896
|
-
# endif
|
1897
|
-
|
1898
|
-
RB_CAIRO_DEF_SETTERS (rb_cCairo_PDFSurface);
|
1899
|
-
#endif
|
1900
|
-
|
1901
|
-
#ifdef CAIRO_HAS_XLIB_SURFACE
|
1902
|
-
/* XLib-surface */
|
1903
|
-
INIT_SURFACE(xlib, XLib)
|
1904
|
-
|
1905
|
-
RB_CAIRO_DEF_SETTERS (rb_cCairo_XLibSurface);
|
1906
|
-
#endif
|
1907
|
-
|
1908
|
-
#ifdef CAIRO_HAS_XCB_SURFACE
|
1909
|
-
/* XLib-surface */
|
1910
|
-
INIT_SURFACE(xcb, XCB)
|
1911
|
-
|
1912
|
-
RB_CAIRO_DEF_SETTERS (rb_cCairo_XCBSurface);
|
1913
|
-
#endif
|
1914
|
-
|
1915
|
-
#ifdef CAIRO_HAS_SVG_SURFACE
|
1916
|
-
/* SVG-surface */
|
1917
|
-
INIT_SURFACE(svg, SVG)
|
2059
|
+
/* XLib surface */
|
2060
|
+
rb_cCairo_XLibSurface =
|
2061
|
+
rb_define_class_under (rb_mCairo, "XLibSurface", rb_cCairo_Surface);
|
1918
2062
|
|
1919
|
-
|
1920
|
-
|
2063
|
+
/* XCB surface */
|
2064
|
+
rb_cCairo_XCBSurface =
|
2065
|
+
rb_define_class_under (rb_mCairo, "XCBSurface", rb_cCairo_Surface);
|
1921
2066
|
|
1922
|
-
|
2067
|
+
/* Quartz surface */
|
2068
|
+
rb_cCairo_QuartzSurface =
|
2069
|
+
rb_define_class_under (rb_mCairo, "QuartzSurface", rb_cCairo_Surface);
|
2070
|
+
#ifdef RB_CAIRO_HAS_QUARTZ_SURFACE
|
2071
|
+
rb_define_method (rb_cCairo_QuartzSurface, "initialize",
|
2072
|
+
cr_quartz_surface_initialize, -1);
|
2073
|
+
rb_define_method (rb_cCairo_QuartzSurface, "cg_context",
|
2074
|
+
cr_quartz_surface_get_cg_context, 0);
|
1923
2075
|
#endif
|
1924
2076
|
|
1925
|
-
|
1926
|
-
/* Win32-surface */
|
2077
|
+
/* Win32 surface */
|
1927
2078
|
rb_cCairo_Win32Surface =
|
1928
2079
|
rb_define_class_under (rb_mCairo, "Win32Surface", rb_cCairo_Surface);
|
1929
|
-
|
2080
|
+
#ifdef CAIRO_HAS_WIN32_SURFACE
|
1930
2081
|
rb_define_method (rb_cCairo_Win32Surface, "initialize",
|
1931
2082
|
cr_win32_surface_initialize, -1);
|
1932
2083
|
rb_define_method (rb_cCairo_Win32Surface, "hdc",
|
@@ -1935,84 +2086,79 @@ Init_cairo_surface (void)
|
|
1935
2086
|
rb_define_method (rb_cCairo_Win32Surface, "image",
|
1936
2087
|
cr_win32_surface_get_image, 0);
|
1937
2088
|
# endif
|
2089
|
+
#endif
|
1938
2090
|
|
1939
|
-
|
2091
|
+
/* SVG surface */
|
2092
|
+
rb_cCairo_SVGSurface =
|
2093
|
+
rb_define_class_under (rb_mCairo, "SVGSurface", rb_cCairo_Surface);
|
2094
|
+
#ifdef CAIRO_HAS_SVG_SURFACE
|
2095
|
+
rb_define_method (rb_cCairo_SVGSurface, "initialize",
|
2096
|
+
cr_svg_surface_initialize, -1);
|
2097
|
+
rb_define_method (rb_cCairo_SVGSurface, "restrict_to_version",
|
2098
|
+
cr_svg_surface_restrict_to_version, 1);
|
2099
|
+
|
2100
|
+
RB_CAIRO_DEF_SETTERS (rb_cCairo_SVGSurface);
|
2101
|
+
#endif
|
2102
|
+
|
2103
|
+
/* Win32 printing surface */
|
1940
2104
|
rb_cCairo_Win32PrintingSurface =
|
1941
2105
|
rb_define_class_under (rb_mCairo, "Win32PrintingSurface", rb_cCairo_Surface);
|
1942
|
-
|
2106
|
+
#ifdef RB_CAIRO_HAS_WIN32_PRINTING_SURFACE
|
1943
2107
|
rb_define_method (rb_cCairo_Win32PrintingSurface, "initialize",
|
1944
2108
|
cr_win32_printing_surface_initialize, -1);
|
1945
2109
|
rb_define_method (rb_cCairo_Win32PrintingSurface, "hdc",
|
1946
2110
|
cr_win32_surface_get_hdc, 0);
|
1947
|
-
# endif
|
1948
|
-
|
1949
2111
|
#endif
|
1950
2112
|
|
1951
|
-
|
1952
|
-
/* Quartz-surface */
|
1953
|
-
|
1954
|
-
rb_cCairo_QuartzSurface =
|
1955
|
-
rb_define_class_under (rb_mCairo, "QuartzSurface", rb_cCairo_Surface);
|
1956
|
-
|
1957
|
-
rb_define_method (rb_cCairo_QuartzSurface, "initialize",
|
1958
|
-
cr_quartz_surface_initialize, -1);
|
1959
|
-
rb_define_method (rb_cCairo_QuartzSurface, "cg_context",
|
1960
|
-
cr_quartz_surface_get_cg_context, 0);
|
1961
|
-
|
1962
|
-
# if CAIRO_CHECK_VERSION(1, 5, 12)
|
2113
|
+
/* Quartz image surface */
|
1963
2114
|
rb_cCairo_QuartzImageSurface =
|
1964
2115
|
rb_define_class_under (rb_mCairo, "QuartzImageSurface", rb_cCairo_Surface);
|
1965
|
-
|
2116
|
+
#ifdef RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE
|
1966
2117
|
rb_define_method (rb_cCairo_QuartzImageSurface, "initialize",
|
1967
2118
|
cr_quartz_image_surface_initialize, 1);
|
1968
2119
|
rb_define_method (rb_cCairo_QuartzImageSurface, "image",
|
1969
2120
|
cr_quartz_image_surface_get_image, 0);
|
1970
|
-
# endif
|
1971
2121
|
#endif
|
1972
2122
|
|
1973
|
-
|
2123
|
+
/* script surface */
|
1974
2124
|
rb_cCairo_ScriptSurface =
|
1975
2125
|
rb_define_class_under (rb_mCairo, "ScriptSurface", rb_cCairo_Surface);
|
1976
|
-
|
2126
|
+
#ifdef CAIRO_HAS_SCRIPT_SURFACE
|
1977
2127
|
rb_define_method (rb_cCairo_ScriptSurface, "initialize",
|
1978
2128
|
cr_script_surface_initialize, -1);
|
1979
2129
|
|
1980
2130
|
RB_CAIRO_DEF_SETTERS (rb_cCairo_ScriptSurface);
|
1981
2131
|
#endif
|
1982
2132
|
|
1983
|
-
|
1984
|
-
|
1985
|
-
rb_define_class_under (rb_mCairo, "
|
2133
|
+
/* Qt surface */
|
2134
|
+
rb_cCairo_QtSurface =
|
2135
|
+
rb_define_class_under (rb_mCairo, "QtSurface", rb_cCairo_Surface);
|
1986
2136
|
|
1987
|
-
|
1988
|
-
|
2137
|
+
/* recording surface */
|
2138
|
+
rb_cCairo_RecordingSurface =
|
2139
|
+
rb_define_class_under (rb_mCairo, "RecordingSurface", rb_cCairo_Surface);
|
2140
|
+
#ifdef CAIRO_HAS_RECORDING_SURFACE
|
2141
|
+
rb_define_method (rb_cCairo_RecordingSurface, "initialize",
|
2142
|
+
cr_recording_surface_initialize, -1);
|
1989
2143
|
|
1990
|
-
|
2144
|
+
rb_define_method (rb_cCairo_RecordingSurface, "ink_extents",
|
2145
|
+
cr_recording_surface_get_ink_extents, 0);
|
2146
|
+
# if CAIRO_CHECK_VERSION(1, 11, 4)
|
2147
|
+
rb_define_method (rb_cCairo_RecordingSurface, "extents",
|
2148
|
+
cr_recording_surface_get_extents, 0);
|
2149
|
+
# endif
|
1991
2150
|
#endif
|
1992
2151
|
|
1993
|
-
|
1994
|
-
|
1995
|
-
rb_define_class_under (rb_mCairo, "
|
1996
|
-
|
1997
|
-
rb_define_method (rb_cCairo_TeeSurface, "initialize",
|
1998
|
-
cr_tee_surface_initialize, 1);
|
1999
|
-
|
2000
|
-
rb_define_method (rb_cCairo_TeeSurface, "add",
|
2001
|
-
cr_tee_surface_add, 1);
|
2002
|
-
rb_define_method (rb_cCairo_TeeSurface, "<<",
|
2003
|
-
cr_tee_surface_shift_operator, 1);
|
2004
|
-
rb_define_method (rb_cCairo_TeeSurface, "remove",
|
2005
|
-
cr_tee_surface_remove, 1);
|
2006
|
-
rb_define_method (rb_cCairo_TeeSurface, "[]",
|
2007
|
-
cr_tee_surface_array_reference, 1);
|
2008
|
-
|
2009
|
-
RB_CAIRO_DEF_SETTERS (rb_cCairo_TeeSurface);
|
2010
|
-
#endif
|
2152
|
+
/* VG surface */
|
2153
|
+
rb_cCairo_VGSurface =
|
2154
|
+
rb_define_class_under (rb_mCairo, "VGSurface", rb_cCairo_Surface);
|
2011
2155
|
|
2012
|
-
|
2156
|
+
/* GL surface */
|
2013
2157
|
rb_cCairo_GLSurface =
|
2014
2158
|
rb_define_class_under (rb_mCairo, "GLSurface", rb_cCairo_Surface);
|
2015
|
-
|
2159
|
+
rb_cCairo_GLTextureSurface =
|
2160
|
+
rb_define_class_under (rb_mCairo, "GLTextureSurface", rb_cCairo_GLSurface);
|
2161
|
+
#ifdef RB_CAIRO_HAS_GL_SURFACE
|
2016
2162
|
rb_define_method (rb_cCairo_GLSurface, "initialize",
|
2017
2163
|
cr_gl_surface_initialize, 1);
|
2018
2164
|
|
@@ -2027,12 +2173,54 @@ Init_cairo_surface (void)
|
|
2027
2173
|
|
2028
2174
|
RB_CAIRO_DEF_SETTERS (rb_cCairo_GLSurface);
|
2029
2175
|
|
2030
|
-
rb_cCairo_GLTextureSurface =
|
2031
|
-
rb_define_class_under (rb_mCairo, "GLTextureSurface", rb_cCairo_GLSurface);
|
2032
|
-
|
2033
2176
|
rb_define_method (rb_cCairo_GLTextureSurface, "initialize",
|
2034
2177
|
cr_gl_texture_surface_initialize, 1);
|
2035
2178
|
|
2036
2179
|
RB_CAIRO_DEF_SETTERS (rb_cCairo_GLTextureSurface);
|
2037
2180
|
#endif
|
2181
|
+
|
2182
|
+
/* DRM surface */
|
2183
|
+
rb_cCairo_DRMSurface =
|
2184
|
+
rb_define_class_under (rb_mCairo, "DRMSurface", rb_cCairo_Surface);
|
2185
|
+
|
2186
|
+
/* tee surface */
|
2187
|
+
rb_cCairo_TeeSurface =
|
2188
|
+
rb_define_class_under (rb_mCairo, "TeeSurface", rb_cCairo_Surface);
|
2189
|
+
#ifdef CAIRO_HAS_TEE_SURFACE
|
2190
|
+
rb_define_method (rb_cCairo_TeeSurface, "initialize",
|
2191
|
+
cr_tee_surface_initialize, 1);
|
2192
|
+
|
2193
|
+
rb_define_method (rb_cCairo_TeeSurface, "add",
|
2194
|
+
cr_tee_surface_add, 1);
|
2195
|
+
rb_define_method (rb_cCairo_TeeSurface, "<<",
|
2196
|
+
cr_tee_surface_shift_operator, 1);
|
2197
|
+
rb_define_method (rb_cCairo_TeeSurface, "remove",
|
2198
|
+
cr_tee_surface_remove, 1);
|
2199
|
+
rb_define_method (rb_cCairo_TeeSurface, "[]",
|
2200
|
+
cr_tee_surface_array_reference, 1);
|
2201
|
+
|
2202
|
+
RB_CAIRO_DEF_SETTERS (rb_cCairo_TeeSurface);
|
2203
|
+
#endif
|
2204
|
+
|
2205
|
+
/* XML surface */
|
2206
|
+
rb_cCairo_XMLSurface =
|
2207
|
+
rb_define_class_under (rb_mCairo, "XMLSurface", rb_cCairo_Surface);
|
2208
|
+
#ifdef CAIRO_HAS_XML_SURFACE
|
2209
|
+
rb_define_method (rb_cCairo_XMLSurface, "initialize",
|
2210
|
+
cr_xml_surface_initialize, -1);
|
2211
|
+
|
2212
|
+
RB_CAIRO_DEF_SETTERS (rb_cCairo_XMLSurface);
|
2213
|
+
#endif
|
2214
|
+
|
2215
|
+
/* Skia surface */
|
2216
|
+
rb_cCairo_SkiaSurface =
|
2217
|
+
rb_define_class_under (rb_mCairo, "SkiaSurface", rb_cCairo_Surface);
|
2218
|
+
|
2219
|
+
/* sub surface */
|
2220
|
+
rb_cCairo_SubSurface =
|
2221
|
+
rb_define_class_under (rb_mCairo, "SubSurface", rb_cCairo_Surface);
|
2222
|
+
|
2223
|
+
/* Cogl surface */
|
2224
|
+
rb_cCairo_CoglSurface =
|
2225
|
+
rb_define_class_under (rb_mCairo, "CoglSurface", rb_cCairo_Surface);
|
2038
2226
|
}
|