rmagick 2.13.2 → 4.2.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (380) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +17 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/workflows/ci.yml +107 -0
  6. data/.gitignore +25 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +37 -0
  9. data/.rubocop_todo.yml +449 -0
  10. data/.yardopts +5 -0
  11. data/CHANGELOG.md +1277 -0
  12. data/CODE_OF_CONDUCT.md +128 -0
  13. data/CONTRIBUTING.md +81 -0
  14. data/Gemfile +4 -0
  15. data/LICENSE +20 -0
  16. data/README.md +324 -0
  17. data/Rakefile +190 -0
  18. data/before_install_linux.sh +69 -0
  19. data/before_install_osx.sh +57 -0
  20. data/deprecated/RMagick.rb +6 -0
  21. data/ext/RMagick/extconf.rb +334 -333
  22. data/ext/RMagick/rmagick.c +129 -127
  23. data/ext/RMagick/rmagick.h +221 -320
  24. data/ext/RMagick/rmdraw.c +458 -767
  25. data/ext/RMagick/rmenum.c +305 -752
  26. data/ext/RMagick/rmfill.c +231 -199
  27. data/ext/RMagick/rmilist.c +437 -478
  28. data/ext/RMagick/rmimage.c +6130 -5342
  29. data/ext/RMagick/rminfo.c +695 -833
  30. data/ext/RMagick/rmkinfo.c +198 -0
  31. data/ext/RMagick/rmmain.c +752 -506
  32. data/ext/RMagick/rmmontage.c +94 -152
  33. data/ext/RMagick/rmpixel.c +619 -425
  34. data/ext/RMagick/rmstruct.c +206 -309
  35. data/ext/RMagick/rmutil.c +514 -344
  36. data/lib/rmagick/version.rb +5 -0
  37. data/lib/rmagick.rb +1 -0
  38. data/lib/rmagick_internal.rb +1922 -0
  39. data/lib/rvg/clippath.rb +35 -39
  40. data/lib/rvg/container.rb +123 -124
  41. data/lib/rvg/deep_equal.rb +45 -49
  42. data/lib/rvg/describable.rb +41 -47
  43. data/lib/rvg/embellishable.rb +380 -411
  44. data/lib/rvg/misc.rb +691 -711
  45. data/lib/rvg/paint.rb +43 -47
  46. data/lib/rvg/pathdata.rb +119 -125
  47. data/lib/rvg/rvg.rb +214 -213
  48. data/lib/rvg/stretchable.rb +153 -162
  49. data/lib/rvg/stylable.rb +111 -117
  50. data/lib/rvg/text.rb +169 -180
  51. data/lib/rvg/transformable.rb +121 -127
  52. data/lib/rvg/units.rb +58 -61
  53. data/rmagick.gemspec +36 -16
  54. metadata +188 -365
  55. data/ChangeLog +0 -773
  56. data/Doxyfile +0 -1514
  57. data/README-Mac-OSX.txt +0 -1
  58. data/README.html +0 -10
  59. data/build_tarball.rake +0 -215
  60. data/doc/comtasks.html +0 -287
  61. data/doc/constants.html +0 -1581
  62. data/doc/css/doc.css +0 -299
  63. data/doc/css/popup.css +0 -34
  64. data/doc/css/ref.css +0 -67
  65. data/doc/draw.html +0 -3269
  66. data/doc/ex/InitialCoords.rb +0 -23
  67. data/doc/ex/NewCoordSys.rb +0 -32
  68. data/doc/ex/OrigCoordSys.rb +0 -18
  69. data/doc/ex/PreserveAspectRatio.rb +0 -205
  70. data/doc/ex/RotateScale.rb +0 -37
  71. data/doc/ex/Skew.rb +0 -38
  72. data/doc/ex/Use01.rb +0 -16
  73. data/doc/ex/Use02.rb +0 -21
  74. data/doc/ex/Use03.rb +0 -16
  75. data/doc/ex/ViewBox.rb +0 -33
  76. data/doc/ex/adaptive_threshold.rb +0 -10
  77. data/doc/ex/add_noise.rb +0 -17
  78. data/doc/ex/affine.rb +0 -48
  79. data/doc/ex/affine_transform.rb +0 -20
  80. data/doc/ex/arc.rb +0 -49
  81. data/doc/ex/arcpath.rb +0 -33
  82. data/doc/ex/arcs01.rb +0 -28
  83. data/doc/ex/arcs02.rb +0 -61
  84. data/doc/ex/average.rb +0 -15
  85. data/doc/ex/axes.rb +0 -64
  86. data/doc/ex/baseline_shift01.rb +0 -18
  87. data/doc/ex/bilevel_channel.rb +0 -9
  88. data/doc/ex/blur_image.rb +0 -12
  89. data/doc/ex/border.rb +0 -10
  90. data/doc/ex/bounding_box.rb +0 -44
  91. data/doc/ex/cbezier1.rb +0 -42
  92. data/doc/ex/cbezier2.rb +0 -42
  93. data/doc/ex/cbezier3.rb +0 -42
  94. data/doc/ex/cbezier4.rb +0 -43
  95. data/doc/ex/cbezier5.rb +0 -43
  96. data/doc/ex/cbezier6.rb +0 -53
  97. data/doc/ex/channel.rb +0 -26
  98. data/doc/ex/charcoal.rb +0 -12
  99. data/doc/ex/chop.rb +0 -29
  100. data/doc/ex/circle.rb +0 -33
  101. data/doc/ex/circle01.rb +0 -17
  102. data/doc/ex/clip_path.rb +0 -60
  103. data/doc/ex/coalesce.rb +0 -60
  104. data/doc/ex/color_fill_to_border.rb +0 -29
  105. data/doc/ex/color_floodfill.rb +0 -28
  106. data/doc/ex/color_histogram.rb +0 -48
  107. data/doc/ex/color_reset.rb +0 -11
  108. data/doc/ex/colorize.rb +0 -16
  109. data/doc/ex/colors.rb +0 -64
  110. data/doc/ex/compose_mask.rb +0 -23
  111. data/doc/ex/composite.rb +0 -135
  112. data/doc/ex/composite_layers.rb +0 -53
  113. data/doc/ex/composite_tiled.rb +0 -23
  114. data/doc/ex/contrast.rb +0 -36
  115. data/doc/ex/crop.rb +0 -31
  116. data/doc/ex/crop_with_gravity.rb +0 -46
  117. data/doc/ex/cubic01.rb +0 -45
  118. data/doc/ex/cubic02.rb +0 -94
  119. data/doc/ex/cycle_colormap.rb +0 -21
  120. data/doc/ex/dissolve.rb +0 -13
  121. data/doc/ex/drawcomp.rb +0 -42
  122. data/doc/ex/drop_shadow.rb +0 -60
  123. data/doc/ex/edge.rb +0 -11
  124. data/doc/ex/ellipse.rb +0 -45
  125. data/doc/ex/ellipse01.rb +0 -22
  126. data/doc/ex/emboss.rb +0 -11
  127. data/doc/ex/enhance.rb +0 -28
  128. data/doc/ex/equalize.rb +0 -11
  129. data/doc/ex/evenodd.rb +0 -43
  130. data/doc/ex/fill_pattern.rb +0 -26
  131. data/doc/ex/flatten_images.rb +0 -36
  132. data/doc/ex/flip.rb +0 -11
  133. data/doc/ex/flop.rb +0 -11
  134. data/doc/ex/font_styles.rb +0 -34
  135. data/doc/ex/fonts.rb +0 -20
  136. data/doc/ex/frame.rb +0 -12
  137. data/doc/ex/gaussian_blur.rb +0 -11
  138. data/doc/ex/get_multiline_type_metrics.rb +0 -42
  139. data/doc/ex/get_pixels.rb +0 -48
  140. data/doc/ex/get_type_metrics.rb +0 -146
  141. data/doc/ex/gradientfill.rb +0 -27
  142. data/doc/ex/grav.rb +0 -46
  143. data/doc/ex/gravity.rb +0 -79
  144. data/doc/ex/group.rb +0 -26
  145. data/doc/ex/hatchfill.rb +0 -27
  146. data/doc/ex/image.rb +0 -46
  147. data/doc/ex/images/Apple.miff +0 -0
  148. data/doc/ex/images/Ballerina.jpg +0 -0
  149. data/doc/ex/images/Ballerina3.jpg +0 -0
  150. data/doc/ex/images/Button_0.gif +0 -0
  151. data/doc/ex/images/Button_1.gif +0 -0
  152. data/doc/ex/images/Button_2.gif +0 -0
  153. data/doc/ex/images/Button_3.gif +0 -0
  154. data/doc/ex/images/Button_4.gif +0 -0
  155. data/doc/ex/images/Button_5.gif +0 -0
  156. data/doc/ex/images/Button_6.gif +0 -0
  157. data/doc/ex/images/Button_7.gif +0 -0
  158. data/doc/ex/images/Button_8.gif +0 -0
  159. data/doc/ex/images/Button_9.gif +0 -0
  160. data/doc/ex/images/Button_A.gif +0 -0
  161. data/doc/ex/images/Button_B.gif +0 -0
  162. data/doc/ex/images/Button_C.gif +0 -0
  163. data/doc/ex/images/Button_D.gif +0 -0
  164. data/doc/ex/images/Button_E.gif +0 -0
  165. data/doc/ex/images/Button_F.gif +0 -0
  166. data/doc/ex/images/Button_G.gif +0 -0
  167. data/doc/ex/images/Button_H.gif +0 -0
  168. data/doc/ex/images/Button_I.gif +0 -0
  169. data/doc/ex/images/Button_J.gif +0 -0
  170. data/doc/ex/images/Button_K.gif +0 -0
  171. data/doc/ex/images/Button_L.gif +0 -0
  172. data/doc/ex/images/Button_M.gif +0 -0
  173. data/doc/ex/images/Button_N.gif +0 -0
  174. data/doc/ex/images/Button_O.gif +0 -0
  175. data/doc/ex/images/Button_P.gif +0 -0
  176. data/doc/ex/images/Button_Q.gif +0 -0
  177. data/doc/ex/images/Button_R.gif +0 -0
  178. data/doc/ex/images/Button_S.gif +0 -0
  179. data/doc/ex/images/Button_T.gif +0 -0
  180. data/doc/ex/images/Button_U.gif +0 -0
  181. data/doc/ex/images/Button_V.gif +0 -0
  182. data/doc/ex/images/Button_W.gif +0 -0
  183. data/doc/ex/images/Button_X.gif +0 -0
  184. data/doc/ex/images/Button_Y.gif +0 -0
  185. data/doc/ex/images/Button_Z.gif +0 -0
  186. data/doc/ex/images/Cheetah.jpg +0 -0
  187. data/doc/ex/images/Coffee.wmf +0 -0
  188. data/doc/ex/images/Flower_Hat.jpg +0 -0
  189. data/doc/ex/images/Gold_Statue.jpg +0 -0
  190. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  191. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  192. data/doc/ex/images/Leaf.miff +0 -0
  193. data/doc/ex/images/No.wmf +0 -0
  194. data/doc/ex/images/Polynesia.jpg +0 -0
  195. data/doc/ex/images/Red_Rocks.jpg +0 -0
  196. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  197. data/doc/ex/images/Shorts.jpg +0 -0
  198. data/doc/ex/images/Snake.wmf +0 -0
  199. data/doc/ex/images/Violin.jpg +0 -0
  200. data/doc/ex/images/Yellow_Rose.miff +0 -0
  201. data/doc/ex/images/big-duck.gif +0 -0
  202. data/doc/ex/images/duck.gif +0 -0
  203. data/doc/ex/images/duck0.gif +0 -0
  204. data/doc/ex/images/duck1.gif +0 -0
  205. data/doc/ex/images/duck10.gif +0 -0
  206. data/doc/ex/images/duck11.gif +0 -0
  207. data/doc/ex/images/duck12.gif +0 -0
  208. data/doc/ex/images/duck13.gif +0 -0
  209. data/doc/ex/images/duck14.gif +0 -0
  210. data/doc/ex/images/duck15.gif +0 -0
  211. data/doc/ex/images/duck2.gif +0 -0
  212. data/doc/ex/images/duck3.gif +0 -0
  213. data/doc/ex/images/duck4.gif +0 -0
  214. data/doc/ex/images/duck5.gif +0 -0
  215. data/doc/ex/images/duck6.gif +0 -0
  216. data/doc/ex/images/duck7.gif +0 -0
  217. data/doc/ex/images/duck8.gif +0 -0
  218. data/doc/ex/images/duck9.gif +0 -0
  219. data/doc/ex/images/graydient230x6.gif +0 -0
  220. data/doc/ex/images/logo400x83.gif +0 -0
  221. data/doc/ex/images/model.miff +0 -0
  222. data/doc/ex/images/notimplemented.gif +0 -0
  223. data/doc/ex/images/smile.miff +0 -0
  224. data/doc/ex/images/spin.gif +0 -0
  225. data/doc/ex/implode.rb +0 -34
  226. data/doc/ex/level.rb +0 -11
  227. data/doc/ex/level_colors.rb +0 -11
  228. data/doc/ex/line.rb +0 -42
  229. data/doc/ex/line01.rb +0 -23
  230. data/doc/ex/mask.rb +0 -36
  231. data/doc/ex/matte_fill_to_border.rb +0 -40
  232. data/doc/ex/matte_floodfill.rb +0 -33
  233. data/doc/ex/matte_replace.rb +0 -40
  234. data/doc/ex/median_filter.rb +0 -28
  235. data/doc/ex/modulate.rb +0 -11
  236. data/doc/ex/mono.rb +0 -23
  237. data/doc/ex/morph.rb +0 -26
  238. data/doc/ex/mosaic.rb +0 -35
  239. data/doc/ex/motion_blur.rb +0 -11
  240. data/doc/ex/negate.rb +0 -11
  241. data/doc/ex/negate_channel.rb +0 -9
  242. data/doc/ex/nested_rvg.rb +0 -21
  243. data/doc/ex/nonzero.rb +0 -43
  244. data/doc/ex/normalize.rb +0 -11
  245. data/doc/ex/oil_paint.rb +0 -11
  246. data/doc/ex/opacity.rb +0 -37
  247. data/doc/ex/ordered_dither.rb +0 -11
  248. data/doc/ex/path.rb +0 -64
  249. data/doc/ex/pattern1.rb +0 -25
  250. data/doc/ex/pattern2.rb +0 -26
  251. data/doc/ex/polaroid.rb +0 -28
  252. data/doc/ex/polygon.rb +0 -24
  253. data/doc/ex/polygon01.rb +0 -23
  254. data/doc/ex/polyline.rb +0 -23
  255. data/doc/ex/polyline01.rb +0 -23
  256. data/doc/ex/posterize.rb +0 -8
  257. data/doc/ex/preview.rb +0 -9
  258. data/doc/ex/qbezierpath.rb +0 -52
  259. data/doc/ex/quad01.rb +0 -36
  260. data/doc/ex/quantize-m.rb +0 -25
  261. data/doc/ex/radial_blur.rb +0 -9
  262. data/doc/ex/raise.rb +0 -8
  263. data/doc/ex/random_threshold_channel.rb +0 -13
  264. data/doc/ex/rect01.rb +0 -15
  265. data/doc/ex/rect02.rb +0 -22
  266. data/doc/ex/rectangle.rb +0 -35
  267. data/doc/ex/reduce_noise.rb +0 -28
  268. data/doc/ex/remap.rb +0 -12
  269. data/doc/ex/remap_images.rb +0 -21
  270. data/doc/ex/resize_to_fill.rb +0 -10
  271. data/doc/ex/resize_to_fit.rb +0 -10
  272. data/doc/ex/roll.rb +0 -9
  273. data/doc/ex/rotate.rb +0 -45
  274. data/doc/ex/rotate_f.rb +0 -14
  275. data/doc/ex/roundrect.rb +0 -34
  276. data/doc/ex/rubyname.rb +0 -30
  277. data/doc/ex/rvg_clippath.rb +0 -14
  278. data/doc/ex/rvg_linecap.rb +0 -43
  279. data/doc/ex/rvg_linejoin.rb +0 -41
  280. data/doc/ex/rvg_opacity.rb +0 -19
  281. data/doc/ex/rvg_pattern.rb +0 -26
  282. data/doc/ex/rvg_stroke_dasharray.rb +0 -12
  283. data/doc/ex/segment.rb +0 -11
  284. data/doc/ex/sepiatone.rb +0 -8
  285. data/doc/ex/shade.rb +0 -11
  286. data/doc/ex/shadow.rb +0 -31
  287. data/doc/ex/shave.rb +0 -15
  288. data/doc/ex/shear.rb +0 -10
  289. data/doc/ex/sketch.rb +0 -18
  290. data/doc/ex/skewx.rb +0 -52
  291. data/doc/ex/skewy.rb +0 -47
  292. data/doc/ex/smile.rb +0 -125
  293. data/doc/ex/solarize.rb +0 -11
  294. data/doc/ex/sparse_color.rb +0 -55
  295. data/doc/ex/splice.rb +0 -9
  296. data/doc/ex/spread.rb +0 -11
  297. data/doc/ex/stegano.rb +0 -55
  298. data/doc/ex/stroke_dasharray.rb +0 -43
  299. data/doc/ex/stroke_fill.rb +0 -11
  300. data/doc/ex/stroke_linecap.rb +0 -44
  301. data/doc/ex/stroke_linejoin.rb +0 -48
  302. data/doc/ex/stroke_width.rb +0 -49
  303. data/doc/ex/swirl.rb +0 -17
  304. data/doc/ex/text.rb +0 -37
  305. data/doc/ex/text01.rb +0 -17
  306. data/doc/ex/text_align.rb +0 -36
  307. data/doc/ex/text_antialias.rb +0 -38
  308. data/doc/ex/text_styles.rb +0 -21
  309. data/doc/ex/text_undercolor.rb +0 -28
  310. data/doc/ex/texture_fill_to_border.rb +0 -34
  311. data/doc/ex/texture_floodfill.rb +0 -32
  312. data/doc/ex/texturefill.rb +0 -25
  313. data/doc/ex/threshold.rb +0 -13
  314. data/doc/ex/to_blob.rb +0 -14
  315. data/doc/ex/translate.rb +0 -39
  316. data/doc/ex/transparent.rb +0 -38
  317. data/doc/ex/transpose.rb +0 -9
  318. data/doc/ex/transverse.rb +0 -9
  319. data/doc/ex/tref01.rb +0 -25
  320. data/doc/ex/triangle01.rb +0 -16
  321. data/doc/ex/trim.rb +0 -24
  322. data/doc/ex/tspan01.rb +0 -18
  323. data/doc/ex/tspan02.rb +0 -19
  324. data/doc/ex/tspan03.rb +0 -21
  325. data/doc/ex/unsharp_mask.rb +0 -28
  326. data/doc/ex/viewex.rb +0 -35
  327. data/doc/ex/vignette.rb +0 -12
  328. data/doc/ex/watermark.rb +0 -28
  329. data/doc/ex/wave.rb +0 -9
  330. data/doc/ex/wet_floor.rb +0 -59
  331. data/doc/ex/writing_mode01.rb +0 -27
  332. data/doc/ex/writing_mode02.rb +0 -26
  333. data/doc/ilist.html +0 -2056
  334. data/doc/image1.html +0 -4680
  335. data/doc/image2.html +0 -3665
  336. data/doc/image3.html +0 -4522
  337. data/doc/imageattrs.html +0 -1638
  338. data/doc/imusage.html +0 -514
  339. data/doc/index.html +0 -416
  340. data/doc/info.html +0 -1499
  341. data/doc/magick.html +0 -565
  342. data/doc/optequiv.html +0 -2435
  343. data/doc/rvg.html +0 -975
  344. data/doc/rvgclip.html +0 -248
  345. data/doc/rvggroup.html +0 -305
  346. data/doc/rvgimage.html +0 -289
  347. data/doc/rvgpattern.html +0 -475
  348. data/doc/rvgshape.html +0 -406
  349. data/doc/rvgstyle.html +0 -270
  350. data/doc/rvgtext.html +0 -465
  351. data/doc/rvgtspan.html +0 -238
  352. data/doc/rvgtut.html +0 -530
  353. data/doc/rvguse.html +0 -145
  354. data/doc/rvgxform.html +0 -294
  355. data/doc/scripts/doc.js +0 -22
  356. data/doc/scripts/stripeTables.js +0 -23
  357. data/doc/struct.html +0 -1339
  358. data/doc/usage.html +0 -1621
  359. data/examples/constitute.rb +0 -7
  360. data/examples/crop_with_gravity.rb +0 -46
  361. data/examples/demo.rb +0 -324
  362. data/examples/describe.rb +0 -44
  363. data/examples/find_similar_region.rb +0 -34
  364. data/examples/histogram.rb +0 -325
  365. data/examples/identify.rb +0 -187
  366. data/examples/image_opacity.rb +0 -29
  367. data/examples/import_export.rb +0 -31
  368. data/examples/pattern_fill.rb +0 -38
  369. data/examples/rotating_text.rb +0 -45
  370. data/examples/spinner.rb +0 -50
  371. data/examples/thumbnail.rb +0 -65
  372. data/examples/vignette.rb +0 -79
  373. data/ext/RMagick/MANIFEST +0 -358
  374. data/lib/RMagick.rb +0 -1962
  375. data/metaconfig +0 -7
  376. data/post-clean.rb +0 -12
  377. data/post-install.rb +0 -50
  378. data/post-setup.rb +0 -254
  379. data/setup.rb +0 -1585
  380. data/uninstall.rb +0 -76
