rmagick 3.0.0 → 3.1.0

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.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/.appveyor.yml +32 -6
  3. data/.circleci/config.yml +1 -1
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +9 -9
  6. data/.rubocop_todo.yml +351 -17
  7. data/.travis.yml +14 -1
  8. data/CHANGELOG.md +55 -0
  9. data/CONTRIBUTING.md +11 -18
  10. data/README.textile +2 -2
  11. data/Rakefile +1 -1
  12. data/before_install_linux.sh +56 -19
  13. data/doc/ex/sparse_color.rb +5 -0
  14. data/doc/magick.html +9 -4
  15. data/doc/rvg.html +2 -2
  16. data/doc/rvgtut.html +1 -1
  17. data/examples/histogram.rb +1 -1
  18. data/ext/RMagick/extconf.rb +90 -264
  19. data/ext/RMagick/rmagick.c +28 -6
  20. data/ext/RMagick/rmagick.h +53 -199
  21. data/ext/RMagick/rmdraw.c +52 -70
  22. data/ext/RMagick/rmenum.c +332 -274
  23. data/ext/RMagick/rmfill.c +62 -112
  24. data/ext/RMagick/rmilist.c +27 -62
  25. data/ext/RMagick/rmimage.c +424 -634
  26. data/ext/RMagick/rminfo.c +46 -37
  27. data/ext/RMagick/rmkinfo.c +47 -42
  28. data/ext/RMagick/rmmain.c +125 -180
  29. data/ext/RMagick/rmmontage.c +5 -5
  30. data/ext/RMagick/rmpixel.c +133 -62
  31. data/ext/RMagick/rmstruct.c +14 -181
  32. data/ext/RMagick/rmutil.c +195 -111
  33. data/lib/rmagick/version.rb +2 -3
  34. data/lib/rvg/deep_equal.rb +1 -1
  35. data/lib/rvg/misc.rb +4 -4
  36. data/lib/rvg/units.rb +2 -2
  37. data/rmagick.gemspec +2 -2
  38. data/spec/rmagick/ImageList1_spec.rb +2 -2
  39. data/spec/rmagick/draw_spec.rb +4 -4
  40. data/spec/rmagick/image/composite_spec.rb +6 -1
  41. data/spec/rmagick/image/properties_spec.rb +8 -8
  42. data/test/Draw.rb +414 -0
  43. data/test/Enum.rb +76 -0
  44. data/test/Fill.rb +93 -0
  45. data/test/Image1.rb +9 -1
  46. data/test/Image2.rb +14 -4
  47. data/test/Image3.rb +73 -3
  48. data/test/ImageList1.rb +22 -9
  49. data/test/ImageList2.rb +41 -9
  50. data/test/Image_attributes.rb +45 -8
  51. data/test/Info.rb +102 -6
  52. data/test/Magick.rb +8 -1
  53. data/test/PolaroidOptions.rb +23 -0
  54. data/test/test_all_basic.rb +4 -0
  55. metadata +28 -8
  56. data/.hound.yml +0 -2
  57. data/wercker.yml +0 -10
@@ -13,7 +13,26 @@
13
13
  #include "rmagick.h"
14
14
 
15
15
 
