cairo 1.8.5 → 1.10.0
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.
Potentially problematic release.
This version of cairo might be problematic. Click here for more details.
- data/NEWS +2 -2
- data/Rakefile +44 -7
- data/ext/cairo/cairo.def +28 -1
- data/ext/cairo/extconf.rb +14 -16
- data/ext/cairo/rb_cairo.c +4 -1
- data/ext/cairo/rb_cairo.h +65 -1
- data/ext/cairo/rb_cairo_constants.c +150 -3
- data/ext/cairo/rb_cairo_context.c +17 -0
- data/ext/cairo/rb_cairo_device.c +406 -0
- data/ext/cairo/rb_cairo_exception.c +83 -32
- data/ext/cairo/rb_cairo_io.c +166 -0
- data/ext/cairo/rb_cairo_io.h +44 -0
- data/ext/cairo/rb_cairo_matrix.c +1 -1
- data/ext/cairo/rb_cairo_private.h +3 -0
- data/ext/cairo/rb_cairo_region.c +385 -0
- data/ext/cairo/rb_cairo_surface.c +674 -199
- data/samples/blur.rb +2 -3
- data/samples/{pac2.rb → pac-nomralize.rb} +5 -6
- data/samples/pac-tee.rb +170 -0
- data/samples/pac.rb +2 -3
- data/samples/png.rb +2 -3
- data/samples/scalable.rb +2 -3
- data/samples/text-on-path.rb +2 -3
- data/samples/text2.rb +2 -3
- data/test/cairo-test-utils.rb +15 -0
- data/test/run-test.rb +5 -4
- data/test/test_context.rb +4 -4
- data/test/test_font_face.rb +34 -21
- data/test/test_recording_surface.rb +18 -0
- data/test/test_region.rb +102 -0
- data/test/test_script_device.rb +46 -0
- data/test/test_script_surface.rb +13 -0
- data/test/test_surface.rb +14 -4
- data/test/test_tee_surface.rb +32 -0
- data/test/test_xml_device.rb +22 -0
- data/test/test_xml_surface.rb +32 -0
- metadata +49 -77
- data/pkg-config.rb +0 -313
- data/test-unit/Rakefile +0 -30
- data/test-unit/bin/testrb +0 -5
- data/test-unit/lib/test/unit.rb +0 -280
- data/test-unit/lib/test/unit/assertionfailederror.rb +0 -14
- data/test-unit/lib/test/unit/assertions.rb +0 -722
- data/test-unit/lib/test/unit/attribute.rb +0 -125
- data/test-unit/lib/test/unit/autorunner.rb +0 -254
- data/test-unit/lib/test/unit/collector.rb +0 -43
- data/test-unit/lib/test/unit/collector/descendant.rb +0 -23
- data/test-unit/lib/test/unit/collector/dir.rb +0 -108
- data/test-unit/lib/test/unit/collector/load.rb +0 -135
- data/test-unit/lib/test/unit/collector/objectspace.rb +0 -34
- data/test-unit/lib/test/unit/color.rb +0 -61
- data/test-unit/lib/test/unit/diff.rb +0 -524
- data/test-unit/lib/test/unit/error.rb +0 -124
- data/test-unit/lib/test/unit/exceptionhandler.rb +0 -39
- data/test-unit/lib/test/unit/failure.rb +0 -110
- data/test-unit/lib/test/unit/fixture.rb +0 -185
- data/test-unit/lib/test/unit/notification.rb +0 -125
- data/test-unit/lib/test/unit/omission.rb +0 -143
- data/test-unit/lib/test/unit/pending.rb +0 -146
- data/test-unit/lib/test/unit/priority.rb +0 -146
- data/test-unit/lib/test/unit/runner/console.rb +0 -46
- data/test-unit/lib/test/unit/runner/emacs.rb +0 -8
- data/test-unit/lib/test/unit/testcase.rb +0 -281
- data/test-unit/lib/test/unit/testresult.rb +0 -89
- data/test-unit/lib/test/unit/testsuite.rb +0 -110
- data/test-unit/lib/test/unit/ui/console/outputlevel.rb +0 -14
- data/test-unit/lib/test/unit/ui/console/testrunner.rb +0 -195
- data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +0 -49
- data/test-unit/lib/test/unit/ui/testrunner.rb +0 -20
- data/test-unit/lib/test/unit/ui/testrunnermediator.rb +0 -77
- data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +0 -41
- data/test-unit/lib/test/unit/util/backtracefilter.rb +0 -41
- data/test-unit/lib/test/unit/util/observable.rb +0 -90
- data/test-unit/lib/test/unit/util/procwrapper.rb +0 -48
- data/test-unit/lib/test/unit/version.rb +0 -7
- data/test-unit/sample/adder.rb +0 -13
- data/test-unit/sample/subtracter.rb +0 -12
- data/test-unit/sample/tc_adder.rb +0 -18
- data/test-unit/sample/tc_subtracter.rb +0 -18
- data/test-unit/sample/ts_examples.rb +0 -7
- data/test-unit/test/collector/test_descendant.rb +0 -135
- data/test-unit/test/collector/test_dir.rb +0 -406
- data/test-unit/test/collector/test_load.rb +0 -333
- data/test-unit/test/collector/test_objectspace.rb +0 -98
- data/test-unit/test/run-test.rb +0 -13
- data/test-unit/test/test_assertions.rb +0 -693
- data/test-unit/test/test_attribute.rb +0 -86
- data/test-unit/test/test_color.rb +0 -37
- data/test-unit/test/test_diff.rb +0 -477
- data/test-unit/test/test_emacs_runner.rb +0 -60
- data/test-unit/test/test_error.rb +0 -26
- data/test-unit/test/test_failure.rb +0 -33
- data/test-unit/test/test_fixture.rb +0 -252
- data/test-unit/test/test_notification.rb +0 -33
- data/test-unit/test/test_omission.rb +0 -81
- data/test-unit/test/test_pending.rb +0 -70
- data/test-unit/test/test_priority.rb +0 -89
- data/test-unit/test/test_testcase.rb +0 -430
- data/test-unit/test/test_testresult.rb +0 -113
- data/test-unit/test/test_testsuite.rb +0 -129
- data/test-unit/test/testunit_test_util.rb +0 -14
- data/test-unit/test/ui/test_testrunmediator.rb +0 -20
- data/test-unit/test/util/test_backtracefilter.rb +0 -41
- data/test-unit/test/util/test_observable.rb +0 -102
- data/test-unit/test/util/test_procwrapper.rb +0 -36
- data/test/test_pkg_config.rb +0 -123
@@ -5,6 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-09-26 13:52:08 $
|
7
7
|
*
|
8
|
+
* Copyright 2005-2010 Kouhei Sutou <kou@cozmixng.org>
|
8
9
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
9
10
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
10
11
|
*
|
@@ -983,6 +984,19 @@ cr_in_fill (VALUE self, VALUE x, VALUE y)
|
|
983
984
|
return CBOOL2RVAL (cairo_in_fill (_SELF, NUM2DBL (x), NUM2DBL (y)));
|
984
985
|
}
|
985
986
|
|
987
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
988
|
+
static VALUE
|
989
|
+
cr_in_clip (VALUE self, VALUE x, VALUE y)
|
990
|
+
{
|
991
|
+
if (rb_block_given_p ())
|
992
|
+
{
|
993
|
+
cr_new_path (self);
|
994
|
+
rb_yield (self);
|
995
|
+
}
|
996
|
+
return CBOOL2RVAL (cairo_in_clip (_SELF, NUM2DBL (x), NUM2DBL (y)));
|
997
|
+
}
|
998
|
+
#endif
|
999
|
+
|
986
1000
|
/* Rectangular extents */
|
987
1001
|
static VALUE
|
988
1002
|
cr_stroke_extents (VALUE self)
|
@@ -1615,6 +1629,9 @@ Init_cairo_context (void)
|
|
1615
1629
|
/* Insideness testing */
|
1616
1630
|
rb_define_method (rb_cCairo_Context, "in_stroke?", cr_in_stroke, 2);
|
1617
1631
|
rb_define_method (rb_cCairo_Context, "in_fill?", cr_in_fill, 2);
|
1632
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
1633
|
+
rb_define_method (rb_cCairo_Context, "in_clip?", cr_in_clip, 2);
|
1634
|
+
#endif
|
1618
1635
|
|
1619
1636
|
/* Rectangular extents */
|
1620
1637
|
rb_define_method (rb_cCairo_Context, "stroke_extents", cr_stroke_extents, 0);
|
@@ -0,0 +1,406 @@
|
|
1
|
+
/* -*- c-file-style: "gnu"; indent-tabs-mode: nil -*- */
|
2
|
+
/*
|
3
|
+
* Ruby Cairo Binding
|
4
|
+
*
|
5
|
+
* Copyright 2010 Kouhei Sutou <kou@cozmixng.org>
|
6
|
+
*
|
7
|
+
* This file is made available under the same terms as Ruby
|
8
|
+
*
|
9
|
+
*/
|
10
|
+
|
11
|
+
#include "rb_cairo.h"
|
12
|
+
#include "rb_cairo_private.h"
|
13
|
+
#include "rb_cairo_io.h"
|
14
|
+
|
15
|
+
#ifdef HAVE_RUBY_ST_H
|
16
|
+
# include <ruby/st.h>
|
17
|
+
#else
|
18
|
+
# include <st.h>
|
19
|
+
#endif
|
20
|
+
|
21
|
+
#ifdef CAIRO_HAS_XML_SURFACE
|
22
|
+
# include <cairo-xml.h>
|
23
|
+
#endif
|
24
|
+
|
25
|
+
VALUE rb_cCairo_Device = Qnil;
|
26
|
+
VALUE rb_cCairo_DRMDevice = Qnil;
|
27
|
+
VALUE rb_cCairo_GLDevice = Qnil;
|
28
|
+
VALUE rb_cCairo_ScriptDevice = Qnil;
|
29
|
+
VALUE rb_cCairo_XCBDevice = Qnil;
|
30
|
+
VALUE rb_cCairo_XlibDevice = Qnil;
|
31
|
+
VALUE rb_cCairo_XMLDevice = Qnil;
|
32
|
+
|
33
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
34
|
+
|
35
|
+
static cairo_user_data_key_t cr_closure_key;
|
36
|
+
static cairo_user_data_key_t cr_object_holder_key;
|
37
|
+
static cairo_user_data_key_t cr_finished_key;
|
38
|
+
|
39
|
+
#define _SELF (RVAL2CRDEVICE(self))
|
40
|
+
|
41
|
+
static inline void
|
42
|
+
cr_device_check_status (cairo_device_t *device)
|
43
|
+
{
|
44
|
+
rb_cairo_check_status (cairo_device_status (device));
|
45
|
+
}
|
46
|
+
|
47
|
+
static VALUE
|
48
|
+
cr_device_get_klass (cairo_device_t *device)
|
49
|
+
{
|
50
|
+
VALUE klass;
|
51
|
+
cairo_device_type_t type;
|
52
|
+
|
53
|
+
type = cairo_device_get_type (device);
|
54
|
+
switch (type)
|
55
|
+
{
|
56
|
+
case CAIRO_DEVICE_TYPE_DRM:
|
57
|
+
klass = rb_cCairo_DRMDevice;
|
58
|
+
break;
|
59
|
+
case CAIRO_DEVICE_TYPE_GL:
|
60
|
+
klass = rb_cCairo_GLDevice;
|
61
|
+
break;
|
62
|
+
case CAIRO_DEVICE_TYPE_SCRIPT:
|
63
|
+
klass = rb_cCairo_ScriptDevice;
|
64
|
+
break;
|
65
|
+
case CAIRO_DEVICE_TYPE_XCB:
|
66
|
+
klass = rb_cCairo_XCBDevice;
|
67
|
+
break;
|
68
|
+
case CAIRO_DEVICE_TYPE_XLIB:
|
69
|
+
klass = rb_cCairo_XlibDevice;
|
70
|
+
break;
|
71
|
+
case CAIRO_DEVICE_TYPE_XML:
|
72
|
+
klass = rb_cCairo_XMLDevice;
|
73
|
+
break;
|
74
|
+
default:
|
75
|
+
klass = rb_cCairo_Device;
|
76
|
+
break;
|
77
|
+
}
|
78
|
+
|
79
|
+
if (NIL_P (klass))
|
80
|
+
rb_raise (rb_eArgError, "unknown device type: %d", type);
|
81
|
+
|
82
|
+
return klass;
|
83
|
+
}
|
84
|
+
|
85
|
+
/* constructor/de-constructor */
|
86
|
+
cairo_device_t *
|
87
|
+
rb_cairo_device_from_ruby_object (VALUE obj)
|
88
|
+
{
|
89
|
+
cairo_device_t *device;
|
90
|
+
if (!rb_cairo__is_kind_of (obj, rb_cCairo_Device))
|
91
|
+
{
|
92
|
+
rb_raise (rb_eTypeError, "not a cairo device");
|
93
|
+
}
|
94
|
+
Data_Get_Struct (obj, cairo_device_t, device);
|
95
|
+
if (!device)
|
96
|
+
rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
|
97
|
+
return device;
|
98
|
+
}
|
99
|
+
|
100
|
+
static rb_cairo__object_holder_t *
|
101
|
+
cr_object_holder_new (VALUE object)
|
102
|
+
{
|
103
|
+
return rb_cairo__object_holder_new (rb_cCairo_Device, object);
|
104
|
+
}
|
105
|
+
|
106
|
+
static void
|
107
|
+
cr_object_holder_free (void *ptr)
|
108
|
+
{
|
109
|
+
rb_cairo__object_holder_free (rb_cCairo_Device, ptr);
|
110
|
+
}
|
111
|
+
|
112
|
+
static void
|
113
|
+
cr_device_free (void *ptr)
|
114
|
+
{
|
115
|
+
cairo_device_t *device = ptr;
|
116
|
+
|
117
|
+
if (device)
|
118
|
+
cairo_device_destroy (device);
|
119
|
+
}
|
120
|
+
|
121
|
+
VALUE
|
122
|
+
rb_cairo_device_to_ruby_object (cairo_device_t *device)
|
123
|
+
{
|
124
|
+
if (device)
|
125
|
+
{
|
126
|
+
VALUE klass;
|
127
|
+
klass = cr_device_get_klass (device);
|
128
|
+
cairo_device_reference (device);
|
129
|
+
return Data_Wrap_Struct (klass, NULL, cr_device_free, device);
|
130
|
+
}
|
131
|
+
else
|
132
|
+
{
|
133
|
+
return Qnil;
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
VALUE
|
138
|
+
rb_cairo_device_to_ruby_object_with_destroy (cairo_device_t *device)
|
139
|
+
{
|
140
|
+
VALUE rb_device;
|
141
|
+
|
142
|
+
rb_device = rb_cairo_device_to_ruby_object (device);
|
143
|
+
if (device)
|
144
|
+
cairo_device_destroy (device);
|
145
|
+
|
146
|
+
return rb_device;
|
147
|
+
}
|
148
|
+
|
149
|
+
static VALUE
|
150
|
+
cr_device_allocate (VALUE klass)
|
151
|
+
{
|
152
|
+
return Data_Wrap_Struct (klass, NULL, cr_device_free, NULL);
|
153
|
+
}
|
154
|
+
|
155
|
+
/* Backend device manipulation */
|
156
|
+
static VALUE
|
157
|
+
cr_device_destroy (VALUE self)
|
158
|
+
{
|
159
|
+
cairo_device_t *device;
|
160
|
+
|
161
|
+
device = _SELF;
|
162
|
+
cairo_device_destroy (device);
|
163
|
+
DATA_PTR (self) = NULL;
|
164
|
+
|
165
|
+
return self;
|
166
|
+
}
|
167
|
+
|
168
|
+
static VALUE
|
169
|
+
cr_device_finish (VALUE self)
|
170
|
+
{
|
171
|
+
cairo_device_t *device;
|
172
|
+
rb_cairo__io_callback_closure_t *closure;
|
173
|
+
|
174
|
+
device = _SELF;
|
175
|
+
closure = cairo_device_get_user_data (device, &cr_closure_key);
|
176
|
+
|
177
|
+
cairo_device_finish (device);
|
178
|
+
cairo_device_set_user_data (device, &cr_finished_key, (void *)CR_TRUE, NULL);
|
179
|
+
cairo_device_set_user_data (device, &cr_object_holder_key, NULL, NULL);
|
180
|
+
|
181
|
+
if (closure && !NIL_P (closure->error))
|
182
|
+
rb_exc_raise (closure->error);
|
183
|
+
cr_device_check_status (device);
|
184
|
+
|
185
|
+
return self;
|
186
|
+
}
|
187
|
+
|
188
|
+
static VALUE
|
189
|
+
cr_device_flush (VALUE self)
|
190
|
+
{
|
191
|
+
cairo_device_flush (_SELF);
|
192
|
+
cr_device_check_status (_SELF);
|
193
|
+
return self;
|
194
|
+
}
|
195
|
+
|
196
|
+
static VALUE
|
197
|
+
cr_device_release (VALUE self)
|
198
|
+
{
|
199
|
+
cairo_device_release (_SELF);
|
200
|
+
cr_device_check_status (_SELF);
|
201
|
+
return self;
|
202
|
+
}
|
203
|
+
|
204
|
+
static VALUE
|
205
|
+
cr_device_acquire (VALUE self)
|
206
|
+
{
|
207
|
+
cairo_device_acquire (_SELF);
|
208
|
+
cr_device_check_status (_SELF);
|
209
|
+
if (rb_block_given_p ())
|
210
|
+
return rb_ensure (rb_yield, self, cr_device_release, self);
|
211
|
+
else
|
212
|
+
return self;
|
213
|
+
}
|
214
|
+
|
215
|
+
static int
|
216
|
+
cr_finish_all_guarded_devices_at_end_iter (VALUE key, VALUE value, VALUE data)
|
217
|
+
{
|
218
|
+
cr_device_finish (key);
|
219
|
+
return ST_CONTINUE;
|
220
|
+
}
|
221
|
+
|
222
|
+
static void
|
223
|
+
cr_finish_all_guarded_devices_at_end (VALUE data)
|
224
|
+
{
|
225
|
+
rb_hash_foreach (rb_cairo__gc_guarded_objects (rb_cCairo_Device),
|
226
|
+
cr_finish_all_guarded_devices_at_end_iter,
|
227
|
+
Qnil);
|
228
|
+
}
|
229
|
+
|
230
|
+
static void
|
231
|
+
yield_and_finish (VALUE self)
|
232
|
+
{
|
233
|
+
cairo_device_t *device;
|
234
|
+
|
235
|
+
rb_yield (self);
|
236
|
+
|
237
|
+
device = _SELF;
|
238
|
+
if (!cairo_device_get_user_data (device, &cr_finished_key))
|
239
|
+
cr_device_finish (self);
|
240
|
+
}
|
241
|
+
|
242
|
+
#define DEFINE_OUTPUT_INITIALIZE(type) \
|
243
|
+
static VALUE \
|
244
|
+
cr_ ## type ## _device_initialize (VALUE self, \
|
245
|
+
VALUE file_name_or_output) \
|
246
|
+
{ \
|
247
|
+
cairo_device_t *device; \
|
248
|
+
\
|
249
|
+
if (rb_respond_to (file_name_or_output, rb_cairo__io_id_write)) \
|
250
|
+
{ \
|
251
|
+
rb_cairo__io_callback_closure_t *closure; \
|
252
|
+
\
|
253
|
+
closure = rb_cairo__io_closure_new (file_name_or_output); \
|
254
|
+
device = \
|
255
|
+
cairo_ ## type ## _create_for_stream (rb_cairo__io_write_func, \
|
256
|
+
(void *)closure); \
|
257
|
+
if (cairo_device_status (device)) \
|
258
|
+
{ \
|
259
|
+
rb_cairo__io_closure_destroy (closure); \
|
260
|
+
} \
|
261
|
+
else \
|
262
|
+
{ \
|
263
|
+
rb_ivar_set (self, rb_cairo__io_id_output, \
|
264
|
+
file_name_or_output); \
|
265
|
+
cairo_device_set_user_data (device, &cr_closure_key, \
|
266
|
+
closure, \
|
267
|
+
rb_cairo__io_closure_free); \
|
268
|
+
cairo_device_set_user_data (device, &cr_object_holder_key, \
|
269
|
+
cr_object_holder_new (self), \
|
270
|
+
cr_object_holder_free); \
|
271
|
+
} \
|
272
|
+
} \
|
273
|
+
else \
|
274
|
+
{ \
|
275
|
+
const char *file_name; \
|
276
|
+
file_name = StringValueCStr (file_name_or_output); \
|
277
|
+
device = cairo_ ## type ## _create (file_name); \
|
278
|
+
} \
|
279
|
+
\
|
280
|
+
cr_device_check_status (device); \
|
281
|
+
DATA_PTR (self) = device; \
|
282
|
+
if (rb_block_given_p ()) \
|
283
|
+
yield_and_finish (self); \
|
284
|
+
return Qnil; \
|
285
|
+
}
|
286
|
+
|
287
|
+
# ifdef CAIRO_HAS_SCRIPT_SURFACE
|
288
|
+
DEFINE_OUTPUT_INITIALIZE(script)
|
289
|
+
|
290
|
+
static VALUE
|
291
|
+
cr_script_device_write_comment (VALUE self, VALUE comment)
|
292
|
+
{
|
293
|
+
cairo_device_t *device;
|
294
|
+
|
295
|
+
device = _SELF;
|
296
|
+
cairo_script_write_comment (device,
|
297
|
+
StringValuePtr (comment),
|
298
|
+
RSTRING_LEN (comment));
|
299
|
+
cr_device_check_status (device);
|
300
|
+
return Qnil;
|
301
|
+
}
|
302
|
+
|
303
|
+
static VALUE
|
304
|
+
cr_script_device_set_mode (VALUE self, VALUE mode)
|
305
|
+
{
|
306
|
+
cairo_device_t *device;
|
307
|
+
|
308
|
+
device = _SELF;
|
309
|
+
cairo_script_set_mode (device, RVAL2CRSCRIPTMODE (mode));
|
310
|
+
cr_device_check_status (device);
|
311
|
+
return Qnil;
|
312
|
+
}
|
313
|
+
|
314
|
+
static VALUE
|
315
|
+
cr_script_device_get_mode (VALUE self)
|
316
|
+
{
|
317
|
+
return INT2NUM (cairo_script_get_mode (_SELF));
|
318
|
+
}
|
319
|
+
|
320
|
+
static VALUE
|
321
|
+
cr_script_device_reply (VALUE self, VALUE recording_surface)
|
322
|
+
{
|
323
|
+
cairo_device_t *device;
|
324
|
+
|
325
|
+
device = _SELF;
|
326
|
+
cairo_script_from_recording_surface (device,
|
327
|
+
RVAL2CRSURFACE (recording_surface));
|
328
|
+
cr_device_check_status (device);
|
329
|
+
return Qnil;
|
330
|
+
}
|
331
|
+
# endif
|
332
|
+
|
333
|
+
# ifdef CAIRO_HAS_XML_SURFACE
|
334
|
+
DEFINE_OUTPUT_INITIALIZE(xml)
|
335
|
+
|
336
|
+
static VALUE
|
337
|
+
cr_xml_device_reply (VALUE self, VALUE recording_surface)
|
338
|
+
{
|
339
|
+
cairo_device_t *device;
|
340
|
+
|
341
|
+
device = _SELF;
|
342
|
+
cairo_xml_for_recording_surface (device,
|
343
|
+
RVAL2CRSURFACE (recording_surface));
|
344
|
+
cr_device_check_status (device);
|
345
|
+
return Qnil;
|
346
|
+
}
|
347
|
+
# endif
|
348
|
+
|
349
|
+
#endif
|
350
|
+
|
351
|
+
void
|
352
|
+
Init_cairo_device (void)
|
353
|
+
{
|
354
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
355
|
+
rb_cCairo_Device =
|
356
|
+
rb_define_class_under (rb_mCairo, "Device", rb_cObject);
|
357
|
+
rb_define_alloc_func (rb_cCairo_Device, cr_device_allocate);
|
358
|
+
|
359
|
+
rb_cairo__initialize_gc_guard_holder_class (rb_cCairo_Device);
|
360
|
+
rb_set_end_proc(cr_finish_all_guarded_devices_at_end, Qnil);
|
361
|
+
|
362
|
+
|
363
|
+
rb_define_method (rb_cCairo_Device, "destroy", cr_device_destroy, 0);
|
364
|
+
rb_define_method (rb_cCairo_Device, "finish", cr_device_finish, 0);
|
365
|
+
rb_define_method (rb_cCairo_Device, "flush", cr_device_flush, 0);
|
366
|
+
rb_define_method (rb_cCairo_Device, "acquire", cr_device_acquire, 0);
|
367
|
+
rb_define_method (rb_cCairo_Device, "release", cr_device_release, 0);
|
368
|
+
|
369
|
+
RB_CAIRO_DEF_SETTERS (rb_cCairo_Device);
|
370
|
+
|
371
|
+
# ifdef CAIRO_HAS_SCRIPT_SURFACE
|
372
|
+
rb_cCairo_ScriptDevice =
|
373
|
+
rb_define_class_under (rb_mCairo, "ScriptDevice", rb_cCairo_Device);
|
374
|
+
|
375
|
+
rb_define_method (rb_cCairo_ScriptDevice, "initialize",
|
376
|
+
cr_script_device_initialize, 1);
|
377
|
+
|
378
|
+
rb_define_method (rb_cCairo_ScriptDevice, "write_comment",
|
379
|
+
cr_script_device_write_comment, 1);
|
380
|
+
|
381
|
+
rb_define_method (rb_cCairo_ScriptDevice, "set_mode",
|
382
|
+
cr_script_device_set_mode, 1);
|
383
|
+
rb_define_method (rb_cCairo_ScriptDevice, "mode",
|
384
|
+
cr_script_device_get_mode, 0);
|
385
|
+
|
386
|
+
rb_define_method (rb_cCairo_ScriptDevice, "reply",
|
387
|
+
cr_script_device_reply, 1);
|
388
|
+
|
389
|
+
RB_CAIRO_DEF_SETTERS (rb_cCairo_ScriptDevice);
|
390
|
+
# endif
|
391
|
+
|
392
|
+
# ifdef CAIRO_HAS_XML_SURFACE
|
393
|
+
rb_cCairo_XMLDevice =
|
394
|
+
rb_define_class_under (rb_mCairo, "XMLDevice", rb_cCairo_Device);
|
395
|
+
|
396
|
+
rb_define_method (rb_cCairo_XMLDevice, "initialize",
|
397
|
+
cr_xml_device_initialize, 1);
|
398
|
+
|
399
|
+
rb_define_method (rb_cCairo_XMLDevice, "reply",
|
400
|
+
cr_xml_device_reply, 1);
|
401
|
+
|
402
|
+
RB_CAIRO_DEF_SETTERS (rb_cCairo_XMLDevice);
|
403
|
+
# endif
|
404
|
+
|
405
|
+
#endif
|
406
|
+
}
|
@@ -51,113 +51,136 @@ static VALUE rb_eCairo_InvalidClusters;
|
|
51
51
|
static VALUE rb_eCairo_InvalidSlant;
|
52
52
|
static VALUE rb_eCairo_InvalidWeight;
|
53
53
|
#endif
|
54
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
55
|
+
static VALUE rb_eCairo_InvalidSize;
|
56
|
+
static VALUE rb_eCairo_UserFontNotImplemented;
|
57
|
+
static VALUE rb_eCairo_DeviceTypeMismatch;
|
58
|
+
static VALUE rb_eCairo_DeviceError;
|
59
|
+
#endif
|
54
60
|
|
55
61
|
void
|
56
62
|
rb_cairo_check_status (cairo_status_t status)
|
57
63
|
{
|
58
64
|
const char *string = cairo_status_to_string (status);
|
59
|
-
|
65
|
+
|
60
66
|
switch (status)
|
61
67
|
{
|
62
68
|
case CAIRO_STATUS_SUCCESS:
|
63
69
|
break;
|
64
70
|
case CAIRO_STATUS_NO_MEMORY:
|
65
|
-
rb_raise (rb_eNoMemError, string);
|
71
|
+
rb_raise (rb_eNoMemError, "%s", string);
|
66
72
|
break;
|
67
73
|
case CAIRO_STATUS_INVALID_RESTORE:
|
68
|
-
rb_raise (rb_eCairo_InvalidRestoreError, string);
|
74
|
+
rb_raise (rb_eCairo_InvalidRestoreError, "%s", string);
|
69
75
|
break;
|
70
76
|
case CAIRO_STATUS_INVALID_POP_GROUP:
|
71
|
-
rb_raise (rb_eCairo_InvalidPopGroupError, string);
|
77
|
+
rb_raise (rb_eCairo_InvalidPopGroupError, "%s", string);
|
72
78
|
break;
|
73
79
|
case CAIRO_STATUS_NO_CURRENT_POINT:
|
74
|
-
rb_raise (rb_eCairo_NoCurrentPointError, string);
|
80
|
+
rb_raise (rb_eCairo_NoCurrentPointError, "%s", string);
|
75
81
|
break;
|
76
82
|
case CAIRO_STATUS_INVALID_MATRIX:
|
77
|
-
rb_raise (rb_eCairo_InvalidMatrixError, string);
|
83
|
+
rb_raise (rb_eCairo_InvalidMatrixError, "%s", string);
|
78
84
|
break;
|
79
85
|
case CAIRO_STATUS_INVALID_STATUS:
|
80
|
-
rb_raise (rb_eCairo_InvalidStatusError, string);
|
86
|
+
rb_raise (rb_eCairo_InvalidStatusError, "%s", string);
|
81
87
|
break;
|
82
88
|
case CAIRO_STATUS_NULL_POINTER:
|
83
|
-
rb_raise (rb_eCairo_NullPointerError, string);
|
89
|
+
rb_raise (rb_eCairo_NullPointerError, "%s", string);
|
84
90
|
break;
|
85
91
|
case CAIRO_STATUS_INVALID_STRING:
|
86
|
-
rb_raise (rb_eCairo_InvalidStringError, string);
|
92
|
+
rb_raise (rb_eCairo_InvalidStringError, "%s", string);
|
87
93
|
break;
|
88
94
|
case CAIRO_STATUS_INVALID_PATH_DATA:
|
89
|
-
rb_raise (rb_eCairo_InvalidPathDataError, string);
|
95
|
+
rb_raise (rb_eCairo_InvalidPathDataError, "%s", string);
|
90
96
|
break;
|
91
97
|
case CAIRO_STATUS_READ_ERROR:
|
92
|
-
rb_raise (rb_eCairo_ReadError, string);
|
98
|
+
rb_raise (rb_eCairo_ReadError, "%s", string);
|
93
99
|
break;
|
94
100
|
case CAIRO_STATUS_WRITE_ERROR:
|
95
|
-
rb_raise (rb_eCairo_WriteError, string);
|
101
|
+
rb_raise (rb_eCairo_WriteError, "%s", string);
|
96
102
|
break;
|
97
103
|
case CAIRO_STATUS_SURFACE_FINISHED:
|
98
|
-
rb_raise (rb_eCairo_SurfaceFinishedError, string);
|
104
|
+
rb_raise (rb_eCairo_SurfaceFinishedError, "%s", string);
|
99
105
|
break;
|
100
106
|
case CAIRO_STATUS_SURFACE_TYPE_MISMATCH:
|
101
|
-
rb_raise (rb_eCairo_SurfaceTypeMismatchError, string);
|
107
|
+
rb_raise (rb_eCairo_SurfaceTypeMismatchError, "%s", string);
|
102
108
|
break;
|
103
109
|
case CAIRO_STATUS_PATTERN_TYPE_MISMATCH:
|
104
|
-
rb_raise (rb_eCairo_PatternTypeMismatchError, string);
|
110
|
+
rb_raise (rb_eCairo_PatternTypeMismatchError, "%s", string);
|
105
111
|
break;
|
106
112
|
case CAIRO_STATUS_INVALID_CONTENT:
|
107
|
-
rb_raise (rb_eCairo_InvalidContentError, string);
|
113
|
+
rb_raise (rb_eCairo_InvalidContentError, "%s", string);
|
108
114
|
break;
|
109
115
|
case CAIRO_STATUS_INVALID_FORMAT:
|
110
|
-
rb_raise (rb_eCairo_InvalidFormatError, string);
|
116
|
+
rb_raise (rb_eCairo_InvalidFormatError, "%s", string);
|
111
117
|
break;
|
112
118
|
case CAIRO_STATUS_INVALID_VISUAL:
|
113
|
-
rb_raise (rb_eCairo_InvalidVisualError, string);
|
119
|
+
rb_raise (rb_eCairo_InvalidVisualError, "%s", string);
|
114
120
|
break;
|
115
121
|
case CAIRO_STATUS_FILE_NOT_FOUND:
|
116
|
-
rb_raise (rb_eCairo_FileNotFoundError, string);
|
122
|
+
rb_raise (rb_eCairo_FileNotFoundError, "%s", string);
|
117
123
|
break;
|
118
124
|
case CAIRO_STATUS_INVALID_DASH:
|
119
|
-
rb_raise (rb_eCairo_InvalidDashError, string);
|
125
|
+
rb_raise (rb_eCairo_InvalidDashError, "%s", string);
|
120
126
|
break;
|
121
127
|
case CAIRO_STATUS_INVALID_DSC_COMMENT:
|
122
|
-
rb_raise (rb_eCairo_InvalidDscCommentError, string);
|
128
|
+
rb_raise (rb_eCairo_InvalidDscCommentError, "%s", string);
|
123
129
|
break;
|
124
130
|
#if CAIRO_CHECK_VERSION(1, 3, 0)
|
125
131
|
case CAIRO_STATUS_INVALID_INDEX:
|
126
|
-
rb_raise (rb_eCairo_InvalidIndexError, string);
|
132
|
+
rb_raise (rb_eCairo_InvalidIndexError, "%s", string);
|
127
133
|
break;
|
128
134
|
case CAIRO_STATUS_CLIP_NOT_REPRESENTABLE:
|
129
|
-
rb_raise (rb_eCairo_ClipNotRepresentableError, string);
|
135
|
+
rb_raise (rb_eCairo_ClipNotRepresentableError, "%s", string);
|
130
136
|
break;
|
131
137
|
#endif
|
132
138
|
#if CAIRO_CHECK_VERSION(1, 5, 6)
|
133
139
|
case CAIRO_STATUS_TEMP_FILE_ERROR:
|
134
|
-
rb_raise (rb_eCairo_TempFileError, string);
|
140
|
+
rb_raise (rb_eCairo_TempFileError, "%s", string);
|
135
141
|
break;
|
136
142
|
case CAIRO_STATUS_INVALID_STRIDE:
|
137
|
-
rb_raise (rb_eCairo_InvalidStringError, string);
|
143
|
+
rb_raise (rb_eCairo_InvalidStringError, "%s", string);
|
138
144
|
break;
|
139
145
|
#endif
|
140
146
|
#if CAIRO_CHECK_VERSION(1, 7, 2)
|
141
147
|
case CAIRO_STATUS_FONT_TYPE_MISMATCH:
|
142
|
-
rb_raise (rb_eCairo_FontTypeMismatch, string);
|
148
|
+
rb_raise (rb_eCairo_FontTypeMismatch, "%s", string);
|
143
149
|
break;
|
144
150
|
case CAIRO_STATUS_USER_FONT_IMMUTABLE:
|
145
|
-
rb_raise (rb_eCairo_UserFontImmutable, string);
|
151
|
+
rb_raise (rb_eCairo_UserFontImmutable, "%s", string);
|
146
152
|
break;
|
147
153
|
case CAIRO_STATUS_USER_FONT_ERROR:
|
148
|
-
rb_raise (rb_eCairo_UserFontError, string);
|
154
|
+
rb_raise (rb_eCairo_UserFontError, "%s", string);
|
149
155
|
break;
|
150
156
|
case CAIRO_STATUS_NEGATIVE_COUNT:
|
151
|
-
rb_raise (rb_eCairo_NegativeCount, string);
|
157
|
+
rb_raise (rb_eCairo_NegativeCount, "%s", string);
|
152
158
|
break;
|
153
159
|
case CAIRO_STATUS_INVALID_CLUSTERS:
|
154
|
-
rb_raise (rb_eCairo_InvalidClusters, string);
|
160
|
+
rb_raise (rb_eCairo_InvalidClusters, "%s", string);
|
155
161
|
break;
|
156
162
|
case CAIRO_STATUS_INVALID_SLANT:
|
157
|
-
rb_raise (rb_eCairo_InvalidSlant, string);
|
163
|
+
rb_raise (rb_eCairo_InvalidSlant, "%s", string);
|
158
164
|
break;
|
159
165
|
case CAIRO_STATUS_INVALID_WEIGHT:
|
160
|
-
rb_raise (rb_eCairo_InvalidWeight, string);
|
166
|
+
rb_raise (rb_eCairo_InvalidWeight, "%s", string);
|
167
|
+
break;
|
168
|
+
#endif
|
169
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
170
|
+
case CAIRO_STATUS_INVALID_SIZE:
|
171
|
+
rb_raise (rb_eCairo_InvalidSize, "%s", string);
|
172
|
+
break;
|
173
|
+
case CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED:
|
174
|
+
rb_raise (rb_eCairo_UserFontNotImplemented, "%s", string);
|
175
|
+
break;
|
176
|
+
case CAIRO_STATUS_DEVICE_TYPE_MISMATCH:
|
177
|
+
rb_raise (rb_eCairo_DeviceTypeMismatch, "%s", string);
|
178
|
+
break;
|
179
|
+
case CAIRO_STATUS_DEVICE_ERROR:
|
180
|
+
rb_raise (rb_eCairo_DeviceError, "%s", string);
|
181
|
+
break;
|
182
|
+
case CAIRO_STATUS_LAST_STATUS:
|
183
|
+
rb_raise (rb_eArgError, "bug: %s: %d", string, status);
|
161
184
|
break;
|
162
185
|
#endif
|
163
186
|
}
|
@@ -236,6 +259,16 @@ rb_cairo__exception_to_status (VALUE exception)
|
|
236
259
|
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidWeight))
|
237
260
|
return CAIRO_STATUS_INVALID_WEIGHT;
|
238
261
|
#endif
|
262
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
263
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_InvalidSize))
|
264
|
+
return CAIRO_STATUS_INVALID_SIZE;
|
265
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_UserFontNotImplemented))
|
266
|
+
return CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED;
|
267
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_DeviceTypeMismatch))
|
268
|
+
return CAIRO_STATUS_DEVICE_TYPE_MISMATCH;
|
269
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_DeviceError))
|
270
|
+
return CAIRO_STATUS_DEVICE_ERROR;
|
271
|
+
#endif
|
239
272
|
|
240
273
|
return -1;
|
241
274
|
}
|
@@ -351,4 +384,22 @@ Init_cairo_exception ()
|
|
351
384
|
rb_define_class_under (rb_mCairo, "InvalidWeight",
|
352
385
|
rb_eArgError);
|
353
386
|
#endif
|
387
|
+
|
388
|
+
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
389
|
+
rb_eCairo_InvalidSize =
|
390
|
+
rb_define_class_under (rb_mCairo, "InvalidSize",
|
391
|
+
rb_eArgError);
|
392
|
+
|
393
|
+
rb_eCairo_UserFontNotImplemented =
|
394
|
+
rb_define_class_under (rb_mCairo, "UserFontNotImplemented",
|
395
|
+
rb_eCairo_Error);
|
396
|
+
|
397
|
+
rb_eCairo_DeviceTypeMismatch =
|
398
|
+
rb_define_class_under (rb_mCairo, "DeviceTypeMismatch",
|
399
|
+
rb_eArgError);
|
400
|
+
|
401
|
+
rb_eCairo_DeviceError =
|
402
|
+
rb_define_class_under (rb_mCairo, "DeviceError",
|
403
|
+
rb_eCairo_Error);
|
404
|
+
#endif
|
354
405
|
}
|