data/ext/RMagick/rmmain.c CHANGED
@@ -13,7 +13,18 @@
13
13
 
14
14
  #define MAIN // Define external variables
15
15
  #include "rmagick.h"
16
- #include "magick/version.h"
16
+
17
+ #if defined(HAVE_SETMAGICKALIGNEDMEMORYMETHODS) && defined(HAVE_RB_GC_ADJUST_MEMORY_USAGE)
18
+ #if defined(HAVE_POSIX_MEMALIGN) || defined(HAVE__ALIGNED_MSIZE)
19
+ #define USE_RM_ALIGNED_MALLOC 1
20
+
21
+ #if defined(HAVE_MALLOC_H)
22
+ #include <malloc.h>
23
+ #elif defined(HAVE_MALLOC_MALLOC_H)
24
+ #include <malloc/malloc.h>
25
+ #endif
26
+ #endif
27
+ #endif
17
28
 
18
29
  /*----------------------------------------------------------------------------\
19
30
  | External declarations
@@ -22,15 +33,37 @@ void Init_RMagick(void);
22
33
 
23
34
  static void test_Magick_version(void);
24
35
  static void version_constants(void);
36
+ static void features_constant(void);
37
+
38
+
39
+ /*
40
+ * Enum constants - define a subclass of Enum for the specified enumeration.
41
+ * Define an instance of the subclass for each member in the enumeration.
42
+ * Initialize each instance with its name and value.
43
+ */
44
+ //! define Ruby enum
45
+ #define DEF_ENUM(tag) {\
46
+ VALUE _cls, _enum;\
47
+ _cls = Class_##tag = rm_define_enum_type(#tag);
25
48
 
