cairo 1.17.5 → 1.17.6
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 +40 -0
- data/ext/cairo/rb_cairo.c +1 -1
- data/ext/cairo/rb_cairo.h +1 -1
- data/ext/cairo/rb_cairo_constants.c +12 -2
- data/ext/cairo/rb_cairo_context.c +24 -0
- data/ext/cairo/rb_cairo_exception.c +20 -2
- data/ext/cairo/rb_cairo_font_face.c +60 -7
- data/ext/cairo/rb_cairo_quartz_surface.c +5 -0
- data/ext/cairo/rb_cairo_surface.c +51 -18
- data/test/test_context.rb +14 -0
- data/test/test_font_face.rb +106 -21
- data/test/test_quartz_image_surface.rb +5 -3
- data/test/test_svg_surface.rb +5 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b1853ada5ca7f86bebe04e05e51c0b49a84fb7782bb2156db4d1825f75cc415
|
4
|
+
data.tar.gz: 326f5322f9e2b66e115d656a762384e5caaa18ecba44c576a805c5989278d330
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db4171dfe178c24f632f38fcbbd1960412160dd999bdd925b6501c663641a308acab2bd6fa2f9a84b3e18c30821ce3f6514b7dac809fd2b965f25c79051f66bd
|
7
|
+
data.tar.gz: d9ef0bedc2b597617415c88d3734a4fe33a38bffc7a49939d671e4eed88f0da07f741fad595315376a76504dca36f35186563945a124d43510338ecd16970337
|
data/NEWS
CHANGED
@@ -1,3 +1,43 @@
|
|
1
|
+
Release 1.17.6 (2022-07-30) Sutou Kouhei <kou@cozmixng.org>
|
2
|
+
===========================================================
|
3
|
+
|
4
|
+
Improvements
|
5
|
+
------------
|
6
|
+
|
7
|
+
* Added support for cairo 1.17.6:
|
8
|
+
|
9
|
+
* Added Cairo::PDFVersion::VERSION_1_6.
|
10
|
+
|
11
|
+
* Added Cairo::PDFVersion::VERSION_1_7.
|
12
|
+
|
13
|
+
* Added Cairo::PDFSurface#set_metadata.
|
14
|
+
|
15
|
+
* Added Cairo::DirectWriteError.
|
16
|
+
|
17
|
+
* Added Cairo::Context#set_hairline.
|
18
|
+
|
19
|
+
* Added Cairo::Context#hairline?.
|
20
|
+
|
21
|
+
* Added Cairo::UserFont#on_render_color_glyph.
|
22
|
+
|
23
|
+
* Updated tests for cairo 1.17.6.
|
24
|
+
[GitHub#75][Reported by Mamoru TASAKA]
|
25
|
+
|
26
|
+
Fixes
|
27
|
+
-----
|
28
|
+
|
29
|
+
* Fixed a wrong conversion bug for the rest size argument in read
|
30
|
+
callback.
|
31
|
+
|
32
|
+
* Fixed a wrong conversion bug in Cairo::Options#hash.
|
33
|
+
|
34
|
+
* Fixed a GC related crash bug in Cairo::Surface#finish.
|
35
|
+
|
36
|
+
Thanks
|
37
|
+
------
|
38
|
+
|
39
|
+
* Mamoru TASAKA
|
40
|
+
|
1
41
|
Release 1.17.4 (2021-01-17) Sutou Kouhei <kou@cozmixng.org>
|
2
42
|
===========================================================
|
3
43
|
|
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 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);
|
@@ -523,6 +523,16 @@ cr_set_line_width (VALUE self, VALUE width)
|
|
523
523
|
return self;
|
524
524
|
}
|
525
525
|
|
526
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
527
|
+
static VALUE
|
528
|
+
cr_set_hairline (VALUE self, VALUE hairline)
|
529
|
+
{
|
530
|
+
cairo_set_hairline (_SELF, RTEST (hairline));
|
531
|
+
cr_check_status (_SELF);
|
532
|
+
return self;
|
533
|
+
}
|
534
|
+
#endif
|
535
|
+
|
526
536
|
static VALUE
|
527
537
|
cr_set_line_cap (VALUE self, VALUE cap)
|
528
538
|
{
|
@@ -1490,6 +1500,14 @@ cr_get_line_width (VALUE self)
|
|
1490
1500
|
return rb_float_new (cairo_get_line_width (_SELF));
|
1491
1501
|
}
|
1492
1502
|
|
1503
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
1504
|
+
static VALUE
|
1505
|
+
cr_get_hairline (VALUE self)
|
1506
|
+
{
|
1507
|
+
return CBOOL2RVAL (cairo_get_hairline (_SELF));
|
1508
|
+
}
|
1509
|
+
#endif
|
1510
|
+
|
1493
1511
|
static VALUE
|
1494
1512
|
cr_get_line_cap (VALUE self)
|
1495
1513
|
{
|
@@ -1751,6 +1769,9 @@ Init_cairo_context (void)
|
|
1751
1769
|
rb_define_method (rb_cCairo_Context, "set_antialias", cr_set_antialias, 1);
|
1752
1770
|
rb_define_method (rb_cCairo_Context, "set_fill_rule", cr_set_fill_rule, 1);
|
1753
1771
|
rb_define_method (rb_cCairo_Context, "set_line_width", cr_set_line_width, 1);
|
1772
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
1773
|
+
rb_define_method (rb_cCairo_Context, "set_hairline", cr_set_hairline, 1);
|
1774
|
+
#endif
|
1754
1775
|
rb_define_method (rb_cCairo_Context, "set_line_cap", cr_set_line_cap, 1);
|
1755
1776
|
rb_define_method (rb_cCairo_Context, "set_line_join", cr_set_line_join, 1);
|
1756
1777
|
rb_define_method (rb_cCairo_Context, "set_dash", cr_set_dash, -1);
|
@@ -1862,6 +1883,9 @@ Init_cairo_context (void)
|
|
1862
1883
|
cr_get_current_point, 0);
|
1863
1884
|
rb_define_method (rb_cCairo_Context, "fill_rule", cr_get_fill_rule, 0);
|
1864
1885
|
rb_define_method (rb_cCairo_Context, "line_width", cr_get_line_width, 0);
|
1886
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
1887
|
+
rb_define_method (rb_cCairo_Context, "hairline?", cr_get_hairline, 0);
|
1888
|
+
#endif
|
1865
1889
|
rb_define_method (rb_cCairo_Context, "line_cap", cr_get_line_cap, 0);
|
1866
1890
|
rb_define_method (rb_cCairo_Context, "line_join", cr_get_line_join, 0);
|
1867
1891
|
rb_define_method (rb_cCairo_Context, "miter_limit", cr_get_miter_limit, 0);
|
@@ -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,7 +5,7 @@
|
|
5
5
|
* $Author: kou $
|
6
6
|
* $Date: 2008-09-26 14:13:58 $
|
7
7
|
*
|
8
|
-
* Copyright 2003-
|
8
|
+
* Copyright 2003-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
|
*
|
@@ -39,6 +39,9 @@ static ID cr_id_new;
|
|
39
39
|
|
40
40
|
static ID cr_id_init;
|
41
41
|
static ID cr_id_render_glyph;
|
42
|
+
# if CAIRO_CHECK_VERSION(1, 17, 6)
|
43
|
+
static ID cr_id_render_color_glyph;
|
44
|
+
#endif
|
42
45
|
static ID cr_id_text_to_glyphs;
|
43
46
|
static ID cr_id_unicode_to_glyph;
|
44
47
|
|
@@ -463,10 +466,11 @@ cr_user_font_face_render_glyph_func_after (VALUE user_data)
|
|
463
466
|
}
|
464
467
|
|
465
468
|
static cairo_status_t
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
469
|
+
cr_user_font_face_render_glyph_func_internal (cairo_scaled_font_t *scaled_font,
|
470
|
+
unsigned long glyph,
|
471
|
+
cairo_t *cr,
|
472
|
+
cairo_text_extents_t *extents,
|
473
|
+
ID id_registered_method_name)
|
470
474
|
{
|
471
475
|
cairo_status_t status = CAIRO_STATUS_SUCCESS;
|
472
476
|
cairo_font_face_t *face;
|
@@ -477,10 +481,11 @@ cr_user_font_face_render_glyph_func (cairo_scaled_font_t *scaled_font,
|
|
477
481
|
face = cairo_scaled_font_get_font_face (scaled_font);
|
478
482
|
self = (VALUE)cairo_font_face_get_user_data (face, &ruby_object_key);
|
479
483
|
receiver = rb_ivar_get (self, cr_id_render_glyph);
|
480
|
-
if (NIL_P (receiver) &&
|
484
|
+
if (NIL_P (receiver) &&
|
485
|
+
rb_obj_respond_to (self, id_registered_method_name, Qtrue))
|
481
486
|
{
|
482
487
|
receiver = self;
|
483
|
-
id_method_name =
|
488
|
+
id_method_name = id_registered_method_name;
|
484
489
|
}
|
485
490
|
|
486
491
|
if (!NIL_P (receiver))
|
@@ -507,6 +512,34 @@ cr_user_font_face_render_glyph_func (cairo_scaled_font_t *scaled_font,
|
|
507
512
|
return status;
|
508
513
|
}
|
509
514
|
|
515
|
+
static cairo_status_t
|
516
|
+
cr_user_font_face_render_glyph_func (cairo_scaled_font_t *scaled_font,
|
517
|
+
unsigned long glyph,
|
518
|
+
cairo_t *cr,
|
519
|
+
cairo_text_extents_t *extents)
|
520
|
+
{
|
521
|
+
return cr_user_font_face_render_glyph_func_internal (scaled_font,
|
522
|
+
glyph,
|
523
|
+
cr,
|
524
|
+
extents,
|
525
|
+
cr_id_render_glyph);
|
526
|
+
}
|
527
|
+
|
528
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
529
|
+
static cairo_status_t
|
530
|
+
cr_user_font_face_render_color_glyph_func (cairo_scaled_font_t *scaled_font,
|
531
|
+
unsigned long glyph,
|
532
|
+
cairo_t *cr,
|
533
|
+
cairo_text_extents_t *extents)
|
534
|
+
{
|
535
|
+
return cr_user_font_face_render_glyph_func_internal (scaled_font,
|
536
|
+
glyph,
|
537
|
+
cr,
|
538
|
+
extents,
|
539
|
+
cr_id_render_color_glyph);
|
540
|
+
}
|
541
|
+
#endif
|
542
|
+
|
510
543
|
typedef struct _cr_text_to_glyphs_after_hook_data {
|
511
544
|
VALUE text_to_glyphs_data;
|
512
545
|
cairo_glyph_t **glyphs;
|
@@ -703,6 +736,10 @@ cr_user_font_face_initialize (VALUE self)
|
|
703
736
|
(face, cr_user_font_face_init_func);
|
704
737
|
cairo_user_font_face_set_render_glyph_func
|
705
738
|
(face, cr_user_font_face_render_glyph_func);
|
739
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
740
|
+
cairo_user_font_face_set_render_color_glyph_func
|
741
|
+
(face, cr_user_font_face_render_color_glyph_func);
|
742
|
+
#endif
|
706
743
|
cairo_user_font_face_set_text_to_glyphs_func
|
707
744
|
(face, cr_user_font_face_text_to_glyphs_func);
|
708
745
|
cairo_user_font_face_set_unicode_to_glyph_func
|
@@ -732,6 +769,15 @@ cr_user_font_face_on_render_glyph (VALUE self)
|
|
732
769
|
return self;
|
733
770
|
}
|
734
771
|
|
772
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
773
|
+
static VALUE
|
774
|
+
cr_user_font_face_on_render_color_glyph (VALUE self)
|
775
|
+
{
|
776
|
+
rb_ivar_set (self, cr_id_render_color_glyph, rb_block_proc ());
|
777
|
+
return self;
|
778
|
+
}
|
779
|
+
#endif
|
780
|
+
|
735
781
|
static VALUE
|
736
782
|
cr_user_font_face_on_text_to_glyphs (VALUE self)
|
737
783
|
{
|
@@ -804,6 +850,9 @@ Init_cairo_font (void)
|
|
804
850
|
|
805
851
|
cr_id_init = rb_intern ("init");
|
806
852
|
cr_id_render_glyph = rb_intern ("render_glyph");
|
853
|
+
# if CAIRO_CHECK_VERSION(1, 17, 6)
|
854
|
+
cr_id_render_color_glyph = rb_intern ("render_color_glyph");
|
855
|
+
#endif
|
807
856
|
cr_id_text_to_glyphs = rb_intern ("text_to_glyphs");
|
808
857
|
cr_id_unicode_to_glyph = rb_intern ("unicode_to_glyph");
|
809
858
|
|
@@ -867,6 +916,10 @@ Init_cairo_font (void)
|
|
867
916
|
cr_user_font_face_on_init, 0);
|
868
917
|
rb_define_method (rb_cCairo_UserFontFace, "on_render_glyph",
|
869
918
|
cr_user_font_face_on_render_glyph, 0);
|
919
|
+
#if CAIRO_CHECK_VERSION(1, 17, 6)
|
920
|
+
rb_define_method (rb_cCairo_UserFontFace, "on_render_color_glyph",
|
921
|
+
cr_user_font_face_on_render_color_glyph, 0);
|
922
|
+
#endif
|
870
923
|
rb_define_method (rb_cCairo_UserFontFace, "on_text_to_glyphs",
|
871
924
|
cr_user_font_face_on_text_to_glyphs, 0);
|
872
925
|
rb_define_method (rb_cCairo_UserFontFace, "on_unicode_to_glyph",
|
@@ -17,6 +17,8 @@
|
|
17
17
|
#endif
|
18
18
|
|
19
19
|
#ifdef CAIRO_HAS_QUARTZ_SURFACE
|
20
|
+
static ID cr_id_image_surface;
|
21
|
+
|
20
22
|
# ifndef HAVE_TYPE_ENUM_RUBY_VALUE_TYPE
|
21
23
|
enum ruby_value_type {
|
22
24
|
RUBY_T_DATA = T_DATA
|
@@ -168,6 +170,7 @@ cr_quartz_image_surface_initialize (VALUE self, VALUE image_surface)
|
|
168
170
|
surface = cairo_quartz_image_surface_create (RVAL2CRSURFACE (image_surface));
|
169
171
|
rb_cairo_surface_check_status (surface);
|
170
172
|
DATA_PTR (self) = surface;
|
173
|
+
rb_ivar_set (self, cr_id_image_surface, image_surface);
|
171
174
|
if (rb_block_given_p ())
|
172
175
|
rb_cairo__surface_yield_and_finish (self);
|
173
176
|
return Qnil;
|
@@ -199,6 +202,8 @@ Init_cairo_quartz_surface (void)
|
|
199
202
|
|
200
203
|
/* Quartz image surface */
|
201
204
|
#ifdef RB_CAIRO_HAS_QUARTZ_IMAGE_SURFACE
|
205
|
+
cr_id_image_surface = rb_intern ("image_surface");
|
206
|
+
|
202
207
|
rb_define_method (rb_cCairo_QuartzImageSurface, "initialize",
|
203
208
|
cr_quartz_image_surface_initialize, 1);
|
204
209
|
rb_define_method (rb_cCairo_QuartzImageSurface, "image",
|
@@ -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
|
* Copyright 2014 Patrick Hanevold <patrick.hanevold@gmail.com>
|
7
7
|
* Copyright 2005 Øyvind Kolås <pippin@freedesktop.org>
|
8
8
|
* Copyright 2004-2005 MenTaLguY <mental@rydia.com>
|
@@ -232,6 +232,28 @@ rb_cairo_surface_adjust_memory_usage (cairo_surface_t *surface,
|
|
232
232
|
#endif
|
233
233
|
}
|
234
234
|
|
235
|
+
static cairo_surface_t *
|
236
|
+
rb_cairo_surface_from_ruby_object_without_null_check (VALUE obj)
|
237
|
+
{
|
238
|
+
cairo_surface_t *surface;
|
239
|
+
if (!rb_cairo__is_kind_of (obj, rb_cCairo_Surface))
|
240
|
+
{
|
241
|
+
rb_raise (rb_eTypeError, "not a cairo surface");
|
242
|
+
}
|
243
|
+
Data_Get_Struct (obj, cairo_surface_t, surface);
|
244
|
+
return surface;
|
245
|
+
}
|
246
|
+
|
247
|
+
cairo_surface_t *
|
248
|
+
rb_cairo_surface_from_ruby_object (VALUE obj)
|
249
|
+
{
|
250
|
+
cairo_surface_t *surface =
|
251
|
+
rb_cairo_surface_from_ruby_object_without_null_check (obj);
|
252
|
+
if (!surface)
|
253
|
+
rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
|
254
|
+
return surface;
|
255
|
+
}
|
256
|
+
|
235
257
|
static void
|
236
258
|
cr_surface_destroy_raw (cairo_surface_t *surface)
|
237
259
|
{
|
@@ -254,7 +276,7 @@ cr_surface_destroy (VALUE self)
|
|
254
276
|
static VALUE
|
255
277
|
cr_surface_destroy_with_destroy_check (VALUE self)
|
256
278
|
{
|
257
|
-
if (
|
279
|
+
if (rb_cairo_surface_from_ruby_object_without_null_check (self))
|
258
280
|
cr_surface_destroy (self);
|
259
281
|
return Qnil;
|
260
282
|
}
|
@@ -407,21 +429,6 @@ cr_surface_xml_supported_p (VALUE klass)
|
|
407
429
|
#endif
|
408
430
|
}
|
409
431
|
|
410
|
-
/* constructor/de-constructor */
|
411
|
-
cairo_surface_t *
|
412
|
-
rb_cairo_surface_from_ruby_object (VALUE obj)
|
413
|
-
{
|
414
|
-
cairo_surface_t *surface;
|
415
|
-
if (!rb_cairo__is_kind_of (obj, rb_cCairo_Surface))
|
416
|
-
{
|
417
|
-
rb_raise (rb_eTypeError, "not a cairo surface");
|
418
|
-
}
|
419
|
-
Data_Get_Struct (obj, cairo_surface_t, surface);
|
420
|
-
if (!surface)
|
421
|
-
rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
|
422
|
-
return surface;
|
423
|
-
}
|
424
|
-
|
425
432
|
static rb_cairo__object_holder_t *
|
426
433
|
cr_object_holder_new (VALUE object)
|
427
434
|
{
|
@@ -515,6 +522,7 @@ cr_surface_finish (VALUE self)
|
|
515
522
|
cairo_surface_finish (surface);
|
516
523
|
cairo_surface_set_user_data (surface, &cr_finished_key, (void *)CR_TRUE, NULL);
|
517
524
|
cairo_surface_set_user_data (surface, &cr_object_holder_key, NULL, NULL);
|
525
|
+
DATA_PTR (self) = NULL;
|
518
526
|
|
519
527
|
if (closure && !NIL_P (closure->error))
|
520
528
|
rb_exc_raise (closure->error);
|
@@ -531,7 +539,7 @@ rb_cairo__surface_yield_and_finish (VALUE self)
|
|
531
539
|
|
532
540
|
rb_result = rb_yield (self);
|
533
541
|
|
534
|
-
surface =
|
542
|
+
surface = rb_cairo_surface_from_ruby_object_without_null_check (self);
|
535
543
|
if (!surface)
|
536
544
|
return rb_result;
|
537
545
|
if (cairo_surface_status (surface) != CAIRO_STATUS_SUCCESS)
|
@@ -1328,6 +1336,26 @@ cr_pdf_surface_set_thumbnail_size (VALUE self,
|
|
1328
1336
|
return Qnil;
|
1329
1337
|
}
|
1330
1338
|
# endif
|
1339
|
+
|
1340
|
+
# if CAIRO_CHECK_VERSION(1, 17, 6)
|
1341
|
+
static VALUE
|
1342
|
+
cr_pdf_surface_set_custom_metadata (VALUE self,
|
1343
|
+
VALUE rb_name,
|
1344
|
+
VALUE rb_value)
|
1345
|
+
{
|
1346
|
+
cairo_surface_t *surface;
|
1347
|
+
const char *name;
|
1348
|
+
const char *value;
|
1349
|
+
|
1350
|
+
surface = _SELF;
|
1351
|
+
name = RVAL2CSTR (rb_name);
|
1352
|
+
value = RVAL2CSTR (rb_value);
|
1353
|
+
cairo_pdf_surface_set_custom_metadata (surface, name, value);
|
1354
|
+
rb_cairo_surface_check_status (surface);
|
1355
|
+
|
1356
|
+
return Qnil;
|
1357
|
+
}
|
1358
|
+
# endif
|
1331
1359
|
#endif
|
1332
1360
|
|
1333
1361
|
#ifdef CAIRO_HAS_PS_SURFACE
|
@@ -2177,6 +2205,11 @@ Init_cairo_surface (void)
|
|
2177
2205
|
}
|
2178
2206
|
# endif
|
2179
2207
|
|
2208
|
+
# if CAIRO_CHECK_VERSION(1, 17, 6)
|
2209
|
+
rb_define_method (rb_cCairo_PDFSurface, "set_custom_metadata",
|
2210
|
+
cr_pdf_surface_set_custom_metadata, 2);
|
2211
|
+
# endif
|
2212
|
+
|
2180
2213
|
RB_CAIRO_DEF_SETTERS (rb_cCairo_PDFSurface);
|
2181
2214
|
#endif
|
2182
2215
|
|
data/test/test_context.rb
CHANGED
@@ -129,4 +129,18 @@ class ContextTest < Test::Unit::TestCase
|
|
129
129
|
context.raw_address > 0
|
130
130
|
end
|
131
131
|
end
|
132
|
+
|
133
|
+
def test_hairline
|
134
|
+
only_cairo_version(1, 17, 6)
|
135
|
+
|
136
|
+
Cairo::Context.create(@surface) do |context|
|
137
|
+
assert do
|
138
|
+
not context.hairline?
|
139
|
+
end
|
140
|
+
context.hairline = true
|
141
|
+
assert do
|
142
|
+
context.hairline?
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
132
146
|
end
|
data/test/test_font_face.rb
CHANGED
@@ -161,12 +161,16 @@ class FontFaceTest < Test::Unit::TestCase
|
|
161
161
|
|
162
162
|
if Cairo.satisfied_version?(1, 7, 2)
|
163
163
|
class CustomUserFontFace < Cairo::UserFontFace
|
164
|
-
attr_reader :init_args
|
165
|
-
attr_reader :
|
164
|
+
attr_reader :init_args
|
165
|
+
attr_reader :render_glyph_args
|
166
|
+
attr_reader :render_color_glyph_args
|
167
|
+
attr_reader :text_to_glyphs_args
|
168
|
+
attr_reader :unicode_to_glyph_args
|
166
169
|
def initialize
|
167
170
|
super
|
168
171
|
@init_args = []
|
169
172
|
@render_glyph_args = []
|
173
|
+
@render_color_glyph_args = []
|
170
174
|
@text_to_glyphs_args = []
|
171
175
|
@unicode_to_glyph_args = []
|
172
176
|
end
|
@@ -179,6 +183,10 @@ class FontFaceTest < Test::Unit::TestCase
|
|
179
183
|
@render_glyph_args << args
|
180
184
|
end
|
181
185
|
|
186
|
+
def render_color_glyph(*args)
|
187
|
+
@render_color_glyph_args << args
|
188
|
+
end
|
189
|
+
|
182
190
|
def text_to_glyphs(*args)
|
183
191
|
@text_to_glyphs_args << args
|
184
192
|
scaled_font, utf8, data = args
|
@@ -203,25 +211,102 @@ class FontFaceTest < Test::Unit::TestCase
|
|
203
211
|
Cairo::Matrix.identity,
|
204
212
|
Cairo::FontOptions.new)
|
205
213
|
result = scaled_font.text_to_glyphs(0, 0, "text")
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
214
|
+
if Cairo.satisfied_version?(1, 17, 6)
|
215
|
+
assert_equal({
|
216
|
+
init_args: [
|
217
|
+
[Cairo::ScaledFont, Cairo::Context, Cairo::FontExtents]
|
218
|
+
],
|
219
|
+
render_glyph_args: [],
|
220
|
+
render_color_glyph_args: [
|
221
|
+
[
|
222
|
+
Cairo::ScaledFont, codepoint("t"),
|
223
|
+
Cairo::Context, Cairo::TextExtents,
|
224
|
+
],
|
225
|
+
[
|
226
|
+
Cairo::ScaledFont, codepoint("e"),
|
227
|
+
Cairo::Context, Cairo::TextExtents,
|
228
|
+
],
|
229
|
+
[
|
230
|
+
Cairo::ScaledFont, codepoint("x"),
|
231
|
+
Cairo::Context, Cairo::TextExtents,
|
232
|
+
],
|
233
|
+
],
|
234
|
+
text_to_glyphs_args: [
|
235
|
+
[
|
236
|
+
Cairo::ScaledFont, "text",
|
237
|
+
Cairo::UserFontFace::TextToGlyphsData],
|
238
|
+
],
|
239
|
+
unicode_to_glyph_args: [
|
240
|
+
[Cairo::ScaledFont, codepoint("t")],
|
241
|
+
[Cairo::ScaledFont, codepoint("e")],
|
242
|
+
[Cairo::ScaledFont, codepoint("x")],
|
243
|
+
[Cairo::ScaledFont, codepoint("t")],
|
244
|
+
],
|
245
|
+
result: [
|
246
|
+
[],
|
247
|
+
[],
|
248
|
+
Cairo::TextClusterFlag::BACKWARD,
|
249
|
+
],
|
250
|
+
},
|
251
|
+
{
|
252
|
+
init_args: classify_cairo_object(face.init_args),
|
253
|
+
render_glyph_args:
|
254
|
+
classify_cairo_object(face.render_glyph_args),
|
255
|
+
render_color_glyph_args:
|
256
|
+
classify_cairo_object(face.render_color_glyph_args),
|
257
|
+
text_to_glyphs_args:
|
258
|
+
classify_cairo_object(face.text_to_glyphs_args),
|
259
|
+
unicode_to_glyph_args:
|
260
|
+
classify_cairo_object(face.unicode_to_glyph_args),
|
261
|
+
result: result,
|
262
|
+
})
|
263
|
+
else
|
264
|
+
assert_equal({
|
265
|
+
init_args: [
|
266
|
+
[Cairo::ScaledFont, Cairo::Context, Cairo::FontExtents]
|
267
|
+
],
|
268
|
+
render_glyph_args: [
|
269
|
+
[
|
270
|
+
Cairo::ScaledFont, codepoint("t"),
|
271
|
+
Cairo::Context, Cairo::TextExtents,
|
272
|
+
],
|
273
|
+
[
|
274
|
+
Cairo::ScaledFont, codepoint("e"),
|
275
|
+
Cairo::Context, Cairo::TextExtents,
|
276
|
+
],
|
277
|
+
[
|
278
|
+
Cairo::ScaledFont, codepoint("x"),
|
279
|
+
Cairo::Context, Cairo::TextExtents,
|
280
|
+
],
|
281
|
+
],
|
282
|
+
text_to_glyphs_args: [
|
283
|
+
[
|
284
|
+
Cairo::ScaledFont, "text",
|
285
|
+
Cairo::UserFontFace::TextToGlyphsData],
|
286
|
+
],
|
287
|
+
unicode_to_glyph_args: [
|
288
|
+
[Cairo::ScaledFont, codepoint("t")],
|
289
|
+
[Cairo::ScaledFont, codepoint("e")],
|
290
|
+
[Cairo::ScaledFont, codepoint("x")],
|
291
|
+
[Cairo::ScaledFont, codepoint("t")],
|
292
|
+
],
|
293
|
+
result: [
|
294
|
+
[],
|
295
|
+
[],
|
296
|
+
Cairo::TextClusterFlag::BACKWARD,
|
297
|
+
],
|
298
|
+
},
|
299
|
+
{
|
300
|
+
init_args: classify_cairo_object(face.init_args),
|
301
|
+
render_glyph_args:
|
302
|
+
classify_cairo_object(face.render_glyph_args),
|
303
|
+
text_to_glyphs_args:
|
304
|
+
classify_cairo_object(face.text_to_glyphs_args),
|
305
|
+
unicode_to_glyph_args:
|
306
|
+
classify_cairo_object(face.unicode_to_glyph_args),
|
307
|
+
result: result,
|
308
|
+
})
|
309
|
+
end
|
225
310
|
end
|
226
311
|
|
227
312
|
def test_user_font_face_class_and_callback
|
@@ -6,8 +6,10 @@ class QuartzImageSurfaceTest < Test::Unit::TestCase
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def test_quartz_image_surface
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Cairo::ImageSurface.create(100, 100) do |surface|
|
10
|
+
Cairo::QuartzImageSurface.create(surface) do |quartz_surface|
|
11
|
+
assert_kind_of(Cairo::QuartzImageSurface, quartz_surface)
|
12
|
+
end
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
data/test/test_svg_surface.rb
CHANGED
@@ -10,7 +10,11 @@ class SVGSurfaceTest < Test::Unit::TestCase
|
|
10
10
|
only_cairo_version(1, 15, 10)
|
11
11
|
output = StringIO.new
|
12
12
|
surface = Cairo::SVGSurface.new(output, 10, 20)
|
13
|
-
|
13
|
+
if Cairo.satisfied_version?(1, 17, 6)
|
14
|
+
assert_equal(Cairo::SVGUnit::USER, surface.document_unit)
|
15
|
+
else
|
16
|
+
assert_equal(Cairo::SVGUnit::PT, surface.document_unit)
|
17
|
+
end
|
14
18
|
surface.document_unit = Cairo::SVGUnit::CM
|
15
19
|
assert_equal(Cairo::SVGUnit::CM, surface.document_unit)
|
16
20
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cairo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.17.
|
4
|
+
version: 1.17.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: native-package-installer
|
@@ -235,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
235
|
version: '0'
|
236
236
|
requirements:
|
237
237
|
- cairo >= 1.2.0
|
238
|
-
rubygems_version: 3.
|
238
|
+
rubygems_version: 3.4.0.dev
|
239
239
|
signing_key:
|
240
240
|
specification_version: 4
|
241
241
|
summary: Ruby bindings for cairo
|