16
-
16
+ /*
17
+ * Define functions to get/set attributes in Image::Info that
18
+ * use the Get/SetImageOption API.
19
+ */
20
+ //! Option attribute reader. For Image::Info.
21
+ #define OPTION_ATTR_READER(opt, key) \
22
+ VALUE Info_##opt(VALUE self)\
23
+ {\
24
+ return get_option(self, #key);\
25
+ }
26
+ //! Option attribute writer. For Image::Info.
27
+ #define OPTION_ATTR_WRITER(opt, key) \
28
+ VALUE Info_##opt##_eq(VALUE self, VALUE string)\
29
+ {\
30
+ return set_option(self, #key, string);\
31
+ }
32
+ //! Option attribute accessor. For Image::Info.
33
+ #define OPTION_ATTR_ACCESSOR(opt, key)\
34
+ OPTION_ATTR_READER(opt, key)\
35
+ OPTION_ATTR_WRITER(opt, key)
17
36
 
18
37
 
19
38
  /**
@@ -64,7 +83,7 @@ set_option(VALUE self, const char *key, VALUE string)
64
83
 
65
84
  if (NIL_P(string))
66
85
  {
67
- (void) RemoveImageOption(info, key);
86
+ (void) DeleteImageOption(info, key);
68
87
  }
69
88
  else
70
89
  {
@@ -81,7 +100,7 @@ set_option(VALUE self, const char *key, VALUE string)
81
100
  * No Ruby usage (internal function)
82
101
  *
83
102
  * Notes:
84
- * - Call QueryColorDatabase to validate color name.
103
+ * - Call QueryColorCompliance to validate color name.
85
104
  *
86
105
  * @param self this object
87
106
  * @param option the option
@@ -92,7 +111,7 @@ static VALUE set_color_option(VALUE self, const char *option, VALUE color)
92
111
  {
93
112
  Info *info;
94
113
  char *name;
95
- PixelPacket pp;
114
+ PixelColor pp;
96
115
  ExceptionInfo *exception;
97
116
  MagickBooleanType okay;
98
117
 
@@ -100,20 +119,19 @@ static VALUE set_color_option(VALUE self, const char *option, VALUE color)
100
119
 
101
120
  if (NIL_P(color))
102
121
  {
103
- (void) RemoveImageOption(info, option);
122
+ (void) DeleteImageOption(info, option);
104
123
  }
105
124
  else
106
125
  {
107
- exception = AcquireExceptionInfo();
108
126
  name = StringValuePtr(color);
109
- okay = QueryColorDatabase(name, &pp, exception);
127
+ exception = AcquireExceptionInfo();
128
+ okay = QueryColorCompliance(name, AllCompliance, &pp, exception);
110
129
  (void) DestroyExceptionInfo(exception);
111
130
  if (!okay)
112
131
  {
113
132
  rb_raise(rb_eArgError, "invalid color name `%s'", name);
114
133
  }
115
134
 
116
- (void) RemoveImageOption(info, option);
117
135
  (void) SetImageOption(info, option, name);
118
136
  }
119
137
 
@@ -179,7 +197,7 @@ static VALUE set_dbl_option(VALUE self, const char *option, VALUE value)
179
197
 
180
198
  if (NIL_P(value))
181
199
  {
182
- (void) RemoveImageOption(info, option);
200
+ (void) DeleteImageOption(info, option);
183
201
  }
184
202
  else
185
203
  {
@@ -194,7 +212,6 @@ static VALUE set_dbl_option(VALUE self, const char *option, VALUE value)
194
212
  len = sprintf(buff, "%-10.2f", d);
195
213
  }
196
214
  memset(buff+len, '\0', sizeof(buff)-len);
197
- (void) RemoveImageOption(info, option);
198
215
  (void) SetImageOption(info, option, buff);
199
216
  }
200
217
 
@@ -214,9 +231,9 @@ static VALUE set_dbl_option(VALUE self, const char *option, VALUE value)
214
231
  */
215
232
  static char *pixel_packet_to_hexname(PixelPacket *pp, char *name)
216
233
  {
217
- MagickPixelPacket mpp;
234
+ MagickPixel mpp;
218
235
 
219
- GetMagickPixelPacket(NULL, &mpp);
236
+ rm_init_magickpixel(NULL, &mpp);
220
237
  rm_set_magick_pixel_packet(pp, &mpp);
221
238
  (void) GetColorTuple(&mpp, MagickTrue, name);
222
239
  return name;
@@ -356,7 +373,7 @@ Info_aset(int argc, VALUE *argv, VALUE self)
356
373
 
357
374
  if (NIL_P(value))
358
375
  {
359
- (void) RemoveImageOption(info, ckey);
376
+ (void) DeleteImageOption(info, ckey);
360
377
  }
361
378
  else
362
379
  {
@@ -364,7 +381,6 @@ Info_aset(int argc, VALUE *argv, VALUE self)
364
381
  value = rm_to_s(value);
365
382
  value_p = StringValuePtr(value);
366
383
 
367
- (void) RemoveImageOption(info, ckey);
368
384
  okay = SetImageOption(info, ckey, value_p);
369
385
  if (!okay)
370
386
  {
@@ -492,7 +508,7 @@ Info_background_color(VALUE self)
492
508
  Info *info;
493
509
 
494
510
  Data_Get_Struct(self, Info, info);
495
- return rm_pixelpacket_to_color_name_info(info, &info->background_color);
511
+ return rm_pixelcolor_to_color_name_info(info, &info->background_color);
496
512
  }
497
513
 
498
514
 
@@ -517,7 +533,7 @@ Info_background_color_eq(VALUE self, VALUE bc_arg)
517
533
  //char colorname[MaxTextExtent];
518
534
 
519
535
  Data_Get_Struct(self, Info, info);
520
- Color_to_PixelPacket(&info->background_color, bc_arg);
536
+ Color_to_PixelColor(&info->background_color, bc_arg);
521
537
  //SetImageOption(info, "background", pixel_packet_to_hexname(&info->background_color, colorname));
522
538
  return self;
523
539
  }
@@ -538,7 +554,7 @@ Info_border_color(VALUE self)
538
554
  Info *info;
539
555
 
540
556
  Data_Get_Struct(self, Info, info);
541
- return rm_pixelpacket_to_color_name_info(info, &info->border_color);
557
+ return rm_pixelcolor_to_color_name_info(info, &info->border_color);
542
558
  }
543
559
 
544
560
  /**
@@ -562,7 +578,7 @@ Info_border_color_eq(VALUE self, VALUE bc_arg)
562
578
  //char colorname[MaxTextExtent];
563
579
 
564
580
  Data_Get_Struct(self, Info, info);
565
- Color_to_PixelPacket(&info->border_color, bc_arg);
581
+ Color_to_PixelColor(&info->border_color, bc_arg);
566
582
  //SetImageOption(info, "bordercolor", pixel_packet_to_hexname(&info->border_color, colorname));
567
583
  return self;
568
584
  }
@@ -770,7 +786,7 @@ Info_define(int argc, VALUE *argv, VALUE self)
770
786
  }
771
787
  (void) sprintf(ckey, "%s:%s", format, key);
772
788
 
773
- (void) RemoveImageOption(info, ckey);
789
+ (void) DeleteImageOption(info, ckey);
774
790
  okay = SetImageOption(info, ckey, value);
775
791
  if (!okay)
776
792
  {
@@ -859,7 +875,7 @@ Info_delay_eq(VALUE self, VALUE string)
859
875
 
860
876
  if (NIL_P(string))
861
877
  {
862
- (void) RemoveImageOption(info, "delay");
878
+ (void) DeleteImageOption(info, "delay");
863
879
  }
864
880
  else
865
881
  {
@@ -871,7 +887,6 @@ Info_delay_eq(VALUE self, VALUE string)
871
887
  }
872
888
  delay = NUM2INT(string);
873
889
  sprintf(dstr, "%d", delay);
874
- (void) RemoveImageOption(info, "delay");
875
890
  (void) SetImageOption(info, "delay", dstr);
876
891
  }
877
892
  return self;
@@ -1092,7 +1107,7 @@ Info_dispose_eq(VALUE self, VALUE disp)
1092
1107
 
1093
1108
  if (NIL_P(disp))
1094
1109
  {
1095
- (void) RemoveImageOption(info, "dispose");
1110
+ (void) DeleteImageOption(info, "dispose");
1096
1111
  return self;
1097
1112
  }
1098
1113
 
@@ -1401,9 +1416,9 @@ Info_format_eq(VALUE self, VALUE magick)
1401
1416
 
1402
1417
  Data_Get_Struct(self, Info, info);
1403
1418
 
1404
- exception = AcquireExceptionInfo();
1405
-
1406
1419
  mgk = StringValuePtr(magick);
1420
+
1421
+ exception = AcquireExceptionInfo();
1407
1422
  m = GetMagickInfo(mgk, exception);
1408
1423
  CHECK_EXCEPTION()
1409
1424
  (void) DestroyExceptionInfo(exception);
@@ -1562,7 +1577,7 @@ Info_gravity_eq(VALUE self, VALUE grav)
1562
1577
 
1563
1578
  if (NIL_P(grav))
1564
1579
  {
1565
- (void) RemoveImageOption(info, "gravity");
1580
+ (void) DeleteImageOption(info, "gravity");
1566
1581
  return self;
1567
1582
  }
1568
1583
 
@@ -1681,7 +1696,7 @@ Info_matte_color(VALUE self)
1681
1696
  Info *info;
1682
1697
 
1683
1698
  Data_Get_Struct(self, Info, info);
1684
- return rm_pixelpacket_to_color_name_info(info, &info->matte_color);
1699
+ return rm_pixelcolor_to_color_name_info(info, &info->matte_color);
1685
1700
  }
1686
1701
 
1687
1702
  /**
@@ -1702,7 +1717,7 @@ Info_matte_color_eq(VALUE self, VALUE matte_arg)
1702
1717
  //char colorname[MaxTextExtent];
1703
1718
 
1704
1719
  Data_Get_Struct(self, Info, info);
1705
- Color_to_PixelPacket(&info->matte_color, matte_arg);
1720
+ Color_to_PixelColor(&info->matte_color, matte_arg);
1706
1721
  //SetImageOption(info, "mattecolor", pixel_packet_to_hexname(&info->matte_color, colorname));
1707
1722
  return self;
1708
1723
  }
@@ -1734,10 +1749,6 @@ Info_monitor_eq(VALUE self, VALUE monitor)
1734
1749
  (void) SetImageInfoProgressMonitor(info, rm_progress_monitor, (void *)monitor);
1735
1750
  }
1736
1751
 
1737
- #if defined(_WIN32)
1738
- rb_warn("Info#monitor= does not work on Windows");
1739
- #endif
1740
-
1741
1752
  return self;
1742
1753
  }
1743
1754
 
@@ -1833,7 +1844,7 @@ Info_origin_eq(VALUE self, VALUE origin_arg)
1833
1844
 
1834
1845
  if (NIL_P(origin_arg))
1835
1846
  {
1836
- (void) RemoveImageOption(info, "origin");
1847
+ (void) DeleteImageOption(info, "origin");
1837
1848
  return self;
1838
1849
  }
1839
1850
 
@@ -2291,7 +2302,7 @@ Info_transparent_color(VALUE self)
2291
2302
  Info *info;
2292
2303
 
2293
2304
  Data_Get_Struct(self, Info, info);
2294
- return rm_pixelpacket_to_color_name_info(info, &info->transparent_color);
2305
+ return rm_pixelcolor_to_color_name_info(info, &info->transparent_color);
2295
2306
  }
2296
2307
 
2297
2308
 
@@ -2313,7 +2324,7 @@ Info_transparent_color_eq(VALUE self, VALUE tc_arg)
2313
2324
  //char colorname[MaxTextExtent];
2314
2325
 
2315
2326
  Data_Get_Struct(self, Info, info);
2316
- Color_to_PixelPacket(&info->transparent_color, tc_arg);
2327
+ Color_to_PixelColor(&info->transparent_color, tc_arg);
2317
2328
  //SetImageOption(info, "transparent", pixel_packet_to_hexname(&info->transparent_color, colorname));
2318
2329
  return self;
2319
2330
  }
@@ -2377,9 +2388,7 @@ Info_undefine(VALUE self, VALUE format, VALUE key)
2377
2388
  sprintf(fkey, "%.60s:%.*s", format_p, (int)(MaxTextExtent-61), key_p);
2378
2389
 
2379
2390
  Data_Get_Struct(self, Info, info);
2380
- /* Depending on the IM version, RemoveImageOption returns either */
2381
- /* char * or MagickBooleanType. Ignore the return value. */
2382
- (void) RemoveImageOption(info, fkey);
2391
+ (void) DeleteImageOption(info, fkey);
2383
2392
 
2384
2393
  return self;
2385
2394
  }
@@ -21,8 +21,8 @@
21
21
  static void
22
22
  rm_kernel_info_destroy(void *kernel)
23
23
  {
24
- if (kernel)
25
- DestroyKernelInfo((KernelInfo*)kernel);
24
+ if (kernel)
25
+ DestroyKernelInfo((KernelInfo*)kernel);
26
26
  }
27
27
 
28
28
  /**
@@ -36,7 +36,7 @@ rm_kernel_info_destroy(void *kernel)
36
36
  VALUE
37
37
  KernelInfo_alloc(VALUE class)
38
38
  {
39
- return Data_Wrap_Struct(class, NULL, rm_kernel_info_destroy, NULL);
39
+ return Data_Wrap_Struct(class, NULL, rm_kernel_info_destroy, NULL);
40
40
  }
41
41
 
42
42
  /**
@@ -52,18 +52,18 @@ KernelInfo_alloc(VALUE class)
52
52
  VALUE
53
53
  KernelInfo_initialize(VALUE self, VALUE kernel_string)
54
54
  {
55
- KernelInfo *kernel;
55
+ KernelInfo *kernel;
56
56
 
57
- Check_Type(kernel_string, T_STRING);
57
+ Check_Type(kernel_string, T_STRING);
58
58
 
59
- kernel = AcquireKernelInfo(StringValueCStr(kernel_string));
59
+ kernel = AcquireKernelInfo(StringValueCStr(kernel_string));
60
60
 
61
- if (kernel == NULL)
62
- rb_raise(rb_eRuntimeError, "failed to parse kernel string");
61
+ if (kernel == NULL)
62
+ rb_raise(rb_eRuntimeError, "failed to parse kernel string");
63
63
 
64
- DATA_PTR(self) = kernel;
64
+ DATA_PTR(self) = kernel;
65
65
 
66
- return self;
66
+ return self;
67
67
  }
68
68
 
69
69
  /**
@@ -73,12 +73,14 @@ KernelInfo_initialize(VALUE self, VALUE kernel_string)
73
73
  * - @verbatim KernelInfo#zero_nans @endverbatim
74
74
  *
75
75
  * @param self this object
76
+ * @deprecated This method has been deprecated.
76
77
  */
77
78
  VALUE
78
79
  KernelInfo_zero_nans(VALUE self)
79
80
  {
80
- ZeroKernelNans((KernelInfo*)DATA_PTR(self));
81
- return Qnil;
81
+ rb_warning("KernelInfo#zero_nans is deprecated");
82
+ ZeroKernelNans((KernelInfo*)DATA_PTR(self));
83
+ return Qnil;
82
84
  }
83
85
 
84
86
  /**
@@ -93,11 +95,11 @@ KernelInfo_zero_nans(VALUE self)
93
95
  VALUE
94
96
  KernelInfo_unity_add(VALUE self, VALUE scale)
95
97
  {
96
- if (!FIXNUM_P(scale))
97
- Check_Type(scale, T_FLOAT);
98
+ if (!FIXNUM_P(scale))
99
+ Check_Type(scale, T_FLOAT);
98
100
 
99
- UnityAddKernelInfo((KernelInfo*)DATA_PTR(self), NUM2DBL(scale));
100
- return Qnil;
101
+ UnityAddKernelInfo((KernelInfo*)DATA_PTR(self), NUM2DBL(scale));
102
+ return Qnil;
101
103
  }
102
104
 
103
105
  /**
@@ -107,12 +109,14 @@ KernelInfo_unity_add(VALUE self, VALUE scale)
107
109
  * - @verbatim KernelInfo#show @endverbatim
108
110
  *
109
111
  * @param self this object
112
+ * @deprecated This method has been deprecated.
110
113
  */
111
114
  VALUE
112
115
  KernelInfo_show(VALUE self)
113
116
  {
114
- ShowKernelInfo((KernelInfo*)DATA_PTR(self));
115
- return Qnil;
117
+ rb_warning("KernelInfo#show is deprecated");
118
+ ShowKernelInfo((KernelInfo*)DATA_PTR(self));
119
+ return Qnil;
116
120
  }
117
121
 
118
122
  /**
@@ -130,18 +134,18 @@ KernelInfo_show(VALUE self)
130
134
  VALUE
131
135
  KernelInfo_scale(VALUE self, VALUE scale, VALUE flags)
132
136
  {
133
- GeometryFlags geoflags;
137
+ GeometryFlags geoflags;
134
138
 
135
- if (!FIXNUM_P(scale))
136
- Check_Type(scale, T_FLOAT);
139
+ if (!FIXNUM_P(scale))
140
+ Check_Type(scale, T_FLOAT);
137
141
 
138
- if (rb_obj_is_instance_of(flags, Class_GeometryFlags))
139
- VALUE_TO_ENUM(flags, geoflags, GeometryFlags);
140
- else
141
- rb_raise(rb_eArgError, "expected Fixnum or Magick::GeometryFlags to specify flags");
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");
142
146
 
143
- ScaleKernelInfo((KernelInfo*)DATA_PTR(self), NUM2DBL(scale), geoflags);
144
- return Qnil;
147
+ ScaleKernelInfo((KernelInfo*)DATA_PTR(self), NUM2DBL(scale), geoflags);
148
+ return Qnil;
145
149
  }
146
150
 
147
151
  /**
@@ -157,9 +161,9 @@ KernelInfo_scale(VALUE self, VALUE scale, VALUE flags)
157
161
  VALUE
158
162
  KernelInfo_scale_geometry(VALUE self, VALUE geometry)
159
163
  {
160
- Check_Type(geometry, T_STRING);
161
- ScaleGeometryKernelInfo((KernelInfo*)DATA_PTR(self), StringValueCStr(geometry));
162
- return Qnil;
164
+ Check_Type(geometry, T_STRING);
165
+ ScaleGeometryKernelInfo((KernelInfo*)DATA_PTR(self), StringValueCStr(geometry));
166
+ return Qnil;
163
167
  }
164
168
 
165
169
  /**
@@ -174,8 +178,8 @@ KernelInfo_scale_geometry(VALUE self, VALUE geometry)
174
178
  VALUE
175
179
  KernelInfo_clone(VALUE self)
176
180
  {
177
- KernelInfo *kernel = CloneKernelInfo((KernelInfo*)DATA_PTR(self));
178
- return Data_Wrap_Struct(Class_KernelInfo, NULL, rm_kernel_info_destroy, kernel);
181
+ KernelInfo *kernel = CloneKernelInfo((KernelInfo*)DATA_PTR(self));
182
+ return Data_Wrap_Struct(Class_KernelInfo, NULL, rm_kernel_info_destroy, kernel);
179
183
  }
180
184
 
181
185
  /**
@@ -224,24 +228,25 @@ KernelInfo_clone(VALUE self)
224
228
  * Magick::OctagonalKernel
225
229
  * Magick::EuclideanKernel
226
230
  * Magick::UserDefinedKernel
231
+ * Magick::BinomialKernel
227
232
  * @param geometry geometry to pass to default kernel
228
233
  * @return KernelInfo instance
229
234
  */
230
235
  VALUE
231
236
  KernelInfo_builtin(VALUE self, VALUE what, VALUE geometry)
232
237
  {
233
- KernelInfo *kernel;
234
- KernelInfoType kernel_type;
235
- GeometryInfo info;
238
+ KernelInfo *kernel;
239
+ KernelInfoType kernel_type;
240
+ GeometryInfo info;
236
241
 
237
- Check_Type(geometry, T_STRING);
238
- VALUE_TO_ENUM(what, kernel_type, KernelInfoType);
239
- ParseGeometry(StringValueCStr(geometry), &info);
242
+ Check_Type(geometry, T_STRING);
243
+ VALUE_TO_ENUM(what, kernel_type, KernelInfoType);
244
+ ParseGeometry(StringValueCStr(geometry), &info);
240
245
 
241
- kernel = AcquireKernelBuiltIn(kernel_type, &info);
246
+ kernel = AcquireKernelBuiltIn(kernel_type, &info);
242
247
 
243
- if (!kernel)
244
- rb_raise(rb_eRuntimeError, "failed to acquire builtin kernel");
248
+ if (!kernel)
249
+ rb_raise(rb_eRuntimeError, "failed to acquire builtin kernel");
245
250
 
246
- return Data_Wrap_Struct(self, NULL, rm_kernel_info_destroy, kernel);
251
+ return Data_Wrap_Struct(self, NULL, rm_kernel_info_destroy, kernel);
247
252
  }
@@ -13,7 +13,6 @@
13
13
 
14
14
  #define MAIN // Define external variables
15
15
  #include "rmagick.h"
16
- #include "magick/version.h"
17
16
 
18
17
  /*----------------------------------------------------------------------------\
19
18
  | External declarations
@@ -25,13 +24,34 @@ static void version_constants(void);
25
24
  static void features_constant(void);
26
25
 
27
26
 
27
+ /*
28
+ * Enum constants - define a subclass of Enum for the specified enumeration.
29
+ * Define an instance of the subclass for each member in the enumeration.
30
+ * Initialize each instance with its name and value.
31
+ */
32
+ //! define Ruby enum
33
+ #define DEF_ENUM(tag) {\
34
+ VALUE _cls, _enum;\
35
+ _cls = Class_##tag = rm_define_enum_type(#tag);
36
+
37
+ //! define Ruby enumerator elements
38
+ #define ENUMERATOR(val)\
39
+ _enum = rm_enum_new(_cls, ID2SYM(rb_intern(#val)), INT2NUM(val));\
40
+ rb_define_const(Module_Magick, #val, _enum);
28
41
 
42
+ //! define Ruby enumerator elements when name is different from the value
43
+ #define ENUMERATORV(name, val)\
44
+ _enum = rm_enum_new(_cls, ID2SYM(rb_intern(#name)), INT2NUM(val));\
45
+ rb_define_const(Module_Magick, #name, _enum);
46
+
47
+ //! end of an enumerator
48
+ #define END_ENUM }
29
49
 
30
50
  /*
31
51
  * Handle transferring ImageMagick memory allocations/frees to Ruby.
32
52
  * These functions have the same signature as the equivalent C functions.
33
53
  */
34
- #if defined(HAVE_SETMAGICKMEMORYMETHODS)
54
+
35
55
  /**
36
56
  * Allocate memory.
37
57
  *
@@ -118,7 +138,6 @@ static void set_managed_memory(void)
118
138
  rb_define_const(Module_Magick, "MANAGED_MEMORY", Qfalse);
119
139
  }
120
140
  }
121
- #endif
122
141
 
123
142
 
124
143
 
@@ -139,11 +158,7 @@ Init_RMagick2(void)
139
158
 
140
159
  Module_Magick = rb_define_module("Magick");
141
160
 
142
- #if defined(HAVE_SETMAGICKMEMORYMETHODS)
143
161
  set_managed_memory();
144
- #else
145
- rb_define_const(Module_Magick, "MANAGED_MEMORY", Qfalse);
146
- #endif
147
162
 
148
163
  /*-----------------------------------------------------------------------*/
149
164
  /* Create IDs for frequently used methods, etc. */
@@ -379,6 +394,7 @@ Init_RMagick2(void)
379
394
  rb_define_method(Class_Image, "flop!", Image_flop_bang, 0);
380
395
  rb_define_method(Class_Image, "frame", Image_frame, -1);
381
396
  rb_define_method(Class_Image, "function_channel", Image_function_channel, -1);
397
+ rb_define_method(Class_Image, "fx", Image_fx, -1);
382
398
  rb_define_method(Class_Image, "gamma_channel", Image_gamma_channel, -1);
383
399
  rb_define_method(Class_Image, "gamma_correct", Image_gamma_correct, -1);
384
400
  rb_define_method(Class_Image, "gaussian_blur", Image_gaussian_blur, -1);
@@ -883,18 +899,17 @@ Init_RMagick2(void)
883
899
  ENUMERATOR(DeactivateAlphaChannel)
884
900
  ENUMERATOR(ResetAlphaChannel) /* deprecated */
885
901
  ENUMERATOR(SetAlphaChannel)
886
- #if defined(HAVE_ENUM_REMOVEALPHACHANNEL)
887
902
  ENUMERATOR(RemoveAlphaChannel)
888
- #endif
889
- #if defined(HAVE_ENUM_COPYALPHACHANNEL)
890
903
  ENUMERATOR(CopyAlphaChannel)
891
904
  ENUMERATOR(ExtractAlphaChannel)
892
905
  ENUMERATOR(OpaqueAlphaChannel)
893
906
  ENUMERATOR(ShapeAlphaChannel)
894
907
  ENUMERATOR(TransparentAlphaChannel)
895
- #endif
896
- #if defined(HAVE_ENUM_BACKGROUNDALPHACHANNEL)
897
908
  ENUMERATOR(BackgroundAlphaChannel)
909
+ ENUMERATOR(FlattenAlphaChannel)
910
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
911
+ ENUMERATOR(AssociateAlphaChannel)
912
+ ENUMERATOR(DisassociateAlphaChannel)
898
913
  #endif
899
914
  END_ENUM
900
915
 
@@ -915,36 +930,16 @@ Init_RMagick2(void)
915
930
  ENUMERATOR(BlueChannel)
916
931
  ENUMERATOR(YellowChannel)
917
932
  ENUMERATOR(OpacityChannel)
918
-
919
-
920
933
  ENUMERATOR(BlackChannel)
921
934
  ENUMERATOR(MatteChannel)
922
935
  ENUMERATOR(IndexChannel)
923
936
  ENUMERATOR(GrayChannel)
924
937
  ENUMERATOR(AllChannels)
925
-
926
- // Define alternate names for ChannelType enums for Image::Info#channel=
927
- // AlphaChannel == OpacityChannel
928
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("AlphaChannel")), INT2FIX(OpacityChannel));
929
- rb_define_const(Module_Magick, "AlphaChannel", _enum);
930
-
931
- // DefaultChannels
932
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("DefaultChannels")), INT2FIX(0xff & ~OpacityChannel));
933
- rb_define_const(Module_Magick, "DefaultChannels", _enum);
934
-
935
- // HueChannel == RedChannel
936
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("HueChannel")), INT2FIX(RedChannel));
937
- rb_define_const(Module_Magick, "HueChannel", _enum);
938
-
939
- // LuminosityChannel = BlueChannel
940
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("LuminosityChannel")), INT2FIX(BlueChannel));
941
- rb_define_const(Module_Magick, "LuminosityChannel", _enum);
942
-
943
- // SaturationChannel = GreenChannel
944
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("SaturationChannel")), INT2FIX(GreenChannel));
945
- rb_define_const(Module_Magick, "SaturationChannel", _enum);
946
-
947
-
938
+ ENUMERATORV(AlphaChannel, OpacityChannel)
939
+ ENUMERATORV(DefaultChannels, 0xff & ~OpacityChannel)
940
+ ENUMERATORV(HueChannel, RedChannel)
941
+ ENUMERATORV(LuminosityChannel, BlueChannel)
942
+ ENUMERATORV(SaturationChannel, GreenChannel)
948
943
  END_ENUM