49
+ //! define Ruby enumerator elements
50
+ #define ENUMERATOR(val)\
51
+ _enum = rm_enum_new(_cls, ID2SYM(rb_intern(#val)), INT2NUM(val));\
52
+ rb_define_const(Module_Magick, #val, _enum);
26
53
 
54
+ //! define Ruby enumerator elements when name is different from the value
55
+ #define ENUMERATORV(name, val)\
56
+ _enum = rm_enum_new(_cls, ID2SYM(rb_intern(#name)), INT2NUM(val));\
57
+ rb_define_const(Module_Magick, #name, _enum);
27
58
 
59
+ //! end of an enumerator
60
+ #define END_ENUM }
28
61
 
29
62
  /*
30
63
  * Handle transferring ImageMagick memory allocations/frees to Ruby.
31
64
  * These functions have the same signature as the equivalent C functions.
32
65
  */
33
- #if defined(HAVE_SETMAGICKMEMORYMETHODS)
66
+
34
67
  /**
35
68
  * Allocate memory.
36
69
  *
@@ -41,17 +74,7 @@ static void version_constants(void);
41
74
  */
42
75
  static void *rm_malloc(size_t size)
43
76
  {
44
- void *p;
45
- // int old_state;
46
-
47
- // old_state = rb_gc_disable();
48
- p = xmalloc((long)size);
49
- // if (!RTEST(old_state))
50
- // {
51
- // rb_gc_enable();
52
- // }
53
-
54
- return p;
77
+ return xmalloc((long)size);
55
78
  }
56
79
 
57
80
 
@@ -68,17 +91,7 @@ static void *rm_malloc(size_t size)
68
91
  */
69
92
  static void *rm_realloc(void *ptr, size_t size)
70
93
  {
71
- void *p;
72
- // int old_state;
73
-
74
- // old_state = rb_gc_disable();
75
- p = xrealloc(ptr, (long)size);
76
- // if (!RTEST(old_state))
77
- // {
78
- // rb_gc_enable();
79
- // }
80
-
81
- return p;
94
+ return xrealloc(ptr, (long)size);
82
95
  }
83
96
 
84
97
 
@@ -97,27 +110,118 @@ static void rm_free(void *ptr)
97
110
  }
98
111
 
99
112
 
113
+
114
+ #if USE_RM_ALIGNED_MALLOC
115
+
116
+ static size_t
117
+ rm_aligned_malloc_size(void *ptr)
118
+ {
119
+ #if defined(HAVE_MALLOC_USABLE_SIZE)
120
+ return malloc_usable_size(ptr);
121
+ #elif defined(HAVE_MALLOC_SIZE)
122
+ return malloc_size(ptr);
123
+ #elif defined(HAVE__ALIGNED_MSIZE)
124
+ // Refered to https://github.com/ImageMagick/ImageMagick/blob/master/MagickCore/memory-private.h
125
+ #define MAGICKCORE_SIZEOF_VOID_P 8
126
+ #define CACHE_LINE_SIZE (8 * MAGICKCORE_SIZEOF_VOID_P)
127
+ size_t _aligned_msize(void *memblock, size_t alignment, size_t offset);
128
+ return _aligned_msize(ptr, CACHE_LINE_SIZE, 0);
129
+ #endif
130
+ }
131
+
132
+
100
133
  /**
101
- * Use managed memory.
134
+ * Allocate aligned memory.
102
135
  *
103
136
  * No Ruby usage (internal function)
137
+ *
138
+ * @param size the size of memory to allocate
139
+ * @return pointer to a block of memory
104
140
  */
105
- static void set_managed_memory(void)
141
+ static void *rm_aligned_malloc(size_t size, size_t alignment)
142
+ {
143
+ void *res;
144
+ size_t allocated_size;
145
+
146
+ #if defined(HAVE_POSIX_MEMALIGN)
147
+ if (posix_memalign(&res, alignment, size) != 0) {
148
+ return NULL;
149
+ }
150
+ #elif defined(HAVE__ALIGNED_MSIZE)
151
+ res = _aligned_malloc(size, alignment);
152
+ #endif
153
+
154
+ allocated_size = rm_aligned_malloc_size(res);
155
+ rb_gc_adjust_memory_usage(allocated_size);
156
+ return res;
157
+ }
158
+
159
+
160
+
161
+
162
+ /**
163
+ * Free aligned memory.
164
+ *
165
+ * No Ruby usage (internal function)
166
+ *
167
+ * @param ptr pointer to the existing block of memory
168
+ */
169
+ static void rm_aligned_free(void *ptr)
106
170
  {
107
- ID enable_mm = rb_intern("RMAGICK_ENABLE_MANAGED_MEMORY");
171
+ size_t allocated_size = rm_aligned_malloc_size(ptr);
172
+ rb_gc_adjust_memory_usage(-allocated_size);
173
+
174
+ #if defined(HAVE_POSIX_MEMALIGN)
175
+ free(ptr);
176
+ #elif defined(HAVE__ALIGNED_MSIZE)
177
+ _aligned_free(ptr);
178
+ #endif
179
+ }
180
+
181
+ #endif
182
+
108
183
 
109
- if (RTEST(rb_const_defined(rb_cObject, enable_mm)) && RTEST(rb_const_get(rb_cObject, enable_mm)))
184
+
185
+ /**
186
+ * Use managed memory.
187
+ *
188
+ * No Ruby usage (internal function)
189
+ */
190
+ static inline void managed_memory_enable(VALUE enable)
191
+ {
192
+ if (enable)
110
193
  {
111
- rb_warning("RMagick: %s", "managed memory enabled. This is an experimental feature.");
112
194
  SetMagickMemoryMethods(rm_malloc, rm_realloc, rm_free);
113
- rb_define_const(Module_Magick, "MANAGED_MEMORY", Qtrue);
195
+ #if USE_RM_ALIGNED_MALLOC
196
+ SetMagickAlignedMemoryMethods(rm_aligned_malloc, rm_aligned_free);
197
+ #endif
114
198
  }
115
- else
199
+ rb_define_const(Module_Magick, "MANAGED_MEMORY", enable);
200
+ }
201
+
202
+ static void set_managed_memory(void)
203
+ {
204
+ char *disable = getenv("RMAGICK_DISABLE_MANAGED_MEMORY");
205
+
206
+ if (disable)
116
207
  {
117
- rb_define_const(Module_Magick, "MANAGED_MEMORY", Qfalse);
208
+ managed_memory_enable(Qfalse);
209
+ return;
118
210
  }
119
- }
211
+
212
+ #if defined(_WIN32)
213
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0)
214
+ managed_memory_enable(Qtrue);
215
+ #else
216
+ // Disable managed memory feature with ImageMagick 6.8.x or below because causes crash.
217
+ // Refer https://ci.appveyor.com/project/mockdeep/rmagick/builds/24706171
218
+ managed_memory_enable(Qfalse);
219
+ #endif
220
+ #else
221
+ // Not Windows
222
+ managed_memory_enable(Qtrue);
120
223
  #endif
224
+ }
121
225
 
122
226
 
123
227
 
@@ -130,19 +234,15 @@ static void set_managed_memory(void)
130
234
  void
131
235
  Init_RMagick2(void)
132
236
  {
133
- volatile VALUE observable;
237
+ Module_Magick = rb_define_module("Magick");
238
+
239
+ set_managed_memory();
134
240
 
135
241
  MagickCoreGenesis("RMagick", MagickFalse);
136
242
 
137
243
  test_Magick_version();
138
244
 
139
- Module_Magick = rb_define_module("Magick");
140
-
141
- #if defined(HAVE_SETMAGICKMEMORYMETHODS)
142
- set_managed_memory();
143
- #else
144
- rb_define_const(Module_Magick, "MANAGED_MEMORY", Qfalse);
145
- #endif
245
+ rm_main_thread_id = rm_current_thread_id();
146
246
 
147
247
  /*-----------------------------------------------------------------------*/
148
248
  /* Create IDs for frequently used methods, etc. */
@@ -154,24 +254,14 @@ Init_RMagick2(void)
154
254
  rm_ID_cur_image = rb_intern("cur_image");
155
255
  rm_ID_dup = rb_intern("dup");
156
256
  rm_ID_fill = rb_intern("fill");
157
- rm_ID_flag = rb_intern("flag");
158
- rm_ID_from_s = rb_intern("from_s");
159
257
  rm_ID_Geometry = rb_intern("Geometry");
160
- rm_ID_GeometryValue = rb_intern("GeometryValue");
161
- rm_ID_has_key_q = rb_intern("has_key?");
162
258
  rm_ID_height = rb_intern("height");
163
259
  rm_ID_initialize_copy = rb_intern("initialize_copy");
164
- rm_ID_length = rb_intern("length");
165
260
  rm_ID_notify_observers = rb_intern("notify_observers");
166
261
  rm_ID_new = rb_intern("new");
167
262
  rm_ID_push = rb_intern("push");
168
- rm_ID_spaceship = rb_intern("<=>");
169
- rm_ID_to_i = rb_intern("to_i");
170
- rm_ID_to_s = rb_intern("to_s");
171
263
  rm_ID_values = rb_intern("values");
172
264
  rm_ID_width = rb_intern("width");
173
- rm_ID_x = rb_intern("x");
174
- rm_ID_y = rb_intern("y");
175
265
 
176
266
  /*-----------------------------------------------------------------------*/
177
267
  /* Module Magick methods */
@@ -197,7 +287,6 @@ Init_RMagick2(void)
197
287
  rb_define_alloc_func(Class_Image, Image_alloc);
198
288
  rb_define_method(Class_Image, "initialize", Image_initialize, -1);
199
289
 
200
- rb_define_singleton_method(Class_Image, "combine", Image_combine, -1);
201
290
  rb_define_singleton_method(Class_Image, "constitute", Image_constitute, 4);
202
291
  rb_define_singleton_method(Class_Image, "_load", Image__load, 1);
203
292
  rb_define_singleton_method(Class_Image, "capture", Image_capture, -1);
@@ -206,72 +295,106 @@ Init_RMagick2(void)
206
295
  rb_define_singleton_method(Class_Image, "read_inline", Image_read_inline, 1);
207
296
  rb_define_singleton_method(Class_Image, "from_blob", Image_from_blob, 1);
208
297
 
209
- DCL_ATTR_WRITER(Image, alpha)
210
- DCL_ATTR_ACCESSOR(Image, background_color)
211
- DCL_ATTR_READER(Image, base_columns)
212
- DCL_ATTR_READER(Image, base_filename)
213
- DCL_ATTR_READER(Image, base_rows)
214
- DCL_ATTR_ACCESSOR(Image, bias)
215
- DCL_ATTR_ACCESSOR(Image, black_point_compensation)
216
- DCL_ATTR_ACCESSOR(Image, blur)
217
- DCL_ATTR_ACCESSOR(Image, border_color)
218
- DCL_ATTR_READER(Image, bounding_box)
219
- DCL_ATTR_ACCESSOR(Image, chromaticity)
220
- DCL_ATTR_ACCESSOR(Image, color_profile)
221
- DCL_ATTR_READER(Image, colors)
222
- DCL_ATTR_ACCESSOR(Image, colorspace)
223
- DCL_ATTR_READER(Image, columns)
224
- DCL_ATTR_ACCESSOR(Image, compose)
225
- DCL_ATTR_ACCESSOR(Image, compression)
226
- DCL_ATTR_ACCESSOR(Image, delay)
227
- DCL_ATTR_ACCESSOR(Image, density)
228
- DCL_ATTR_READER(Image, depth)
229
- DCL_ATTR_READER(Image, directory)
230
- DCL_ATTR_ACCESSOR(Image, dispose)
231
- DCL_ATTR_ACCESSOR(Image, endian)
232
- DCL_ATTR_ACCESSOR(Image, extract_info)
233
- DCL_ATTR_READER(Image, filename)
234
- DCL_ATTR_READER(Image, filesize)
235
- DCL_ATTR_ACCESSOR(Image, filter)
236
- DCL_ATTR_ACCESSOR(Image, format)
237
- DCL_ATTR_ACCESSOR(Image, fuzz)
238
- DCL_ATTR_ACCESSOR(Image, gamma)
239
- DCL_ATTR_ACCESSOR(Image, geometry)
240
- DCL_ATTR_ACCESSOR(Image, gravity)
241
- DCL_ATTR_ACCESSOR(Image, image_type)
242
- DCL_ATTR_ACCESSOR(Image, interlace)
243
- DCL_ATTR_ACCESSOR(Image, iptc_profile)
244
- DCL_ATTR_ACCESSOR(Image, iterations) // do not document! Only used by Image#iterations=
245
- DCL_ATTR_WRITER(Image, mask)
246
- DCL_ATTR_ACCESSOR(Image, matte)
247
- DCL_ATTR_ACCESSOR(Image, matte_color)
248
- DCL_ATTR_READER(Image, mean_error_per_pixel)
249
- DCL_ATTR_READER(Image, mime_type)
250
- DCL_ATTR_WRITER(Image, monitor)
251
- DCL_ATTR_READER(Image, montage)
252
- DCL_ATTR_READER(Image, normalized_mean_error)
253
- DCL_ATTR_READER(Image, normalized_maximum_error)
254
- DCL_ATTR_READER(Image, number_colors)
255
- DCL_ATTR_ACCESSOR(Image, offset)
256
- DCL_ATTR_WRITER(Image, opacity)
257
- DCL_ATTR_ACCESSOR(Image, orientation)
258
- DCL_ATTR_ACCESSOR(Image, page)
259
- DCL_ATTR_ACCESSOR(Image, pixel_interpolation_method)
260
- DCL_ATTR_READER(Image, quality)
261
- DCL_ATTR_READER(Image, quantum_depth)
262
- DCL_ATTR_ACCESSOR(Image, rendering_intent)
263
- DCL_ATTR_READER(Image, rows)
264
- DCL_ATTR_READER(Image, scene)
265
- DCL_ATTR_ACCESSOR(Image, start_loop)
266
- DCL_ATTR_ACCESSOR(Image, class_type)
267
- DCL_ATTR_ACCESSOR(Image, ticks_per_second)
268
- DCL_ATTR_READER(Image, total_colors)
269
- DCL_ATTR_READER(Image, total_ink_density)
270
- DCL_ATTR_ACCESSOR(Image, transparent_color)
271
- DCL_ATTR_ACCESSOR(Image, units)
272
- DCL_ATTR_ACCESSOR(Image, virtual_pixel_method)
273
- DCL_ATTR_ACCESSOR(Image, x_resolution)
274
- DCL_ATTR_ACCESSOR(Image, y_resolution)
298
+ // Define the attributes
299
+ rb_define_method(Class_Image, "background_color", Image_background_color, 0);
300
+ rb_define_method(Class_Image, "background_color=", Image_background_color_eq, 1);
301
+ rb_define_method(Class_Image, "base_columns", Image_base_columns, 0);
302
+ rb_define_method(Class_Image, "base_filename", Image_base_filename, 0);
303
+ rb_define_method(Class_Image, "base_rows", Image_base_rows, 0);
304
+ rb_define_method(Class_Image, "bias", Image_bias, 0);
305
+ rb_define_method(Class_Image, "bias=", Image_bias_eq, 1);
306
+ rb_define_method(Class_Image, "black_point_compensation", Image_black_point_compensation, 0);
307
+ rb_define_method(Class_Image, "black_point_compensation=", Image_black_point_compensation_eq, 1);
308
+ rb_define_method(Class_Image, "border_color", Image_border_color, 0);
309
+ rb_define_method(Class_Image, "border_color=", Image_border_color_eq, 1);
310
+ rb_define_method(Class_Image, "bounding_box", Image_bounding_box, 0);
311
+ rb_define_method(Class_Image, "chromaticity", Image_chromaticity, 0);
312
+ rb_define_method(Class_Image, "chromaticity=", Image_chromaticity_eq, 1);
313
+ rb_define_method(Class_Image, "color_profile", Image_color_profile, 0);
314
+ rb_define_method(Class_Image, "color_profile=", Image_color_profile_eq, 1);
315
+ rb_define_method(Class_Image, "colors", Image_colors, 0);
316
+ rb_define_method(Class_Image, "colorspace", Image_colorspace, 0);
317
+ rb_define_method(Class_Image, "colorspace=", Image_colorspace_eq, 1);
318
+ rb_define_method(Class_Image, "columns", Image_columns, 0);
319
+ rb_define_method(Class_Image, "compose", Image_compose, 0);
320
+ rb_define_method(Class_Image, "compose=", Image_compose_eq, 1);
321
+ rb_define_method(Class_Image, "compression", Image_compression, 0);
322
+ rb_define_method(Class_Image, "compression=", Image_compression_eq, 1);
323
+ rb_define_method(Class_Image, "delay", Image_delay, 0);
324
+ rb_define_method(Class_Image, "delay=", Image_delay_eq, 1);
325
+ rb_define_method(Class_Image, "density", Image_density, 0);
326
+ rb_define_method(Class_Image, "density=", Image_density_eq, 1);
327
+ rb_define_method(Class_Image, "depth", Image_depth, 0);
328
+ rb_define_method(Class_Image, "directory", Image_directory, 0);
329
+ rb_define_method(Class_Image, "dispose", Image_dispose, 0);
330
+ rb_define_method(Class_Image, "dispose=", Image_dispose_eq, 1);
331
+ rb_define_method(Class_Image, "endian", Image_endian, 0);
332
+ rb_define_method(Class_Image, "endian=", Image_endian_eq, 1);
333
+ rb_define_method(Class_Image, "extract_info", Image_extract_info, 0);
334
+ rb_define_method(Class_Image, "extract_info=", Image_extract_info_eq, 1);
335
+ rb_define_method(Class_Image, "filename", Image_filename, 0);
336
+ rb_define_method(Class_Image, "filesize", Image_filesize, 0);
337
+ rb_define_method(Class_Image, "filter", Image_filter, 0);
338
+ rb_define_method(Class_Image, "filter=", Image_filter_eq, 1);
339
+ rb_define_method(Class_Image, "format", Image_format, 0);
340
+ rb_define_method(Class_Image, "format=", Image_format_eq, 1);
341
+ rb_define_method(Class_Image, "fuzz", Image_fuzz, 0);
342
+ rb_define_method(Class_Image, "fuzz=", Image_fuzz_eq, 1);
343
+ rb_define_method(Class_Image, "gamma", Image_gamma, 0);
344
+ rb_define_method(Class_Image, "gamma=", Image_gamma_eq, 1);
345
+ rb_define_method(Class_Image, "geometry", Image_geometry, 0);
346
+ rb_define_method(Class_Image, "geometry=", Image_geometry_eq, 1);
347
+ rb_define_method(Class_Image, "gravity", Image_gravity, 0);
348
+ rb_define_method(Class_Image, "gravity=", Image_gravity_eq, 1);
349
+ rb_define_method(Class_Image, "image_type", Image_image_type, 0);
350
+ rb_define_method(Class_Image, "image_type=", Image_image_type_eq, 1);
351
+ rb_define_method(Class_Image, "interlace", Image_interlace, 0);
352
+ rb_define_method(Class_Image, "interlace=", Image_interlace_eq, 1);
353
+ rb_define_method(Class_Image, "iptc_profile", Image_iptc_profile, 0);
354
+ rb_define_method(Class_Image, "iptc_profile=", Image_iptc_profile_eq, 1);
355
+ rb_define_method(Class_Image, "iterations", Image_iterations, 0); // do not document! Only used by Image#iterations=
356
+ rb_define_method(Class_Image, "iterations=", Image_iterations_eq, 1); // do not document! Only used by Image#iterations=
357
+ rb_define_method(Class_Image, "matte_color", Image_matte_color, 0);
358
+ rb_define_method(Class_Image, "matte_color=", Image_matte_color_eq, 1);
359
+ rb_define_method(Class_Image, "mean_error_per_pixel", Image_mean_error_per_pixel, 0);
360
+ rb_define_method(Class_Image, "mime_type", Image_mime_type, 0);
361
+ rb_define_method(Class_Image, "monitor=", Image_monitor_eq, 1);
362
+ rb_define_method(Class_Image, "montage", Image_montage, 0);
363
+ rb_define_method(Class_Image, "normalized_mean_error", Image_normalized_mean_error, 0);
364
+ rb_define_method(Class_Image, "normalized_maximum_error", Image_normalized_maximum_error, 0);
365
+ rb_define_method(Class_Image, "number_colors", Image_number_colors, 0);
366
+ rb_define_method(Class_Image, "offset", Image_offset, 0);
367
+ rb_define_method(Class_Image, "offset=", Image_offset_eq, 1);
368
+ rb_define_method(Class_Image, "orientation", Image_orientation, 0);
369
+ rb_define_method(Class_Image, "orientation=", Image_orientation_eq, 1);
370
+ rb_define_method(Class_Image, "page", Image_page, 0);
371
+ rb_define_method(Class_Image, "page=", Image_page_eq, 1);
372
+ rb_define_method(Class_Image, "pixel_interpolation_method", Image_pixel_interpolation_method, 0);
373
+ rb_define_method(Class_Image, "pixel_interpolation_method=", Image_pixel_interpolation_method_eq, 1);
374
+ rb_define_method(Class_Image, "quality", Image_quality, 0);
375
+ rb_define_method(Class_Image, "quantum_depth", Image_quantum_depth, 0);
376
+ rb_define_method(Class_Image, "rendering_intent", Image_rendering_intent, 0);
377
+ rb_define_method(Class_Image, "rendering_intent=", Image_rendering_intent_eq, 1);
378
+ rb_define_method(Class_Image, "rows", Image_rows, 0);
379
+ rb_define_method(Class_Image, "scene", Image_scene, 0);
380
+ rb_define_method(Class_Image, "start_loop", Image_start_loop, 0);
381
+ rb_define_method(Class_Image, "start_loop=", Image_start_loop_eq, 1);
382
+ rb_define_method(Class_Image, "class_type", Image_class_type, 0);
383
+ rb_define_method(Class_Image, "class_type=", Image_class_type_eq, 1);
384
+ rb_define_method(Class_Image, "ticks_per_second", Image_ticks_per_second, 0);
385
+ rb_define_method(Class_Image, "ticks_per_second=", Image_ticks_per_second_eq, 1);
386
+ rb_define_method(Class_Image, "total_colors", Image_total_colors, 0);
387
+ rb_define_method(Class_Image, "total_ink_density", Image_total_ink_density, 0);
388
+ rb_define_method(Class_Image, "transparent_color", Image_transparent_color, 0);
389
+ rb_define_method(Class_Image, "transparent_color=", Image_transparent_color_eq, 1);
390
+ rb_define_method(Class_Image, "units", Image_units, 0);
391
+ rb_define_method(Class_Image, "units=", Image_units_eq, 1);
392
+ rb_define_method(Class_Image, "virtual_pixel_method", Image_virtual_pixel_method, 0);
393
+ rb_define_method(Class_Image, "virtual_pixel_method=", Image_virtual_pixel_method_eq, 1);
394
+ rb_define_method(Class_Image, "x_resolution", Image_x_resolution, 0);
395
+ rb_define_method(Class_Image, "x_resolution=", Image_x_resolution_eq, 1);
396
+ rb_define_method(Class_Image, "y_resolution", Image_y_resolution, 0);
397
+ rb_define_method(Class_Image, "y_resolution=", Image_y_resolution_eq, 1);
275
398
 
276
399
  rb_define_method(Class_Image, "adaptive_blur", Image_adaptive_blur, -1);
277
400
  rb_define_method(Class_Image, "adaptive_blur_channel", Image_adaptive_blur_channel, -1);
@@ -313,6 +436,7 @@ Init_RMagick2(void)
313
436
  rb_define_method(Class_Image, "channel_depth", Image_channel_depth, -1);
314
437
  rb_define_method(Class_Image, "channel_extrema", Image_channel_extrema, -1);
315
438
  rb_define_method(Class_Image, "channel_mean", Image_channel_mean, -1);
439
+ rb_define_method(Class_Image, "channel_entropy", Image_channel_entropy, -1);
316
440
  rb_define_method(Class_Image, "charcoal", Image_charcoal, -1);
317
441
  rb_define_method(Class_Image, "chop", Image_chop, 4);
318
442
  rb_define_method(Class_Image, "clut_channel", Image_clut_channel, -1);
@@ -334,6 +458,8 @@ Init_RMagick2(void)
334
458
  rb_define_method(Class_Image, "contrast_stretch_channel", Image_contrast_stretch_channel, -1);
335
459
  rb_define_method(Class_Image, "convolve", Image_convolve, 2);
336
460
  rb_define_method(Class_Image, "convolve_channel", Image_convolve_channel, -1);
461
+ rb_define_method(Class_Image, "morphology", Image_morphology, 3);
462
+ rb_define_method(Class_Image, "morphology_channel", Image_morphology_channel, 4);
337
463
  rb_define_method(Class_Image, "copy", Image_copy, 0);
338
464
  rb_define_method(Class_Image, "crop", Image_crop, -1);
339
465
  rb_define_method(Class_Image, "crop!", Image_crop_bang, -1);
@@ -375,6 +501,7 @@ Init_RMagick2(void)
375
501
  rb_define_method(Class_Image, "flop!", Image_flop_bang, 0);
376
502
  rb_define_method(Class_Image, "frame", Image_frame, -1);
377
503
  rb_define_method(Class_Image, "function_channel", Image_function_channel, -1);
504
+ rb_define_method(Class_Image, "fx", Image_fx, -1);
378
505
  rb_define_method(Class_Image, "gamma_channel", Image_gamma_channel, -1);
379
506
  rb_define_method(Class_Image, "gamma_correct", Image_gamma_correct, -1);
380
507
  rb_define_method(Class_Image, "gaussian_blur", Image_gaussian_blur, -1);
@@ -395,11 +522,10 @@ Init_RMagick2(void)
395
522
  rb_define_method(Class_Image, "liquid_rescale", Image_liquid_rescale, -1);
396
523
  rb_define_method(Class_Image, "magnify", Image_magnify, 0);
397
524
  rb_define_method(Class_Image, "magnify!", Image_magnify_bang, 0);
398
- rb_define_method(Class_Image, "map", Image_map, -1);
399
525
  rb_define_method(Class_Image, "marshal_dump", Image_marshal_dump, 0);
400
526
  rb_define_method(Class_Image, "marshal_load", Image_marshal_load, 1);
401
527
  rb_define_method(Class_Image, "mask", Image_mask, -1);
402
- rb_define_method(Class_Image, "matte_flood_fill", Image_matte_flood_fill, 5);
528
+ rb_define_method(Class_Image, "matte_flood_fill", Image_matte_flood_fill, -1);
403
529
  rb_define_method(Class_Image, "median_filter", Image_median_filter, -1);
404
530
  rb_define_method(Class_Image, "minify", Image_minify, 0);
405
531
  rb_define_method(Class_Image, "minify!", Image_minify_bang, 0);
@@ -431,6 +557,8 @@ Init_RMagick2(void)
431
557
  rb_define_method(Class_Image, "random_threshold_channel", Image_random_threshold_channel, -1);
432
558
  rb_define_method(Class_Image, "recolor", Image_recolor, 1);
433
559
  rb_define_method(Class_Image, "reduce_noise", Image_reduce_noise, 1);
560
+ rb_define_method(Class_Image, "resample", Image_resample, -1);
561
+ rb_define_method(Class_Image, "resample!", Image_resample_bang, -1);
434
562
  rb_define_method(Class_Image, "resize", Image_resize, -1);
435
563
  rb_define_method(Class_Image, "resize!", Image_resize_bang, -1);
436
564
  rb_define_method(Class_Image, "roll", Image_roll, 2);
@@ -465,7 +593,6 @@ Init_RMagick2(void)
465
593
  rb_define_method(Class_Image, "strip!", Image_strip_bang, 0);
466
594
  rb_define_method(Class_Image, "store_pixels", Image_store_pixels, 5);
467
595
  rb_define_method(Class_Image, "swirl", Image_swirl, 1);
468
- rb_define_method(Class_Image, "sync_profiles", Image_sync_profiles, 0);
469
596
  rb_define_method(Class_Image, "texture_flood_fill", Image_texture_flood_fill, 5);
470
597
  rb_define_method(Class_Image, "threshold", Image_threshold, 1);
471
598
  rb_define_method(Class_Image, "thumbnail", Image_thumbnail, -1);
@@ -505,12 +632,11 @@ Init_RMagick2(void)
505
632
  rb_define_method(Class_ImageList, "append", ImageList_append, 1);
506
633
  rb_define_method(Class_ImageList, "average", ImageList_average, 0);
507
634
  rb_define_method(Class_ImageList, "coalesce", ImageList_coalesce, 0);
635
+ rb_define_method(Class_ImageList, "combine", ImageList_combine, -1);
508
636
  rb_define_method(Class_ImageList, "composite_layers", ImageList_composite_layers, -1);
509
637
  rb_define_method(Class_ImageList, "deconstruct", ImageList_deconstruct, 0);
510
638
  rb_define_method(Class_ImageList, "display", ImageList_display, 0);
511
639
  rb_define_method(Class_ImageList, "flatten_images", ImageList_flatten_images, 0);
512
- rb_define_method(Class_ImageList, "fx", ImageList_fx, -1);
513
- rb_define_method(Class_ImageList, "map", ImageList_map, -1);
514
640
  rb_define_method(Class_ImageList, "montage", ImageList_montage, 0);
515
641
  rb_define_method(Class_ImageList, "morph", ImageList_morph, 1);
516
642
  rb_define_method(Class_ImageList, "mosaic", ImageList_mosaic, 0);
@@ -526,30 +652,31 @@ Init_RMagick2(void)
526
652
  Class_Draw = rb_define_class_under(Module_Magick, "Draw", rb_cObject);
527
653
  rb_define_alloc_func(Class_Draw, Draw_alloc);
528
654
 
529
- DCL_ATTR_WRITER(Draw, affine)
530
- DCL_ATTR_WRITER(Draw, align)
531
- DCL_ATTR_WRITER(Draw, decorate)
532
- DCL_ATTR_WRITER(Draw, density)
533
- DCL_ATTR_WRITER(Draw, encoding)
534
- DCL_ATTR_WRITER(Draw, fill)
535
- DCL_ATTR_WRITER(Draw, fill_pattern)
536
- DCL_ATTR_WRITER(Draw, font)
537
- DCL_ATTR_WRITER(Draw, font_family)
538
- DCL_ATTR_WRITER(Draw, font_stretch)
539
- DCL_ATTR_WRITER(Draw, font_style)
540
- DCL_ATTR_WRITER(Draw, font_weight)
541
- DCL_ATTR_WRITER(Draw, gravity)
542
- DCL_ATTR_WRITER(Draw, interline_spacing)
543
- DCL_ATTR_WRITER(Draw, interword_spacing)
544
- DCL_ATTR_WRITER(Draw, kerning)
545
- DCL_ATTR_WRITER(Draw, pointsize)
546
- DCL_ATTR_WRITER(Draw, rotation)
547
- DCL_ATTR_WRITER(Draw, stroke)
548
- DCL_ATTR_WRITER(Draw, stroke_pattern)
549
- DCL_ATTR_WRITER(Draw, stroke_width)
550
- DCL_ATTR_WRITER(Draw, text_antialias)
551
- DCL_ATTR_WRITER(Draw, tile)
552
- DCL_ATTR_WRITER(Draw, undercolor)
655
+ // Define the attributes
656
+ rb_define_method(Class_Draw, "affine=", Draw_affine_eq, 1);
657
+ rb_define_method(Class_Draw, "align=", Draw_align_eq, 1);
658
+ rb_define_method(Class_Draw, "decorate=", Draw_decorate_eq, 1);
659
+ rb_define_method(Class_Draw, "density=", Draw_density_eq, 1);
660
+ rb_define_method(Class_Draw, "encoding=", Draw_encoding_eq, 1);
661
+ rb_define_method(Class_Draw, "fill=", Draw_fill_eq, 1);
662
+ rb_define_method(Class_Draw, "fill_pattern=", Draw_fill_pattern_eq, 1);
663
+ rb_define_method(Class_Draw, "font=", Draw_font_eq, 1);
664
+ rb_define_method(Class_Draw, "font_family=", Draw_font_family_eq, 1);
665
+ rb_define_method(Class_Draw, "font_stretch=", Draw_font_stretch_eq, 1);
666
+ rb_define_method(Class_Draw, "font_style=", Draw_font_style_eq, 1);
667
+ rb_define_method(Class_Draw, "font_weight=", Draw_font_weight_eq, 1);
668
+ rb_define_method(Class_Draw, "gravity=", Draw_gravity_eq, 1);
669
+ rb_define_method(Class_Draw, "interline_spacing=", Draw_interline_spacing_eq, 1);
670
+ rb_define_method(Class_Draw, "interword_spacing=", Draw_interword_spacing_eq, 1);
671
+ rb_define_method(Class_Draw, "kerning=", Draw_kerning_eq, 1);
672
+ rb_define_method(Class_Draw, "pointsize=", Draw_pointsize_eq, 1);
673
+ rb_define_method(Class_Draw, "rotation=", Draw_rotation_eq, 1);
674
+ rb_define_method(Class_Draw, "stroke=", Draw_stroke_eq, 1);
675
+ rb_define_method(Class_Draw, "stroke_pattern=", Draw_stroke_pattern_eq, 1);
676
+ rb_define_method(Class_Draw, "stroke_width=", Draw_stroke_width_eq, 1);
677
+ rb_define_method(Class_Draw, "text_antialias=", Draw_text_antialias_eq, 1);
678
+ rb_define_method(Class_Draw, "tile=", Draw_tile_eq, 1);
679
+ rb_define_method(Class_Draw, "undercolor=", Draw_undercolor_eq, 1);
553
680
 
554
681
  rb_define_method(Class_Draw, "annotate", Draw_annotate, 6);
555
682
  rb_define_method(Class_Draw, "clone", Draw_clone, 0);
@@ -577,27 +704,27 @@ Init_RMagick2(void)
577
704
 
578
705
  rb_define_method(Class_DrawOptions, "initialize", DrawOptions_initialize, 0);
579
706
 
580
- SHARE_ATTR_WRITER(DrawOptions, Draw, affine)
581
- SHARE_ATTR_WRITER(DrawOptions, Draw, align)
582
- SHARE_ATTR_WRITER(DrawOptions, Draw, decorate)
583
- SHARE_ATTR_WRITER(DrawOptions, Draw, density)
584
- SHARE_ATTR_WRITER(DrawOptions, Draw, encoding)
585
- SHARE_ATTR_WRITER(DrawOptions, Draw, fill)
586
- SHARE_ATTR_WRITER(DrawOptions, Draw, fill_pattern)
587
- SHARE_ATTR_WRITER(DrawOptions, Draw, font)
588
- SHARE_ATTR_WRITER(DrawOptions, Draw, font_family)
589
- SHARE_ATTR_WRITER(DrawOptions, Draw, font_stretch)
590
- SHARE_ATTR_WRITER(DrawOptions, Draw, font_style)
591
- SHARE_ATTR_WRITER(DrawOptions, Draw, font_weight)
592
- SHARE_ATTR_WRITER(DrawOptions, Draw, gravity)
593
- SHARE_ATTR_WRITER(DrawOptions, Draw, pointsize)
594
- SHARE_ATTR_WRITER(DrawOptions, Draw, rotation)
595
- SHARE_ATTR_WRITER(DrawOptions, Draw, stroke)
596
- SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_pattern)
597
- SHARE_ATTR_WRITER(DrawOptions, Draw, stroke_width)
598
- SHARE_ATTR_WRITER(DrawOptions, Draw, text_antialias)
599
- SHARE_ATTR_WRITER(DrawOptions, Draw, tile)
600
- SHARE_ATTR_WRITER(DrawOptions, Draw, undercolor)
707
+ rb_define_method(Class_DrawOptions, "affine=", Draw_affine_eq, 1);
708
+ rb_define_method(Class_DrawOptions, "align=", Draw_align_eq, 1);
709
+ rb_define_method(Class_DrawOptions, "decorate=", Draw_decorate_eq, 1);
710
+ rb_define_method(Class_DrawOptions, "density=", Draw_density_eq, 1);
711
+ rb_define_method(Class_DrawOptions, "encoding=", Draw_encoding_eq, 1);
712
+ rb_define_method(Class_DrawOptions, "fill=", Draw_fill_eq, 1);
713
+ rb_define_method(Class_DrawOptions, "fill_pattern=", Draw_fill_pattern_eq, 1);
714
+ rb_define_method(Class_DrawOptions, "font=", Draw_font_eq, 1);
715
+ rb_define_method(Class_DrawOptions, "font_family=", Draw_font_family_eq, 1);
716
+ rb_define_method(Class_DrawOptions, "font_stretch=", Draw_font_stretch_eq, 1);
717
+ rb_define_method(Class_DrawOptions, "font_style=", Draw_font_style_eq, 1);
718
+ rb_define_method(Class_DrawOptions, "font_weight=", Draw_font_weight_eq, 1);
719
+ rb_define_method(Class_DrawOptions, "gravity=", Draw_gravity_eq, 1);
720
+ rb_define_method(Class_DrawOptions, "pointsize=", Draw_pointsize_eq, 1);
721
+ rb_define_method(Class_DrawOptions, "rotation=", Draw_rotation_eq, 1);
722
+ rb_define_method(Class_DrawOptions, "stroke=", Draw_stroke_eq, 1);
723
+ rb_define_method(Class_DrawOptions, "stroke_pattern=", Draw_stroke_pattern_eq, 1);
724
+ rb_define_method(Class_DrawOptions, "stroke_width=", Draw_stroke_width_eq, 1);
725
+ rb_define_method(Class_DrawOptions, "text_antialias=", Draw_text_antialias_eq, 1);
726
+ rb_define_method(Class_DrawOptions, "tile=", Draw_tile_eq, 1);
727
+ rb_define_method(Class_DrawOptions, "undercolor=", Draw_undercolor_eq, 1);
601
728
 
602
729
  /*-----------------------------------------------------------------------*/
603
730
  /* Class Magick::Pixel */
@@ -605,11 +732,6 @@ Init_RMagick2(void)
605
732
 
606
733
  Class_Pixel = rb_define_class_under(Module_Magick, "Pixel", rb_cObject);
607
734
 
608
- // include Observable in Pixel for Image::View class
609
- (void) rb_require("observer");
610
- observable = rb_const_get(rb_cObject, rb_intern("Observable"));
611
- rb_include_module(Class_Pixel, observable);
612
-
613
735
  // include Comparable
614
736
  rb_include_module(Class_Pixel, rb_mComparable);
615
737
 
@@ -617,20 +739,27 @@ Init_RMagick2(void)
617
739
  // and the deprecated "from_HSL".
618
740
  rb_define_alloc_func(Class_Pixel, Pixel_alloc);
619
741
  rb_define_singleton_method(Class_Pixel, "from_color", Pixel_from_color, 1);
620
- rb_define_singleton_method(Class_Pixel, "from_HSL", Pixel_from_HSL, 1);
621
742
  rb_define_singleton_method(Class_Pixel, "from_hsla", Pixel_from_hsla, -1);
622
743
 
623
744
  // Define the RGBA attributes
624
- DCL_ATTR_ACCESSOR(Pixel, red)
625
- DCL_ATTR_ACCESSOR(Pixel, green)
626
- DCL_ATTR_ACCESSOR(Pixel, blue)
627
- DCL_ATTR_ACCESSOR(Pixel, opacity)
745
+ rb_define_method(Class_Pixel, "red", Pixel_red, 0);
746
+ rb_define_method(Class_Pixel, "red=", Pixel_red_eq, 1);
747
+ rb_define_method(Class_Pixel, "green", Pixel_green, 0);
748
+ rb_define_method(Class_Pixel, "green=", Pixel_green_eq, 1);
749
+ rb_define_method(Class_Pixel, "blue", Pixel_blue, 0);
750
+ rb_define_method(Class_Pixel, "blue=", Pixel_blue_eq, 1);
751
+ rb_define_method(Class_Pixel, "alpha", Pixel_alpha, 0);
752
+ rb_define_method(Class_Pixel, "alpha=", Pixel_alpha_eq, 1);
628
753
 
629
754
  // Define the CMYK attributes
630
- DCL_ATTR_ACCESSOR(Pixel, cyan)
631
- DCL_ATTR_ACCESSOR(Pixel, magenta)
632
- DCL_ATTR_ACCESSOR(Pixel, yellow)
633
- DCL_ATTR_ACCESSOR(Pixel, black)
755
+ rb_define_method(Class_Pixel, "cyan", Pixel_cyan, 0);
756
+ rb_define_method(Class_Pixel, "cyan=", Pixel_cyan_eq, 1);
757
+ rb_define_method(Class_Pixel, "magenta", Pixel_magenta, 0);
758
+ rb_define_method(Class_Pixel, "magenta=", Pixel_magenta_eq, 1);
759
+ rb_define_method(Class_Pixel, "yellow", Pixel_yellow, 0);
760
+ rb_define_method(Class_Pixel, "yellow=", Pixel_yellow_eq, 1);
761
+ rb_define_method(Class_Pixel, "black", Pixel_black, 0);
762
+ rb_define_method(Class_Pixel, "black=", Pixel_black_eq, 1);
634
763
 
635
764
 
636
765
  // Define the instance methods
@@ -647,7 +776,6 @@ Init_RMagick2(void)
647
776
  rb_define_method(Class_Pixel, "marshal_dump", Pixel_marshal_dump, 0);
648
777
  rb_define_method(Class_Pixel, "marshal_load", Pixel_marshal_load, 1);
649
778
  rb_define_method(Class_Pixel, "to_color", Pixel_to_color, -1);
650
- rb_define_method(Class_Pixel, "to_HSL", Pixel_to_HSL, 0); // deprecated
651
779
  rb_define_method(Class_Pixel, "to_hsla", Pixel_to_hsla, 0);
652
780
  rb_define_method(Class_Pixel, "to_s", Pixel_to_s, 0);
653
781
 
@@ -663,23 +791,23 @@ Init_RMagick2(void)
663
791
  rb_define_method(Class_Montage, "freeze", rm_no_freeze, 0);
664
792
 
665
793
  // These accessors supply optional arguments for Magick::ImageList::Montage.new
666
- DCL_ATTR_WRITER(Montage, background_color)
667
- DCL_ATTR_WRITER(Montage, border_color)
668
- DCL_ATTR_WRITER(Montage, border_width)
669
- DCL_ATTR_WRITER(Montage, compose)
670
- DCL_ATTR_WRITER(Montage, filename)
671
- DCL_ATTR_WRITER(Montage, fill)
672
- DCL_ATTR_WRITER(Montage, font)
673
- DCL_ATTR_WRITER(Montage, frame)
674
- DCL_ATTR_WRITER(Montage, geometry)
675
- DCL_ATTR_WRITER(Montage, gravity)
676
- DCL_ATTR_WRITER(Montage, matte_color)
677
- DCL_ATTR_WRITER(Montage, pointsize)
678
- DCL_ATTR_WRITER(Montage, shadow)
679
- DCL_ATTR_WRITER(Montage, stroke)
680
- DCL_ATTR_WRITER(Montage, texture)
681
- DCL_ATTR_WRITER(Montage, tile)
682
- DCL_ATTR_WRITER(Montage, title)
794
+ rb_define_method(Class_Montage, "background_color=", Montage_background_color_eq, 1);
795
+ rb_define_method(Class_Montage, "border_color=", Montage_border_color_eq, 1);
796
+ rb_define_method(Class_Montage, "border_width=", Montage_border_width_eq, 1);
797
+ rb_define_method(Class_Montage, "compose=", Montage_compose_eq, 1);
798
+ rb_define_method(Class_Montage, "filename=", Montage_filename_eq, 1);
799
+ rb_define_method(Class_Montage, "fill=", Montage_fill_eq, 1);
800
+ rb_define_method(Class_Montage, "font=", Montage_font_eq, 1);
801
+ rb_define_method(Class_Montage, "frame=", Montage_frame_eq, 1);
802
+ rb_define_method(Class_Montage, "geometry=", Montage_geometry_eq, 1);
803
+ rb_define_method(Class_Montage, "gravity=", Montage_gravity_eq, 1);
804
+ rb_define_method(Class_Montage, "matte_color=", Montage_matte_color_eq, 1);
805
+ rb_define_method(Class_Montage, "pointsize=", Montage_pointsize_eq, 1);
806
+ rb_define_method(Class_Montage, "shadow=", Montage_shadow_eq, 1);
807
+ rb_define_method(Class_Montage, "stroke=", Montage_stroke_eq, 1);
808
+ rb_define_method(Class_Montage, "texture=", Montage_texture_eq, 1);
809
+ rb_define_method(Class_Montage, "tile=", Montage_tile_eq, 1);
810
+ rb_define_method(Class_Montage, "title=", Montage_title_eq, 1);
683
811
 
684
812
  /*-----------------------------------------------------------------------*/
685
813
  /* Class Magick::Image::Info */
@@ -697,53 +825,114 @@ Init_RMagick2(void)
697
825
  rb_define_method(Class_Info, "[]", Info_aref, -1);
698
826
  rb_define_method(Class_Info, "undefine", Info_undefine, 2);
699
827
 
700
- DCL_ATTR_ACCESSOR(Info, antialias)
701
- DCL_ATTR_ACCESSOR(Info, attenuate)
702
- DCL_ATTR_ACCESSOR(Info, authenticate)
703
- DCL_ATTR_ACCESSOR(Info, background_color)
704
- DCL_ATTR_ACCESSOR(Info, border_color)
705
- DCL_ATTR_ACCESSOR(Info, caption)
706
- DCL_ATTR_ACCESSOR(Info, colorspace)
707
- DCL_ATTR_ACCESSOR(Info, comment)
708
- DCL_ATTR_ACCESSOR(Info, compression)
709
- DCL_ATTR_ACCESSOR(Info, delay)
710
- DCL_ATTR_ACCESSOR(Info, density)
711
- DCL_ATTR_ACCESSOR(Info, depth)
712
- DCL_ATTR_ACCESSOR(Info, dispose)
713
- DCL_ATTR_ACCESSOR(Info, dither)
714
- DCL_ATTR_ACCESSOR(Info, endian)
715
- DCL_ATTR_ACCESSOR(Info, extract)
716
- DCL_ATTR_ACCESSOR(Info, filename)
717
- DCL_ATTR_ACCESSOR(Info, fill)
718
- DCL_ATTR_ACCESSOR(Info, font)
719
- DCL_ATTR_ACCESSOR(Info, format)
720
- DCL_ATTR_ACCESSOR(Info, fuzz)
721
- DCL_ATTR_ACCESSOR(Info, gravity)
722
- DCL_ATTR_ACCESSOR(Info, group)
723
- DCL_ATTR_ACCESSOR(Info, image_type)
724
- DCL_ATTR_ACCESSOR(Info, interlace)
725
- DCL_ATTR_ACCESSOR(Info, label)
726
- DCL_ATTR_ACCESSOR(Info, matte_color)
727
- DCL_ATTR_WRITER(Info, monitor)
728
- DCL_ATTR_ACCESSOR(Info, monochrome)
729
- DCL_ATTR_ACCESSOR(Info, number_scenes)
730
- DCL_ATTR_ACCESSOR(Info, orientation)
731
- DCL_ATTR_ACCESSOR(Info, origin) // new in 6.3.1
732
- DCL_ATTR_ACCESSOR(Info, page)
733
- DCL_ATTR_ACCESSOR(Info, pointsize)
734
- DCL_ATTR_ACCESSOR(Info, quality)
735
- DCL_ATTR_ACCESSOR(Info, sampling_factor)
736
- DCL_ATTR_ACCESSOR(Info, scene)
737
- DCL_ATTR_ACCESSOR(Info, server_name)
738
- DCL_ATTR_ACCESSOR(Info, size)
739
- DCL_ATTR_ACCESSOR(Info, stroke)
740
- DCL_ATTR_ACCESSOR(Info, stroke_width)
741
- DCL_ATTR_WRITER(Info, texture)
742
- DCL_ATTR_ACCESSOR(Info, tile_offset)
743
- DCL_ATTR_ACCESSOR(Info, transparent_color)
744
- DCL_ATTR_ACCESSOR(Info, undercolor)
745
- DCL_ATTR_ACCESSOR(Info, units)
746
- DCL_ATTR_ACCESSOR(Info, view)
828
+ // Define the attributes
829
+ rb_define_method(Class_Info, "antialias", Info_antialias, 0);
830
+ rb_define_method(Class_Info, "antialias=", Info_antialias_eq, 1);
831
+ rb_define_method(Class_Info, "attenuate", Info_attenuate, 0);
832
+ rb_define_method(Class_Info, "attenuate=", Info_attenuate_eq, 1);
833
+ rb_define_method(Class_Info, "authenticate", Info_authenticate, 0);
834
+ rb_define_method(Class_Info, "authenticate=", Info_authenticate_eq, 1);
835
+ rb_define_method(Class_Info, "background_color", Info_background_color, 0);
836
+ rb_define_method(Class_Info, "background_color=", Info_background_color_eq, 1);
837
+ rb_define_method(Class_Info, "border_color", Info_border_color, 0);
838
+ rb_define_method(Class_Info, "border_color=", Info_border_color_eq, 1);
839
+ rb_define_method(Class_Info, "caption", Info_caption, 0);
840
+ rb_define_method(Class_Info, "caption=", Info_caption_eq, 1);
841
+ rb_define_method(Class_Info, "colorspace", Info_colorspace, 0);
842
+ rb_define_method(Class_Info, "colorspace=", Info_colorspace_eq, 1);
843
+ rb_define_method(Class_Info, "comment", Info_comment, 0);
844
+ rb_define_method(Class_Info, "comment=", Info_comment_eq, 1);
845
+ rb_define_method(Class_Info, "compression", Info_compression, 0);
846
+ rb_define_method(Class_Info, "compression=", Info_compression_eq, 1);
847
+ rb_define_method(Class_Info, "delay", Info_delay, 0);
848
+ rb_define_method(Class_Info, "delay=", Info_delay_eq, 1);
849
+ rb_define_method(Class_Info, "density", Info_density, 0);
850
+ rb_define_method(Class_Info, "density=", Info_density_eq, 1);
851
+ rb_define_method(Class_Info, "depth", Info_depth, 0);
852
+ rb_define_method(Class_Info, "depth=", Info_depth_eq, 1);
853
+ rb_define_method(Class_Info, "dispose", Info_dispose, 0);
854
+ rb_define_method(Class_Info, "dispose=", Info_dispose_eq, 1);
855
+ rb_define_method(Class_Info, "dither", Info_dither, 0);
856
+ rb_define_method(Class_Info, "dither=", Info_dither_eq, 1);
857
+ rb_define_method(Class_Info, "endian", Info_endian, 0);
858
+ rb_define_method(Class_Info, "endian=", Info_endian_eq, 1);
859
+ rb_define_method(Class_Info, "extract", Info_extract, 0);
860
+ rb_define_method(Class_Info, "extract=", Info_extract_eq, 1);
861
+ rb_define_method(Class_Info, "filename", Info_filename, 0);
862
+ rb_define_method(Class_Info, "filename=", Info_filename_eq, 1);
863
+ rb_define_method(Class_Info, "fill", Info_fill, 0);
864
+ rb_define_method(Class_Info, "fill=", Info_fill_eq, 1);
865
+ rb_define_method(Class_Info, "font", Info_font, 0);
866
+ rb_define_method(Class_Info, "font=", Info_font_eq, 1);
867
+ rb_define_method(Class_Info, "format", Info_format, 0);
868
+ rb_define_method(Class_Info, "format=", Info_format_eq, 1);
869
+ rb_define_method(Class_Info, "fuzz", Info_fuzz, 0);
870
+ rb_define_method(Class_Info, "fuzz=", Info_fuzz_eq, 1);
871
+ rb_define_method(Class_Info, "gravity", Info_gravity, 0);
872
+ rb_define_method(Class_Info, "gravity=", Info_gravity_eq, 1);
873
+ rb_define_method(Class_Info, "image_type", Info_image_type, 0);
874
+ rb_define_method(Class_Info, "image_type=", Info_image_type_eq, 1);
875
+ rb_define_method(Class_Info, "interlace", Info_interlace, 0);
876
+ rb_define_method(Class_Info, "interlace=", Info_interlace_eq, 1);
877
+ rb_define_method(Class_Info, "label", Info_label, 0);
878
+ rb_define_method(Class_Info, "label=", Info_label_eq, 1);
879
+ rb_define_method(Class_Info, "matte_color", Info_matte_color, 0);
880
+ rb_define_method(Class_Info, "matte_color=", Info_matte_color_eq, 1);
881
+ rb_define_method(Class_Info, "monitor=", Info_monitor_eq, 1);
882
+ rb_define_method(Class_Info, "monochrome", Info_monochrome, 0);
883
+ rb_define_method(Class_Info, "monochrome=", Info_monochrome_eq, 1);
884
+ rb_define_method(Class_Info, "number_scenes", Info_number_scenes, 0);
885
+ rb_define_method(Class_Info, "number_scenes=", Info_number_scenes_eq, 1);
886
+ rb_define_method(Class_Info, "orientation", Info_orientation, 0);
887
+ rb_define_method(Class_Info, "orientation=", Info_orientation_eq, 1);
888
+ rb_define_method(Class_Info, "origin", Info_origin, 0); // new in 6.3.1
889
+ rb_define_method(Class_Info, "origin=", Info_origin_eq, 1); // new in 6.3.1
890
+ rb_define_method(Class_Info, "page", Info_page, 0);
891
+ rb_define_method(Class_Info, "page=", Info_page_eq, 1);
892
+ rb_define_method(Class_Info, "pointsize", Info_pointsize, 0);
893
+ rb_define_method(Class_Info, "pointsize=", Info_pointsize_eq, 1);
894
+ rb_define_method(Class_Info, "quality", Info_quality, 0);
895
+ rb_define_method(Class_Info, "quality=", Info_quality_eq, 1);
896
+ rb_define_method(Class_Info, "sampling_factor", Info_sampling_factor, 0);
897
+ rb_define_method(Class_Info, "sampling_factor=", Info_sampling_factor_eq, 1);
898
+ rb_define_method(Class_Info, "scene", Info_scene, 0);
899
+ rb_define_method(Class_Info, "scene=", Info_scene_eq, 1);
900
+ rb_define_method(Class_Info, "server_name", Info_server_name, 0);
901
+ rb_define_method(Class_Info, "server_name=", Info_server_name_eq, 1);
902
+ rb_define_method(Class_Info, "size", Info_size, 0);
903
+ rb_define_method(Class_Info, "size=", Info_size_eq, 1);
904
+ rb_define_method(Class_Info, "stroke", Info_stroke, 0);
905
+ rb_define_method(Class_Info, "stroke=", Info_stroke_eq, 1);
906
+ rb_define_method(Class_Info, "stroke_width", Info_stroke_width, 0);
907
+ rb_define_method(Class_Info, "stroke_width=", Info_stroke_width_eq, 1);
908
+ rb_define_method(Class_Info, "texture=", Info_texture_eq, 1);
909
+ rb_define_method(Class_Info, "tile_offset", Info_tile_offset, 0);
910
+ rb_define_method(Class_Info, "tile_offset=", Info_tile_offset_eq, 1);
911
+ rb_define_method(Class_Info, "transparent_color", Info_transparent_color, 0);
912
+ rb_define_method(Class_Info, "transparent_color=", Info_transparent_color_eq, 1);
913
+ rb_define_method(Class_Info, "undercolor", Info_undercolor, 0);
914
+ rb_define_method(Class_Info, "undercolor=", Info_undercolor_eq, 1);
915
+ rb_define_method(Class_Info, "units", Info_units, 0);
916
+ rb_define_method(Class_Info, "units=", Info_units_eq, 1);
917
+ rb_define_method(Class_Info, "view", Info_view, 0);
918
+ rb_define_method(Class_Info, "view=", Info_view_eq, 1);
919
+
920
+ /*-----------------------------------------------------------------------*/
921
+ /* Class Magick::KernelInfo */
922
+ /*-----------------------------------------------------------------------*/
923
+
924
+ Class_KernelInfo = rb_define_class_under(Module_Magick, "KernelInfo", rb_cObject);
925
+
926
+ rb_define_alloc_func(Class_KernelInfo, KernelInfo_alloc);
927
+
928
+ rb_define_method(Class_KernelInfo, "initialize", KernelInfo_initialize, 1);
929
+ rb_define_method(Class_KernelInfo, "unity_add", KernelInfo_unity_add, 1);
930
+ rb_define_method(Class_KernelInfo, "scale", KernelInfo_scale, 2);
931
+ rb_define_method(Class_KernelInfo, "scale_geometry", KernelInfo_scale_geometry, 1);
932
+ rb_define_method(Class_KernelInfo, "clone", KernelInfo_clone, 0);
933
+ rb_define_method(Class_KernelInfo, "dup", KernelInfo_clone, 0);
934
+
935
+ rb_define_singleton_method(Class_KernelInfo, "builtin", KernelInfo_builtin, 2);
747
936
 
748
937
 
749
938
  /*-----------------------------------------------------------------------*/
@@ -756,27 +945,29 @@ Init_RMagick2(void)
756
945
 
757
946
  rb_define_method(Class_PolaroidOptions, "initialize", PolaroidOptions_initialize, 0);
758
947
 
759
- DCL_ATTR_WRITER(PolaroidOptions, shadow_color)
760
- DCL_ATTR_WRITER(PolaroidOptions, border_color)
948
+ // Define the attributes
949
+ rb_define_method(Class_PolaroidOptions, "shadow_color=", PolaroidOptions_shadow_color_eq, 1);
950
+ rb_define_method(Class_PolaroidOptions, "border_color=", PolaroidOptions_border_color_eq, 1);
951
+
761
952
  // The other attribute writer methods are implemented by Draw's functions
762
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, align)
763
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, decorate)
764
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, density)
765
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, encoding)
766
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill)
767
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, fill_pattern)
768
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, font)
769
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_family)
770
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_stretch)
771
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_style)
772
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, font_weight)
773
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, gravity)
774
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, pointsize)
775
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke)
776
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_pattern)
777
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, stroke_width)
778
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, text_antialias)
779
- SHARE_ATTR_WRITER(PolaroidOptions, Draw, undercolor)
953
+ rb_define_method(Class_PolaroidOptions, "align=", Draw_align_eq, 1);
954
+ rb_define_method(Class_PolaroidOptions, "decorate=", Draw_decorate_eq, 1);
955
+ rb_define_method(Class_PolaroidOptions, "density=", Draw_density_eq, 1);
956
+ rb_define_method(Class_PolaroidOptions, "encoding=", Draw_encoding_eq, 1);
957
+ rb_define_method(Class_PolaroidOptions, "fill=", Draw_fill_eq, 1);
958
+ rb_define_method(Class_PolaroidOptions, "fill_pattern=", Draw_fill_pattern_eq, 1);
959
+ rb_define_method(Class_PolaroidOptions, "font=", Draw_font_eq, 1);
960
+ rb_define_method(Class_PolaroidOptions, "font_family=", Draw_font_family_eq, 1);
961
+ rb_define_method(Class_PolaroidOptions, "font_stretch=", Draw_font_stretch_eq, 1);
962
+ rb_define_method(Class_PolaroidOptions, "font_style=", Draw_font_style_eq, 1);
963
+ rb_define_method(Class_PolaroidOptions, "font_weight=", Draw_font_weight_eq, 1);
964
+ rb_define_method(Class_PolaroidOptions, "gravity=", Draw_gravity_eq, 1);
965
+ rb_define_method(Class_PolaroidOptions, "pointsize=", Draw_pointsize_eq, 1);
966
+ rb_define_method(Class_PolaroidOptions, "stroke=", Draw_stroke_eq, 1);
967
+ rb_define_method(Class_PolaroidOptions, "stroke_pattern=", Draw_stroke_pattern_eq, 1);
968
+ rb_define_method(Class_PolaroidOptions, "stroke_width=", Draw_stroke_width_eq, 1);
969
+ rb_define_method(Class_PolaroidOptions, "text_antialias=", Draw_text_antialias_eq, 1);
970
+ rb_define_method(Class_PolaroidOptions, "undercolor=", Draw_undercolor_eq, 1);
780
971
 
