rmagick 5.4.4 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.devcontainer/ImageMagick6/devcontainer.json +1 -1
  3. data/.devcontainer/devcontainer.json +1 -1
  4. data/.github/workflows/ci.yml +41 -31
  5. data/.gitignore +1 -0
  6. data/.rubocop.yml +36 -9
  7. data/.rubocop_todo.yml +369 -187
  8. data/CHANGELOG.md +77 -0
  9. data/Gemfile +14 -0
  10. data/README.md +3 -3
  11. data/Rakefile +12 -1
  12. data/before_install_linux.sh +1 -11
  13. data/before_install_osx.sh +5 -7
  14. data/ext/RMagick/extconf.rb +58 -68
  15. data/ext/RMagick/rmagick.h +7 -12
  16. data/ext/RMagick/rmdraw.cpp +10 -20
  17. data/ext/RMagick/rmfill.cpp +4 -4
  18. data/ext/RMagick/rmilist.cpp +10 -2
  19. data/ext/RMagick/rmimage.cpp +342 -344
  20. data/ext/RMagick/rminfo.cpp +22 -21
  21. data/ext/RMagick/rmkinfo.cpp +5 -18
  22. data/ext/RMagick/rmmain.cpp +42 -91
  23. data/ext/RMagick/rmmontage.cpp +5 -5
  24. data/ext/RMagick/rmpixel.cpp +3 -3
  25. data/ext/RMagick/rmutil.cpp +58 -89
  26. data/lib/rmagick/version.rb +3 -3
  27. data/lib/rmagick.rb +1 -1
  28. data/lib/rmagick_internal.rb +111 -103
  29. data/lib/rvg/container.rb +3 -3
  30. data/lib/rvg/embellishable.rb +7 -3
  31. data/lib/rvg/misc.rb +15 -15
  32. data/lib/rvg/rvg.rb +6 -6
  33. data/lib/rvg/stretchable.rb +2 -2
  34. data/lib/rvg/stylable.rb +2 -2
  35. data/lib/rvg/transformable.rb +1 -1
  36. data/lib/rvg/units.rb +1 -0
  37. data/rmagick.gemspec +2 -15
  38. data/sig/rmagick/_draw_common_methods.rbs +64 -0
  39. data/sig/rmagick/_image_common_methods.rbs +387 -0
  40. data/sig/rmagick/draw.rbs +38 -0
  41. data/sig/rmagick/draw_attribute.rbs +28 -0
  42. data/sig/rmagick/enum.rbs +820 -0
  43. data/sig/rmagick/error.rbs +11 -0
  44. data/sig/rmagick/fill.rbs +21 -0
  45. data/sig/rmagick/geometry.rbs +14 -0
  46. data/sig/rmagick/image.rbs +196 -0
  47. data/sig/rmagick/image_list.rbs +183 -0
  48. data/sig/rmagick/iptc.rbs +101 -0
  49. data/sig/rmagick/kernel_info.rbs +12 -0
  50. data/sig/rmagick/optional_method_arguments.rbs +10 -0
  51. data/sig/rmagick/pixel.rbs +46 -0
  52. data/sig/rmagick/struct.rbs +90 -0
  53. data/sig/rmagick.rbs +43 -0
  54. data/sig/rvg/clippath.rbs +34 -0
  55. data/sig/rvg/container.rbs +78 -0
  56. data/sig/rvg/deep_equal.rbs +48 -0
  57. data/sig/rvg/describable.rbs +30 -0
  58. data/sig/rvg/embellishable.rbs +226 -0
  59. data/sig/rvg/misc.rbs +145 -0
  60. data/sig/rvg/paint.rbs +55 -0
  61. data/sig/rvg/pathdata.rbs +77 -0
  62. data/sig/rvg/rvg.rbs +125 -0
  63. data/sig/rvg/stretchable.rbs +56 -0
  64. data/sig/rvg/stylable.rbs +66 -0
  65. data/sig/rvg/text.rbs +118 -0
  66. data/sig/rvg/transformable.rbs +59 -0
  67. data/sig/rvg/units.rbs +33 -0
  68. metadata +38 -134
@@ -819,8 +819,8 @@ Info_density(VALUE self)
819
819
  /**
820
820
  * Set the text rendering density geometry
821
821
  *
822
- * @param density_arg [String] the density
823
- * @return [String] the given value
822
+ * @param density_arg [Magick::Geometry, String] the density
823
+ * @return [Magick::Geometry, String] the given value
824
824
  * @see https://www.imagemagick.org/Magick++/Geometry.html
825
825
  */
826
826
  VALUE
@@ -836,7 +836,7 @@ Info_density_eq(VALUE self, VALUE density_arg)
836
836
  {
837
837
  magick_free(info->density);
838
838
  info->density = NULL;
839
- return self;
839
+ return density_arg;
840
840
  }
841
841
 
842
842
  density = rb_String(density_arg);
@@ -1000,7 +1000,7 @@ Info_dispose_eq(VALUE self, VALUE disp)
1000
1000
  if (NIL_P(disp))