949
944
 
950
945
  // ClassType constants
@@ -968,10 +963,7 @@ Init_RMagick2(void)
968
963
  ENUMERATOR(YPbPrColorspace)
969
964
  ENUMERATOR(YUVColorspace)
970
965
  ENUMERATOR(CMYKColorspace)
971
- rb_define_const(Module_Magick, "SRGBColorspace"
972
- , rm_enum_new(Class_ColorspaceType
973
- , ID2SYM(rb_intern("SRGBColorspace"))
974
- , INT2FIX(sRGBColorspace)));
966
+ ENUMERATORV(SRGBColorspace, sRGBColorspace)
975
967
  ENUMERATOR(HSLColorspace)
976
968
  ENUMERATOR(HWBColorspace)
977
969
  ENUMERATOR(HSBColorspace)
@@ -982,18 +974,27 @@ Init_RMagick2(void)
982
974
  ENUMERATOR(Rec709YCbCrColorspace)
983
975
  ENUMERATOR(LogColorspace)
984
976
  ENUMERATOR(CMYColorspace)
977
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
978
+ ENUMERATOR(LuvColorspace)
979
+ ENUMERATOR(HCLColorspace)
980
+ ENUMERATOR(LCHColorspace)
981
+ ENUMERATOR(LMSColorspace)
982
+ ENUMERATOR(LCHabColorspace)
983
+ ENUMERATOR(LCHuvColorspace)
984
+ ENUMERATORV(ScRGBColorspace, scRGBColorspace)
985
+ ENUMERATOR(HSIColorspace)
986
+ ENUMERATOR(HSVColorspace)
987
+ ENUMERATOR(HCLpColorspace)
988
+ ENUMERATOR(YDbDrColorspace)
989
+ ENUMERATORV(XyYColorspace, xyYColorspace)
990
+ #endif
985
991
  END_ENUM
