cairo 1.17.5 → 1.17.8

Sign up to get free protection for your applications and to get access to all the features.
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
  }