rmagick 2.16.0 → 5.1.0

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