986
992
 
987
993
  // ComplianceType constants are defined as enums but used as bit flags
988
994
  DEF_ENUM(ComplianceType)
989
995
  ENUMERATOR(UndefinedCompliance)
990
-
991
996
  // AllCompliance is 0xffff, not too useful for us!
992
- rb_define_const(Module_Magick, "AllCompliance"
993
- , rm_enum_new(Class_ComplianceType
994
- , ID2SYM(rb_intern("AllCompliance"))
995
- , INT2FIX(SVGCompliance|X11Compliance|XPMCompliance)));
996
-
997
+ ENUMERATORV(AllCompliance, SVGCompliance|X11Compliance|XPMCompliance)
997
998
  ENUMERATOR(NoCompliance)
998
999
  ENUMERATOR(SVGCompliance)
999
1000
  ENUMERATOR(X11Compliance)
@@ -1002,14 +1003,10 @@ Init_RMagick2(void)
1002
1003
 
1003
1004
  // CompositeOperator constants
1004
1005
  DEF_ENUM(CompositeOperator)
1005
- ENUMERATOR(UndefinedCompositeOp)
1006
- ENUMERATOR(NoCompositeOp)
1007
1006
  ENUMERATOR(AddCompositeOp)
1008
1007
  ENUMERATOR(AtopCompositeOp)