1001
1001
  {
1002
1002
  DeleteImageOption(info, "dispose");
1003
- return self;
1003
+ return disp;
1004
1004
  }
1005
1005
 
1006
1006
  VALUE_TO_ENUM(disp, dispose, DisposeType);
@@ -1096,8 +1096,8 @@ Info_extract(VALUE self)
1096
1096
  /**
1097
1097
  * Set the extract geometry.
1098
1098
  *
1099
- * @param extract_arg [String] the extract string
1100
- * @return [String] the given value
1099
+ * @param extract_arg [Magick::Geometry, String] the extract string
1100
+ * @return [Magick::Geometry, String] the given value
1101
1101
  * @see https://www.imagemagick.org/Magick++/Geometry.html
1102
1102
  */
1103
1103
  VALUE
@@ -1113,7 +1113,7 @@ Info_extract_eq(VALUE self, VALUE extract_arg)
1113
1113
  {
1114
1114
  magick_free(info->extract);
1115
1115
  info->extract = NULL;
1116
- return self;
1116
+ return extract_arg;
1117
1117
  }
1118
1118
 
1119
1119
  extract = rb_String(extract_arg);
@@ -1431,7 +1431,7 @@ Info_gravity_eq(VALUE self, VALUE grav)
1431
1431
  if (NIL_P(grav))
1432
1432
  {
1433
1433
  DeleteImageOption(info, "gravity");
1434
- return self;
1434
+ return grav;
1435
1435
  }
1436
1436
 
1437
1437
  VALUE_TO_ENUM(grav, gravity, GravityType);
@@ -1668,8 +1668,8 @@ Info_origin(VALUE self)
1668
1668
  * The geometry format is
1669
1669
  * +-x+-y
1670
1670
  *
1671
- * @param origin_arg [String] the origin geometry
1672
- * @return [String] the given value
1671
+ * @param origin_arg [Magick::Geometry, String] the origin geometry
1672
+ * @return [Magick::Geometry, String] the given value
1673
1673
  * @see https://www.imagemagick.org/Magick++/Geometry.html
1674
1674
  */
1675
1675
  VALUE
@@ -1684,7 +1684,7 @@ Info_origin_eq(VALUE self, VALUE origin_arg)
1684
1684
  if (NIL_P(origin_arg))
1685
1685
  {
1686
1686
  DeleteImageOption(info, "origin");
1687
- return self;
1687
+ return origin_arg;
1688
1688
  }
1689
1689
 
1690
1690
  origin_str = rb_String(origin_arg);
@@ -1724,8 +1724,8 @@ Info_page(VALUE self)
1724
1724
  * Store the Postscript page geometry. Argument may be a Geometry object as well
1725
1725
  * as a geometry string.
1726
1726
  *
1727
- * @param page_arg [String] the geometry
1728
- * @return [String] the given value
1727
+ * @param page_arg [Magick::Geometry, String] the geometry
1728
+ * @return [Magick::Geometry, String] the given value
1729
1729
  * @see https://www.imagemagick.org/Magick++/Geometry.html
1730
1730
  */
1731
1731
  VALUE
@@ -1740,7 +1740,7 @@ Info_page_eq(VALUE self, VALUE page_arg)
1740
1740
  {
1741
1741
  magick_free(info->page);
1742
1742
  info->page = NULL;
1743
- return self;
1743
+ return page_arg;
1744
1744
  }
1745
1745
  geom_str = rb_String(page_arg);
1746
1746
  geometry = GetPageGeometry(StringValueCStr(geom_str));
@@ -1748,7 +1748,7 @@ Info_page_eq(VALUE self, VALUE page_arg)
1748
1748
  {
1749
1749
  magick_free(info->page);
1750
1750
  info->page = NULL;
1751
- return self;
1751
+ return page_arg;
1752
1752
  }
1753
1753
  info->page = geometry;
1754
1754
 
@@ -1949,8 +1949,8 @@ Info_size(VALUE self)
1949
1949
  /**
1950
1950
  * Set the size (either as a Geometry object or a Geometry string
1951
1951
  *
1952
- * @param size_arg [String] the size
1953
- * @return [String] the given value
1952
+ * @param size_arg [Magick::Geometry, String] the size
1953
+ * @return [Magick::Geometry, String] the given value
1954
1954
  * @see https://www.imagemagick.org/Magick++/Geometry.html
1955
1955
  */
1956
1956
  VALUE
@@ -1966,7 +1966,7 @@ Info_size_eq(VALUE self, VALUE size_arg)
1966
1966
  {
1967
1967
  magick_free(info->size);
1968
1968
  info->size = NULL;
1969
- return self;
1969
+ return size_arg;
1970
1970
  }
1971
1971
 
1972
1972
  size = rb_String(size_arg);
@@ -2100,8 +2100,8 @@ Info_tile_offset(VALUE self)
2100
2100
  /**
2101
2101
  * Set tile offset geometry.
2102
2102
  *
2103
- * @param offset [String] the offset geometry
2104
- * @return [String] the given value
2103
+ * @param offset [Magick::Geometry, String] the offset geometry
2104
+ * @return [Magick::Geometry, String] the given value
2105
2105
  * @see https://www.imagemagick.org/Magick++/Geometry.html
2106
2106
  */
