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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5775df8bb8a56c3b4274ef0696f9364fe02490bea3164af4bd2b72bfcc6779e4
4
- data.tar.gz: ed53259db771ecd57cf7a923b2f9e2b63b312b44021e48ddc0e3ddfb7c1bafc4
3
+ metadata.gz: dffa934fa956305e9ed3ba9a9a5c92956c61c09277ea1723ceb69c1bee1b5c72
4
+ data.tar.gz: c4a6b1aa7bc5e3e00ca1bb388272d75c726fb20a1366dcbc2f15513d06177cbd
5
5
  SHA512:
6
- metadata.gz: db3510810d933b993b021919b772bab5f4fcca734402a57b6fb86c3f3c53650b6ffbab494b9768cc1ea5809db78873f2d7b50031078e7cd5d542be5cdbd6e63f
7
- data.tar.gz: d1647888e3e61430a12b2d3268c10d8832d1dad85777d8eb4d99c1be1cb33fd7c73ad0b2a2deeb0fd691c61da148454aa373172749ecd50af9c62715989d6e91
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
@@ -46,7 +46,7 @@ rb_cairo_satisfied_version (int argc, VALUE *argv, VALUE self)
46
46
  }
47
47
 
48
48
  void
49
- Init_cairo ()
49
+ Init_cairo (void)
50
50
  {
51
51
  int major, minor, micro;
52
52
 
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-2021 Sutou Kouhei <kou@cozmixng.org>
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 5
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-2019 Kouhei Sutou <kou@cozmixng.org>
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
- #define CAIRO_PDF_VERSION_MAX CAIRO_PDF_VERSION_1_5
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-2019 Kouhei Sutou <kou@cozmixng.org>
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
- Data_Get_Struct (obj, cairo_t, context);
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 Data_Wrap_Struct (rb_cCairo_Context, NULL, cr_context_free, cr);
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 Data_Wrap_Struct (klass, NULL, cr_context_free, NULL);
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
- DATA_PTR (self) = NULL;
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 (DATA_PTR (self) == NULL);
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 (DATA_PTR (self))
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
- DATA_PTR (rb_cr) = cr;
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
- DATA_PTR (self) = cr;
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
- return CRPATH2RVAL (path);
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 = cairo_copy_path_flat (_SELF);
1621
+ path = cairo_copy_path_flat (_SELF);
1592
1622
  rb_cairo_check_status (path->status);
1593
- return CRPATH2RVAL (path);
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);
@@ -2,7 +2,7 @@
2
2
  /*
3
3
  * Ruby Cairo Binding
4
4
  *
5
- * Copyright 2010-2019 Kouhei Sutou <kou@cozmixng.org>
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
- Data_Get_Struct (obj, cairo_device_t, device);
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 Data_Wrap_Struct (klass, NULL, cr_device_free, device);
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 Data_Wrap_Struct (klass, NULL, cr_device_free, NULL);
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
- DATA_PTR (self) = NULL;
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
- DATA_PTR (self) = device; \
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-2017 Kouhei Sutou <kou@cozmixng.org>
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
- Data_Get_Struct (obj, cairo_font_extents_t, extents);
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 Data_Wrap_Struct (rb_cCairo_FontExtents, NULL, -1, new_extents);
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 Data_Wrap_Struct (klass, NULL, -1, NULL);
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
- DATA_PTR (self) = extents;
84
+ RTYPEDDATA_DATA (self) = extents;
68
85
 
69
86
  return Qnil;
70
87
  }