1009
1008
  ENUMERATOR(BlendCompositeOp)
1010
- #if defined(HAVE_ENUM_BLURCOMPOSITEOP)
1011
1009
  ENUMERATOR(BlurCompositeOp)
1012
- #endif
1013
1010
  ENUMERATOR(BumpmapCompositeOp)
1014
1011
  ENUMERATOR(ChangeMaskCompositeOp)
1015
1012
  ENUMERATOR(ClearCompositeOp)
@@ -1026,10 +1023,10 @@ Init_RMagick2(void)
1026
1023
  ENUMERATOR(CopyRedCompositeOp)
1027
1024
  ENUMERATOR(CopyYellowCompositeOp)
1028
1025
  ENUMERATOR(DarkenCompositeOp)
1029
- #if defined(HAVE_ENUM_DISTORTCOMPOSITEOP)
1026
+ ENUMERATOR(DarkenIntensityCompositeOp)
1030
1027
  ENUMERATOR(DistortCompositeOp)
1031
- #endif
1032
1028
  ENUMERATOR(DivideCompositeOp)
1029
+ ENUMERATOR(DivideSrcCompositeOp)
1033
1030
  ENUMERATOR(DstAtopCompositeOp)
1034
1031
  ENUMERATOR(DstCompositeOp)
1035
1032
  ENUMERATOR(DstInCompositeOp)
@@ -1040,29 +1037,28 @@ Init_RMagick2(void)
1040
1037
  ENUMERATOR(DissolveCompositeOp)
1041
1038
  ENUMERATOR(ExclusionCompositeOp)
1042
1039
  ENUMERATOR(HardLightCompositeOp)
1040
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1041
+ ENUMERATOR(HardMixCompositeOp)
1042
+ #endif
1043
1043
  ENUMERATOR(HueCompositeOp)
1044
1044
  ENUMERATOR(InCompositeOp)
1045
1045
  ENUMERATOR(LightenCompositeOp)
1046
- #if defined(HAVE_ENUM_LINEARBURNCOMPOSITEOP)
1046
+ ENUMERATOR(LightenIntensityCompositeOp)
1047
1047
  ENUMERATOR(LinearBurnCompositeOp)
1048
- #endif
1049
- #if defined(HAVE_ENUM_LINEARDODGECOMPOSITEOP)
1050
1048
  ENUMERATOR(LinearDodgeCompositeOp)
1051
- #endif
1052
1049
  ENUMERATOR(LinearLightCompositeOp)
1053
1050
  ENUMERATOR(LuminizeCompositeOp)
1051
+ ENUMERATOR(MathematicsCompositeOp)
1054
1052
  ENUMERATOR(MinusCompositeOp)
1053
+ ENUMERATOR(MinusSrcCompositeOp)
1055
1054
  ENUMERATOR(ModulateCompositeOp)
1056
1055
  ENUMERATOR(MultiplyCompositeOp)
1056
+ ENUMERATOR(NoCompositeOp)
1057
1057
  ENUMERATOR(OutCompositeOp)
