cairo 1.16.6 → 1.17.6

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: c15e8af590215c88e266c06bdbc88bd56fa67447150014354e46f04aefd88ad6
4
- data.tar.gz: 4cd483495ef9499f407826907ef021973794af9d44a9072e594ac613ec64574e
3
+ metadata.gz: 7b1853ada5ca7f86bebe04e05e51c0b49a84fb7782bb2156db4d1825f75cc415
4
+ data.tar.gz: 326f5322f9e2b66e115d656a762384e5caaa18ecba44c576a805c5989278d330
5
5
  SHA512:
6
- metadata.gz: 21bc8f32edabb79ab6c5c397292ec31a465893ba7a7d2702315fd50eadecdc489c437f21c7f4c238a8c968ebe121ea5386b6ed1470334b466727b568b417060a
7
- data.tar.gz: 5dfcb99bfa8c74626d0162251c13ac4cfa331b11e5adf16a4b76b3236fd04d5070e592378d63aeb9e8c472dac1e4bd443f3bf34ba916f7204e9449720670f7de
6
+ metadata.gz: db4171dfe178c24f632f38fcbbd1960412160dd999bdd925b6501c663641a308acab2bd6fa2f9a84b3e18c30821ce3f6514b7dac809fd2b965f25c79051f66bd
7
+ data.tar.gz: d9ef0bedc2b597617415c88d3734a4fe33a38bffc7a49939d671e4eed88f0da07f741fad595315376a76504dca36f35186563945a124d43510338ecd16970337
data/NEWS CHANGED
@@ -1,5 +1,53 @@
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
+
41
+ Release 1.17.4 (2021-01-17) Sutou Kouhei <kou@cozmixng.org>
42
+ ===========================================================
43
+
44
+ Improvements
45
+ ------------
46
+
47
+ * Added support for Red Colors.
48
+
1
49
  Release 1.16.6 (2020-07-23) Sutou Kouhei <kou@cozmixng.org>
2
- ============================================================
50
+ ===========================================================
3
51
 
4
52
  Improvements
5
53
  ------------
@@ -24,7 +72,7 @@ Thanks
24
72
  * dsisnero
25
73
 
26
74
  Release 1.16.5 (2020-02-03) Sutou Kouhei <kou@cozmixng.org>
27
- ============================================================
75
+ ===========================================================
28
76
 
29
77
  Improvements
30
78
  ------------
@@ -53,7 +101,7 @@ Thanks
53
101
  * kojix2
54
102
 
55
103
  Release 1.16.4 (2019-03-09) Kouhei Sutou <kou@cozmixng.org>
56
- ============================================================
104
+ ===========================================================
57
105
 
58
106
  Fixes
59
107
  -----
@@ -61,7 +109,7 @@ Fixes
61
109
  * Removed Skia related code entirely.
62
110
 
63
111
  Release 1.16.3 (2019-03-09) Kouhei Sutou <kou@cozmixng.org>
64
- ============================================================
112
+ ===========================================================
65
113
 
66
114
  Improvements
67
115
  ------------
@@ -88,7 +136,7 @@ Thanks
88
136
  * spoolkitamura.
89
137
 
90
138
  Release 1.16.2 (2018-10-31) Kouhei Sutou <kou@cozmixng.org>
91
- ============================================================
139
+ ===========================================================
92
140
 
93
141
  Improvements
94
142
  ------------
@@ -97,7 +145,7 @@ Improvements
97
145
  MSYS2 packages.
98
146
 
99
147
  Release 1.16.1 (2018-10-31) Kouhei Sutou <kou@cozmixng.org>
100
- ============================================================
148
+ ===========================================================
101
149
 
102
150
  Improvements
103
151
  ------------
@@ -105,7 +153,7 @@ Improvements
105
153
  * Added Cairo::Context#destroyed?.
106
154
 
107
155
  Release 1.16.0 (2018-10-28) Kouhei Sutou <kou@cozmixng.org>
108
- ============================================================
156
+ ===========================================================
109
157
 
110
158
  Improvements
111
159
  ------------
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-2020 Sutou Kouhei <kou@cozmixng.org>
8
+ * Copyright 2006-2021 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
  *
@@ -64,7 +64,7 @@ RB_CAIRO_BEGIN_DECLS
64
64
  #endif
65
65
 
66
66
  #define RB_CAIRO_VERSION_MAJOR 1
67
- #define RB_CAIRO_VERSION_MINOR 16
67
+ #define RB_CAIRO_VERSION_MINOR 17
68
68
  #define RB_CAIRO_VERSION_MICRO 6
69
69
 
70
70
  RB_CAIRO_VAR VALUE rb_mCairo;
@@ -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);
@@ -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-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,7 +5,7 @@
5
5
  * $Author: kou $
6
6
  * $Date: 2008-09-26 14:13:58 $
7
7
  *
8
- * Copyright 2003-2019 Sutou Kouhei <kou@cozmixng.org>
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
- cr_user_font_face_render_glyph_func (cairo_scaled_font_t *scaled_font,
467
- unsigned long glyph,
468
- cairo_t *cr,
469
- cairo_text_extents_t *extents)
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) && rb_obj_respond_to (self, cr_id_render_glyph, Qtrue))
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 = cr_id_render_glyph;
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",
@@ -5,7 +5,7 @@
5
5
  * $Author: kou $