781
972
 
782
973
  /*-----------------------------------------------------------------------*/
@@ -818,13 +1009,13 @@ Init_RMagick2(void)
818
1009
 
819
1010
 
820
1011
  // Miscellaneous fixed-point constants
821
- DEF_CONST(MaxRGB);
822
1012
  DEF_CONST(QuantumRange);
823
- DEF_CONST(QuantumDepth);
824
- DEF_CONST(OpaqueOpacity);
825
- DEF_CONST(TransparentOpacity);
1013
+ DEF_CONST(MAGICKCORE_QUANTUM_DEPTH);
1014
+ DEF_CONSTV(OpaqueAlpha, QuantumRange);
1015
+ DEF_CONSTV(TransparentAlpha, 0);
826
1016
 
827
1017
  version_constants();
1018
+ features_constant();
828
1019
 
829
1020
  /*-----------------------------------------------------------------------*/
830
1021
  /* Class Magick::Enum */
@@ -841,6 +1032,7 @@ Init_RMagick2(void)
841
1032
  rb_define_method(Class_Enum, "to_i", Enum_to_i, 0);
842
1033
  rb_define_method(Class_Enum, "<=>", Enum_spaceship, 1);
843
1034
  rb_define_method(Class_Enum, "===", Enum_case_eq, 1);
