cairo 1.17.5 → 1.17.8
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.
- checksums.yaml +4 -4
- data/NEWS +63 -0
- data/ext/cairo/rb_cairo.c +1 -1
- data/ext/cairo/rb_cairo.h +2 -2
- data/ext/cairo/rb_cairo_constants.c +12 -2
- data/ext/cairo/rb_cairo_context.c +59 -21
- data/ext/cairo/rb_cairo_device.c +24 -15
- data/ext/cairo/rb_cairo_exception.c +20 -2
- data/ext/cairo/rb_cairo_font_extents.c +21 -4
- data/ext/cairo/rb_cairo_font_face.c +85 -24
- data/ext/cairo/rb_cairo_font_options.c +27 -15
- data/ext/cairo/rb_cairo_glyph.c +16 -13
- data/ext/cairo/rb_cairo_matrix.c +18 -15
- data/ext/cairo/rb_cairo_path.c +30 -45
- data/ext/cairo/rb_cairo_pattern.c +27 -19
- data/ext/cairo/rb_cairo_quartz_surface.c +7 -2
- data/ext/cairo/rb_cairo_rectangle.c +15 -4
- data/ext/cairo/rb_cairo_region.c +22 -14
- data/ext/cairo/rb_cairo_scaled_font.c +24 -15
- data/ext/cairo/rb_cairo_surface.c +82 -32
- data/ext/cairo/rb_cairo_text_cluster.c +21 -15
- data/ext/cairo/rb_cairo_text_extents.c +21 -4
- data/test/test_context.rb +14 -0
- data/test/test_font_face.rb +165 -70
- data/test/test_quartz_image_surface.rb +5 -3
- data/test/test_svg_surface.rb +5 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dffa934fa956305e9ed3ba9a9a5c92956c61c09277ea1723ceb69c1bee1b5c72
|
4
|
+
data.tar.gz: c4a6b1aa7bc5e3e00ca1bb388272d75c726fb20a1366dcbc2f15513d06177cbd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 163b19b0d0fdbfadd8117629b95fbd51f97a84617bc77366eb5083b4e631bc3eb863c1daa51ce6e79fd0cfbe462f69215b6bc3548c9a3960e95861c799f53515
|
7
|
+
data.tar.gz: c266cd0dc3e254bccecae19b9f8dfb688c55404cd348446d2e34d67d263e07b1244851292aa1d8c1140e30bfa8162af1135855b99eb1da7af54c9d67d77aefba
|
data/NEWS
CHANGED
@@ -1,3 +1,66 @@
|
|
1
|
+
Release 1.17.8 (2022-09-01) Sutou Kouhei <kou@cozmixng.org>
|
2
|
+
===========================================================
|
3
|
+
|
4
|
+
Improvements
|
5
|
+
------------
|
6
|
+
|
7
|
+
* Added support for Pathname for Cairo::Surface#write_to_png.
|
8
|
+
[GitHub#37][Reported by scivola]
|
9
|
+
|
10
|
+
Thanks
|
11
|
+
------
|
12
|
+
|
13
|
+
* scivola
|
14
|
+
|
15
|
+
Release 1.17.7 (2022-07-31) Sutou Kouhei <kou@cozmixng.org>
|
16
|
+
===========================================================
|
17
|
+
|
18
|
+
Fixes
|
19
|
+
-----
|
20
|
+
|
21
|
+
* Fixed a bug that Cairo::UserFontFace#on_render_color_glyph isn't
|
22
|
+
called.
|
23
|
+
|
24
|
+
Release 1.17.6 (2022-07-30) Sutou Kouhei <kou@cozmixng.org>
|
25
|
+
===========================================================
|
26
|
+
|
27
|
+
Improvements
|
28
|
+
------------
|
29
|
+
|
30
|
+
* Added support for cairo 1.17.6:
|
31
|
+
|
32
|
+
* Added Cairo::PDFVersion::VERSION_1_6.
|
33
|
+
|
34
|
+
* Added Cairo::PDFVersion::VERSION_1_7.
|
35
|
+
|
36
|
+
* Added Cairo::PDFSurface#set_metadata.
|
37
|
+
|
38
|
+
* Added Cairo::DirectWriteError.
|
39
|
+
|
40
|
+
* Added Cairo::Context#set_hairline.
|
41
|
+
|
42
|
+
* Added Cairo::Context#hairline?.
|
43
|
+
|
44
|
+
* Added Cairo::UserFont#on_render_color_glyph.
|
45
|
+
|
46
|
+
* Updated tests for cairo 1.17.6.
|
47
|
+
[GitHub#75][Reported by Mamoru TASAKA]
|
48
|
+
|
49
|
+
Fixes
|
50
|
+
-----
|
51
|
+
|
52
|
+
* Fixed a wrong conversion bug for the rest size argument in read
|
53
|
+
callback.
|
54
|
+
|
55
|
+
* Fixed a wrong conversion bug in Cairo::Options#hash.
|
56
|
+
|
57
|
+
* Fixed a GC related crash bug in Cairo::Surface#finish.
|
58
|
+
|
59
|
+
Thanks
|
60
|
+
------
|
61
|
+
|
62
|
+
* Mamoru TASAKA
|
63
|
+
|
1
64
|
Release 1.17.4 (2021-01-17) Sutou Kouhei <kou@cozmixng.org>
|
2
65
|
===========================================================
|
3
66
|
|
data/ext/cairo/rb_cairo.c
CHANGED
data/ext/cairo/rb_cairo.h
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-09-19 12:56:27 $
|
7
7
|
*
|
8
|
-
* Copyright 2006-
|
8
|
+
* Copyright 2006-2022 Sutou Kouhei <kou@cozmixng.org>
|
9
9
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
10
10
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
11
11
|
*
|
@@ -65,7 +65,7 @@ RB_CAIRO_BEGIN_DECLS
|
|
65
65
|
|
66
66
|
#define RB_CAIRO_VERSION_MAJOR 1
|
67
67
|
#define RB_CAIRO_VERSION_MINOR 17
|
68
|
-
#define RB_CAIRO_VERSION_MICRO
|
68
|
+
#define RB_CAIRO_VERSION_MICRO 8
|
69
69
|
|
70
70
|
RB_CAIRO_VAR VALUE rb_mCairo;
|
71
71
|
RB_CAIRO_VAR VALUE rb_cCairo_Context;
|
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-09-19 12:56:27 $
|
7
7
|
*
|
8
|
-
* Copyright 2005-
|
8
|
+
* Copyright 2005-2022 Sutou Kouhei <kou@cozmixng.org>
|
9
9
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
10
10
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
11
11
|
*
|
@@ -113,7 +113,11 @@ VALUE rb_mCairo_SVGUnit = Qnil;
|
|
113
113
|
#define CAIRO_PS_LEVEL_MAX CAIRO_PS_LEVEL_3
|
114
114
|
|
115
115
|
#define CAIRO_PDF_VERSION_MIN CAIRO_PDF_VERSION_1_4
|
116
|
-
#
|
116
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
117
|
+
# define CAIRO_PDF_VERSION_MAX CAIRO_PDF_VERSION_1_7
|
118
|
+
#else
|
119
|
+
# define CAIRO_PDF_VERSION_MAX CAIRO_PDF_VERSION_1_5
|
120
|
+
#endif
|
117
121
|
|
118
122
|
#define CAIRO_TEXT_CLUSTER_FLAG_MIN 0
|
119
123
|
#define CAIRO_TEXT_CLUSTER_FLAG_MAX CAIRO_TEXT_CLUSTER_FLAG_BACKWARD
|
@@ -644,6 +648,12 @@ Init_cairo_constants (void)
|
|
644
648
|
INT2FIX (CAIRO_PDF_VERSION_1_4));
|
645
649
|
rb_define_const (rb_mCairo_PDFVersion, "VERSION_1_5",
|
646
650
|
INT2FIX (CAIRO_PDF_VERSION_1_5));
|
651
|
+
# if CAIRO_CHECK_VERSION(1, 17, 6)
|
652
|
+
rb_define_const (rb_mCairo_PDFVersion, "VERSION_1_6",
|
653
|
+
INT2FIX (CAIRO_PDF_VERSION_1_6));
|
654
|
+
rb_define_const (rb_mCairo_PDFVersion, "VERSION_1_7",
|
655
|
+
INT2FIX (CAIRO_PDF_VERSION_1_7));
|
656
|
+
# endif
|
647
657
|
|
648
658
|
rb_define_singleton_method (rb_mCairo_PDFVersion, "list",
|
649
659
|
cr_pdf_get_versions, 0);
|
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-09-26 13:52:08 $
|
7
7
|
*
|
8
|
-
* Copyright 2005-
|
8
|
+
* Copyright 2005-2022 Sutou Kouhei <kou@cozmixng.org>
|
9
9
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
10
10
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
11
11
|
*
|
@@ -40,6 +40,23 @@ cr_check_status (cairo_t *context)
|
|
40
40
|
rb_cairo_check_status (cairo_status (context));
|
41
41
|
}
|
42
42
|
|
43
|
+
static void
|
44
|
+
cr_context_free (void *ptr)
|
45
|
+
{
|
46
|
+
cairo_destroy ((cairo_t *) ptr);
|
47
|
+
}
|
48
|
+
|
49
|
+
static const rb_data_type_t cr_context_type = {
|
50
|
+
"Cairo::Context",
|
51
|
+
{
|
52
|
+
NULL,
|
53
|
+
cr_context_free,
|
54
|
+
},
|
55
|
+
NULL,
|
56
|
+
NULL,
|
57
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
58
|
+
};
|
59
|
+
|
43
60
|
/* Functions for manipulating state objects */
|
44
61
|
cairo_t *
|
45
62
|
rb_cairo_context_from_ruby_object (VALUE obj)
|
@@ -49,7 +66,7 @@ rb_cairo_context_from_ruby_object (VALUE obj)
|
|
49
66
|
{
|
50
67
|
rb_raise (rb_eTypeError, "not a cairo graphics context");
|
51
68
|
}
|
52
|
-
|
69
|
+
TypedData_Get_Struct (obj, cairo_t, &cr_context_type, context);
|
53
70
|
if (!context)
|
54
71
|
rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
|
55
72
|
return context;
|
@@ -67,22 +84,13 @@ cr_object_holder_free (void *ptr)
|
|
67
84
|
rb_cairo__object_holder_free (rb_cCairo_Context, ptr);
|
68
85
|
}
|
69
86
|
|
70
|
-
static void
|
71
|
-
cr_context_free (void *ptr)
|
72
|
-
{
|
73
|
-
if (ptr)
|
74
|
-
{
|
75
|
-
cairo_destroy ((cairo_t *) ptr);
|
76
|
-
}
|
77
|
-
}
|
78
|
-
|
79
87
|
VALUE
|
80
88
|
rb_cairo_context_to_ruby_object (cairo_t *cr)
|
81
89
|
{
|
82
90
|
if (cr)
|
83
91
|
{
|
84
92
|
cairo_reference (cr);
|
85
|
-
return
|
93
|
+
return TypedData_Wrap_Struct (rb_cCairo_Context, &cr_context_type, cr);
|
86
94
|
}
|
87
95
|
else
|
88
96
|
{
|
@@ -93,7 +101,7 @@ rb_cairo_context_to_ruby_object (cairo_t *cr)
|
|
93
101
|
static VALUE
|
94
102
|
cr_allocate (VALUE klass)
|
95
103
|
{
|
96
|
-
return
|
104
|
+
return TypedData_Wrap_Struct (klass, &cr_context_type, NULL);
|
97
105
|
}
|
98
106
|
|
99
107
|
static void
|
@@ -118,20 +126,20 @@ cr_destroy (VALUE self)
|
|
118
126
|
cr_set_user_data (cr, &cr_object_holder_key, NULL, NULL);
|
119
127
|
cairo_destroy (cr);
|
120
128
|
|
121
|
-
|
129
|
+
RTYPEDDATA_DATA (self) = NULL;
|
122
130
|
return Qnil;
|
123
131
|
}
|
124
132
|
|
125
133
|
static VALUE
|
126
134
|
cr_destroyed (VALUE self)
|
127
135
|
{
|
128
|
-
return CBOOL2RVAL (
|
136
|
+
return CBOOL2RVAL (RTYPEDDATA_DATA (self) == NULL);
|
129
137
|
}
|
130
138
|
|
131
139
|
static VALUE
|
132
140
|
cr_destroy_with_destroy_check (VALUE self)
|
133
141
|
{
|
134
|
-
if (
|
142
|
+
if (RTYPEDDATA_DATA (self))
|
135
143
|
cr_destroy (self);
|
136
144
|
return Qnil;
|
137
145
|
}
|
@@ -194,7 +202,7 @@ cr_s_wrap (VALUE self, VALUE pointer)
|
|
194
202
|
|
195
203
|
rb_cr = rb_obj_alloc (self);
|
196
204
|
cairo_reference (cr);
|
197
|
-
|
205
|
+
RTYPEDDATA_DATA (rb_cr) = cr;
|
198
206
|
rb_ivar_set (rb_cr, cr_id_surface, Qnil);
|
199
207
|
|
200
208
|
if (rb_block_given_p ())
|
@@ -224,7 +232,7 @@ cr_initialize (VALUE self, VALUE target)
|
|
224
232
|
&cr_object_holder_key,
|
225
233
|
cr_object_holder_new (self),
|
226
234
|
cr_object_holder_free);
|
227
|
-
|
235
|
+
RTYPEDDATA_DATA (self) = cr;
|
228
236
|
if (rb_block_given_p ())
|
229
237
|
result = rb_ensure (rb_yield, self, cr_destroy_with_destroy_check, self);
|
230
238
|
return result;
|
@@ -523,6 +531,16 @@ cr_set_line_width (VALUE self, VALUE width)
|
|
523
531
|
return self;
|
524
532
|
}
|
525
533
|
|
534
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
535
|
+
static VALUE
|
536
|
+
cr_set_hairline (VALUE self, VALUE hairline)
|
537
|
+
{
|
538
|
+
cairo_set_hairline (_SELF, RTEST (hairline));
|
539
|
+
cr_check_status (_SELF);
|
540
|
+
return self;
|
541
|
+
}
|
542
|
+
#endif
|
543
|
+
|
526
544
|
static VALUE
|
527
545
|
cr_set_line_cap (VALUE self, VALUE cap)
|
528
546
|
{
|
@@ -1490,6 +1508,14 @@ cr_get_line_width (VALUE self)
|
|
1490
1508
|
return rb_float_new (cairo_get_line_width (_SELF));
|
1491
1509
|
}
|
1492
1510
|
|
1511
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
1512
|
+
static VALUE
|
1513
|
+
cr_get_hairline (VALUE self)
|
1514
|
+
{
|
1515
|
+
return CBOOL2RVAL (cairo_get_hairline (_SELF));
|
1516
|
+
}
|
1517
|
+
#endif
|
1518
|
+
|
1493
1519
|
static VALUE
|
1494
1520
|
cr_get_line_cap (VALUE self)
|
1495
1521
|
{
|
@@ -1577,20 +1603,26 @@ static VALUE
|
|
1577
1603
|
cr_copy_path (VALUE self)
|
1578
1604
|
{
|
1579
1605
|
cairo_path_t *path;
|
1606
|
+
VALUE rb_path;
|
1580
1607
|
|
1581
1608
|
path = cairo_copy_path (_SELF);
|
1582
1609
|
rb_cairo_check_status (path->status);
|
1583
|
-
|
1610
|
+
rb_path = CRPATH2RVAL (path);
|
1611
|
+
cairo_path_destroy (path);
|
1612
|
+
return rb_path;
|
1584
1613
|
}
|
1585
1614
|
|
1586
1615
|
static VALUE
|
1587
1616
|
cr_copy_path_flat (VALUE self)
|
1588
1617
|
{
|
1589
1618
|
cairo_path_t *path;
|
1619
|
+
VALUE rb_path;
|
1590
1620
|
|
1591
|
-
path =
|
1621
|
+
path = cairo_copy_path_flat (_SELF);
|
1592
1622
|
rb_cairo_check_status (path->status);
|
1593
|
-
|
1623
|
+
rb_path = CRPATH2RVAL (path);
|
1624
|
+
cairo_path_destroy (path);
|
1625
|
+
return rb_path;
|
1594
1626
|
}
|
1595
1627
|
|
1596
1628
|
static VALUE
|
@@ -1751,6 +1783,9 @@ Init_cairo_context (void)
|
|
1751
1783
|
rb_define_method (rb_cCairo_Context, "set_antialias", cr_set_antialias, 1);
|
1752
1784
|
rb_define_method (rb_cCairo_Context, "set_fill_rule", cr_set_fill_rule, 1);
|
1753
1785
|
rb_define_method (rb_cCairo_Context, "set_line_width", cr_set_line_width, 1);
|
1786
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
1787
|
+
rb_define_method (rb_cCairo_Context, "set_hairline", cr_set_hairline, 1);
|
1788
|
+
#endif
|
1754
1789
|
rb_define_method (rb_cCairo_Context, "set_line_cap", cr_set_line_cap, 1);
|
1755
1790
|
rb_define_method (rb_cCairo_Context, "set_line_join", cr_set_line_join, 1);
|
1756
1791
|
rb_define_method (rb_cCairo_Context, "set_dash", cr_set_dash, -1);
|
@@ -1862,6 +1897,9 @@ Init_cairo_context (void)
|
|
1862
1897
|
cr_get_current_point, 0);
|
1863
1898
|
rb_define_method (rb_cCairo_Context, "fill_rule", cr_get_fill_rule, 0);
|
1864
1899
|
rb_define_method (rb_cCairo_Context, "line_width", cr_get_line_width, 0);
|
1900
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
1901
|
+
rb_define_method (rb_cCairo_Context, "hairline?", cr_get_hairline, 0);
|
1902
|
+
#endif
|
1865
1903
|
rb_define_method (rb_cCairo_Context, "line_cap", cr_get_line_cap, 0);
|
1866
1904
|
rb_define_method (rb_cCairo_Context, "line_join", cr_get_line_join, 0);
|
1867
1905
|
rb_define_method (rb_cCairo_Context, "miter_limit", cr_get_miter_limit, 0);
|
data/ext/cairo/rb_cairo_device.c
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
* Ruby Cairo Binding
|
4
4
|
*
|
5
|
-
* Copyright 2010-
|
5
|
+
* Copyright 2010-2022 Sutou Kouhei <kou@cozmixng.org>
|
6
6
|
*
|
7
7
|
* This file is made available under the same terms as Ruby
|
8
8
|
*
|
@@ -117,6 +117,24 @@ cr_device_xml_supported_p (VALUE klass)
|
|
117
117
|
}
|
118
118
|
|
119
119
|
/* constructor/de-constructor */
|
120
|
+
static void
|
121
|
+
cr_device_free (void *ptr)
|
122
|
+
{
|
123
|
+
cairo_device_t *device = ptr;
|
124
|
+
cairo_device_destroy (device);
|
125
|
+
}
|
126
|
+
|
127
|
+
static const rb_data_type_t cr_device_type = {
|
128
|
+
"Cairo::Device",
|
129
|
+
{
|
130
|
+
NULL,
|
131
|
+
cr_device_free,
|
132
|
+
},
|
133
|
+
NULL,
|
134
|
+
NULL,
|
135
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
136
|
+
};
|
137
|
+
|
120
138
|
cairo_device_t *
|
121
139
|
rb_cairo_device_from_ruby_object (VALUE obj)
|
122
140
|
{
|
@@ -125,7 +143,7 @@ rb_cairo_device_from_ruby_object (VALUE obj)
|
|
125
143
|
{
|
126
144
|
rb_raise (rb_eTypeError, "not a cairo device");
|
127
145
|
}
|
128
|
-
|
146
|
+
TypedData_Get_Struct (obj, cairo_device_t, &cr_device_type, device);
|
129
147
|
if (!device)
|
130
148
|
rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
|
131
149
|
return device;
|
@@ -145,15 +163,6 @@ cr_object_holder_free (void *ptr)
|
|
145
163
|
}
|
146
164
|
#endif
|
147
165
|
|
148
|
-
static void
|
149
|
-
cr_device_free (void *ptr)
|
150
|
-
{
|
151
|
-
cairo_device_t *device = ptr;
|
152
|
-
|
153
|
-
if (device)
|
154
|
-
cairo_device_destroy (device);
|
155
|
-
}
|
156
|
-
|
157
166
|
VALUE
|
158
167
|
rb_cairo_device_to_ruby_object (cairo_device_t *device)
|
159
168
|
{
|
@@ -162,7 +171,7 @@ rb_cairo_device_to_ruby_object (cairo_device_t *device)
|
|
162
171
|
VALUE klass;
|
163
172
|
klass = cr_device_get_klass (device);
|
164
173
|
cairo_device_reference (device);
|
165
|
-
return
|
174
|
+
return TypedData_Wrap_Struct (klass, &cr_device_type, device);
|
166
175
|
}
|
167
176
|
else
|
168
177
|
{
|
@@ -185,7 +194,7 @@ rb_cairo_device_to_ruby_object_with_destroy (cairo_device_t *device)
|
|
185
194
|
static VALUE
|
186
195
|
cr_device_allocate (VALUE klass)
|
187
196
|
{
|
188
|
-
return
|
197
|
+
return TypedData_Wrap_Struct (klass, &cr_device_type, NULL);
|
189
198
|
}
|
190
199
|
|
191
200
|
static VALUE
|
@@ -206,7 +215,7 @@ cr_device_destroy (VALUE self)
|
|
206
215
|
|
207
216
|
device = _SELF;
|
208
217
|
cairo_device_destroy (device);
|
209
|
-
|
218
|
+
RTYPEDDATA_DATA (self) = NULL;
|
210
219
|
|
211
220
|
return self;
|
212
221
|
}
|
@@ -326,7 +335,7 @@ cr_ ## type ## _device_initialize (VALUE self, \
|
|
326
335
|
} \
|
327
336
|
\
|
328
337
|
cr_device_check_status (device); \
|
329
|
-
|
338
|
+
RTYPEDDATA_DATA (self) = device; \
|
330
339
|
if (rb_block_given_p ()) \
|
331
340
|
yield_and_finish (self); \
|
332
341
|
return Qnil; \
|
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-08-16 12:52:16 $
|
7
7
|
*
|
8
|
-
* Copyright 2010-
|
8
|
+
* Copyright 2010-2022 Sutou Kouhei <kou@cozmixng.org>
|
9
9
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
10
10
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
11
11
|
*
|
@@ -71,6 +71,9 @@ static VALUE rb_eCairo_FreeTypeError;
|
|
71
71
|
static VALUE rb_eCairo_Win32GDIError;
|
72
72
|
static VALUE rb_eCairo_TagError;
|
73
73
|
#endif
|
74
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
75
|
+
static VALUE rb_eCairo_DirectWriteError;
|
76
|
+
#endif
|
74
77
|
|
75
78
|
void
|
76
79
|
rb_cairo_check_status (cairo_status_t status)
|
@@ -221,6 +224,11 @@ rb_cairo_check_status (cairo_status_t status)
|
|
221
224
|
rb_raise (rb_eCairo_TagError, "%s", string);
|
222
225
|
break;
|
223
226
|
#endif
|
227
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
228
|
+
case CAIRO_STATUS_DWRITE_ERROR:
|
229
|
+
rb_raise (rb_eCairo_DirectWriteError, "%s", string);
|
230
|
+
break;
|
231
|
+
#endif
|
224
232
|
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
225
233
|
case CAIRO_STATUS_LAST_STATUS:
|
226
234
|
#else
|
@@ -328,12 +336,16 @@ rb_cairo__exception_to_status (VALUE exception)
|
|
328
336
|
else if (rb_cairo__is_kind_of (exception, rb_eCairo_TagError))
|
329
337
|
return CAIRO_STATUS_TAG_ERROR;
|
330
338
|
#endif
|
339
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
340
|
+
else if (rb_cairo__is_kind_of (exception, rb_eCairo_DirectWriteError))
|
341
|
+
return CAIRO_STATUS_DWRITE_ERROR;
|
342
|
+
#endif
|
331
343
|
|
332
344
|
return -1;
|
333
345
|
}
|
334
346
|
|
335
347
|
void
|
336
|
-
Init_cairo_exception ()
|
348
|
+
Init_cairo_exception (void)
|
337
349
|
{
|
338
350
|
VALUE rb_eCairo_Error;
|
339
351
|
rb_eCairo_Error =
|
@@ -488,4 +500,10 @@ Init_cairo_exception ()
|
|
488
500
|
rb_define_class_under (rb_mCairo, "TagError",
|
489
501
|
rb_eCairo_Error);
|
490
502
|
#endif
|
503
|
+
|
504
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
505
|
+
rb_eCairo_DirectWriteError =
|
506
|
+
rb_define_class_under (rb_mCairo, "DirectWriteError",
|
507
|
+
rb_eCairo_Error);
|
508
|
+
#endif
|
491
509
|
}
|
@@ -5,6 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-08-17 05:12:37 $
|
7
7
|
*
|
8
|
+
* Copyright 2005-2022 Sutou Kouhei <kou@cozmixng.org>
|
8
9
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
9
10
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
10
11
|
*
|
@@ -19,6 +20,17 @@ VALUE rb_cCairo_FontExtents;
|
|
19
20
|
|
20
21
|
#define _SELF(self) (RVAL2CRFONTEXTENTS(self))
|
21
22
|
|
23
|
+
static const rb_data_type_t cr_font_extents_type = {
|
24
|
+
"Cairo::FontExtents",
|
25
|
+
{
|
26
|
+
NULL,
|
27
|
+
ruby_xfree,
|
28
|
+
},
|
29
|
+
NULL,
|
30
|
+
NULL,
|
31
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
32
|
+
};
|
33
|
+
|
22
34
|
cairo_font_extents_t *
|
23
35
|
rb_cairo_font_extents_from_ruby_object (VALUE obj)
|
24
36
|
{
|
@@ -27,7 +39,10 @@ rb_cairo_font_extents_from_ruby_object (VALUE obj)
|
|
27
39
|
{
|
28
40
|
rb_raise (rb_eTypeError, "not a cairo font extents");
|
29
41
|
}
|
30
|
-
|
42
|
+
TypedData_Get_Struct (obj,
|
43
|
+
cairo_font_extents_t,
|
44
|
+
&cr_font_extents_type,
|
45
|
+
extents);
|
31
46
|
return extents;
|
32
47
|
}
|
33
48
|
|
@@ -38,7 +53,9 @@ rb_cairo_font_extents_to_ruby_object (cairo_font_extents_t *extents)
|
|
38
53
|
{
|
39
54
|
cairo_font_extents_t *new_extents = ALLOC (cairo_font_extents_t);
|
40
55
|
*new_extents = *extents;
|
41
|
-
return
|
56
|
+
return TypedData_Wrap_Struct (rb_cCairo_FontExtents,
|
57
|
+
&cr_font_extents_type,
|
58
|
+
new_extents);
|
42
59
|
}
|
43
60
|
else
|
44
61
|
{
|
@@ -49,7 +66,7 @@ rb_cairo_font_extents_to_ruby_object (cairo_font_extents_t *extents)
|
|
49
66
|
static VALUE
|
50
67
|
cr_font_extents_allocate (VALUE klass)
|
51
68
|
{
|
52
|
-
return
|
69
|
+
return TypedData_Wrap_Struct (klass, &cr_font_extents_type, NULL);
|
53
70
|
}
|
54
71
|
|
55
72
|
static VALUE
|
@@ -64,7 +81,7 @@ cr_font_extents_initialize (VALUE self)
|
|
64
81
|
extents->max_x_advance = 1.0;
|
65
82
|
extents->max_y_advance = 0.0;
|
66
83
|
|
67
|
-
|
84
|
+
RTYPEDDATA_DATA (self) = extents;
|
68
85
|
|
69
86
|
return Qnil;
|
70
87
|
}
|