2107
2107
  VALUE
@@ -2401,7 +2401,8 @@ rm_info_new(void)
2401
2401
  * @overload initialize
2402
2402
  *
2403
2403
  * @overload initialize
2404
- * @yield [Magick::Image::Info]
2404
+ * @yield [info]
2405
+ * @yieldparam info [Magick::Image::Info]
2405
2406
  *
2406
2407
  * @return self
2407
2408
  */
@@ -74,15 +74,13 @@ VALUE
74
74
  KernelInfo_initialize(VALUE self, VALUE kernel_string)
75
75
  {
76
76
  KernelInfo *kernel;
77
+ char *string = StringValueCStr(kernel_string);
78
+
77
79
  #if defined(IMAGEMAGICK_7)
78
80
  ExceptionInfo *exception;
79
- #endif
80
-
81
- Check_Type(kernel_string, T_STRING);
82
81
 
83
- #if defined(IMAGEMAGICK_7)
84
82
  exception = AcquireExceptionInfo();
85
- kernel = AcquireKernelInfo(StringValueCStr(kernel_string), exception);
83
+ kernel = AcquireKernelInfo(string, exception);
86
84
  if (rm_should_raise_exception(exception, DestroyExceptionRetention))
87
85
  {
88
86
  if (kernel != (KernelInfo *) NULL)
@@ -92,7 +90,7 @@ KernelInfo_initialize(VALUE self, VALUE kernel_string)
92
90
  rm_raise_exception(exception);
93
91
  }
94
92
  #else
95
- kernel = AcquireKernelInfo(StringValueCStr(kernel_string));
93
+ kernel = AcquireKernelInfo(string);
96
94
  #endif
97
95
 
98
96
  if (!kernel)
@@ -114,9 +112,6 @@ KernelInfo_initialize(VALUE self, VALUE kernel_string)
114
112
  VALUE
115
113
  KernelInfo_unity_add(VALUE self, VALUE scale)
116
114
  {
117
- if (!FIXNUM_P(scale))
118
- Check_Type(scale, T_FLOAT);
119
-
120
115
  GVL_STRUCT_TYPE(UnityAddKernelInfo) args = { (KernelInfo*)DATA_PTR(self), NUM2DBL(scale) };
121
116
  CALL_FUNC_WITHOUT_GVL(GVL_FUNC(UnityAddKernelInfo), &args);
122
117
  return Qnil;
@@ -136,13 +131,7 @@ KernelInfo_scale(VALUE self, VALUE scale, VALUE flags)
136
131
  {
137
132
  GeometryFlags geoflags;
138
133
 
139
- if (!FIXNUM_P(scale))
140
- Check_Type(scale, T_FLOAT);
141
-
142
- if (rb_obj_is_instance_of(flags, Class_GeometryFlags))
143
- VALUE_TO_ENUM(flags, geoflags, GeometryFlags);
144
- else
145
- rb_raise(rb_eArgError, "expected Integer or Magick::GeometryFlags to specify flags");
134
+ VALUE_TO_ENUM(flags, geoflags, GeometryFlags);
146
135
 
147
136
  GVL_STRUCT_TYPE(ScaleKernelInfo) args = { (KernelInfo*)DATA_PTR(self), NUM2DBL(scale), geoflags };
148
137
  CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ScaleKernelInfo), &args);
@@ -158,7 +147,6 @@ KernelInfo_scale(VALUE self, VALUE scale, VALUE flags)
158
147
  VALUE
159
148
  KernelInfo_scale_geometry(VALUE self, VALUE geometry)
160
149
  {
161
- Check_Type(geometry, T_STRING);
162
150
  GVL_STRUCT_TYPE(ScaleGeometryKernelInfo) args = { (KernelInfo*)DATA_PTR(self), StringValueCStr(geometry) };
163
151
  CALL_FUNC_WITHOUT_GVL(GVL_FUNC(ScaleGeometryKernelInfo), &args);
164
152
  return Qnil;
@@ -195,7 +183,6 @@ KernelInfo_builtin(VALUE self, VALUE what, VALUE geometry)
195
183
  ExceptionInfo *exception;
196
184
  #endif
197
185
 
198
- Check_Type(geometry, T_STRING);
199
186
  VALUE_TO_ENUM(what, kernel_type, KernelInfoType);
200
187
  ParseGeometry(StringValueCStr(geometry), &info);
201
188
 
@@ -14,7 +14,7 @@
14
14
  #define MAIN // Define external variables
15
15
  #include "rmagick.h"
16
16
 
17
- #if defined(HAVE_SETMAGICKALIGNEDMEMORYMETHODS) && defined(HAVE_RB_GC_ADJUST_MEMORY_USAGE)
17
+ #if defined(HAVE_SETMAGICKALIGNEDMEMORYMETHODS)
18
18
  #if defined(HAVE_POSIX_MEMALIGN) || defined(HAVE__ALIGNED_MSIZE)
19
19
  #define USE_RM_ALIGNED_MALLOC 1
20
20
 
@@ -653,30 +653,33 @@ Init_RMagick2(void)
653
653
  rb_define_alloc_func(Class_Draw, Draw_alloc);
654
654
 
655
655
  // Define the attributes
656
- rb_define_method(Class_Draw, "affine=", RUBY_METHOD_FUNC(Draw_affine_eq), 1);
657
- rb_define_method(Class_Draw, "align=", RUBY_METHOD_FUNC(Draw_align_eq), 1);
658
- rb_define_method(Class_Draw, "decorate=", RUBY_METHOD_FUNC(Draw_decorate_eq), 1);
659
- rb_define_method(Class_Draw, "density=", RUBY_METHOD_FUNC(Draw_density_eq), 1);
660
- rb_define_method(Class_Draw, "encoding=", RUBY_METHOD_FUNC(Draw_encoding_eq), 1);
661
- rb_define_method(Class_Draw, "fill=", RUBY_METHOD_FUNC(Draw_fill_eq), 1);
662
- rb_define_method(Class_Draw, "fill_pattern=", RUBY_METHOD_FUNC(Draw_fill_pattern_eq), 1);
663
- rb_define_method(Class_Draw, "font=", RUBY_METHOD_FUNC(Draw_font_eq), 1);
664
- rb_define_method(Class_Draw, "font_family=", RUBY_METHOD_FUNC(Draw_font_family_eq), 1);
665
- rb_define_method(Class_Draw, "font_stretch=", RUBY_METHOD_FUNC(Draw_font_stretch_eq), 1);
666
- rb_define_method(Class_Draw, "font_style=", RUBY_METHOD_FUNC(Draw_font_style_eq), 1);
667
- rb_define_method(Class_Draw, "font_weight=", RUBY_METHOD_FUNC(Draw_font_weight_eq), 1);
668
- rb_define_method(Class_Draw, "gravity=", RUBY_METHOD_FUNC(Draw_gravity_eq), 1);
669
- rb_define_method(Class_Draw, "interline_spacing=", RUBY_METHOD_FUNC(Draw_interline_spacing_eq), 1);
670
- rb_define_method(Class_Draw, "interword_spacing=", RUBY_METHOD_FUNC(Draw_interword_spacing_eq), 1);
671
- rb_define_method(Class_Draw, "kerning=", RUBY_METHOD_FUNC(Draw_kerning_eq), 1);
672
- rb_define_method(Class_Draw, "pointsize=", RUBY_METHOD_FUNC(Draw_pointsize_eq), 1);
673
- rb_define_method(Class_Draw, "rotation=", RUBY_METHOD_FUNC(Draw_rotation_eq), 1);
674
- rb_define_method(Class_Draw, "stroke=", RUBY_METHOD_FUNC(Draw_stroke_eq), 1);
675
- rb_define_method(Class_Draw, "stroke_pattern=", RUBY_METHOD_FUNC(Draw_stroke_pattern_eq), 1);
676
- rb_define_method(Class_Draw, "stroke_width=", RUBY_METHOD_FUNC(Draw_stroke_width_eq), 1);
677
- rb_define_method(Class_Draw, "text_antialias=", RUBY_METHOD_FUNC(Draw_text_antialias_eq), 1);
678
- rb_define_method(Class_Draw, "tile=", RUBY_METHOD_FUNC(Draw_tile_eq), 1);
679
- rb_define_method(Class_Draw, "undercolor=", RUBY_METHOD_FUNC(Draw_undercolor_eq), 1);
656
+ Module_DrawAttribute = rb_define_module_under(Module_Magick, "DrawAttribute");
657
+ rb_define_method(Module_DrawAttribute, "affine=", RUBY_METHOD_FUNC(Draw_affine_eq), 1);
658
+ rb_define_method(Module_DrawAttribute, "align=", RUBY_METHOD_FUNC(Draw_align_eq), 1);
659
+ rb_define_method(Module_DrawAttribute, "decorate=", RUBY_METHOD_FUNC(Draw_decorate_eq), 1);
660
+ rb_define_method(Module_DrawAttribute, "density=", RUBY_METHOD_FUNC(Draw_density_eq), 1);
661
+ rb_define_method(Module_DrawAttribute, "encoding=", RUBY_METHOD_FUNC(Draw_encoding_eq), 1);
662
+ rb_define_method(Module_DrawAttribute, "fill=", RUBY_METHOD_FUNC(Draw_fill_eq), 1);
663
+ rb_define_method(Module_DrawAttribute, "fill_pattern=", RUBY_METHOD_FUNC(Draw_fill_pattern_eq), 1);
664
+ rb_define_method(Module_DrawAttribute, "font=", RUBY_METHOD_FUNC(Draw_font_eq), 1);
665
+ rb_define_method(Module_DrawAttribute, "font_family=", RUBY_METHOD_FUNC(Draw_font_family_eq), 1);
666
+ rb_define_method(Module_DrawAttribute, "font_stretch=", RUBY_METHOD_FUNC(Draw_font_stretch_eq), 1);
667
+ rb_define_method(Module_DrawAttribute, "font_style=", RUBY_METHOD_FUNC(Draw_font_style_eq), 1);
668
+ rb_define_method(Module_DrawAttribute, "font_weight=", RUBY_METHOD_FUNC(Draw_font_weight_eq), 1);
669
+ rb_define_method(Module_DrawAttribute, "gravity=", RUBY_METHOD_FUNC(Draw_gravity_eq), 1);
670
+ rb_define_method(Module_DrawAttribute, "interline_spacing=", RUBY_METHOD_FUNC(Draw_interline_spacing_eq), 1);
671
+ rb_define_method(Module_DrawAttribute, "interword_spacing=", RUBY_METHOD_FUNC(Draw_interword_spacing_eq), 1);
672
+ rb_define_method(Module_DrawAttribute, "kerning=", RUBY_METHOD_FUNC(Draw_kerning_eq), 1);
673
+ rb_define_method(Module_DrawAttribute, "pointsize=", RUBY_METHOD_FUNC(Draw_pointsize_eq), 1);
674
+ rb_define_method(Module_DrawAttribute, "rotation=", RUBY_METHOD_FUNC(Draw_rotation_eq), 1);
675
+ rb_define_method(Module_DrawAttribute, "stroke=", RUBY_METHOD_FUNC(Draw_stroke_eq), 1);
676
+ rb_define_method(Module_DrawAttribute, "stroke_pattern=", RUBY_METHOD_FUNC(Draw_stroke_pattern_eq), 1);
677
+ rb_define_method(Module_DrawAttribute, "stroke_width=", RUBY_METHOD_FUNC(Draw_stroke_width_eq), 1);
678
+ rb_define_method(Module_DrawAttribute, "text_antialias=", RUBY_METHOD_FUNC(Draw_text_antialias_eq), 1);
679
+ rb_define_method(Module_DrawAttribute, "tile=", RUBY_METHOD_FUNC(Draw_tile_eq), 1);
680
+ rb_define_method(Module_DrawAttribute, "undercolor=", RUBY_METHOD_FUNC(Draw_undercolor_eq), 1);
681
+
682
+ rb_include_module(Class_Draw, Module_DrawAttribute);
680
683
 
681
684
  rb_define_method(Class_Draw, "annotate", RUBY_METHOD_FUNC(Draw_annotate), 6);
682
685
  rb_define_method(Class_Draw, "clone", RUBY_METHOD_FUNC(Draw_clone), 0);
@@ -704,27 +707,8 @@ Init_RMagick2(void)
704
707
 
705
708
  rb_define_method(Class_DrawOptions, "initialize", RUBY_METHOD_FUNC(DrawOptions_initialize), 0);
706
709
 
707
- rb_define_method(Class_DrawOptions, "affine=", RUBY_METHOD_FUNC(Draw_affine_eq), 1);
708
- rb_define_method(Class_DrawOptions, "align=", RUBY_METHOD_FUNC(Draw_align_eq), 1);
709
- rb_define_method(Class_DrawOptions, "decorate=", RUBY_METHOD_FUNC(Draw_decorate_eq), 1);
710
- rb_define_method(Class_DrawOptions, "density=", RUBY_METHOD_FUNC(Draw_density_eq), 1);
711
- rb_define_method(Class_DrawOptions, "encoding=", RUBY_METHOD_FUNC(Draw_encoding_eq), 1);
712
- rb_define_method(Class_DrawOptions, "fill=", RUBY_METHOD_FUNC(Draw_fill_eq), 1);
713
- rb_define_method(Class_DrawOptions, "fill_pattern=", RUBY_METHOD_FUNC(Draw_fill_pattern_eq), 1);
714
- rb_define_method(Class_DrawOptions, "font=", RUBY_METHOD_FUNC(Draw_font_eq), 1);
715
- rb_define_method(Class_DrawOptions, "font_family=", RUBY_METHOD_FUNC(Draw_font_family_eq), 1);
716
- rb_define_method(Class_DrawOptions, "font_stretch=", RUBY_METHOD_FUNC(Draw_font_stretch_eq), 1);
717
- rb_define_method(Class_DrawOptions, "font_style=", RUBY_METHOD_FUNC(Draw_font_style_eq), 1);
718
- rb_define_method(Class_DrawOptions, "font_weight=", RUBY_METHOD_FUNC(Draw_font_weight_eq), 1);
719
- rb_define_method(Class_DrawOptions, "gravity=", RUBY_METHOD_FUNC(Draw_gravity_eq), 1);
720
- rb_define_method(Class_DrawOptions, "pointsize=", RUBY_METHOD_FUNC(Draw_pointsize_eq), 1);
721
- rb_define_method(Class_DrawOptions, "rotation=", RUBY_METHOD_FUNC(Draw_rotation_eq), 1);
722
- rb_define_method(Class_DrawOptions, "stroke=", RUBY_METHOD_FUNC(Draw_stroke_eq), 1);
723
- rb_define_method(Class_DrawOptions, "stroke_pattern=", RUBY_METHOD_FUNC(Draw_stroke_pattern_eq), 1);
724
- rb_define_method(Class_DrawOptions, "stroke_width=", RUBY_METHOD_FUNC(Draw_stroke_width_eq), 1);
725
- rb_define_method(Class_DrawOptions, "text_antialias=", RUBY_METHOD_FUNC(Draw_text_antialias_eq), 1);
726
- rb_define_method(Class_DrawOptions, "tile=", RUBY_METHOD_FUNC(Draw_tile_eq), 1);
727
- rb_define_method(Class_DrawOptions, "undercolor=", RUBY_METHOD_FUNC(Draw_undercolor_eq), 1);
710
+ rb_include_module(Class_DrawOptions, Module_DrawAttribute);
711
+
728
712
 
729
713
  /*-----------------------------------------------------------------------*/
730
714
  /* Class Magick::Pixel */
@@ -948,25 +932,7 @@ Init_RMagick2(void)
948
932
  rb_define_method(Class_PolaroidOptions, "border_color=", RUBY_METHOD_FUNC(PolaroidOptions_border_color_eq), 1);
949
933
 
950
934
  // The other attribute writer methods are implemented by Draw's functions
951
- rb_define_method(Class_PolaroidOptions, "align=", RUBY_METHOD_FUNC(Draw_align_eq), 1);
952
- rb_define_method(Class_PolaroidOptions, "decorate=", RUBY_METHOD_FUNC(Draw_decorate_eq), 1);
953
- rb_define_method(Class_PolaroidOptions, "density=", RUBY_METHOD_FUNC(Draw_density_eq), 1);
954
- rb_define_method(Class_PolaroidOptions, "encoding=", RUBY_METHOD_FUNC(Draw_encoding_eq), 1);
955
- rb_define_method(Class_PolaroidOptions, "fill=", RUBY_METHOD_FUNC(Draw_fill_eq), 1);
956
- rb_define_method(Class_PolaroidOptions, "fill_pattern=", RUBY_METHOD_FUNC(Draw_fill_pattern_eq), 1);
957
- rb_define_method(Class_PolaroidOptions, "font=", RUBY_METHOD_FUNC(Draw_font_eq), 1);
958
- rb_define_method(Class_PolaroidOptions, "font_family=", RUBY_METHOD_FUNC(Draw_font_family_eq), 1);
959
- rb_define_method(Class_PolaroidOptions, "font_stretch=", RUBY_METHOD_FUNC(Draw_font_stretch_eq), 1);
960
- rb_define_method(Class_PolaroidOptions, "font_style=", RUBY_METHOD_FUNC(Draw_font_style_eq), 1);
961
- rb_define_method(Class_PolaroidOptions, "font_weight=", RUBY_METHOD_FUNC(Draw_font_weight_eq), 1);
962
- rb_define_method(Class_PolaroidOptions, "gravity=", RUBY_METHOD_FUNC(Draw_gravity_eq), 1);
963
- rb_define_method(Class_PolaroidOptions, "pointsize=", RUBY_METHOD_FUNC(Draw_pointsize_eq), 1);
964
- rb_define_method(Class_PolaroidOptions, "stroke=", RUBY_METHOD_FUNC(Draw_stroke_eq), 1);
965
- rb_define_method(Class_PolaroidOptions, "stroke_pattern=", RUBY_METHOD_FUNC(Draw_stroke_pattern_eq), 1);
966
- rb_define_method(Class_PolaroidOptions, "stroke_width=", RUBY_METHOD_FUNC(Draw_stroke_width_eq), 1);
967
- rb_define_method(Class_PolaroidOptions, "text_antialias=", RUBY_METHOD_FUNC(Draw_text_antialias_eq), 1);
968
- rb_define_method(Class_PolaroidOptions, "undercolor=", RUBY_METHOD_FUNC(Draw_undercolor_eq), 1);
969
-
935
+ rb_include_module(Class_PolaroidOptions, Module_DrawAttribute);
970
936
 
971
937
  /*-----------------------------------------------------------------------*/
972
938
  /* Magick::******Fill classes and methods */
@@ -1053,10 +1019,8 @@ Init_RMagick2(void)
1053
1019
  ENUMERATOR(ShapeAlphaChannel)
1054
1020
  ENUMERATOR(TransparentAlphaChannel)
1055
1021
  ENUMERATOR(BackgroundAlphaChannel)
1056
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1057
1022
  ENUMERATOR(AssociateAlphaChannel)
1058
1023
  ENUMERATOR(DisassociateAlphaChannel)
1059
- #endif
1060
1024
  #if defined(IMAGEMAGICK_7)
1061
1025
  ENUMERATOR(OnAlphaChannel)
1062
1026
  ENUMERATOR(OffAlphaChannel)
@@ -1086,7 +1050,12 @@ Init_RMagick2(void)
1086
1050
  ENUMERATOR(BlackChannel)
1087
1051
  ENUMERATOR(IndexChannel)
1088
1052
  ENUMERATOR(GrayChannel)
1053
+ ENUMERATOR(CompositeChannels)
1089
1054
  ENUMERATOR(AllChannels)
1055
+ ENUMERATOR(TrueAlphaChannel)
1056
+ ENUMERATOR(RGBChannels)
1057
+ ENUMERATOR(GrayChannels)
1058
+ ENUMERATOR(SyncChannels)
1090
1059
  ENUMERATORV(AlphaChannel, OpacityChannel)
1091
1060
  ENUMERATORV(DefaultChannels, 0xff & ~OpacityChannel)
1092
1061
  ENUMERATORV(HueChannel, RedChannel)
@@ -1124,7 +1093,6 @@ Init_RMagick2(void)
1124
1093
  ENUMERATOR(Rec709YCbCrColorspace)
1125
1094
  ENUMERATOR(LogColorspace)
1126
1095
  ENUMERATOR(CMYColorspace)
1127
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1128
1096
  ENUMERATOR(LuvColorspace)
1129
1097
  ENUMERATOR(HCLColorspace)
1130
1098
  ENUMERATOR(LCHColorspace)
@@ -1137,7 +1105,6 @@ Init_RMagick2(void)
1137
1105
  ENUMERATOR(HCLpColorspace)
1138
1106
  ENUMERATOR(YDbDrColorspace)
1139
1107
  ENUMERATORV(XyYColorspace, xyYColorspace)
1140
- #endif
1141
1108
  #if defined(IMAGEMAGICK_7)
1142
1109
  #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_7_0_8)
1143
1110
  ENUMERATOR(LinearGRAYColorspace)
@@ -1230,9 +1197,7 @@ Init_RMagick2(void)
1230
1197
  ENUMERATOR(UndefinedCompositeOp)
1231
1198
  ENUMERATOR(VividLightCompositeOp)
1232
1199
  ENUMERATOR(XorCompositeOp)
1233
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1234
1200
  ENUMERATOR(HardMixCompositeOp)
1235
- #endif
1236
1201
  #if defined(IMAGEMAGICK_7)
1237
1202
  ENUMERATOR(CopyAlphaCompositeOp)
1238
1203
  #else
@@ -1276,6 +1241,7 @@ Init_RMagick2(void)
1276
1241
 
1277
1242
  // DisposeType constants
1278
1243
  DEF_ENUM(DisposeType)
1244
+ ENUMERATOR(UnrecognizedDispose)
1279
1245
  ENUMERATOR(UndefinedDispose)
1280
1246
  ENUMERATOR(BackgroundDispose)
1281
1247
  ENUMERATOR(NoneDispose)
@@ -1352,9 +1318,7 @@ Init_RMagick2(void)
1352
1318
  ENUMERATOR(RobidouxSharpFilter)
1353
1319
  ENUMERATOR(CosineFilter)
1354
1320
  ENUMERATOR(SplineFilter)
1355
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1356
1321
  ENUMERATOR(LanczosRadiusFilter)
1357
- #endif
1358
1322
  ENUMERATORV(WelchFilter, WelshFilter)
1359
1323
  ENUMERATORV(HannFilter, HanningFilter)
1360
1324
  END_ENUM
@@ -1446,9 +1410,7 @@ Init_RMagick2(void)
1446
1410
  ENUMERATOR(RootMeanSquaredErrorMetric)
1447
1411
  ENUMERATOR(NormalizedCrossCorrelationErrorMetric)
1448
1412
  ENUMERATOR(FuzzErrorMetric)
1449
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1450
1413
  ENUMERATOR(PerceptualHashErrorMetric)
1451
- #endif
1452
1414
  #if defined(IMAGEMAGICK_7)
1453
1415
  ENUMERATOR(UndefinedErrorMetric)
1454
1416
  ENUMERATOR(MeanErrorPerPixelErrorMetric)
@@ -1580,9 +1542,7 @@ Init_RMagick2(void)
1580
1542
  ENUMERATOR(ExponentialQuantumOperator)
1581
1543
  ENUMERATOR(MedianQuantumOperator)
1582
1544
  ENUMERATOR(SumQuantumOperator)
1583
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1584
1545
  ENUMERATOR(RootMeanSquareQuantumOperator)
1585
- #endif
1586
1546
  END_ENUM
1587
1547
 
1588
1548
  // RenderingIntent
@@ -1707,9 +1667,7 @@ Init_RMagick2(void)
1707
1667
  ENUMERATOR(CorrelateNormalizeValue)
1708
1668
  ENUMERATOR(AreaValue)
1709
1669
  ENUMERATOR(DecimalValue)
1710
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1711
1670
  ENUMERATOR(SeparatorValue)
1712
- #endif
1713
1671
  ENUMERATOR(AllValues)
1714
1672
  END_ENUM
1715
1673
 
@@ -1778,9 +1736,7 @@ Init_RMagick2(void)
1778
1736
  ENUMERATOR(OctagonalKernel)
1779
1737
  ENUMERATOR(EuclideanKernel)
1780
1738
  ENUMERATOR(UserDefinedKernel)
1781
- #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1782
1739
  ENUMERATOR(BinomialKernel)
1783
- #endif
1784
1740
  END_ENUM
1785
1741
 
1786
1742
  /*-----------------------------------------------------------------------*/
@@ -1856,25 +1812,20 @@ Init_RMagick2(void)
1856
1812
  * were compiled with.
1857
1813
  *
1858
1814
  * No Ruby usage (internal function)
1859
- *
1860
- * Notes:
1861
- * - Bypass the test by defining the constant RMAGICK_BYPASS_VERSION_TEST to
1862
- * 'true' at the top level, before requiring 'rmagick'
1863
1815
  */
1864
1816
  static void
1865
1817
  test_Magick_version(void)
1866
1818
  {
1867
1819
  size_t version_number;
1868
1820
  const char *version_str;
1869
- ID bypass = rb_intern("RMAGICK_BYPASS_VERSION_TEST");
1870
1821
 
1871
- if (RTEST(rb_const_defined(rb_cObject, bypass)) && RTEST(rb_const_get(rb_cObject, bypass)))
1872
- {
1873
- return;
1874
- }
1822
+ /* ImageMagick versions are defined as major, minor and patch, each of which are defined as a value in 1 byte. */
1823
+ /* ImageMagick 6.9.12 has `#define MagickLibVersion 0x69C` */
1824
+ /* It use only major and minor versions. */
1825
+ size_t mask_major_minor_version = 0xFFFFFFF0;
1875
1826
 
1876
1827
  version_str = GetMagickVersion(&version_number);
1877
- if (version_number != MagickLibVersion)
1828
+ if ((version_number & mask_major_minor_version) != (MagickLibVersion & mask_major_minor_version))
1878
1829
  {
1879
1830
  int n, x;
1880
1831
 
@@ -235,7 +235,7 @@ Montage_font_eq(VALUE self, VALUE font)
235
235
  * <width>x<height>+<outer-bevel-width>+<inner-bevel-width>
236
236
  * or a Geometry object
237
237
  *
238
- * @param frame_arg [String] the frame geometry
238
+ * @param frame_arg [Magick::Geometry, String] the frame geometry
239
239
  * @see https://www.imagemagick.org/Magick++/Geometry.html
240
240
  */
241
241
  VALUE
@@ -261,8 +261,8 @@ Montage_frame_eq(VALUE self, VALUE frame_arg)
261
261
  * <width>x<height>+<outer-bevel-width>+<inner-bevel-width>
262
262
  * or a Geometry object
263
263
  *
264
- * @param geometry_arg [String] the geometry
265
- * @return [String] the given geometry
264
+ * @param geometry_arg [Magick::Geometry, String] the geometry
265
+ * @return [Magick::Geometry, String] the given geometry
266
266
  * @see https://www.imagemagick.org/Magick++/Geometry.html
267
267
  */
268
268
  VALUE
@@ -422,8 +422,8 @@ Montage_texture_eq(VALUE self, VALUE texture)
422
422
  * <width>x<height>+<outer-bevel-width>+<inner-bevel-width>
423
423
  * or a Geometry object
424
424
  *
425
- * @param tile_arg [String] the tile geometry
426
- * @return [String] the given tile geometry
425
+ * @param tile_arg [Magick::Geometry, String] the tile geometry
426
+ * @return [Magick::Geometry, String] the given tile geometry
427
427
  * @see https://www.imagemagick.org/Magick++/Geometry.html
428
428
  */
429
429
  VALUE
@@ -595,7 +595,7 @@ Pixel_eql_q(VALUE self, VALUE other)
595
595
  * Compare pixel values for equality.
596
596
  *
597
597
  * @overload fcmp(other, fuzz = 0.0, colorspace = Magick::RGBColorspace)
598
- * @param other [Magick::Pixel] The pixel to which the receiver is compared
598
+ * @param other [Magick::Pixel, String] The pixel to which the receiver is compared
599
599
  * @param fuzz [Numeric] The amount of fuzz to allow before the colors are considered to be different
600
600
  * @param colorspace [Magick::ColorspaceType] The colorspace
601
601
  * @return [Boolean] true if equal, otherwise false
@@ -1191,7 +1191,7 @@ rm_set_magick_pixel_packet(Pixel *pixel, MagickPixel *pp)
1191
1191
  /**
1192
1192
  * Return the color name corresponding to the pixel values.
1193
1193
  *
1194
- * @overload to_color(compliance = Magick::AllCompliance, alpha = false, depth = Magick::MAGICKCORE_QUANTUM_DEPTH, hex = false)
1194
+ * @overload to_color(compliance = Magick::AllCompliance, alpha = false, depth = Magick::MAGICKCORE_QUANTUM_DEPTH, hex = true)
1195
1195
  * @param compliance [Magick::ComplianceType] A ComplianceType constant
1196
1196
  * @param alpha [Boolean] If false, the pixel's alpha attribute is ignored
1197
1197
  * @param depth [Numeric] An image depth
@@ -1205,7 +1205,7 @@ Pixel_to_color(int argc, VALUE *argv, VALUE self)
1205
1205
  Image *image;
1206
1206
  Pixel *pixel;
1207
1207
  MagickPixel mpp;
1208
- MagickBooleanType hex = MagickFalse;
1208
+ MagickBooleanType hex = MagickTrue;
1209
1209
  char name[MaxTextExtent];
1210
1210
  ExceptionInfo *exception;
1211
1211
  ComplianceType compliance = AllCompliance;