1035
+ rb_define_method(Class_Enum, "|", Enum_bitwise_or, 1);
844
1036
 
845
1037
  // AlignType constants
846
1038
  DEF_ENUM(AlignType)
@@ -850,22 +1042,22 @@ Init_RMagick2(void)
850
1042
  ENUMERATOR(RightAlign)
851
1043
  END_ENUM
852
1044
 
853
- // AlphaChannelType constants
854
- DEF_ENUM(AlphaChannelType)
1045
+ // AlphaChannelOption constants
1046
+ DEF_ENUM(AlphaChannelOption)
855
1047
  ENUMERATOR(UndefinedAlphaChannel)
856
1048
  ENUMERATOR(ActivateAlphaChannel)
857
1049
  ENUMERATOR(DeactivateAlphaChannel)
858
- ENUMERATOR(ResetAlphaChannel) /* deprecated */
859
1050
  ENUMERATOR(SetAlphaChannel)
860
- #if defined(HAVE_ENUM_COPYALPHACHANNEL)
1051
+ ENUMERATOR(RemoveAlphaChannel)
861
1052
  ENUMERATOR(CopyAlphaChannel)
862
1053
  ENUMERATOR(ExtractAlphaChannel)
863
1054
  ENUMERATOR(OpaqueAlphaChannel)