1058
1058
  ENUMERATOR(OverCompositeOp)
1059
1059
  ENUMERATOR(OverlayCompositeOp)
1060
- #if defined(HAVE_ENUM_PEGTOPLIGHTCOMPOSITEOP)
1061
1060
  ENUMERATOR(PegtopLightCompositeOp)
1062
- #endif
1063
- #if defined(HAVE_ENUM_PINLIGHTCOMPOSITEOP)
1064
1061
  ENUMERATOR(PinLightCompositeOp)
1065
- #endif
1066
1062
  ENUMERATOR(PlusCompositeOp)
1067
1063
  ENUMERATOR(ReplaceCompositeOp) // synonym for CopyCompositeOp
1068
1064
  ENUMERATOR(SaturateCompositeOp)
@@ -1075,9 +1071,8 @@ Init_RMagick2(void)
1075
1071
  ENUMERATOR(SrcOverCompositeOp)
1076
1072
  ENUMERATOR(SubtractCompositeOp)
1077
1073
  ENUMERATOR(ThresholdCompositeOp)
1078
- #if defined(HAVE_ENUM_VIVIDLIGHTCOMPOSITEOP)
1074
+ ENUMERATOR(UndefinedCompositeOp)
1079
1075
  ENUMERATOR(VividLightCompositeOp)
1080
- #endif
1081
1076
  ENUMERATOR(XorCompositeOp)
1082
1077
  END_ENUM
1083
1078
 
@@ -1085,39 +1080,26 @@ Init_RMagick2(void)
1085
1080
  DEF_ENUM(CompressionType)
1086
1081
  ENUMERATOR(UndefinedCompression)
1087
1082
  ENUMERATOR(NoCompression)
1088
- #if defined(HAVE_ENUM_B44COMPRESSION)
1089
1083
  ENUMERATOR(B44Compression)
1090
- #endif
1091
- #if defined(HAVE_ENUM_B44ACOMPRESSION)
1092
1084
  ENUMERATOR(B44ACompression)
1093
- #endif
1094
1085
  ENUMERATOR(BZipCompression)
1095
- #if defined(HAVE_ENUM_DXT1COMPRESSION)
1096
1086
  ENUMERATOR(DXT1Compression)
1097
- #endif
1098
- #if defined(HAVE_ENUM_DXT3COMPRESSION)
1099
1087
  ENUMERATOR(DXT3Compression)
1100
- #endif
1101
- #if defined(HAVE_ENUM_DXT5COMPRESSION)
1102
1088
  ENUMERATOR(DXT5Compression)
1103
- #endif
1104
1089
  ENUMERATOR(FaxCompression)
1105
1090
  ENUMERATOR(Group4Compression)
1106
1091
  ENUMERATOR(JPEGCompression)
1107
1092
  ENUMERATOR(JPEG2000Compression)
1108
1093
  ENUMERATOR(LosslessJPEGCompression)
1109
1094
  ENUMERATOR(LZWCompression)
1110
- #if defined(HAVE_ENUM_PIZCOMPRESSION)
1111
1095
  ENUMERATOR(PizCompression)
1112
- #endif
1113
- #if defined(HAVE_ENUM_PXR24COMPRESSION)
1114
1096
  ENUMERATOR(Pxr24Compression)
1115
- #endif
1116
1097
  ENUMERATOR(RLECompression)
1117
1098
  ENUMERATOR(ZipCompression)
1118
- #if defined(HAVE_ENUM_ZIPSCOMPRESSION)
1119
1099
  ENUMERATOR(ZipSCompression)
1120
- #endif
1100
+ ENUMERATOR(LZMACompression)
1101
+ ENUMERATOR(JBIG1Compression)
1102
+ ENUMERATOR(JBIG2Compression)
1121
1103
  END_ENUM
1122
1104
 
1123
1105
  // DecorationType constants
@@ -1142,46 +1124,30 @@ Init_RMagick2(void)
1142
1124
  ENUMERATOR(AffineDistortion)
1143
1125
  ENUMERATOR(AffineProjectionDistortion)
1144
1126
  ENUMERATOR(ArcDistortion)
1145
- #if defined(HAVE_ENUM_POLARDISTORTION)
1146
1127
  ENUMERATOR(PolarDistortion)
1147
- #endif
1148
- #if defined(HAVE_ENUM_DEPOLARDISTORTION)
1149
1128
  ENUMERATOR(DePolarDistortion)
1150
- #endif
1151
- #if defined(HAVE_ENUM_BARRELDISTORTION)
1152
1129
  ENUMERATOR(BarrelDistortion)
1153
- #endif
1154
1130
  ENUMERATOR(BilinearDistortion)
1155
- #if defined(HAVE_ENUM_BILINEARFORWARDDISTORTION)
1156
1131
  ENUMERATOR(BilinearForwardDistortion)
1157
- #endif
1158
- #if defined(HAVE_ENUM_BILINEARREVERSEDISTORTION)
1159
1132
  ENUMERATOR(BilinearReverseDistortion)
1160
- #endif
1161
1133
  ENUMERATOR(PerspectiveDistortion)
1162
1134
  ENUMERATOR(PerspectiveProjectionDistortion)
1163
- #if defined(HAVE_ENUM_POLYNOMIALDISTORTION)
1164
1135
  ENUMERATOR(PolynomialDistortion)
1165
- #endif
1166
1136
  ENUMERATOR(ScaleRotateTranslateDistortion)
1167
- #if defined(HAVE_ENUM_SHEPARDSDISTORTION)
1168
1137
  ENUMERATOR(ShepardsDistortion)
1169
- #endif
1170
- #if defined(HAVE_ENUM_BARRELINVERSEDISTORTION)
1171
1138
  ENUMERATOR(BarrelInverseDistortion)
1172
- #endif
1139
+ ENUMERATOR(Cylinder2PlaneDistortion)
1140
+ ENUMERATOR(Plane2CylinderDistortion)
1141
+ ENUMERATOR(ResizeDistortion)
1142
+ ENUMERATOR(SentinelDistortion)
1173
1143
  END_ENUM
1174
1144
 
1175
- #if defined(HAVE_TYPE_DITHERMETHOD)
1176
1145
  DEF_ENUM(DitherMethod)
1177
1146
  ENUMERATOR(UndefinedDitherMethod)
1178
- #if defined(HAVE_ENUM_NODITHERMETHOD)
1179
1147
  ENUMERATOR(NoDitherMethod)
1180
- #endif
1181
1148
  ENUMERATOR(RiemersmaDitherMethod)
1182
1149
  ENUMERATOR(FloydSteinbergDitherMethod)
1183
1150
  END_ENUM
1184
- #endif
1185
1151
 
1186
1152
  DEF_ENUM(EndianType)
1187
1153
  ENUMERATOR(UndefinedEndian)
@@ -1207,23 +1173,23 @@ Init_RMagick2(void)
1207
1173
  ENUMERATOR(LanczosFilter)
1208
1174
  ENUMERATOR(BesselFilter)
1209
1175
  ENUMERATOR(SincFilter)
1210
- #if defined(HAVE_ENUM_KAISERFILTER)
1211
1176
  ENUMERATOR(KaiserFilter)
1212
- #endif
1213
- #if defined(HAVE_ENUM_WELSHFILTER)
1214
1177
  ENUMERATOR(WelshFilter)
1215
- #endif
1216
- #if defined(HAVE_ENUM_PARZENFILTER)
1217
1178
  ENUMERATOR(ParzenFilter)