6
6
  * $Date: 2008-09-19 12:56:27 $
7
7
  *
8
- * Copyright 2005-2018 Kouhei Sutou <kou@cozmixng.org>
8
+ * Copyright 2005-2021 Sutou Kouhei <kou@cozmixng.org>
9
9
  *
10
10
  * This file is made available under the same terms as Ruby
11
11
  *
@@ -104,7 +104,7 @@ cr_options_equal (VALUE self, VALUE other)
104
104
  static VALUE
105
105
  cr_options_hash (VALUE self)
106
106
  {
107
- return INT2NUM (cairo_font_options_hash (_SELF (self)));
107
+ return ULONG2NUM (cairo_font_options_hash (_SELF (self)));
108
108
  }
109
109
 
110
110
  static VALUE
@@ -2,7 +2,7 @@
2
2
  /*
3
3
  * Ruby Cairo Binding
4
4
  *
5
- * Copyright 2005-2019 Kouhei Sutou <kou@cozmixng.org>
5
+ * Copyright 2005-2021 Sutou Kouhei <kou@cozmixng.org>
6
6
  *
7
7
  * This file is made available under the same terms as Ruby
8
8
  *
@@ -130,7 +130,7 @@ rb_cairo__io_read_func_invoke (VALUE read_closure)
130
130
  {
131
131
  rb_str_concat (result,
132
132
  rb_funcall (input,
133
- rb_cairo__io_id_read, 1, INT2NUM (rest)));
133
+ rb_cairo__io_id_read, 1, LONG2NUM (rest)));
134
134
  }
135
135
 
136
136
  memcpy ((void *)closure->data, (const void *) StringValuePtr (result), length);
@@ -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-2019 Kouhei Sutou <kou@cozmixng.org>
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 (_SELF)
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 = _SELF;
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/lib/cairo/color.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "colors"
2
+
1
3
  module Cairo
2
4
  module Color
3
5
  module_function
@@ -21,8 +23,14 @@ module Cairo
21
23
  begin
22
24
  const_get(name).dup
23
25
  rescue NameError
24
- raise ArgumentError, "unknown color name: #{value}"
26
+ color = Colors[value]
27
+ if color == value.to_s
28
+ raise ArgumentError, "unknown color name: #{value}"
29
+ end
30
+ RGB.new(*color.to_rgba.components)
25
31
  end
32
+ when Colors::AbstractColor
33
+ RGB.new(*value.to_rgba.components)
26
34
  else
27
35
  if robust
28
36
  raise ArgumentError, "can't parse as color name: #{value.inspect}"
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
@@ -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, :render_glyph_args
165
- attr_reader :text_to_glyphs_args, :unicode_to_glyph_args
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
- assert_equal([[[Cairo::ScaledFont, Cairo::Context, Cairo::FontExtents]],
207
- [[Cairo::ScaledFont, codepoint("t"),
208
- Cairo::Context, Cairo::TextExtents],
209
- [Cairo::ScaledFont, codepoint("e"),
210
- Cairo::Context, Cairo::TextExtents],
211
- [Cairo::ScaledFont, codepoint("x"),
212
- Cairo::Context, Cairo::TextExtents]],
213
- [[Cairo::ScaledFont, "text",
214
- Cairo::UserFontFace::TextToGlyphsData]],
215
- [[Cairo::ScaledFont, codepoint("t")],
216
- [Cairo::ScaledFont, codepoint("e")],
217
- [Cairo::ScaledFont, codepoint("x")],
218
- [Cairo::ScaledFont, codepoint("t")]],
219
- [[], [], Cairo::TextClusterFlag::BACKWARD]],
220
- [classify_cairo_object(face.init_args),
221
- classify_cairo_object(face.render_glyph_args),
222
- classify_cairo_object(face.text_to_glyphs_args),
223
- classify_cairo_object(face.unicode_to_glyph_args),
224
- result])
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
- surface = Cairo::ImageSurface.new(100, 100)
10
- quartz_surface = Cairo::QuartzImageSurface.new(surface)
11
- assert_kind_of(Cairo::QuartzImageSurface, quartz_surface)
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
@@ -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
- assert_equal(Cairo::SVGUnit::PT, surface.document_unit)
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,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cairo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.6
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: 2020-07-22 00:00:00.000000000 Z
11
+ date: 2022-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: native-package-installer
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.3
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: pkg-config
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -25,19 +39,19 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: 1.2.2
27
41
  - !ruby/object:Gem::Dependency
28
- name: native-package-installer
42
+ name: red-colors
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: 1.0.3
47
+ version: '0'
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: 1.0.3
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -221,7 +235,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
221
235
  version: '0'
222
236
  requirements:
223
237
  - cairo >= 1.2.0
224
- rubygems_version: 3.2.0.pre1
238
+ rubygems_version: 3.4.0.dev
225
239
  signing_key:
226
240
  specification_version: 4
227
241
  summary: Ruby bindings for cairo