864
1055
  ENUMERATOR(ShapeAlphaChannel)
865
1056
  ENUMERATOR(TransparentAlphaChannel)
866
- #endif
867
- #if defined(HAVE_ENUM_BACKGROUNDALPHACHANNEL)
868
1057
  ENUMERATOR(BackgroundAlphaChannel)
1058
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1059
+ ENUMERATOR(AssociateAlphaChannel)
1060
+ ENUMERATOR(DisassociateAlphaChannel)
869
1061
  #endif
870
1062
  END_ENUM
871
1063
 
@@ -886,36 +1078,15 @@ Init_RMagick2(void)
886
1078
  ENUMERATOR(BlueChannel)
887
1079
  ENUMERATOR(YellowChannel)
888
1080
  ENUMERATOR(OpacityChannel)
889
-
890
-
891
1081
  ENUMERATOR(BlackChannel)
892
- ENUMERATOR(MatteChannel)
893
1082
  ENUMERATOR(IndexChannel)
894
1083
  ENUMERATOR(GrayChannel)
895
1084
  ENUMERATOR(AllChannels)
896
-
897
- // Define alternate names for ChannelType enums for Image::Info#channel=
898
- // AlphaChannel == OpacityChannel
899
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("AlphaChannel")), INT2FIX(OpacityChannel));
900
- rb_define_const(Module_Magick, "AlphaChannel", _enum);
901
-
902
- // DefaultChannels
903
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("DefaultChannels")), INT2FIX(0xff & ~OpacityChannel));
904
- rb_define_const(Module_Magick, "DefaultChannels", _enum);
905
-
906
- // HueChannel == RedChannel
907
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("HueChannel")), INT2FIX(RedChannel));
908
- rb_define_const(Module_Magick, "HueChannel", _enum);
909
-
910
- // LuminosityChannel = BlueChannel
911
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("LuminosityChannel")), INT2FIX(BlueChannel));
912
- rb_define_const(Module_Magick, "LuminosityChannel", _enum);
913
-
914
- // SaturationChannel = GreenChannel
915
- _enum = rm_enum_new(Class_ChannelType, ID2SYM(rb_intern("SaturationChannel")), INT2FIX(GreenChannel));
916
- rb_define_const(Module_Magick, "SaturationChannel", _enum);
917
-
918
-
1085
+ ENUMERATORV(AlphaChannel, OpacityChannel)
1086
+ ENUMERATORV(DefaultChannels, 0xff & ~OpacityChannel)
1087
+ ENUMERATORV(HueChannel, RedChannel)
1088
+ ENUMERATORV(LuminosityChannel, BlueChannel)
1089
+ ENUMERATORV(SaturationChannel, GreenChannel)
919
1090
  END_ENUM
920
1091
 
921
1092
  // ClassType constants
@@ -939,32 +1110,46 @@ Init_RMagick2(void)
939
1110
  ENUMERATOR(YPbPrColorspace)
940
1111
  ENUMERATOR(YUVColorspace)
941
1112
  ENUMERATOR(CMYKColorspace)
942
- rb_define_const(Module_Magick, "SRGBColorspace"
943
- , rm_enum_new(Class_ColorspaceType
944
- , ID2SYM(rb_intern("SRGBColorspace"))
945
- , INT2FIX(sRGBColorspace)));
1113
+ ENUMERATORV(SRGBColorspace, sRGBColorspace)
946
1114
  ENUMERATOR(HSLColorspace)
947
1115
  ENUMERATOR(HWBColorspace)
948
1116
  ENUMERATOR(HSBColorspace)
949
- ENUMERATOR(LABColorspace)
950
- ENUMERATOR(Rec601LumaColorspace)
1117
+ ENUMERATOR(LabColorspace)
951
1118
  ENUMERATOR(Rec601YCbCrColorspace)
952
- ENUMERATOR(Rec709LumaColorspace)
953
1119
  ENUMERATOR(Rec709YCbCrColorspace)
954
1120
  ENUMERATOR(LogColorspace)
955
1121
  ENUMERATOR(CMYColorspace)
1122
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1123
+ ENUMERATOR(LuvColorspace)
1124
+ ENUMERATOR(HCLColorspace)
1125
+ ENUMERATOR(LCHColorspace)
1126
+ ENUMERATOR(LMSColorspace)
1127
+ ENUMERATOR(LCHabColorspace)
1128
+ ENUMERATOR(LCHuvColorspace)
1129
+ ENUMERATORV(ScRGBColorspace, scRGBColorspace)
1130
+ ENUMERATOR(HSIColorspace)
1131
+ ENUMERATOR(HSVColorspace)
1132
+ ENUMERATOR(HCLpColorspace)
1133
+ ENUMERATOR(YDbDrColorspace)
1134
+ ENUMERATORV(XyYColorspace, xyYColorspace)
1135
+ #endif
1136
+ #if defined(IMAGEMAGICK_7)
1137
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_7_0_8)
1138
+ ENUMERATOR(LinearGRAYColorspace)
1139
+ #endif
1140
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_7_0_10)
1141
+ ENUMERATOR(JzazbzColorspace)
1142
+ #endif
1143
+ #elif defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_9_10)
1144
+ ENUMERATOR(LinearGRAYColorspace)
1145
+ #endif
956
1146
  END_ENUM
957
1147
 
958
1148
  // ComplianceType constants are defined as enums but used as bit flags
959
1149
  DEF_ENUM(ComplianceType)
960
1150
  ENUMERATOR(UndefinedCompliance)
961
-
962
1151
  // AllCompliance is 0xffff, not too useful for us!
963
- rb_define_const(Module_Magick, "AllCompliance"
964
- , rm_enum_new(Class_ComplianceType
965
- , ID2SYM(rb_intern("AllCompliance"))
966
- , INT2FIX(SVGCompliance|X11Compliance|XPMCompliance)));
967
-
1152
+ ENUMERATORV(AllCompliance, SVGCompliance|X11Compliance|XPMCompliance)
968
1153
  ENUMERATOR(NoCompliance)
969
1154
  ENUMERATOR(SVGCompliance)
970
1155
  ENUMERATOR(X11Compliance)
@@ -973,14 +1158,9 @@ Init_RMagick2(void)
973
1158
 
974
1159
  // CompositeOperator constants
975
1160
  DEF_ENUM(CompositeOperator)
976
- ENUMERATOR(UndefinedCompositeOp)
977
- ENUMERATOR(NoCompositeOp)
978
- ENUMERATOR(AddCompositeOp)
979
1161
  ENUMERATOR(AtopCompositeOp)
980
1162
  ENUMERATOR(BlendCompositeOp)
981
- #if defined(HAVE_ENUM_BLURCOMPOSITEOP)
982
1163
  ENUMERATOR(BlurCompositeOp)
983
- #endif
984
1164
  ENUMERATOR(BumpmapCompositeOp)
985
1165
  ENUMERATOR(ChangeMaskCompositeOp)
986
1166
  ENUMERATOR(ClearCompositeOp)
@@ -993,14 +1173,13 @@ Init_RMagick2(void)
993
1173
  ENUMERATOR(CopyCyanCompositeOp)
994
1174
  ENUMERATOR(CopyGreenCompositeOp)
995
1175
  ENUMERATOR(CopyMagentaCompositeOp)
996
- ENUMERATOR(CopyOpacityCompositeOp)
997
1176
  ENUMERATOR(CopyRedCompositeOp)
998
1177
  ENUMERATOR(CopyYellowCompositeOp)
999
1178
  ENUMERATOR(DarkenCompositeOp)
1000
- #if defined(HAVE_ENUM_DISTORTCOMPOSITEOP)
1179
+ ENUMERATOR(DarkenIntensityCompositeOp)
1001
1180
  ENUMERATOR(DistortCompositeOp)
1002
- #endif
1003
- ENUMERATOR(DivideCompositeOp)
1181
+ ENUMERATOR(DivideDstCompositeOp)
1182
+ ENUMERATOR(DivideSrcCompositeOp)
1004
1183
  ENUMERATOR(DstAtopCompositeOp)
1005
1184
  ENUMERATOR(DstCompositeOp)
1006
1185
  ENUMERATOR(DstInCompositeOp)
@@ -1014,26 +1193,24 @@ Init_RMagick2(void)
1014
1193
  ENUMERATOR(HueCompositeOp)
1015
1194
  ENUMERATOR(InCompositeOp)
1016
1195
  ENUMERATOR(LightenCompositeOp)
1017
- #if defined(HAVE_ENUM_LINEARBURNCOMPOSITEOP)
1196
+ ENUMERATOR(LightenIntensityCompositeOp)
1018
1197
  ENUMERATOR(LinearBurnCompositeOp)
1019
- #endif
1020
- #if defined(HAVE_ENUM_LINEARDODGECOMPOSITEOP)
1021
1198
  ENUMERATOR(LinearDodgeCompositeOp)
1022
- #endif
1023
1199
  ENUMERATOR(LinearLightCompositeOp)
1024
1200
  ENUMERATOR(LuminizeCompositeOp)
1025
- ENUMERATOR(MinusCompositeOp)
1201
+ ENUMERATOR(MathematicsCompositeOp)
1202
+ ENUMERATOR(MinusDstCompositeOp)
1203
+ ENUMERATOR(MinusSrcCompositeOp)
1026
1204
  ENUMERATOR(ModulateCompositeOp)
1205
+ ENUMERATOR(ModulusAddCompositeOp)
1206
+ ENUMERATOR(ModulusSubtractCompositeOp)
1027
1207
  ENUMERATOR(MultiplyCompositeOp)
1208
+ ENUMERATOR(NoCompositeOp)
1028
1209
  ENUMERATOR(OutCompositeOp)
1029
1210
  ENUMERATOR(OverCompositeOp)
1030
1211
  ENUMERATOR(OverlayCompositeOp)
1031
- #if defined(HAVE_ENUM_PEGTOPLIGHTCOMPOSITEOP)
1032
1212
  ENUMERATOR(PegtopLightCompositeOp)
1033
- #endif
1034
- #if defined(HAVE_ENUM_PINLIGHTCOMPOSITEOP)
1035
1213
  ENUMERATOR(PinLightCompositeOp)
1036
- #endif
1037
1214
  ENUMERATOR(PlusCompositeOp)
1038
1215
  ENUMERATOR(ReplaceCompositeOp) // synonym for CopyCompositeOp
1039
1216
  ENUMERATOR(SaturateCompositeOp)
@@ -1044,51 +1221,44 @@ Init_RMagick2(void)
1044
1221
  ENUMERATOR(SrcInCompositeOp)
1045
1222
  ENUMERATOR(SrcOutCompositeOp)
1046
1223
  ENUMERATOR(SrcOverCompositeOp)
1047
- ENUMERATOR(SubtractCompositeOp)
1048
1224
  ENUMERATOR(ThresholdCompositeOp)
1049
- #if defined(HAVE_ENUM_VIVIDLIGHTCOMPOSITEOP)
1225
+ ENUMERATOR(UndefinedCompositeOp)
1050
1226
  ENUMERATOR(VividLightCompositeOp)
1051
- #endif
1052
1227
  ENUMERATOR(XorCompositeOp)
1228
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1229
+ ENUMERATOR(HardMixCompositeOp)
1230
+ #endif
1231
+ #if defined(IMAGEMAGICK_7)
1232
+ ENUMERATOR(CopyAlphaCompositeOp)
1233
+ #else
1234
+ ENUMERATORV(CopyAlphaCompositeOp, CopyOpacityCompositeOp)
1235
+ #endif
1053
1236
  END_ENUM
1054
1237
 
1055
1238
  // CompressionType constants
1056
1239
  DEF_ENUM(CompressionType)
1057
1240
  ENUMERATOR(UndefinedCompression)
1058
1241
  ENUMERATOR(NoCompression)
1059
- #if defined(HAVE_ENUM_B44COMPRESSION)
1060
1242
  ENUMERATOR(B44Compression)
1061
- #endif
1062
- #if defined(HAVE_ENUM_B44ACOMPRESSION)
1063
1243
  ENUMERATOR(B44ACompression)
1064
- #endif
1065
1244
  ENUMERATOR(BZipCompression)
1066
- #if defined(HAVE_ENUM_DXT1COMPRESSION)
1067
1245
  ENUMERATOR(DXT1Compression)
1068
- #endif
1069
- #if defined(HAVE_ENUM_DXT3COMPRESSION)
1070
1246
  ENUMERATOR(DXT3Compression)
1071
- #endif
1072
- #if defined(HAVE_ENUM_DXT5COMPRESSION)
1073
1247
  ENUMERATOR(DXT5Compression)
1074
- #endif
1075
1248
  ENUMERATOR(FaxCompression)
1076
1249
  ENUMERATOR(Group4Compression)
1077
1250
  ENUMERATOR(JPEGCompression)
1078
1251
  ENUMERATOR(JPEG2000Compression)
1079
1252
  ENUMERATOR(LosslessJPEGCompression)
1080
1253
  ENUMERATOR(LZWCompression)
1081
- #if defined(HAVE_ENUM_PIZCOMPRESSION)
1082
1254
  ENUMERATOR(PizCompression)
1083
- #endif
1084
- #if defined(HAVE_ENUM_PXR24COMPRESSION)
1085
1255
  ENUMERATOR(Pxr24Compression)
1086
- #endif
1087
1256
  ENUMERATOR(RLECompression)
1088
1257
  ENUMERATOR(ZipCompression)
1089
- #if defined(HAVE_ENUM_ZIPSCOMPRESSION)
1090
1258
  ENUMERATOR(ZipSCompression)
1091
- #endif
1259
+ ENUMERATOR(LZMACompression)
1260
+ ENUMERATOR(JBIG1Compression)
1261
+ ENUMERATOR(JBIG2Compression)
1092
1262
  END_ENUM
1093
1263
 
1094
1264
  // DecorationType constants
@@ -1107,52 +1277,36 @@ Init_RMagick2(void)
1107
1277
  ENUMERATOR(PreviousDispose)
1108
1278
  END_ENUM
1109
1279
 
1110
- // DistortImage "method" argument values
1111
- DEF_ENUM(DistortImageMethod)
1280
+ // DistortMethod constants
1281
+ DEF_ENUM(DistortMethod)
1112
1282
  ENUMERATOR(UndefinedDistortion)
1113
1283
  ENUMERATOR(AffineDistortion)
1114
1284
  ENUMERATOR(AffineProjectionDistortion)
1115
1285
  ENUMERATOR(ArcDistortion)
1116
- #if defined(HAVE_ENUM_POLARDISTORTION)
1117
1286
  ENUMERATOR(PolarDistortion)
1118
- #endif
1119
- #if defined(HAVE_ENUM_DEPOLARDISTORTION)
1120
1287
  ENUMERATOR(DePolarDistortion)
1121
- #endif
1122
- #if defined(HAVE_ENUM_BARRELDISTORTION)
1123
1288
  ENUMERATOR(BarrelDistortion)
1124
- #endif
1125
1289
  ENUMERATOR(BilinearDistortion)
1126
- #if defined(HAVE_ENUM_BILINEARFORWARDDISTORTION)
1127
1290
  ENUMERATOR(BilinearForwardDistortion)
1128
- #endif
1129
- #if defined(HAVE_ENUM_BILINEARREVERSEDISTORTION)
1130
1291
  ENUMERATOR(BilinearReverseDistortion)
1131
- #endif
1132
1292
  ENUMERATOR(PerspectiveDistortion)
1133
1293
  ENUMERATOR(PerspectiveProjectionDistortion)
1134
- #if defined(HAVE_ENUM_POLYNOMIALDISTORTION)
1135
1294
  ENUMERATOR(PolynomialDistortion)