1218
- #endif
1219
- #if defined(HAVE_ENUM_LAGRANGEFILTER)
1220
1179
  ENUMERATOR(LagrangeFilter)
1221
- #endif
1222
- #if defined(HAVE_ENUM_BOHMANFILTER)
1223
1180
  ENUMERATOR(BohmanFilter)
1224
- #endif
1225
- #if defined(HAVE_ENUM_BARTLETTFILTER)
1226
1181
  ENUMERATOR(BartlettFilter)
1182
+ ENUMERATOR(JincFilter)
1183
+ ENUMERATOR(SincFastFilter)
1184
+ ENUMERATOR(LanczosSharpFilter)
1185
+ ENUMERATOR(Lanczos2Filter)
1186
+ ENUMERATOR(Lanczos2SharpFilter)
1187
+ ENUMERATOR(RobidouxFilter)
1188
+ ENUMERATOR(RobidouxSharpFilter)
1189
+ ENUMERATOR(CosineFilter)
1190
+ ENUMERATOR(SplineFilter)
1191
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1192
+ ENUMERATOR(LanczosRadiusFilter)
1227
1193
  #endif
1228
1194
  END_ENUM
1229
1195
 
@@ -1281,27 +1247,22 @@ Init_RMagick2(void)
1281
1247
  ENUMERATOR(MeshInterpolatePixel)
1282
1248
  ENUMERATOR(NearestNeighborInterpolatePixel)
1283
1249
  ENUMERATOR(SplineInterpolatePixel)
1250
+ ENUMERATOR(Average9InterpolatePixel)
1251
+ ENUMERATOR(Average16InterpolatePixel)
1252
+ ENUMERATOR(BlendInterpolatePixel)
1253
+ ENUMERATOR(BackgroundInterpolatePixel)
1254
+ ENUMERATOR(CatromInterpolatePixel)
1284
1255
  END_ENUM
1285
1256
 
1286
- #if defined(HAVE_TYPE_MAGICKFUNCTION)
1287
1257
  DEF_ENUM(MagickFunction)
1288
1258
  ENUMERATOR(UndefinedFunction)
1289
1259
  ENUMERATOR(PolynomialFunction)
1290
1260
  ENUMERATOR(SinusoidFunction)
1291
- #if defined(HAVE_ENUM_ARCSINFUNCTION)
1292
1261
  ENUMERATOR(ArcsinFunction)
1293
- #endif
1294
- #if defined(HAVE_ENUM_ARCTANFUNCTION)
1295
1262
  ENUMERATOR(ArctanFunction)
1296
- #endif
1297
1263
  END_ENUM
1298
- #endif
1299
1264
 
1300
- #if defined(HAVE_TYPE_IMAGELAYERMETHOD)
1301
1265
  DEF_ENUM(ImageLayerMethod)
1302
- #else
1303
- DEF_ENUM(MagickLayerMethod)
1304
- #endif
1305
1266
  ENUMERATOR(UndefinedLayer)
1306
1267
  ENUMERATOR(CompareAnyLayer)
1307
1268
  ENUMERATOR(CompareClearLayer)
@@ -1311,24 +1272,14 @@ Init_RMagick2(void)
1311
1272
  ENUMERATOR(CoalesceLayer)
1312
1273
  ENUMERATOR(DisposeLayer)
1313
1274
  ENUMERATOR(OptimizeTransLayer)
1314
- #if defined(HAVE_ENUM_OPTIMIZEIMAGELAYER)
1315
1275
  ENUMERATOR(OptimizeImageLayer)
1316
- #endif
1317
1276
  ENUMERATOR(RemoveDupsLayer)
1318
1277
  ENUMERATOR(RemoveZeroLayer)
1319
1278
  ENUMERATOR(CompositeLayer)
1320
- #if defined(HAVE_ENUM_MERGELAYER)
1321
1279
  ENUMERATOR(MergeLayer)
1322
- #endif
1323
- #if defined(HAVE_ENUM_MOSAICLAYER)
1324
1280
  ENUMERATOR(MosaicLayer)
1325
- #endif
1326
- #if defined(HAVE_ENUM_FLATTENLAYER)
1327
1281
  ENUMERATOR(FlattenLayer)
1328
- #endif
1329
- #if defined(HAVE_ENUM_TRIMBOUNDSLAYER)
1330
1282
  ENUMERATOR(TrimBoundsLayer)
1331
- #endif
1332
1283
  END_ENUM
1333
1284
 
1334
1285
  DEF_ENUM(MetricType)
@@ -1340,6 +1291,12 @@ Init_RMagick2(void)
1340
1291
  ENUMERATOR(PeakAbsoluteErrorMetric)
1341
1292
  ENUMERATOR(PeakSignalToNoiseRatioMetric)
1342
1293
  ENUMERATOR(RootMeanSquaredErrorMetric)
1294
+ ENUMERATOR(NormalizedCrossCorrelationErrorMetric)
1295
+ ENUMERATOR(FuzzErrorMetric)
1296
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1297
+ ENUMERATOR(UndefinedErrorMetric)
1298
+ ENUMERATOR(PerceptualHashErrorMetric)
1299
+ #endif
1343
1300
  END_ENUM
1344
1301
 
1345
1302
  // NoiseType constants
@@ -1422,47 +1379,27 @@ Init_RMagick2(void)
1422
1379
  ENUMERATOR(RShiftQuantumOperator)
1423
1380
  ENUMERATOR(SubtractQuantumOperator)
1424
1381
  ENUMERATOR(XorQuantumOperator)
1425
- #if defined(HAVE_ENUM_POWEVALUATEOPERATOR)
1426
1382
  ENUMERATOR(PowQuantumOperator)
1427
- #endif
1428
- #if defined(HAVE_ENUM_LOGEVALUATEOPERATOR)
1429
1383
  ENUMERATOR(LogQuantumOperator)
1430
- #endif
1431
- #if defined(HAVE_ENUM_THRESHOLDEVALUATEOPERATOR)
1432
1384
  ENUMERATOR(ThresholdQuantumOperator)
1433
- #endif
1434
- #if defined(HAVE_ENUM_THRESHOLDBLACKEVALUATEOPERATOR)
1435
1385
  ENUMERATOR(ThresholdBlackQuantumOperator)
1436
- #endif
1437
- #if defined(HAVE_ENUM_THRESHOLDWHITEEVALUATEOPERATOR)
1438
1386
  ENUMERATOR(ThresholdWhiteQuantumOperator)
1439
- #endif
1440
- #if defined(HAVE_ENUM_GAUSSIANNOISEEVALUATEOPERATOR)
1441
1387
  ENUMERATOR(GaussianNoiseQuantumOperator)
1442
- #endif
1443
- #if defined(HAVE_ENUM_IMPULSENOISEEVALUATEOPERATOR)
1444
1388
  ENUMERATOR(ImpulseNoiseQuantumOperator)
1445
- #endif
1446
- #if defined(HAVE_ENUM_LAPLACIANNOISEEVALUATEOPERATOR)
1447
1389
  ENUMERATOR(LaplacianNoiseQuantumOperator)
1448
- #endif
1449
- #if defined(HAVE_ENUM_MULTIPLICATIVENOISEEVALUATEOPERATOR)
1450
1390
  ENUMERATOR(MultiplicativeNoiseQuantumOperator)
1451
- #endif
1452
- #if defined(HAVE_ENUM_POISSONNOISEEVALUATEOPERATOR)
1453
1391
  ENUMERATOR(PoissonNoiseQuantumOperator)
