cairo 1.17.6 → 1.17.7
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 +9 -0
- data/ext/cairo/rb_cairo.h +1 -1
- data/ext/cairo/rb_cairo_context.c +30 -16
- data/ext/cairo/rb_cairo_device.c +22 -13
- data/ext/cairo/rb_cairo_font_extents.c +20 -3
- data/ext/cairo/rb_cairo_font_face.c +22 -14
- data/ext/cairo/rb_cairo_font_options.c +26 -14
- data/ext/cairo/rb_cairo_glyph.c +15 -12
- data/ext/cairo/rb_cairo_matrix.c +17 -14
- data/ext/cairo/rb_cairo_path.c +29 -44
- data/ext/cairo/rb_cairo_pattern.c +21 -13
- data/ext/cairo/rb_cairo_rectangle.c +13 -2
- data/ext/cairo/rb_cairo_region.c +21 -13
- data/ext/cairo/rb_cairo_scaled_font.c +23 -14
- data/ext/cairo/rb_cairo_surface.c +15 -3
- data/ext/cairo/rb_cairo_text_cluster.c +20 -14
- data/ext/cairo/rb_cairo_text_extents.c +20 -3
- data/test/test_font_face.rb +152 -142
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f5ac730747ea5dada591e534a7c0653a0d1ad3fa3962dfdd01173e0074ff835c
|
4
|
+
data.tar.gz: 2fbccb304f8b4dbd3a89df42c9f1779b45a84b2f4c9be5ab591992eb9d7c3d31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 389eeca0e8c453e3c1b2ebe10053a1713c1c1ae93b22e46100b5bc1c39d566f00f60a1c676ae288e06fa9fdea6f24db8e107d53355bd52bc0e067e5b8b4fe073
|
7
|
+
data.tar.gz: d107b587d530433a0288f73a5b8d85710e2923213347f88e09de92562645dbcd9e501f8f9ab1bd74bb9ae13559ee94999e94c7555cd96a345b9d1d75965b961c
|
data/NEWS
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
Release 1.17.7 (2022-07-31) Sutou Kouhei <kou@cozmixng.org>
|
2
|
+
===========================================================
|
3
|
+
|
4
|
+
Fixes
|
5
|
+
-----
|
6
|
+
|
7
|
+
* Fixed a bug that Cairo::UserFontFace#on_render_color_glyph isn't
|
8
|
+
called.
|
9
|
+
|
1
10
|
Release 1.17.6 (2022-07-30) Sutou Kouhei <kou@cozmixng.org>
|
2
11
|
===========================================================
|
3
12
|
|
data/ext/cairo/rb_cairo.h
CHANGED
@@ -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
|
@@ -1595,20 +1603,26 @@ static VALUE
|
|
1595
1603
|
cr_copy_path (VALUE self)
|
1596
1604
|
{
|
1597
1605
|
cairo_path_t *path;
|
1606
|
+
VALUE rb_path;
|
1598
1607
|
|
1599
1608
|
path = cairo_copy_path (_SELF);
|
1600
1609
|
rb_cairo_check_status (path->status);
|
1601
|
-
|
1610
|
+
rb_path = CRPATH2RVAL (path);
|
1611
|
+
cairo_path_destroy (path);
|
1612
|
+
return rb_path;
|
1602
1613
|
}
|
1603
1614
|
|
1604
1615
|
static VALUE
|
1605
1616
|
cr_copy_path_flat (VALUE self)
|
1606
1617
|
{
|
1607
1618
|
cairo_path_t *path;
|
1619
|
+
VALUE rb_path;
|
1608
1620
|
|
1609
|
-
path =
|
1621
|
+
path = cairo_copy_path_flat (_SELF);
|
1610
1622
|
rb_cairo_check_status (path->status);
|
1611
|
-
|
1623
|
+
rb_path = CRPATH2RVAL (path);
|
1624
|
+
cairo_path_destroy (path);
|
1625
|
+
return rb_path;
|
1612
1626
|
}
|
1613
1627
|
|
1614
1628
|
static VALUE
|
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
|
@@ -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
|
@@ -55,6 +55,24 @@ static ID cr_id_at_need_cluster_flags;
|
|
55
55
|
|
56
56
|
#define _SELF (RVAL2CRFONTFACE(self))
|
57
57
|
|
58
|
+
static void
|
59
|
+
cr_font_face_free (void *ptr)
|
60
|
+
{
|
61
|
+
cairo_font_face_t *face = ptr;
|
62
|
+
cairo_font_face_destroy (face);
|
63
|
+
}
|
64
|
+
|
65
|
+
static const rb_data_type_t cr_font_face_type = {
|
66
|
+
"Cairo::FontFace",
|
67
|
+
{
|
68
|
+
NULL,
|
69
|
+
cr_font_face_free,
|
70
|
+
},
|
71
|
+
NULL,
|
72
|
+
NULL,
|
73
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
74
|
+
};
|
75
|
+
|
58
76
|
static inline void
|
59
77
|
cr_font_face_check_status (cairo_font_face_t *face)
|
60
78
|
{
|
@@ -72,23 +90,13 @@ rb_cairo_font_face_from_ruby_object (VALUE obj)
|
|
72
90
|
"not a cairo font face: %s",
|
73
91
|
rb_cairo__inspect (obj));
|
74
92
|
}
|
75
|
-
|
93
|
+
TypedData_Get_Struct (obj, cairo_font_face_t, &cr_font_face_type, face);
|
76
94
|
if (!face)
|
77
95
|
rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
|
78
96
|
cr_font_face_check_status (face);
|
79
97
|
return face;
|
80
98
|
}
|
81
99
|
|
82
|
-
static void
|
83
|
-
cr_font_face_free (void *ptr)
|
84
|
-
{
|
85
|
-
if (ptr)
|
86
|
-
{
|
87
|
-
cairo_font_face_t *face = ptr;
|
88
|
-
cairo_font_face_destroy (face);
|
89
|
-
}
|
90
|
-
}
|
91
|
-
|
92
100
|
VALUE
|
93
101
|
rb_cairo_font_face_to_ruby_object (cairo_font_face_t *face)
|
94
102
|
{
|
@@ -116,7 +124,7 @@ rb_cairo_font_face_to_ruby_object (cairo_font_face_t *face)
|
|
116
124
|
break;
|
117
125
|
}
|
118
126
|
cairo_font_face_reference (face);
|
119
|
-
return
|
127
|
+
return TypedData_Wrap_Struct (klass, &cr_font_face_type, face);
|
120
128
|
}
|
121
129
|
else
|
122
130
|
{
|
@@ -127,7 +135,7 @@ rb_cairo_font_face_to_ruby_object (cairo_font_face_t *face)
|
|
127
135
|
static VALUE
|
128
136
|
cr_font_face_allocate (VALUE klass)
|
129
137
|
{
|
130
|
-
return
|
138
|
+
return TypedData_Wrap_Struct (klass, &cr_font_face_type, NULL);
|
131
139
|
}
|
132
140
|
|
133
141
|
static VALUE
|
@@ -480,7 +488,7 @@ cr_user_font_face_render_glyph_func_internal (cairo_scaled_font_t *scaled_font,
|
|
480
488
|
|
481
489
|
face = cairo_scaled_font_get_font_face (scaled_font);
|
482
490
|
self = (VALUE)cairo_font_face_get_user_data (face, &ruby_object_key);
|
483
|
-
receiver = rb_ivar_get (self,
|
491
|
+
receiver = rb_ivar_get (self, id_registered_method_name);
|
484
492
|
if (NIL_P (receiver) &&
|
485
493
|
rb_obj_respond_to (self, id_registered_method_name, Qtrue))
|
486
494
|
{
|
@@ -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
|
*
|
10
10
|
* This file is made available under the same terms as Ruby
|
11
11
|
*
|
@@ -18,6 +18,23 @@
|
|
18
18
|
|
19
19
|
VALUE rb_cCairo_FontOptions;
|
20
20
|
|
21
|
+
static void
|
22
|
+
cr_options_free (void *ptr)
|
23
|
+
{
|
24
|
+
cairo_font_options_destroy ((cairo_font_options_t *) ptr);
|
25
|
+
}
|
26
|
+
|
27
|
+
static const rb_data_type_t cr_font_options_type = {
|
28
|
+
"Cairo::FontOptions",
|
29
|
+
{
|
30
|
+
NULL,
|
31
|
+
cr_options_free,
|
32
|
+
},
|
33
|
+
NULL,
|
34
|
+
NULL,
|
35
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
36
|
+
};
|
37
|
+
|
21
38
|
static inline void
|
22
39
|
cr_options_check_status (cairo_font_options_t *options)
|
23
40
|
{
|
@@ -32,19 +49,13 @@ rb_cairo_font_options_from_ruby_object (VALUE obj)
|
|
32
49
|
{
|
33
50
|
rb_raise (rb_eTypeError, "not a cairo font options");
|
34
51
|
}
|
35
|
-
|
52
|
+
TypedData_Get_Struct (obj,
|
53
|
+
cairo_font_options_t,
|
54
|
+
&cr_font_options_type,
|
55
|
+
options);
|
36
56
|
return options;
|
37
57
|
}
|
38
58
|
|
39
|
-
static void
|
40
|
-
cr_options_free (void *ptr)
|
41
|
-
{
|
42
|
-
if (ptr)
|
43
|
-
{
|
44
|
-
cairo_font_options_destroy ((cairo_font_options_t *) ptr);
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
59
|
VALUE
|
49
60
|
rb_cairo_font_options_to_ruby_object (cairo_font_options_t *options)
|
50
61
|
{
|
@@ -53,8 +64,9 @@ rb_cairo_font_options_to_ruby_object (cairo_font_options_t *options)
|
|
53
64
|
cairo_font_options_t *copied_options;
|
54
65
|
copied_options = cairo_font_options_copy (options);
|
55
66
|
cr_options_check_status (copied_options);
|
56
|
-
return
|
57
|
-
|
67
|
+
return TypedData_Wrap_Struct (rb_cCairo_FontOptions,
|
68
|
+
&cr_font_options_type,
|
69
|
+
copied_options);
|
58
70
|
}
|
59
71
|
else
|
60
72
|
{
|
@@ -65,7 +77,7 @@ rb_cairo_font_options_to_ruby_object (cairo_font_options_t *options)
|
|
65
77
|
static VALUE
|
66
78
|
cr_options_allocate (VALUE klass)
|
67
79
|
{
|
68
|
-
return
|
80
|
+
return TypedData_Wrap_Struct (klass, &cr_font_options_type, NULL);
|
69
81
|
}
|
70
82
|
|
71
83
|
static VALUE
|
data/ext/cairo/rb_cairo_glyph.c
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-08-16 08:16:39 $
|
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
|
*
|
@@ -20,6 +21,17 @@ VALUE rb_cCairo_Glyph;
|
|
20
21
|
|
21
22
|
#define _SELF(self) (RVAL2CRGLYPH(self))
|
22
23
|
|
24
|
+
static const rb_data_type_t cr_glyph_type = {
|
25
|
+
"Cairo::Glyph",
|
26
|
+
{
|
27
|
+
NULL,
|
28
|
+
ruby_xfree,
|
29
|
+
},
|
30
|
+
NULL,
|
31
|
+
NULL,
|
32
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
33
|
+
};
|
34
|
+
|
23
35
|
cairo_glyph_t *
|
24
36
|
rb_cairo_glyph_from_ruby_object (VALUE obj)
|
25
37
|
{
|
@@ -28,19 +40,10 @@ rb_cairo_glyph_from_ruby_object (VALUE obj)
|
|
28
40
|
{
|
29
41
|
rb_raise (rb_eTypeError, "not a cairo glyph");
|
30
42
|
}
|
31
|
-
|
43
|
+
TypedData_Get_Struct (obj, cairo_glyph_t, &cr_glyph_type, glyph);
|
32
44
|
return glyph;
|
33
45
|
}
|
34
46
|
|
35
|
-
static void
|
36
|
-
cr_glyph_free (void *ptr)
|
37
|
-
{
|
38
|
-
if (ptr)
|
39
|
-
{
|
40
|
-
xfree (ptr);
|
41
|
-
}
|
42
|
-
}
|
43
|
-
|
44
47
|
VALUE
|
45
48
|
rb_cairo_glyph_to_ruby_object (cairo_glyph_t *glyph)
|
46
49
|
{
|
@@ -50,7 +53,7 @@ rb_cairo_glyph_to_ruby_object (cairo_glyph_t *glyph)
|
|
50
53
|
|
51
54
|
new_glyph = ALLOC (cairo_glyph_t);
|
52
55
|
*new_glyph = *glyph;
|
53
|
-
return
|
56
|
+
return TypedData_Wrap_Struct (rb_cCairo_Glyph, &cr_glyph_type, new_glyph);
|
54
57
|
}
|
55
58
|
else
|
56
59
|
{
|
@@ -61,7 +64,7 @@ rb_cairo_glyph_to_ruby_object (cairo_glyph_t *glyph)
|
|
61
64
|
static VALUE
|
62
65
|
cr_glyph_allocate (VALUE klass)
|
63
66
|
{
|
64
|
-
return
|
67
|
+
return TypedData_Wrap_Struct (klass, &cr_glyph_type, NULL);
|
65
68
|
}
|
66
69
|
|
67
70
|
static VALUE
|
data/ext/cairo/rb_cairo_matrix.c
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-08-14 12:37:50 $
|
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
|
*
|
@@ -23,6 +23,17 @@ static ID cr_id_equal;
|
|
23
23
|
|
24
24
|
#define _SELF (RVAL2CRMATRIX(self))
|
25
25
|
|
26
|
+
static const rb_data_type_t cr_matrix_type = {
|
27
|
+
"Cairo::Matrix",
|
28
|
+
{
|
29
|
+
NULL,
|
30
|
+
ruby_xfree,
|
31
|
+
},
|
32
|
+
NULL,
|
33
|
+
NULL,
|
34
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
35
|
+
};
|
36
|
+
|
26
37
|
cairo_matrix_t *
|
27
38
|
rb_cairo_matrix_from_ruby_object (VALUE obj)
|
28
39
|
{
|
@@ -31,19 +42,10 @@ rb_cairo_matrix_from_ruby_object (VALUE obj)
|
|
31
42
|
{
|
32
43
|
rb_raise (rb_eTypeError, "not a cairo matrix");
|
33
44
|
}
|
34
|
-
|
45
|
+
TypedData_Get_Struct (obj, cairo_matrix_t, &cr_matrix_type, matrix);
|
35
46
|
return matrix;
|
36
47
|
}
|
37
48
|
|
38
|
-
static void
|
39
|
-
cr_matrix_free (void *ptr)
|
40
|
-
{
|
41
|
-
if (ptr)
|
42
|
-
{
|
43
|
-
xfree ((cairo_matrix_t *) ptr);
|
44
|
-
}
|
45
|
-
}
|
46
|
-
|
47
49
|
VALUE
|
48
50
|
rb_cairo_matrix_to_ruby_object (cairo_matrix_t *matrix)
|
49
51
|
{
|
@@ -51,8 +53,9 @@ rb_cairo_matrix_to_ruby_object (cairo_matrix_t *matrix)
|
|
51
53
|
{
|
52
54
|
cairo_matrix_t *new_matrix = ALLOC (cairo_matrix_t);
|
53
55
|
*new_matrix = *matrix;
|
54
|
-
return
|
55
|
-
|
56
|
+
return TypedData_Wrap_Struct (rb_cCairo_Matrix,
|
57
|
+
&cr_matrix_type,
|
58
|
+
new_matrix);
|
56
59
|
}
|
57
60
|
else
|
58
61
|
{
|
@@ -63,7 +66,7 @@ rb_cairo_matrix_to_ruby_object (cairo_matrix_t *matrix)
|
|
63
66
|
static VALUE
|
64
67
|
cr_matrix_allocate (VALUE klass)
|
65
68
|
{
|
66
|
-
return
|
69
|
+
return TypedData_Wrap_Struct (klass, &cr_matrix_type, NULL);
|
67
70
|
}
|
68
71
|
|
69
72
|
static VALUE
|
data/ext/cairo/rb_cairo_path.c
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-04-04 03:52:31 $
|
7
7
|
*
|
8
|
-
* Copyright 2005 Kouhei
|
8
|
+
* Copyright 2005-2022 Sutou Kouhei <kou@cozmixng.org>
|
9
9
|
*
|
10
10
|
* This file is made available under the same terms as Ruby
|
11
11
|
*
|
@@ -223,54 +223,34 @@ cr_path_close_path_initialize (VALUE self)
|
|
223
223
|
static void
|
224
224
|
cr_path_free (void *ptr)
|
225
225
|
{
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
}
|
226
|
+
cairo_path_t *path = ptr;
|
227
|
+
ruby_xfree (path->data);
|
228
|
+
ruby_xfree (path);
|
230
229
|
}
|
231
230
|
|
231
|
+
static const rb_data_type_t cr_path_type = {
|
232
|
+
"Cairo::Path",
|
233
|
+
{
|
234
|
+
NULL,
|
235
|
+
cr_path_free,
|
236
|
+
},
|
237
|
+
NULL,
|
238
|
+
NULL,
|
239
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
240
|
+
};
|
241
|
+
|
232
242
|
cairo_path_t *
|
233
243
|
rb_cairo_path_from_ruby_object (VALUE obj)
|
234
244
|
{
|
235
|
-
|
236
|
-
cairo_t *cr;
|
237
|
-
cairo_path_t *path, *copied_path;
|
245
|
+
cairo_path_t *path;
|
238
246
|
|
239
247
|
if (!rb_cairo__is_kind_of (obj, rb_cCairo_Path))
|
240
248
|
{
|
241
249
|
rb_raise (rb_eTypeError, "not a cairo path");
|
242
250
|
}
|
243
|
-
|
244
|
-
|
245
|
-
context = rb_ivar_get (obj, id_at_context);
|
246
|
-
if (NIL_P (context))
|
247
|
-
return path;
|
248
|
-
|
249
|
-
cr = RVAL2CRCONTEXT (context);
|
250
|
-
if (cairo_status (cr) != CAIRO_STATUS_SUCCESS)
|
251
|
-
return path;
|
251
|
+
TypedData_Get_Struct (obj, cairo_path_t, &cr_path_type, path);
|
252
252
|
|
253
|
-
|
254
|
-
rb_ivar_set (obj, id_current_path, CRPATH2RVAL (copied_path));
|
255
|
-
return copied_path;
|
256
|
-
}
|
257
|
-
|
258
|
-
static void
|
259
|
-
cr_path_ensure_internal_context (VALUE rb_path, cairo_path_t *path)
|
260
|
-
{
|
261
|
-
cairo_surface_t *surface;
|
262
|
-
cairo_t *cr;
|
263
|
-
|
264
|
-
if (!NIL_P (rb_ivar_get (rb_path, id_at_context)))
|
265
|
-
return;
|
266
|
-
|
267
|
-
surface = cairo_image_surface_create (CAIRO_FORMAT_A1, 1, 1);
|
268
|
-
cr = cairo_create (surface);
|
269
|
-
if (path->num_data > 0)
|
270
|
-
cairo_append_path (cr, path);
|
271
|
-
rb_cairo_check_status (cairo_status (cr));
|
272
|
-
rb_ivar_set (rb_path, id_at_context, CRCONTEXT2RVAL (cr));
|
273
|
-
cairo_destroy (cr);
|
253
|
+
return path;
|
274
254
|
}
|
275
255
|
|
276
256
|
VALUE
|
@@ -279,8 +259,15 @@ rb_cairo_path_to_ruby_object (cairo_path_t *path)
|
|
279
259
|
if (path)
|
280
260
|
{
|
281
261
|
VALUE rb_path;
|
282
|
-
|
283
|
-
|
262
|
+
cairo_path_t *copied_path;
|
263
|
+
copied_path = RB_ALLOC (cairo_path_t);
|
264
|
+
copied_path->data = RB_ALLOC_N (cairo_path_data_t, path->num_data);
|
265
|
+
memcpy(copied_path->data,
|
266
|
+
path->data,
|
267
|
+
sizeof (cairo_path_data_t) * path->num_data);
|
268
|
+
rb_path = TypedData_Wrap_Struct (rb_cCairo_Path,
|
269
|
+
&cr_path_type,
|
270
|
+
copied_path);
|
284
271
|
return rb_path;
|
285
272
|
}
|
286
273
|
else
|
@@ -292,7 +279,7 @@ rb_cairo_path_to_ruby_object (cairo_path_t *path)
|
|
292
279
|
static VALUE
|
293
280
|
cr_path_allocate (VALUE klass)
|
294
281
|
{
|
295
|
-
return
|
282
|
+
return TypedData_Wrap_Struct (klass, &cr_path_type, NULL);
|
296
283
|
}
|
297
284
|
|
298
285
|
static VALUE
|
@@ -300,13 +287,11 @@ cr_path_initialize (VALUE self)
|
|
300
287
|
{
|
301
288
|
cairo_path_t *path;
|
302
289
|
|
303
|
-
path =
|
290
|
+
path = RB_ALLOC (cairo_path_t);
|
304
291
|
path->status = CAIRO_STATUS_SUCCESS;
|
305
292
|
path->data = NULL;
|
306
293
|
path->num_data = 0;
|
307
|
-
|
308
294
|
DATA_PTR (self) = path;
|
309
|
-
cr_path_ensure_internal_context (self, path);
|
310
295
|
|
311
296
|
return Qnil;
|
312
297
|
}
|