1136
- #endif
1137
1295
  ENUMERATOR(ScaleRotateTranslateDistortion)
1138
- #if defined(HAVE_ENUM_SHEPARDSDISTORTION)
1139
1296
  ENUMERATOR(ShepardsDistortion)
1140
- #endif
1141
- #if defined(HAVE_ENUM_BARRELINVERSEDISTORTION)
1142
1297
  ENUMERATOR(BarrelInverseDistortion)
1143
- #endif
1298
+ ENUMERATOR(Cylinder2PlaneDistortion)
1299
+ ENUMERATOR(Plane2CylinderDistortion)
1300
+ ENUMERATOR(ResizeDistortion)
1301
+ ENUMERATOR(SentinelDistortion)
1144
1302
  END_ENUM
1145
1303
 
1146
- #if defined(HAVE_TYPE_DITHERMETHOD)
1147
1304
  DEF_ENUM(DitherMethod)
1148
1305
  ENUMERATOR(UndefinedDitherMethod)
1149
- #if defined(HAVE_ENUM_NODITHERMETHOD)
1150
1306
  ENUMERATOR(NoDitherMethod)
1151
- #endif
1152
1307
  ENUMERATOR(RiemersmaDitherMethod)
1153
1308
  ENUMERATOR(FloydSteinbergDitherMethod)
1154
1309
  END_ENUM
1155
- #endif
1156
1310
 
1157
1311
  DEF_ENUM(EndianType)
1158
1312
  ENUMERATOR(UndefinedEndian)
@@ -1160,8 +1314,8 @@ Init_RMagick2(void)
1160
1314
  ENUMERATOR(MSBEndian)
1161
1315
  END_ENUM
1162
1316
 
1163
- // FilterTypes constants
1164
- DEF_ENUM(FilterTypes)
1317
+ // FilterType constants
1318
+ DEF_ENUM(FilterType)
1165
1319
  ENUMERATOR(UndefinedFilter)
1166
1320
  ENUMERATOR(PointFilter)
1167
1321
  ENUMERATOR(BoxFilter)
@@ -1178,23 +1332,23 @@ Init_RMagick2(void)
1178
1332
  ENUMERATOR(LanczosFilter)
1179
1333
  ENUMERATOR(BesselFilter)
1180
1334
  ENUMERATOR(SincFilter)
1181
- #if defined(HAVE_ENUM_KAISERFILTER)
1182
1335
  ENUMERATOR(KaiserFilter)
1183
- #endif
1184
- #if defined(HAVE_ENUM_WELSHFILTER)
1185
1336
  ENUMERATOR(WelshFilter)
1186
- #endif
1187
- #if defined(HAVE_ENUM_PARZENFILTER)
1188
1337
  ENUMERATOR(ParzenFilter)
1189
- #endif
1190
- #if defined(HAVE_ENUM_LAGRANGEFILTER)
1191
1338
  ENUMERATOR(LagrangeFilter)
1192
- #endif
1193
- #if defined(HAVE_ENUM_BOHMANFILTER)
1194
1339
  ENUMERATOR(BohmanFilter)
1195
- #endif
1196
- #if defined(HAVE_ENUM_BARTLETTFILTER)
1197
1340
  ENUMERATOR(BartlettFilter)
1341
+ ENUMERATOR(JincFilter)
1342
+ ENUMERATOR(SincFastFilter)
1343
+ ENUMERATOR(LanczosSharpFilter)
1344
+ ENUMERATOR(Lanczos2Filter)
1345
+ ENUMERATOR(Lanczos2SharpFilter)
1346
+ ENUMERATOR(RobidouxFilter)
1347
+ ENUMERATOR(RobidouxSharpFilter)
1348
+ ENUMERATOR(CosineFilter)
1349
+ ENUMERATOR(SplineFilter)
1350
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1351
+ ENUMERATOR(LanczosRadiusFilter)
1198
1352
  #endif
1199
1353
  END_ENUM
1200
1354
 
@@ -1211,7 +1365,6 @@ Init_RMagick2(void)
1211
1365
  ENUMERATOR(SouthWestGravity)
1212
1366
  ENUMERATOR(SouthGravity)
1213
1367
  ENUMERATOR(SouthEastGravity)
1214
- ENUMERATOR(StaticGravity)
1215
1368
  END_ENUM
1216
1369
 
1217
1370
  // ImageType constants
@@ -1219,15 +1372,23 @@ Init_RMagick2(void)
1219
1372
  ENUMERATOR(UndefinedType)
1220
1373
  ENUMERATOR(BilevelType)
1221
1374
  ENUMERATOR(GrayscaleType)
1222
- ENUMERATOR(GrayscaleMatteType)
1223
1375
  ENUMERATOR(PaletteType)
1224
- ENUMERATOR(PaletteMatteType)
1225
1376
  ENUMERATOR(TrueColorType)
1226
- ENUMERATOR(TrueColorMatteType)
1227
1377
  ENUMERATOR(ColorSeparationType)
1228
- ENUMERATOR(ColorSeparationMatteType)
1229
1378
  ENUMERATOR(OptimizeType)
1230
- ENUMERATOR(PaletteBilevelMatteType)
1379
+ #if defined(IMAGEMAGICK_7)
1380
+ ENUMERATOR(GrayscaleAlphaType)
1381
+ ENUMERATOR(PaletteAlphaType)
1382
+ ENUMERATOR(TrueColorAlphaType)
1383
+ ENUMERATOR(ColorSeparationAlphaType)
1384
+ ENUMERATOR(PaletteBilevelAlphaType)
1385
+ #else
1386
+ ENUMERATORV(GrayscaleAlphaType, GrayscaleMatteType)
1387
+ ENUMERATORV(PaletteAlphaType, PaletteMatteType)
1388
+ ENUMERATORV(TrueColorAlphaType, TrueColorMatteType)
1389
+ ENUMERATORV(ColorSeparationAlphaType, ColorSeparationMatteType)
1390
+ ENUMERATORV(PaletteBilevelAlphaType, PaletteBilevelMatteType)
1391
+ #endif
1231
1392
  END_ENUM
1232
1393
 
1233
1394
  // InterlaceType constants
@@ -1242,39 +1403,15 @@ Init_RMagick2(void)
1242
1403
  ENUMERATOR(PNGInterlace)
1243
1404
  END_ENUM
1244
1405
 
1245
- DEF_ENUM(InterpolatePixelMethod)
1246
- ENUMERATOR(UndefinedInterpolatePixel)
1247
- ENUMERATOR(AverageInterpolatePixel)
1248
- ENUMERATOR(BicubicInterpolatePixel)
1249
- ENUMERATOR(BilinearInterpolatePixel)
1250
- ENUMERATOR(FilterInterpolatePixel)
1251
- ENUMERATOR(IntegerInterpolatePixel)
1252
- ENUMERATOR(MeshInterpolatePixel)
1253
- ENUMERATOR(NearestNeighborInterpolatePixel)
1254
- #if defined(HAVE_SPLINEINTERPOLATEPIXEL)
1255
- ENUMERATOR(SplineInterpolatePixel)
1256
- #endif
1257
- END_ENUM
1258
-
1259
- #if defined(HAVE_TYPE_MAGICKFUNCTION)
1260
1406
  DEF_ENUM(MagickFunction)
1261
1407
  ENUMERATOR(UndefinedFunction)
1262
1408
  ENUMERATOR(PolynomialFunction)
1263
1409
  ENUMERATOR(SinusoidFunction)
1264
- #if defined(HAVE_ENUM_ARCSINFUNCTION)
1265
1410
  ENUMERATOR(ArcsinFunction)
1266
- #endif
1267
- #if defined(HAVE_ENUM_ARCTANFUNCTION)
1268
1411
  ENUMERATOR(ArctanFunction)
1269
- #endif
1270
1412
  END_ENUM
1271
- #endif
1272
1413
 
1273
- #if defined(HAVE_TYPE_IMAGELAYERMETHOD)
1274
- DEF_ENUM(ImageLayerMethod)
1275
- #else
1276
- DEF_ENUM(MagickLayerMethod)
1277
- #endif
1414
+ DEF_ENUM(LayerMethod)
1278
1415
  ENUMERATOR(UndefinedLayer)
1279
1416
  ENUMERATOR(CompareAnyLayer)
1280
1417
  ENUMERATOR(CompareClearLayer)
@@ -1284,35 +1421,36 @@ Init_RMagick2(void)
1284
1421
  ENUMERATOR(CoalesceLayer)
1285
1422
  ENUMERATOR(DisposeLayer)
1286
1423
  ENUMERATOR(OptimizeTransLayer)
1287
- #if defined(HAVE_ENUM_OPTIMIZEIMAGELAYER)
1288
1424
  ENUMERATOR(OptimizeImageLayer)
1289
- #endif
1290
1425
  ENUMERATOR(RemoveDupsLayer)
1291
1426
  ENUMERATOR(RemoveZeroLayer)
1292
1427
  ENUMERATOR(CompositeLayer)
1293
- #if defined(HAVE_ENUM_MERGELAYER)
1294
1428
  ENUMERATOR(MergeLayer)
1295
- #endif
1296
- #if defined(HAVE_ENUM_MOSAICLAYER)
1297
1429
  ENUMERATOR(MosaicLayer)
1298
- #endif
1299
- #if defined(HAVE_ENUM_FLATTENLAYER)
1300
1430
  ENUMERATOR(FlattenLayer)
1301
- #endif
1302
- #if defined(HAVE_ENUM_TRIMBOUNDSLAYER)
1303
1431
  ENUMERATOR(TrimBoundsLayer)
1304
- #endif
1305
1432
  END_ENUM
1306
1433
 
1307
1434
  DEF_ENUM(MetricType)
1308
- ENUMERATOR(UndefinedMetric)
1309
1435
  ENUMERATOR(AbsoluteErrorMetric)
1310
1436
  ENUMERATOR(MeanAbsoluteErrorMetric)
1311
- ENUMERATOR(MeanErrorPerPixelMetric)
1312
1437
  ENUMERATOR(MeanSquaredErrorMetric)
1313
1438
  ENUMERATOR(PeakAbsoluteErrorMetric)
1314
- ENUMERATOR(PeakSignalToNoiseRatioMetric)
1315
1439
  ENUMERATOR(RootMeanSquaredErrorMetric)
1440
+ ENUMERATOR(NormalizedCrossCorrelationErrorMetric)
1441
+ ENUMERATOR(FuzzErrorMetric)
1442
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1443
+ ENUMERATOR(PerceptualHashErrorMetric)
1444
+ #endif
1445
+ #if defined(IMAGEMAGICK_7)
1446
+ ENUMERATOR(UndefinedErrorMetric)
1447
+ ENUMERATOR(MeanErrorPerPixelErrorMetric)
1448
+ ENUMERATOR(PeakSignalToNoiseRatioErrorMetric)
1449
+ #else
1450
+ ENUMERATORV(UndefinedErrorMetric, UndefinedMetric)
1451
+ ENUMERATORV(MeanErrorPerPixelErrorMetric, MeanErrorPerPixelMetric)
1452
+ ENUMERATORV(PeakSignalToNoiseRatioErrorMetric, PeakSignalToNoiseRatioMetric)
1453
+ #endif
1316
1454
  END_ENUM
1317
1455
 
1318
1456
  // NoiseType constants
@@ -1348,6 +1486,26 @@ Init_RMagick2(void)
1348
1486
  ENUMERATOR(ResetMethod)
1349
1487
  END_ENUM
1350
1488
 
1489
+ // PixelInterpolateMethod constants
1490
+ DEF_ENUM(PixelInterpolateMethod)
1491
+ ENUMERATOR(UndefinedInterpolatePixel)
1492
+ ENUMERATOR(AverageInterpolatePixel)
1493
+ ENUMERATOR(BilinearInterpolatePixel)
1494
+ ENUMERATOR(IntegerInterpolatePixel)
1495
+ ENUMERATOR(MeshInterpolatePixel)
1496
+ #if defined(IMAGEMAGICK_7)
1497
+ ENUMERATOR(NearestInterpolatePixel)
1498
+ #else
1499
+ ENUMERATORV(NearestInterpolatePixel, NearestNeighborInterpolatePixel)
1500
+ #endif
1501
+ ENUMERATOR(SplineInterpolatePixel)
1502
+ ENUMERATOR(Average9InterpolatePixel)
1503
+ ENUMERATOR(Average16InterpolatePixel)
1504
+ ENUMERATOR(BlendInterpolatePixel)
1505
+ ENUMERATOR(BackgroundInterpolatePixel)
1506
+ ENUMERATOR(CatromInterpolatePixel)
1507
+ END_ENUM
1508
+
1351
1509
  // PreviewType
1352
1510
  DEF_ENUM(PreviewType)
1353
1511
  ENUMERATOR(UndefinedPreview)
@@ -1395,47 +1553,28 @@ Init_RMagick2(void)
1395
1553
  ENUMERATOR(RShiftQuantumOperator)
1396
1554
  ENUMERATOR(SubtractQuantumOperator)
1397
1555
  ENUMERATOR(XorQuantumOperator)
1398
- #if defined(HAVE_ENUM_POWEVALUATEOPERATOR)
1399
1556
  ENUMERATOR(PowQuantumOperator)
1400
- #endif
1401
- #if defined(HAVE_ENUM_LOGEVALUATEOPERATOR)
1402
1557
  ENUMERATOR(LogQuantumOperator)
1403
- #endif
1404
- #if defined(HAVE_ENUM_THRESHOLDEVALUATEOPERATOR)
1405
1558
  ENUMERATOR(ThresholdQuantumOperator)
1406
- #endif
1407
- #if defined(HAVE_ENUM_THRESHOLDBLACKEVALUATEOPERATOR)
1408
1559
  ENUMERATOR(ThresholdBlackQuantumOperator)
1409
- #endif
1410
- #if defined(HAVE_ENUM_THRESHOLDWHITEEVALUATEOPERATOR)
1411
1560
  ENUMERATOR(ThresholdWhiteQuantumOperator)
1412
- #endif
1413
- #if defined(HAVE_ENUM_GAUSSIANNOISEEVALUATEOPERATOR)
1414
1561
  ENUMERATOR(GaussianNoiseQuantumOperator)
1415
- #endif
1416
- #if defined(HAVE_ENUM_IMPULSENOISEEVALUATEOPERATOR)
1417
1562
  ENUMERATOR(ImpulseNoiseQuantumOperator)
1418
- #endif
1419
- #if defined(HAVE_ENUM_LAPLACIANNOISEEVALUATEOPERATOR)
1420
1563
  ENUMERATOR(LaplacianNoiseQuantumOperator)
1421
- #endif
1422
- #if defined(HAVE_ENUM_MULTIPLICATIVENOISEEVALUATEOPERATOR)
1423
1564
  ENUMERATOR(MultiplicativeNoiseQuantumOperator)
1424
- #endif
1425
- #if defined(HAVE_ENUM_POISSONNOISEEVALUATEOPERATOR)
1426
1565
  ENUMERATOR(PoissonNoiseQuantumOperator)
1427
- #endif
1428
- #if defined(HAVE_ENUM_UNIFORMNOISEEVALUATEOPERATOR)
1429
1566
  ENUMERATOR(UniformNoiseQuantumOperator)
1430
- #endif
1431
- #if defined(HAVE_ENUM_COSINEEVALUATEOPERATOR)
1432
1567
  ENUMERATOR(CosineQuantumOperator)
1433
- #endif
1434
- #if defined(HAVE_ENUM_SINEEVALUATEOPERATOR)
1568
+ ENUMERATOR(SetQuantumOperator)
1435
1569
  ENUMERATOR(SineQuantumOperator)
1436
- #endif
1437
- #if defined(HAVE_ENUM_ADDMODULUSEVALUATEOPERATOR)
1438
1570
  ENUMERATOR(AddModulusQuantumOperator)
1571
+ ENUMERATOR(MeanQuantumOperator)
1572
+ ENUMERATOR(AbsQuantumOperator)
1573
+ ENUMERATOR(ExponentialQuantumOperator)
1574
+ ENUMERATOR(MedianQuantumOperator)
1575
+ ENUMERATOR(SumQuantumOperator)
1576
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1577
+ ENUMERATOR(RootMeanSquareQuantumOperator)
1439
1578
  #endif
1440
1579
  END_ENUM
1441
1580
 
@@ -1455,7 +1594,6 @@ Init_RMagick2(void)
1455
1594
  ENUMERATOR(PixelsPerCentimeterResolution)
1456
1595
  END_ENUM
1457
1596
 
1458
- #if defined(HAVE_SPARSECOLORIMAGE)
1459
1597
  DEF_ENUM(SparseColorMethod)
1460
1598
  ENUMERATOR(UndefinedColorInterpolate)
1461
1599
  ENUMERATOR(BarycentricColorInterpolate)
@@ -1463,8 +1601,8 @@ Init_RMagick2(void)
1463
1601
  //ENUMERATOR(PolynomialColorInterpolate)
1464
1602
  ENUMERATOR(ShepardsColorInterpolate)