1454
- #endif
1455
- #if defined(HAVE_ENUM_UNIFORMNOISEEVALUATEOPERATOR)
1456
1392
  ENUMERATOR(UniformNoiseQuantumOperator)
1457
- #endif
1458
- #if defined(HAVE_ENUM_COSINEEVALUATEOPERATOR)
1459
1393
  ENUMERATOR(CosineQuantumOperator)
1460
- #endif
1461
- #if defined(HAVE_ENUM_SINEEVALUATEOPERATOR)
1462
1394
  ENUMERATOR(SineQuantumOperator)
1463
- #endif
1464
- #if defined(HAVE_ENUM_ADDMODULUSEVALUATEOPERATOR)
1465
1395
  ENUMERATOR(AddModulusQuantumOperator)
1396
+ ENUMERATOR(MeanQuantumOperator)
1397
+ ENUMERATOR(AbsQuantumOperator)
1398
+ ENUMERATOR(ExponentialQuantumOperator)
1399
+ ENUMERATOR(MedianQuantumOperator)
1400
+ ENUMERATOR(SumQuantumOperator)
1401
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1402
+ ENUMERATOR(RootMeanSquareQuantumOperator)
1466
1403
  #endif
1467
1404
  END_ENUM
1468
1405
 
@@ -1482,7 +1419,6 @@ Init_RMagick2(void)
1482
1419
  ENUMERATOR(PixelsPerCentimeterResolution)
1483
1420
  END_ENUM
1484
1421
 
1485
- #if defined(HAVE_SPARSECOLORIMAGE)
1486
1422
  DEF_ENUM(SparseColorMethod)
1487
1423
  ENUMERATOR(UndefinedColorInterpolate)
1488
1424
  ENUMERATOR(BarycentricColorInterpolate)
@@ -1490,8 +1426,8 @@ Init_RMagick2(void)
1490
1426
  //ENUMERATOR(PolynomialColorInterpolate)
1491
1427
  ENUMERATOR(ShepardsColorInterpolate)
1492
1428
  ENUMERATOR(VoronoiColorInterpolate)
1429
+ ENUMERATOR(InverseColorInterpolate)
1493
1430
  END_ENUM
1494
- #endif
1495
1431
 
1496
1432
  // SpreadMethod
1497
1433
  DEF_ENUM(SpreadMethod)
@@ -1550,21 +1486,11 @@ Init_RMagick2(void)
1550
1486
  ENUMERATOR(BlackVirtualPixelMethod)
1551
1487
  ENUMERATOR(GrayVirtualPixelMethod)
1552
1488
  ENUMERATOR(WhiteVirtualPixelMethod)
1553
- #if defined(HAVE_ENUM_HORIZONTALTILEVIRTUALPIXELMETHOD)
1554
1489
  ENUMERATOR(HorizontalTileVirtualPixelMethod)
1555
- #endif
1556
- #if defined(HAVE_ENUM_VERTICALTILEVIRTUALPIXELMETHOD)
1557
1490
  ENUMERATOR(VerticalTileVirtualPixelMethod)
1558
- #endif
1559
- #if defined(HAVE_ENUM_HORIZONTALTILEEDGEVIRTUALPIXELMETHOD)
1560
1491
  ENUMERATOR(HorizontalTileEdgeVirtualPixelMethod)
1561
- #endif
1562
- #if defined(HAVE_ENUM_VERTICALTILEEDGEVIRTUALPIXELMETHOD)
1563
1492
  ENUMERATOR(VerticalTileEdgeVirtualPixelMethod)
1564
- #endif
1565
- #if defined(HAVE_ENUM_CHECKERTILEVIRTUALPIXELMETHOD)
1566
1493
  ENUMERATOR(CheckerTileVirtualPixelMethod)
1567
- #endif
1568
1494
  END_ENUM
1569
1495
  // WeightType constants
1570
1496
  DEF_ENUM(WeightType)
@@ -1577,9 +1503,34 @@ Init_RMagick2(void)
1577
1503
 
1578
1504
  // For KernelInfo scaling
1579
1505
  DEF_ENUM(GeometryFlags)
1506
+ ENUMERATOR(NoValue)
1507
+ ENUMERATOR(XValue)
1508
+ ENUMERATOR(XiValue)
1509
+ ENUMERATOR(YValue)
1510
+ ENUMERATOR(PsiValue)
1511
+ ENUMERATOR(WidthValue)
1512
+ ENUMERATOR(RhoValue)
1513
+ ENUMERATOR(HeightValue)
1514
+ ENUMERATOR(SigmaValue)
1515
+ ENUMERATOR(ChiValue)
1516
+ ENUMERATOR(XiNegative)
1517
+ ENUMERATOR(XNegative)
1518
+ ENUMERATOR(PsiNegative)
1519
+ ENUMERATOR(YNegative)
1520
+ ENUMERATOR(ChiNegative)
1521
+ ENUMERATOR(PercentValue)
1522
+ ENUMERATOR(AspectValue)
1580
1523
  ENUMERATOR(NormalizeValue)
1524
+ ENUMERATOR(LessValue)
1525
+ ENUMERATOR(GreaterValue)
1526
+ ENUMERATOR(MinimumValue)
1581
1527
  ENUMERATOR(CorrelateNormalizeValue)
1582
- ENUMERATOR(PercentValue)
1528
+ ENUMERATOR(AreaValue)
1529
+ ENUMERATOR(DecimalValue)
1530
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1531
+ ENUMERATOR(SeparatorValue)
1532
+ #endif
1533
+ ENUMERATOR(AllValues)
1583
1534
  END_ENUM
1584
1535
 
1585
1536
  // Morphology methods
@@ -1606,6 +1557,7 @@ Init_RMagick2(void)
1606
1557
  ENUMERATOR(ThinningMorphology)
1607
1558
  ENUMERATOR(ThickenMorphology)
1608
1559
  ENUMERATOR(VoronoiMorphology)
1560
+ ENUMERATOR(IterativeDistanceMorphology)
1609
1561
  END_ENUM
1610
1562
 
1611
1563
  DEF_ENUM(KernelInfoType)
@@ -1646,6 +1598,9 @@ Init_RMagick2(void)
1646
1598
  ENUMERATOR(OctagonalKernel)
1647
1599
  ENUMERATOR(EuclideanKernel)
1648
1600
  ENUMERATOR(UserDefinedKernel)
1601
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1602
+ ENUMERATOR(BinomialKernel)
1603
+ #endif
1649
1604
  END_ENUM
1650
1605
 
1651
1606
  /*-----------------------------------------------------------------------*/
@@ -1817,18 +1772,8 @@ features_constant(void)
1817
1772
  {
1818
1773
  VALUE features;
1819
1774
 
1820
- #if defined(HAVE_GETMAGICKFEATURES)
1821
1775
  // 6.5.7 - latest (7.0.0)
1822
1776
  features = rb_str_new2(GetMagickFeatures());
1823
- #elif defined(MagickFeatures)
1824
- // 6.5.7 - latest (7.0.0)
1825
- features = rb_str_new2(MagickFeatures);
1826
- #elif defined(MagickSupport)
1827
- // 6.5.5 - 6.5.6
1828
- features = rb_str_new2(MagickSupport);
1829
- #else
1830
- features = rb_str_new("unknown", 7);
1831
- #endif
1832
1777
 
1833
1778
  rb_obj_freeze(features);
1834
1779
  rb_define_const(Module_Magick, "Magick_features", features);