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
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-06-12 10:59:54 $
|
7
7
|
*
|
8
|
-
* Copyright 2012-
|
8
|
+
* Copyright 2012-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
|
*
|
@@ -133,6 +133,23 @@ cr_pattern_raster_source_supported_p (VALUE klass)
|
|
133
133
|
#endif
|
134
134
|
}
|
135
135
|
|
136
|
+
static void
|
137
|
+
cr_pattern_free (void *ptr)
|
138
|
+
{
|
139
|
+
cairo_pattern_destroy ((cairo_pattern_t *) ptr);
|
140
|
+
}
|
141
|
+
|
142
|
+
static const rb_data_type_t cr_pattern_type = {
|
143
|
+
"Cairo::Pattern",
|
144
|
+
{
|
145
|
+
NULL,
|
146
|
+
cr_pattern_free,
|
147
|
+
},
|
148
|
+
NULL,
|
149
|
+
NULL,
|
150
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
151
|
+
};
|
152
|
+
|
136
153
|
cairo_pattern_t *
|
137
154
|
rb_cairo_pattern_from_ruby_object (VALUE obj)
|
138
155
|
{
|
@@ -141,19 +158,10 @@ rb_cairo_pattern_from_ruby_object (VALUE obj)
|
|
141
158
|
{
|
142
159
|
rb_raise (rb_eTypeError, "not a cairo pattern");
|
143
160
|
}
|
144
|
-
|
161
|
+
TypedData_Get_Struct (obj, cairo_pattern_t, &cr_pattern_type, pattern);
|
145
162
|
return pattern;
|
146
163
|
}
|
147
164
|
|
148
|
-
static void
|
149
|
-
cr_pattern_free (void *ptr)
|
150
|
-
{
|
151
|
-
if (ptr)
|
152
|
-
{
|
153
|
-
cairo_pattern_destroy ((cairo_pattern_t *) ptr);
|
154
|
-
}
|
155
|
-
}
|
156
|
-
|
157
165
|
VALUE
|
158
166
|
rb_cairo_pattern_to_ruby_object (cairo_pattern_t *pattern)
|
159
167
|
{
|
@@ -162,7 +170,7 @@ rb_cairo_pattern_to_ruby_object (cairo_pattern_t *pattern)
|
|
162
170
|
VALUE klass;
|
163
171
|
klass = cr_pattern_get_klass (pattern);
|
164
172
|
cairo_pattern_reference (pattern);
|
165
|
-
return
|
173
|
+
return TypedData_Wrap_Struct (klass, &cr_pattern_type, pattern);
|
166
174
|
}
|
167
175
|
else
|
168
176
|
{
|
@@ -173,7 +181,7 @@ rb_cairo_pattern_to_ruby_object (cairo_pattern_t *pattern)
|
|
173
181
|
static VALUE
|
174
182
|
cr_pattern_allocate (VALUE klass)
|
175
183
|
{
|
176
|
-
return
|
184
|
+
return TypedData_Wrap_Struct (klass, &cr_pattern_type, NULL);
|
177
185
|
}
|
178
186
|
|
179
187
|
static VALUE
|
@@ -2,7 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
* Ruby Cairo Binding
|
4
4
|
*
|
5
|
-
* Copyright 2005-
|
5
|
+
* Copyright 2005-2022 Sutou Kouhei <kou@cozmixng.org>
|
6
6
|
*
|
7
7
|
* This file is made available under the same terms as Ruby
|
8
8
|
*
|
@@ -15,10 +15,21 @@ VALUE rb_cCairo_Rectangle;
|
|
15
15
|
#define _SELF ((cairo_rectangle_int_t *)DATA_PTR (self))
|
16
16
|
|
17
17
|
#if CAIRO_CHECK_VERSION(1, 10, 0)
|
18
|
+
static const rb_data_type_t cr_rectangle_type = {
|
19
|
+
"Cairo::Rectangle",
|
20
|
+
{
|
21
|
+
NULL,
|
22
|
+
ruby_xfree,
|
23
|
+
},
|
24
|
+
NULL,
|
25
|
+
NULL,
|
26
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
27
|
+
};
|
28
|
+
|
18
29
|
static VALUE
|
19
30
|
cr_rectangle_allocate (VALUE klass)
|
20
31
|
{
|
21
|
-
return
|
32
|
+
return TypedData_Wrap_Struct (klass, &cr_rectangle_type, NULL);
|
22
33
|
}
|
23
34
|
|
24
35
|
static VALUE
|
data/ext/cairo/rb_cairo_region.c
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
/*
|
3
3
|
* Ruby Cairo Binding
|
4
4
|
*
|
5
|
-
* Copyright 2010 Kouhei
|
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
|
*
|
@@ -18,6 +18,23 @@ VALUE rb_cCairo_Region = Qnil;
|
|
18
18
|
|
19
19
|
#define _SELF (RVAL2CRREGION(self))
|
20
20
|
|
21
|
+
static void
|
22
|
+
cr_region_free (void *ptr)
|
23
|
+
{
|
24
|
+
cairo_region_destroy ((cairo_region_t *) ptr);
|
25
|
+
}
|
26
|
+
|
27
|
+
static const rb_data_type_t cr_region_type = {
|
28
|
+
"Cairo::Region",
|
29
|
+
{
|
30
|
+
NULL,
|
31
|
+
cr_region_free,
|
32
|
+
},
|
33
|
+
NULL,
|
34
|
+
NULL,
|
35
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
36
|
+
};
|
37
|
+
|
21
38
|
static inline void
|
22
39
|
cr_region_check_status (cairo_region_t *region)
|
23
40
|
{
|
@@ -32,26 +49,17 @@ rb_cairo_region_from_ruby_object (VALUE obj)
|
|
32
49
|
{
|
33
50
|
rb_raise (rb_eTypeError, "not a cairo region");
|
34
51
|
}
|
35
|
-
|
52
|
+
TypedData_Get_Struct (obj, cairo_region_t, &cr_region_type, region);
|
36
53
|
return region;
|
37
54
|
}
|
38
55
|
|
39
|
-
static void
|
40
|
-
cr_region_free (void *ptr)
|
41
|
-
{
|
42
|
-
if (ptr)
|
43
|
-
{
|
44
|
-
cairo_region_destroy ((cairo_region_t *) ptr);
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
56
|
VALUE
|
49
57
|
rb_cairo_region_to_ruby_object (cairo_region_t *region)
|
50
58
|
{
|
51
59
|
if (region)
|
52
60
|
{
|
53
61
|
cairo_region_reference (region);
|
54
|
-
return
|
62
|
+
return TypedData_Wrap_Struct (rb_cCairo_Region, &cr_region_type, region);
|
55
63
|
}
|
56
64
|
else
|
57
65
|
{
|
@@ -62,7 +70,7 @@ rb_cairo_region_to_ruby_object (cairo_region_t *region)
|
|
62
70
|
static VALUE
|
63
71
|
cr_region_allocate (VALUE klass)
|
64
72
|
{
|
65
|
-
return
|
73
|
+
return TypedData_Wrap_Struct (klass, &cr_region_type, NULL);
|
66
74
|
}
|
67
75
|
|
68
76
|
static VALUE
|
@@ -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
|
*
|
@@ -19,6 +19,23 @@ VALUE rb_cCairo_ScaledFont;
|
|
19
19
|
|
20
20
|
#define _SELF(self) (RVAL2CRSCALEDFONT(self))
|
21
21
|
|
22
|
+
static void
|
23
|
+
cr_scaled_font_free (void *ptr)
|
24
|
+
{
|
25
|
+
cairo_scaled_font_destroy ((cairo_scaled_font_t *) ptr);
|
26
|
+
}
|
27
|
+
|
28
|
+
static const rb_data_type_t cr_scaled_font_type = {
|
29
|
+
"Cairo::ScaledFont",
|
30
|
+
{
|
31
|
+
NULL,
|
32
|
+
cr_scaled_font_free,
|
33
|
+
},
|
34
|
+
NULL,
|
35
|
+
NULL,
|
36
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
37
|
+
};
|
38
|
+
|
22
39
|
static inline void
|
23
40
|
cr_scaled_font_check_status (cairo_scaled_font_t *font)
|
24
41
|
{
|
@@ -33,27 +50,19 @@ rb_cairo_scaled_font_from_ruby_object (VALUE obj)
|
|
33
50
|
{
|
34
51
|
rb_raise (rb_eTypeError, "not a cairo scaled font");
|
35
52
|
}
|
36
|
-
|
53
|
+
TypedData_Get_Struct (obj, cairo_scaled_font_t, &cr_scaled_font_type, font);
|
37
54
|
return font;
|
38
55
|
}
|
39
56
|
|
40
|
-
static void
|
41
|
-
cr_scaled_font_free (void *ptr)
|
42
|
-
{
|
43
|
-
if (ptr)
|
44
|
-
{
|
45
|
-
cairo_scaled_font_destroy ((cairo_scaled_font_t *) ptr);
|
46
|
-
}
|
47
|
-
}
|
48
|
-
|
49
57
|
VALUE
|
50
58
|
rb_cairo_scaled_font_to_ruby_object (cairo_scaled_font_t *font)
|
51
59
|
{
|
52
60
|
if (font)
|
53
61
|
{
|
54
62
|
cairo_scaled_font_reference (font);
|
55
|
-
return
|
56
|
-
|
63
|
+
return TypedData_Wrap_Struct (rb_cCairo_ScaledFont,
|
64
|
+
&cr_scaled_font_type,
|
65
|
+
font);
|
57
66
|
}
|
58
67
|
else
|
59
68
|
{
|
@@ -64,7 +73,7 @@ rb_cairo_scaled_font_to_ruby_object (cairo_scaled_font_t *font)
|
|
64
73
|
static VALUE
|
65
74
|
cr_scaled_font_allocate (VALUE klass)
|
66
75
|
{
|
67
|
-
return
|
76
|
+
return TypedData_Wrap_Struct (klass, &cr_scaled_font_type, NULL);
|
68
77
|
}
|
69
78
|
|
70
79
|
static VALUE
|
@@ -103,6 +103,18 @@ static cairo_user_data_key_t cr_finished_key;
|
|
103
103
|
|
104
104
|
#define _SELF (RVAL2CRSURFACE(self))
|
105
105
|
|
106
|
+
static void cr_surface_free (void *ptr);
|
107
|
+
static const rb_data_type_t cr_surface_type = {
|
108
|
+
"Cairo::Surface",
|
109
|
+
{
|
110
|
+
NULL,
|
111
|
+
cr_surface_free,
|
112
|
+
},
|
113
|
+
NULL,
|
114
|
+
NULL,
|
115
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
116
|
+
};
|
117
|
+
|
106
118
|
static VALUE
|
107
119
|
cr_paper_parse (VALUE paper_description)
|
108
120
|
{
|
@@ -240,7 +252,7 @@ rb_cairo_surface_from_ruby_object_without_null_check (VALUE obj)
|
|
240
252
|
{
|
241
253
|
rb_raise (rb_eTypeError, "not a cairo surface");
|
242
254
|
}
|
243
|
-
|
255
|
+
TypedData_Get_Struct (obj, cairo_surface_t, &cr_surface_type, surface);
|
244
256
|
return surface;
|
245
257
|
}
|
246
258
|
|
@@ -461,7 +473,7 @@ rb_cairo_surface_to_ruby_object (cairo_surface_t *surface)
|
|
461
473
|
klass = cr_surface_get_klass (surface);
|
462
474
|
cairo_surface_reference (surface);
|
463
475
|
rb_cairo_surface_adjust_memory_usage (surface, CR_TRUE);
|
464
|
-
return
|
476
|
+
return TypedData_Wrap_Struct (klass, &cr_surface_type, surface);
|
465
477
|
}
|
466
478
|
else
|
467
479
|
{
|
@@ -484,7 +496,7 @@ rb_cairo_surface_to_ruby_object_with_destroy (cairo_surface_t *surface)
|
|
484
496
|
static VALUE
|
485
497
|
cr_surface_allocate (VALUE klass)
|
486
498
|
{
|
487
|
-
return
|
499
|
+
return TypedData_Wrap_Struct (klass, &cr_surface_type, NULL);
|
488
500
|
}
|
489
501
|
|
490
502
|
static VALUE
|
@@ -5,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-08-16 08:16:40 $
|
7
7
|
*
|
8
|
-
* Copyright 2008 Kouhei
|
8
|
+
* Copyright 2008-2022 Sutou Kouhei <kou@cozmixng.org>
|
9
9
|
*
|
10
10
|
* This file is made available under the same terms as Ruby
|
11
11
|
*
|
@@ -20,6 +20,17 @@ VALUE rb_cCairo_TextCluster = Qnil;
|
|
20
20
|
#if CAIRO_CHECK_VERSION(1, 7, 2)
|
21
21
|
#define _SELF(self) (RVAL2CRTEXTCLUSTER(self))
|
22
22
|
|
23
|
+
static const rb_data_type_t cr_text_cluster_type = {
|
24
|
+
"Cairo::TextCluster",
|
25
|
+
{
|
26
|
+
NULL,
|
27
|
+
ruby_xfree,
|
28
|
+
},
|
29
|
+
NULL,
|
30
|
+
NULL,
|
31
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
32
|
+
};
|
33
|
+
|
23
34
|
cairo_text_cluster_t *
|
24
35
|
rb_cairo_text_cluster_from_ruby_object (VALUE obj)
|
25
36
|
{
|
@@ -29,19 +40,13 @@ rb_cairo_text_cluster_from_ruby_object (VALUE obj)
|
|
29
40
|
rb_raise (rb_eTypeError,
|
30
41
|
"not a cairo cluster: %s", rb_cairo__inspect (obj));
|
31
42
|
}
|
32
|
-
|
43
|
+
TypedData_Get_Struct (obj,
|
44
|
+
cairo_text_cluster_t,
|
45
|
+
&cr_text_cluster_type,
|
46
|
+
cluster);
|
33
47
|
return cluster;
|
34
48
|
}
|
35
49
|
|
36
|
-
static void
|
37
|
-
cr_text_cluster_free (void *ptr)
|
38
|
-
{
|
39
|
-
if (ptr)
|
40
|
-
{
|
41
|
-
xfree (ptr);
|
42
|
-
}
|
43
|
-
}
|
44
|
-
|
45
50
|
VALUE
|
46
51
|
rb_cairo_text_cluster_to_ruby_object (cairo_text_cluster_t *cluster)
|
47
52
|
{
|
@@ -51,8 +56,9 @@ rb_cairo_text_cluster_to_ruby_object (cairo_text_cluster_t *cluster)
|
|
51
56
|
|
52
57
|
new_cluster = ALLOC (cairo_text_cluster_t);
|
53
58
|
*new_cluster = *cluster;
|
54
|
-
return
|
55
|
-
|
59
|
+
return TypedData_Wrap_Struct (rb_cCairo_TextCluster,
|
60
|
+
&cr_text_cluster_type,
|
61
|
+
new_cluster);
|
56
62
|
}
|
57
63
|
else
|
58
64
|
{
|
@@ -63,7 +69,7 @@ rb_cairo_text_cluster_to_ruby_object (cairo_text_cluster_t *cluster)
|
|
63
69
|
static VALUE
|
64
70
|
cr_text_cluster_allocate (VALUE klass)
|
65
71
|
{
|
66
|
-
return
|
72
|
+
return TypedData_Wrap_Struct (klass, &cr_text_cluster_type, NULL);
|
67
73
|
}
|
68
74
|
|
69
75
|
static VALUE
|
@@ -5,6 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-08-17 05:41:28 $
|
7
7
|
*
|
8
|
+
* Copyright 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_TextExtents;
|
|
19
20
|
|
20
21
|
#define _SELF(self) (RVAL2CRTEXTEXTENTS(self))
|
21
22
|
|
23
|
+
static const rb_data_type_t cr_text_extents_type = {
|
24
|
+
"Cairo::TextExtents",
|
25
|
+
{
|
26
|
+
NULL,
|
27
|
+
ruby_xfree,
|
28
|
+
},
|
29
|
+
NULL,
|
30
|
+
NULL,
|
31
|
+
RUBY_TYPED_FREE_IMMEDIATELY,
|
32
|
+
};
|
33
|
+
|
22
34
|
cairo_text_extents_t *
|
23
35
|
rb_cairo_text_extents_from_ruby_object (VALUE obj)
|
24
36
|
{
|
@@ -27,7 +39,10 @@ rb_cairo_text_extents_from_ruby_object (VALUE obj)
|
|
27
39
|
{
|
28
40
|
rb_raise (rb_eTypeError, "not a cairo text_extents");
|
29
41
|
}
|
30
|
-
|
42
|
+
TypedData_Get_Struct (obj,
|
43
|
+
cairo_text_extents_t,
|
44
|
+
&cr_text_extents_type,
|
45
|
+
extents);
|
31
46
|
return extents;
|
32
47
|
}
|
33
48
|
|
@@ -38,7 +53,9 @@ rb_cairo_text_extents_to_ruby_object (cairo_text_extents_t *extents)
|
|
38
53
|
{
|
39
54
|
cairo_text_extents_t *new_extents = ALLOC (cairo_text_extents_t);
|
40
55
|
*new_extents = *extents;
|
41
|
-
return
|
56
|
+
return TypedData_Wrap_Struct (rb_cCairo_TextExtents,
|
57
|
+
&cr_text_extents_type,
|
58
|
+
new_extents);
|
42
59
|
}
|
43
60
|
else
|
44
61
|
{
|
@@ -49,7 +66,7 @@ rb_cairo_text_extents_to_ruby_object (cairo_text_extents_t *extents)
|
|
49
66
|
static VALUE
|
50
67
|
cr_text_extents_allocate (VALUE klass)
|
51
68
|
{
|
52
|
-
return
|
69
|
+
return TypedData_Wrap_Struct (klass, &cr_text_extents_type, NULL);
|
53
70
|
}
|
54
71
|
|
55
72
|
static VALUE
|