1465
1603
  ENUMERATOR(VoronoiColorInterpolate)
1604
+ ENUMERATOR(InverseColorInterpolate)
1466
1605
  END_ENUM
1467
- #endif
1468
1606
 
1469
1607
  // SpreadMethod
1470
1608
  DEF_ENUM(SpreadMethod)
@@ -1480,7 +1618,6 @@ Init_RMagick2(void)
1480
1618
  ENUMERATOR(CharPixel)
1481
1619
  ENUMERATOR(DoublePixel)
1482
1620
  ENUMERATOR(FloatPixel)
1483
- ENUMERATOR(IntegerPixel)
1484
1621
  ENUMERATOR(LongPixel)
1485
1622
  ENUMERATOR(QuantumPixel)
1486
1623
  ENUMERATOR(ShortPixel)
@@ -1518,26 +1655,15 @@ Init_RMagick2(void)
1518
1655
  ENUMERATOR(BackgroundVirtualPixelMethod)
1519
1656
  ENUMERATOR(DitherVirtualPixelMethod)
1520
1657
  ENUMERATOR(RandomVirtualPixelMethod)
1521
- ENUMERATOR(ConstantVirtualPixelMethod)
1522
1658
  ENUMERATOR(MaskVirtualPixelMethod)
1523
1659
  ENUMERATOR(BlackVirtualPixelMethod)
1524
1660
  ENUMERATOR(GrayVirtualPixelMethod)
1525
1661
  ENUMERATOR(WhiteVirtualPixelMethod)
1526
- #if defined(HAVE_ENUM_HORIZONTALTILEVIRTUALPIXELMETHOD)
1527
1662
  ENUMERATOR(HorizontalTileVirtualPixelMethod)
1528
- #endif
1529
- #if defined(HAVE_ENUM_VERTICALTILEVIRTUALPIXELMETHOD)
1530
1663
  ENUMERATOR(VerticalTileVirtualPixelMethod)
1531
- #endif
1532
- #if defined(HAVE_ENUM_HORIZONTALTILEEDGEVIRTUALPIXELMETHOD)
1533
1664
  ENUMERATOR(HorizontalTileEdgeVirtualPixelMethod)
1534
- #endif
1535
- #if defined(HAVE_ENUM_VERTICALTILEEDGEVIRTUALPIXELMETHOD)
1536
1665
  ENUMERATOR(VerticalTileEdgeVirtualPixelMethod)
1537
- #endif
1538
- #if defined(HAVE_ENUM_CHECKERTILEVIRTUALPIXELMETHOD)
1539
1666
  ENUMERATOR(CheckerTileVirtualPixelMethod)
1540
- #endif
1541
1667
  END_ENUM
1542
1668
  // WeightType constants
1543
1669
  DEF_ENUM(WeightType)
@@ -1548,6 +1674,108 @@ Init_RMagick2(void)
1548
1674
  ENUMERATOR(LighterWeight)
1549
1675
  END_ENUM
1550
1676
 
1677
+ // For KernelInfo scaling
1678
+ DEF_ENUM(GeometryFlags)
1679
+ ENUMERATOR(NoValue)
1680
+ ENUMERATOR(XValue)
1681
+ ENUMERATOR(XiValue)
1682
+ ENUMERATOR(YValue)
1683
+ ENUMERATOR(PsiValue)
1684
+ ENUMERATOR(WidthValue)
1685
+ ENUMERATOR(RhoValue)
1686
+ ENUMERATOR(HeightValue)
1687
+ ENUMERATOR(SigmaValue)
1688
+ ENUMERATOR(ChiValue)
1689
+ ENUMERATOR(XiNegative)
1690
+ ENUMERATOR(XNegative)
1691
+ ENUMERATOR(PsiNegative)
1692
+ ENUMERATOR(YNegative)
1693
+ ENUMERATOR(ChiNegative)
1694
+ ENUMERATOR(PercentValue)
1695
+ ENUMERATOR(AspectValue)
1696
+ ENUMERATOR(NormalizeValue)
1697
+ ENUMERATOR(LessValue)
1698
+ ENUMERATOR(GreaterValue)
1699
+ ENUMERATOR(MinimumValue)
1700
+ ENUMERATOR(CorrelateNormalizeValue)
1701
+ ENUMERATOR(AreaValue)
1702
+ ENUMERATOR(DecimalValue)
1703
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1704
+ ENUMERATOR(SeparatorValue)
1705
+ #endif
1706
+ ENUMERATOR(AllValues)
1707
+ END_ENUM
1708
+
1709
+ // Morphology methods
1710
+ DEF_ENUM(MorphologyMethod)
1711
+ ENUMERATOR(UndefinedMorphology)
1712
+ ENUMERATOR(ConvolveMorphology)
1713
+ ENUMERATOR(CorrelateMorphology)
1714
+ ENUMERATOR(ErodeMorphology)
1715
+ ENUMERATOR(DilateMorphology)
1716
+ ENUMERATOR(ErodeIntensityMorphology)
1717
+ ENUMERATOR(DilateIntensityMorphology)
1718
+ ENUMERATOR(DistanceMorphology)
1719
+ ENUMERATOR(OpenMorphology)
1720
+ ENUMERATOR(CloseMorphology)
1721
+ ENUMERATOR(OpenIntensityMorphology)
1722
+ ENUMERATOR(CloseIntensityMorphology)
1723
+ ENUMERATOR(SmoothMorphology)
1724
+ ENUMERATOR(EdgeInMorphology)
1725
+ ENUMERATOR(EdgeOutMorphology)
1726
+ ENUMERATOR(EdgeMorphology)
1727
+ ENUMERATOR(TopHatMorphology)
1728
+ ENUMERATOR(BottomHatMorphology)
1729
+ ENUMERATOR(HitAndMissMorphology)
1730
+ ENUMERATOR(ThinningMorphology)
1731
+ ENUMERATOR(ThickenMorphology)
1732
+ ENUMERATOR(VoronoiMorphology)
1733
+ ENUMERATOR(IterativeDistanceMorphology)
1734
+ END_ENUM
1735
+
1736
+ DEF_ENUM(KernelInfoType)
1737
+ ENUMERATOR(UndefinedKernel)
1738
+ ENUMERATOR(UnityKernel)
1739
+ ENUMERATOR(GaussianKernel)
1740
+ ENUMERATOR(DoGKernel)
1741
+ ENUMERATOR(LoGKernel)
1742
+ ENUMERATOR(BlurKernel)
1743
+ ENUMERATOR(CometKernel)
1744
+ ENUMERATOR(LaplacianKernel)
1745
+ ENUMERATOR(SobelKernel)
1746
+ ENUMERATOR(FreiChenKernel)
1747
+ ENUMERATOR(RobertsKernel)
1748
+ ENUMERATOR(PrewittKernel)
1749
+ ENUMERATOR(CompassKernel)
1750
+ ENUMERATOR(KirschKernel)
1751
+ ENUMERATOR(DiamondKernel)
1752
+ ENUMERATOR(SquareKernel)
1753
+ ENUMERATOR(RectangleKernel)
1754
+ ENUMERATOR(OctagonKernel)
1755
+ ENUMERATOR(DiskKernel)
1756
+ ENUMERATOR(PlusKernel)
1757
+ ENUMERATOR(CrossKernel)
1758
+ ENUMERATOR(RingKernel)
1759
+ ENUMERATOR(PeaksKernel)
1760
+ ENUMERATOR(EdgesKernel)
1761
+ ENUMERATOR(CornersKernel)
1762
+ ENUMERATOR(DiagonalsKernel)
1763
+ ENUMERATOR(LineEndsKernel)
1764
+ ENUMERATOR(LineJunctionsKernel)
1765
+ ENUMERATOR(RidgesKernel)
1766
+ ENUMERATOR(ConvexHullKernel)
1767
+ ENUMERATOR(ThinSEKernel)
1768
+ ENUMERATOR(SkeletonKernel)
1769
+ ENUMERATOR(ChebyshevKernel)
1770
+ ENUMERATOR(ManhattanKernel)
1771
+ ENUMERATOR(OctagonalKernel)
1772
+ ENUMERATOR(EuclideanKernel)
1773
+ ENUMERATOR(UserDefinedKernel)
1774
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
1775
+ ENUMERATOR(BinomialKernel)
1776
+ #endif
1777
+ END_ENUM
1778
+
1551
1779
  /*-----------------------------------------------------------------------*/
1552
1780
  /* Struct classes */
1553
1781
  /*-----------------------------------------------------------------------*/
@@ -1556,56 +1784,52 @@ Init_RMagick2(void)
1556
1784
  // namespace. The only way to use these classes is via the Magick:: namespace.
1557
1785
 
1558
1786
  // Magick::AffineMatrix
1559
- Class_AffineMatrix = rb_struct_define(NULL, "sx", "rx", "ry", "sy", "tx", "ty", NULL);
1560
- rb_define_const(Module_Magick, "AffineMatrix", Class_AffineMatrix);
1787
+ Class_AffineMatrix = rb_struct_define_under(Module_Magick, "AffineMatrix",
1788
+ "sx", "rx", "ry", "sy", "tx", "ty", NULL);
1561
1789
 
1562
1790
  // Magick::Primary
1563
- Class_Primary = rb_struct_define(NULL, "x", "y", "z", NULL);
1791
+ Class_Primary = rb_struct_define_under(Module_Magick, "Primary",
1792
+ "x", "y", "z", NULL);
1564
1793
  rb_define_method(Class_Primary, "to_s", PrimaryInfo_to_s, 0);
1565
- rb_define_const(Module_Magick, "Primary", Class_Primary);
1566
1794
 
1567
1795
  // Magick::Chromaticity
1568
- Class_Chromaticity = rb_struct_define(NULL
1569
- , "red_primary"
1570
- , "green_primary"
1571
- , "blue_primary"
1572
- , "white_point"
1573
- , NULL);
1796
+ Class_Chromaticity = rb_struct_define_under(Module_Magick, "Chromaticity",
1797
+ "red_primary", "green_primary",
1798
+ "blue_primary", "white_point", NULL);
1574
1799
  rb_define_method(Class_Chromaticity, "to_s", ChromaticityInfo_to_s, 0);
1575
- rb_define_const(Module_Magick, "Chromaticity", Class_Chromaticity);
1576
1800
 
1577
1801
  // Magick::Color
1578
- Class_Color = rb_struct_define(NULL, "name", "compliance", "color", NULL);
1802
+ Class_Color = rb_struct_define_under(Module_Magick, "Color",
1803
+ "name", "compliance", "color", NULL);
1579
1804
  rb_define_method(Class_Color, "to_s", Color_to_s, 0);
1580
- rb_define_const(Module_Magick, "Color", Class_Color);
1581
1805
 
1582
1806
  // Magick::Point
1583
- Class_Point = rb_struct_define(NULL, "x", "y", NULL);
1584
- rb_define_const(Module_Magick, "Point", Class_Point);
1807
+ Class_Point = rb_struct_define_under(Module_Magick, "Point",
1808
+ "x", "y", NULL);
1585
1809
 
1586
1810
  // Magick::Rectangle
1587
- Class_Rectangle = rb_struct_define(NULL, "width", "height", "x", "y", NULL);
1811
+ Class_Rectangle = rb_struct_define_under(Module_Magick, "Rectangle",
1812
+ "width", "height", "x", "y", NULL);
1588
1813
  rb_define_method(Class_Rectangle, "to_s", RectangleInfo_to_s, 0);
1589
- rb_define_const(Module_Magick, "Rectangle", Class_Rectangle);
1590
1814
 
1591
1815
  // Magick::Segment
1592
- Class_Segment = rb_struct_define(NULL, "x1", "y1", "x2", "y2", NULL);
1816
+ Class_Segment = rb_struct_define_under(Module_Magick, "Segment",
1817
+ "x1", "y1", "x2", "y2", NULL);
1593
1818
  rb_define_method(Class_Segment, "to_s", SegmentInfo_to_s, 0);
1594
- rb_define_const(Module_Magick, "Segment", Class_Segment);
1595
1819
 
1596
1820
  // Magick::Font
1597
- Class_Font = rb_struct_define(NULL, "name", "description",
1598
- "family", "style", "stretch", "weight",
1599
- "encoding", "foundry", "format", NULL);
1821
+ Class_Font = rb_struct_define_under(Module_Magick, "Font",
1822
+ "name", "description",
1823
+ "family", "style", "stretch", "weight",
1824
+ "encoding", "foundry", "format", NULL);
1600
1825
  rb_define_method(Class_Font, "to_s", Font_to_s, 0);
1601
- rb_define_const(Module_Magick, "Font", Class_Font);
1602
1826
 
1603
1827
  // Magick::TypeMetric
1604
- Class_TypeMetric = rb_struct_define(NULL, "pixels_per_em", "ascent", "descent",
1605
- "width", "height", "max_advance", "bounds",
1606
- "underline_position", "underline_thickness", NULL);
1828
+ Class_TypeMetric = rb_struct_define_under(Module_Magick, "TypeMetric",
1829
+ "pixels_per_em", "ascent", "descent",
1830
+ "width", "height", "max_advance", "bounds",
1831
+ "underline_position", "underline_thickness", NULL);
1607
1832
  rb_define_method(Class_TypeMetric, "to_s", TypeMetric_to_s, 0);
1608
- rb_define_const(Module_Magick, "TypeMetric", Class_TypeMetric);
1609
1833
 
1610
1834
 
1611
1835
  /*-----------------------------------------------------------------------*/
@@ -1615,7 +1839,6 @@ Init_RMagick2(void)
1615
1839
  SetFatalErrorHandler(rm_fatal_error_handler);
1616
1840
  SetErrorHandler(rm_error_handler);
1617
1841
  SetWarningHandler(rm_warning_handler);
1618
-
1619
1842
  }
1620
1843
 
1621
1844
 
@@ -1634,9 +1857,8 @@ Init_RMagick2(void)
1634
1857
  static void
1635
1858
  test_Magick_version(void)
1636
1859
  {
1637
- unsigned long version_number;
1860
+ size_t version_number;
1638
1861
  const char *version_str;
1639
- int x, n;
1640
1862
  ID bypass = rb_intern("RMAGICK_BYPASS_VERSION_TEST");
1641
1863
 
1642
1864
  if (RTEST(rb_const_defined(rb_cObject, bypass)) && RTEST(rb_const_get(rb_cObject, bypass)))
@@ -1647,6 +1869,8 @@ test_Magick_version(void)
1647
1869
  version_str = GetMagickVersion(&version_number);
1648
1870
  if (version_number != MagickLibVersion)
1649
1871
  {
1872
+ int n, x;
1873
+
1650
1874
  // Extract the string "ImageMagick X.Y.Z"
1651
1875
  n = 0;
1652
1876
  for (x = 0; version_str[x] != '\0'; x++)
@@ -1658,7 +1882,8 @@ test_Magick_version(void)
1658
1882
  }
1659
1883
 
1660
1884
  rb_raise(rb_eRuntimeError,
1661
- "This installation of RMagick was configured with %s %s but %.*s is in use.\n" ,
1885
+ "This installation of RMagick was configured with %s %s but %.*s is in use.\n"
1886
+ "Please re-install RMagick to correct the issue.\n",
1662
1887
  MagickPackageName, MagickLibVersionText, x, version_str);
1663
1888
  }
1664
1889
 
@@ -1677,7 +1902,7 @@ static void
1677
1902
  version_constants(void)
1678
1903
  {
1679
1904
  const char *mgk_version;
1680
- volatile VALUE str;
1905
+ VALUE str;
1681
1906
  char long_version[1000];
1682
1907
 
1683
1908
  mgk_version = GetMagickVersion(NULL);
@@ -1690,7 +1915,7 @@ version_constants(void)
1690
1915
  rb_obj_freeze(str);
1691
1916
  rb_define_const(Module_Magick, "Version", str);
1692
1917
 
1693
- sprintf(long_version,
1918
+ snprintf(long_version, sizeof(long_version),
1694
1919
  "This is %s ($Date: 2009/12/20 02:33:33 $) Copyright (C) 2009 by Timothy P. Hunter\n"
1695
1920
  "Built with %s\n"
1696
1921
  "Built for %s\n"
@@ -1702,4 +1927,25 @@ version_constants(void)
1702
1927
  rb_obj_freeze(str);
1703
1928
  rb_define_const(Module_Magick, "Long_version", str);
1704
1929
 
1930
+ RB_GC_GUARD(str);
1931
+ }
1932
+
1933
+
1934
+ /**
1935
+ * Create Features constant.
1936
+ *
1937
+ * No Ruby usage (internal function)
1938
+ */
1939
+ static void
1940
+ features_constant(void)
1941
+ {
1942
+ VALUE features;
1943
+
1944
+ // 6.5.7 - latest (7.0.0)
1945
+ features = rb_str_new2(GetMagickFeatures());
1946
+
1947
+ rb_obj_freeze(features);
1948
+ rb_define_const(Module_Magick, "Magick_features", features);
1949
+
1950
+ RB_GC_GUARD(features);
1705
1951
  }