rmagick 2.16.0 → 5.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (441) hide show
  1. checksums.yaml +5 -5
  2. data/.devcontainer/Dockerfile +14 -0
  3. data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
  4. data/.devcontainer/devcontainer.json +11 -0
  5. data/.devcontainer/setup-repo.sh +10 -0
  6. data/.devcontainer/setup-user.sh +45 -0
  7. data/.editorconfig +3 -0
  8. data/.github/ISSUE_TEMPLATE.md +17 -0
  9. data/.github/workflows/ci.yml +157 -0
  10. data/.gitignore +9 -1
  11. data/.rspec +1 -0
  12. data/.rubocop.yml +37 -340
  13. data/.rubocop_todo.yml +456 -0
  14. data/.yardopts +5 -0
  15. data/CHANGELOG.md +536 -0
  16. data/CODE_OF_CONDUCT.md +122 -7
  17. data/CONTRIBUTING.md +37 -6
  18. data/Gemfile +18 -4
  19. data/README.md +319 -0
  20. data/Rakefile +83 -98
  21. data/before_install_linux.sh +65 -28
  22. data/before_install_osx.sh +58 -2
  23. data/ext/RMagick/extconf.rb +310 -393
  24. data/ext/RMagick/{rmagick.c → rmagick.cpp} +119 -127
  25. data/ext/RMagick/rmagick.h +290 -363
  26. data/ext/RMagick/rmagick_gvl.h +224 -0
  27. data/ext/RMagick/rmdraw.cpp +1696 -0
  28. data/ext/RMagick/rmenum.cpp +796 -0
  29. data/ext/RMagick/{rmfill.c → rmfill.cpp} +287 -197
  30. data/ext/RMagick/rmilist.cpp +1275 -0
  31. data/ext/RMagick/rmimage.cpp +16459 -0
  32. data/ext/RMagick/{rminfo.c → rminfo.cpp} +738 -910
  33. data/ext/RMagick/rmkinfo.cpp +210 -0
  34. data/ext/RMagick/rmmain.cpp +1923 -0
  35. data/ext/RMagick/rmmontage.cpp +474 -0
  36. data/ext/RMagick/rmpixel.cpp +1322 -0
  37. data/ext/RMagick/{rmstruct.c → rmstruct.cpp} +104 -284
  38. data/ext/RMagick/{rmutil.c → rmutil.cpp} +500 -433
  39. data/lib/rmagick/version.rb +5 -4
  40. data/lib/rmagick.rb +2 -0
  41. data/lib/rmagick_internal.rb +397 -459
  42. data/lib/rvg/clippath.rb +3 -4
  43. data/lib/rvg/container.rb +30 -22
  44. data/lib/rvg/deep_equal.rb +11 -11
  45. data/lib/rvg/describable.rb +2 -2
  46. data/lib/rvg/embellishable.rb +67 -68
  47. data/lib/rvg/misc.rb +139 -142
  48. data/lib/rvg/paint.rb +2 -1
  49. data/lib/rvg/pathdata.rb +7 -8
  50. data/lib/rvg/rvg.rb +49 -46
  51. data/lib/rvg/stretchable.rb +22 -28
  52. data/lib/rvg/stylable.rb +12 -10
  53. data/lib/rvg/text.rb +169 -165
  54. data/lib/rvg/transformable.rb +17 -16
  55. data/lib/rvg/units.rb +5 -5
  56. data/rmagick.gemspec +7 -41
  57. data/sig/rmagick/_draw_common_methods.rbs +64 -0
  58. data/sig/rmagick/_image_common_methods.rbs +389 -0
  59. data/sig/rmagick/draw.rbs +38 -0
  60. data/sig/rmagick/draw_attribute.rbs +28 -0
  61. data/sig/rmagick/enum.rbs +814 -0
  62. data/sig/rmagick/error.rbs +11 -0
  63. data/sig/rmagick/fill.rbs +21 -0
  64. data/sig/rmagick/geometry.rbs +14 -0
  65. data/sig/rmagick/image.rbs +194 -0
  66. data/sig/rmagick/image_list.rbs +181 -0
  67. data/sig/rmagick/iptc.rbs +101 -0
  68. data/sig/rmagick/kernel_info.rbs +12 -0
  69. data/sig/rmagick/optional_method_arguments.rbs +10 -0
  70. data/sig/rmagick/pixel.rbs +46 -0
  71. data/sig/rmagick/struct.rbs +90 -0
  72. data/sig/rmagick.rbs +43 -0
  73. data/sig/rvg/clippath.rbs +34 -0
  74. data/sig/rvg/container.rbs +78 -0
  75. data/sig/rvg/deep_equal.rbs +48 -0
  76. data/sig/rvg/describable.rbs +30 -0
  77. data/sig/rvg/embellishable.rbs +226 -0
  78. data/sig/rvg/misc.rbs +145 -0
  79. data/sig/rvg/paint.rbs +55 -0
  80. data/sig/rvg/pathdata.rbs +77 -0
  81. data/sig/rvg/rvg.rbs +125 -0
  82. data/sig/rvg/stretchable.rbs +56 -0
  83. data/sig/rvg/stylable.rbs +66 -0
  84. data/sig/rvg/text.rbs +118 -0
  85. data/sig/rvg/transformable.rbs +59 -0
  86. data/sig/rvg/units.rbs +33 -0
  87. metadata +68 -428
  88. data/.hound.yml +0 -2
  89. data/.simplecov +0 -27
  90. data/.travis.yml +0 -74
  91. data/Doxyfile +0 -1514
  92. data/README.textile +0 -251
  93. data/deprecated/RMagick.rb +0 -6
  94. data/doc/.cvsignore +0 -1
  95. data/doc/comtasks.html +0 -287
  96. data/doc/constants.html +0 -1581
  97. data/doc/css/doc.css +0 -299
  98. data/doc/css/popup.css +0 -34
  99. data/doc/css/ref.css +0 -67
  100. data/doc/draw.html +0 -3272
  101. data/doc/ex/InitialCoords.rb +0 -22
  102. data/doc/ex/NewCoordSys.rb +0 -30
  103. data/doc/ex/OrigCoordSys.rb +0 -16
  104. data/doc/ex/PreserveAspectRatio.rb +0 -204
  105. data/doc/ex/RotateScale.rb +0 -36
  106. data/doc/ex/Skew.rb +0 -38
  107. data/doc/ex/Use01.rb +0 -15
  108. data/doc/ex/Use02.rb +0 -20
  109. data/doc/ex/Use03.rb +0 -16
  110. data/doc/ex/ViewBox.rb +0 -31
  111. data/doc/ex/adaptive_threshold.rb +0 -9
  112. data/doc/ex/add_noise.rb +0 -16
  113. data/doc/ex/affine.rb +0 -48
  114. data/doc/ex/affine_transform.rb +0 -20
  115. data/doc/ex/arc.rb +0 -49
  116. data/doc/ex/arcpath.rb +0 -32
  117. data/doc/ex/arcs01.rb +0 -28
  118. data/doc/ex/arcs02.rb +0 -59
  119. data/doc/ex/average.rb +0 -15
  120. data/doc/ex/axes.rb +0 -64
  121. data/doc/ex/baseline_shift01.rb +0 -17
  122. data/doc/ex/bilevel_channel.rb +0 -8
  123. data/doc/ex/blur_image.rb +0 -12
  124. data/doc/ex/border.rb +0 -10
  125. data/doc/ex/bounding_box.rb +0 -42
  126. data/doc/ex/cbezier1.rb +0 -41
  127. data/doc/ex/cbezier2.rb +0 -41
  128. data/doc/ex/cbezier3.rb +0 -41
  129. data/doc/ex/cbezier4.rb +0 -42
  130. data/doc/ex/cbezier5.rb +0 -42
  131. data/doc/ex/cbezier6.rb +0 -53
  132. data/doc/ex/channel.rb +0 -25
  133. data/doc/ex/charcoal.rb +0 -12
  134. data/doc/ex/chop.rb +0 -29
  135. data/doc/ex/circle.rb +0 -33
  136. data/doc/ex/circle01.rb +0 -16
  137. data/doc/ex/clip_path.rb +0 -60
  138. data/doc/ex/coalesce.rb +0 -57
  139. data/doc/ex/color_fill_to_border.rb +0 -29
  140. data/doc/ex/color_floodfill.rb +0 -28
  141. data/doc/ex/color_histogram.rb +0 -47
  142. data/doc/ex/color_reset.rb +0 -11
  143. data/doc/ex/colorize.rb +0 -16
  144. data/doc/ex/colors.rb +0 -64
  145. data/doc/ex/compose_mask.rb +0 -22
  146. data/doc/ex/composite.rb +0 -133
  147. data/doc/ex/composite_layers.rb +0 -53
  148. data/doc/ex/composite_tiled.rb +0 -21
  149. data/doc/ex/contrast.rb +0 -36
  150. data/doc/ex/crop.rb +0 -31
  151. data/doc/ex/crop_with_gravity.rb +0 -42
  152. data/doc/ex/cubic01.rb +0 -43
  153. data/doc/ex/cubic02.rb +0 -91
  154. data/doc/ex/cycle_colormap.rb +0 -21
  155. data/doc/ex/dissolve.rb +0 -12
  156. data/doc/ex/drawcomp.rb +0 -42
  157. data/doc/ex/drop_shadow.rb +0 -60
  158. data/doc/ex/edge.rb +0 -11
  159. data/doc/ex/ellipse.rb +0 -45
  160. data/doc/ex/ellipse01.rb +0 -21
  161. data/doc/ex/emboss.rb +0 -11
  162. data/doc/ex/enhance.rb +0 -28
  163. data/doc/ex/equalize.rb +0 -11
  164. data/doc/ex/evenodd.rb +0 -42
  165. data/doc/ex/fill_pattern.rb +0 -23
  166. data/doc/ex/flatten_images.rb +0 -36
  167. data/doc/ex/flip.rb +0 -11
  168. data/doc/ex/flop.rb +0 -11
  169. data/doc/ex/font_styles.rb +0 -32
  170. data/doc/ex/fonts.rb +0 -20
  171. data/doc/ex/frame.rb +0 -12
  172. data/doc/ex/gaussian_blur.rb +0 -11
  173. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  174. data/doc/ex/get_pixels.rb +0 -47
  175. data/doc/ex/get_type_metrics.rb +0 -141
  176. data/doc/ex/gradientfill.rb +0 -27
  177. data/doc/ex/grav.rb +0 -45
  178. data/doc/ex/gravity.rb +0 -80
  179. data/doc/ex/group.rb +0 -26
  180. data/doc/ex/hatchfill.rb +0 -27
  181. data/doc/ex/image.rb +0 -44
  182. data/doc/ex/images/Apple.miff +0 -0
  183. data/doc/ex/images/Ballerina.jpg +0 -0
  184. data/doc/ex/images/Ballerina3.jpg +0 -0
  185. data/doc/ex/images/Button_0.gif +0 -0
  186. data/doc/ex/images/Button_1.gif +0 -0
  187. data/doc/ex/images/Button_2.gif +0 -0
  188. data/doc/ex/images/Button_3.gif +0 -0
  189. data/doc/ex/images/Button_4.gif +0 -0
  190. data/doc/ex/images/Button_5.gif +0 -0
  191. data/doc/ex/images/Button_6.gif +0 -0
  192. data/doc/ex/images/Button_7.gif +0 -0
  193. data/doc/ex/images/Button_8.gif +0 -0
  194. data/doc/ex/images/Button_9.gif +0 -0
  195. data/doc/ex/images/Button_A.gif +0 -0
  196. data/doc/ex/images/Button_B.gif +0 -0
  197. data/doc/ex/images/Button_C.gif +0 -0
  198. data/doc/ex/images/Button_D.gif +0 -0
  199. data/doc/ex/images/Button_E.gif +0 -0
  200. data/doc/ex/images/Button_F.gif +0 -0
  201. data/doc/ex/images/Button_G.gif +0 -0
  202. data/doc/ex/images/Button_H.gif +0 -0
  203. data/doc/ex/images/Button_I.gif +0 -0
  204. data/doc/ex/images/Button_J.gif +0 -0
  205. data/doc/ex/images/Button_K.gif +0 -0
  206. data/doc/ex/images/Button_L.gif +0 -0
  207. data/doc/ex/images/Button_M.gif +0 -0
  208. data/doc/ex/images/Button_N.gif +0 -0
  209. data/doc/ex/images/Button_O.gif +0 -0
  210. data/doc/ex/images/Button_P.gif +0 -0
  211. data/doc/ex/images/Button_Q.gif +0 -0
  212. data/doc/ex/images/Button_R.gif +0 -0
  213. data/doc/ex/images/Button_S.gif +0 -0
  214. data/doc/ex/images/Button_T.gif +0 -0
  215. data/doc/ex/images/Button_U.gif +0 -0
  216. data/doc/ex/images/Button_V.gif +0 -0
  217. data/doc/ex/images/Button_W.gif +0 -0
  218. data/doc/ex/images/Button_X.gif +0 -0
  219. data/doc/ex/images/Button_Y.gif +0 -0
  220. data/doc/ex/images/Button_Z.gif +0 -0
  221. data/doc/ex/images/Cheetah.jpg +0 -0
  222. data/doc/ex/images/Coffee.wmf +0 -0
  223. data/doc/ex/images/Flower_Hat.jpg +0 -0
  224. data/doc/ex/images/Gold_Statue.jpg +0 -0
  225. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  226. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  227. data/doc/ex/images/Leaf.miff +0 -0
  228. data/doc/ex/images/No.wmf +0 -0
  229. data/doc/ex/images/Polynesia.jpg +0 -0
  230. data/doc/ex/images/Red_Rocks.jpg +0 -0
  231. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  232. data/doc/ex/images/Shorts.jpg +0 -0
  233. data/doc/ex/images/Snake.wmf +0 -0
  234. data/doc/ex/images/Violin.jpg +0 -0
  235. data/doc/ex/images/Yellow_Rose.miff +0 -0
  236. data/doc/ex/images/big-duck.gif +0 -0
  237. data/doc/ex/images/duck.gif +0 -0
  238. data/doc/ex/images/duck0.gif +0 -0
  239. data/doc/ex/images/duck1.gif +0 -0
  240. data/doc/ex/images/duck10.gif +0 -0
  241. data/doc/ex/images/duck11.gif +0 -0
  242. data/doc/ex/images/duck12.gif +0 -0
  243. data/doc/ex/images/duck13.gif +0 -0
  244. data/doc/ex/images/duck14.gif +0 -0
  245. data/doc/ex/images/duck15.gif +0 -0
  246. data/doc/ex/images/duck2.gif +0 -0
  247. data/doc/ex/images/duck3.gif +0 -0
  248. data/doc/ex/images/duck4.gif +0 -0
  249. data/doc/ex/images/duck5.gif +0 -0
  250. data/doc/ex/images/duck6.gif +0 -0
  251. data/doc/ex/images/duck7.gif +0 -0
  252. data/doc/ex/images/duck8.gif +0 -0
  253. data/doc/ex/images/duck9.gif +0 -0
  254. data/doc/ex/images/graydient230x6.gif +0 -0
  255. data/doc/ex/images/image_with_profile.jpg +0 -0
  256. data/doc/ex/images/logo400x83.gif +0 -0
  257. data/doc/ex/images/model.miff +0 -0
  258. data/doc/ex/images/notimplemented.gif +0 -0
  259. data/doc/ex/images/smile.miff +0 -0
  260. data/doc/ex/images/spin.gif +0 -0
  261. data/doc/ex/implode.rb +0 -34
  262. data/doc/ex/level.rb +0 -11
  263. data/doc/ex/level_colors.rb +0 -11
  264. data/doc/ex/line.rb +0 -41
  265. data/doc/ex/line01.rb +0 -21
  266. data/doc/ex/mask.rb +0 -35
  267. data/doc/ex/matte_fill_to_border.rb +0 -39
  268. data/doc/ex/matte_floodfill.rb +0 -32
  269. data/doc/ex/matte_replace.rb +0 -39
  270. data/doc/ex/median_filter.rb +0 -28
  271. data/doc/ex/modulate.rb +0 -11
  272. data/doc/ex/mono.rb +0 -23
  273. data/doc/ex/morph.rb +0 -25
  274. data/doc/ex/mosaic.rb +0 -35
  275. data/doc/ex/motion_blur.rb +0 -11
  276. data/doc/ex/negate.rb +0 -11
  277. data/doc/ex/negate_channel.rb +0 -9
  278. data/doc/ex/nested_rvg.rb +0 -21
  279. data/doc/ex/nonzero.rb +0 -42
  280. data/doc/ex/normalize.rb +0 -11
  281. data/doc/ex/oil_paint.rb +0 -11
  282. data/doc/ex/opacity.rb +0 -37
  283. data/doc/ex/ordered_dither.rb +0 -11
  284. data/doc/ex/path.rb +0 -63
  285. data/doc/ex/pattern1.rb +0 -25
  286. data/doc/ex/pattern2.rb +0 -26
  287. data/doc/ex/polaroid.rb +0 -27
  288. data/doc/ex/polygon.rb +0 -23
  289. data/doc/ex/polygon01.rb +0 -21
  290. data/doc/ex/polyline.rb +0 -22
  291. data/doc/ex/polyline01.rb +0 -21
  292. data/doc/ex/posterize.rb +0 -8
  293. data/doc/ex/preview.rb +0 -8
  294. data/doc/ex/qbezierpath.rb +0 -52
  295. data/doc/ex/quad01.rb +0 -34
  296. data/doc/ex/quantize-m.rb +0 -25
  297. data/doc/ex/radial_blur.rb +0 -9
  298. data/doc/ex/raise.rb +0 -8
  299. data/doc/ex/random_threshold_channel.rb +0 -13
  300. data/doc/ex/rect01.rb +0 -14
  301. data/doc/ex/rect02.rb +0 -20
  302. data/doc/ex/rectangle.rb +0 -34
  303. data/doc/ex/reduce_noise.rb +0 -28
  304. data/doc/ex/remap.rb +0 -11
  305. data/doc/ex/remap_images.rb +0 -19
  306. data/doc/ex/resize_to_fill.rb +0 -8
  307. data/doc/ex/resize_to_fit.rb +0 -8
  308. data/doc/ex/roll.rb +0 -9
  309. data/doc/ex/rotate.rb +0 -44
  310. data/doc/ex/rotate_f.rb +0 -14
  311. data/doc/ex/roundrect.rb +0 -33
  312. data/doc/ex/rubyname.rb +0 -30
  313. data/doc/ex/rvg_clippath.rb +0 -12
  314. data/doc/ex/rvg_linecap.rb +0 -42
  315. data/doc/ex/rvg_linejoin.rb +0 -40
  316. data/doc/ex/rvg_opacity.rb +0 -18
  317. data/doc/ex/rvg_pattern.rb +0 -26
  318. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  319. data/doc/ex/segment.rb +0 -11
  320. data/doc/ex/sepiatone.rb +0 -7
  321. data/doc/ex/shade.rb +0 -11
  322. data/doc/ex/shadow.rb +0 -30
  323. data/doc/ex/shave.rb +0 -15
  324. data/doc/ex/shear.rb +0 -10
  325. data/doc/ex/sketch.rb +0 -17
  326. data/doc/ex/skewx.rb +0 -51
  327. data/doc/ex/skewy.rb +0 -47
  328. data/doc/ex/smile.rb +0 -125
  329. data/doc/ex/solarize.rb +0 -11
  330. data/doc/ex/sparse_color.rb +0 -54
  331. data/doc/ex/splice.rb +0 -8
  332. data/doc/ex/spread.rb +0 -11
  333. data/doc/ex/stegano.rb +0 -55
  334. data/doc/ex/stroke_dasharray.rb +0 -42
  335. data/doc/ex/stroke_fill.rb +0 -10
  336. data/doc/ex/stroke_linecap.rb +0 -44
  337. data/doc/ex/stroke_linejoin.rb +0 -48
  338. data/doc/ex/stroke_width.rb +0 -49
  339. data/doc/ex/swirl.rb +0 -17
  340. data/doc/ex/text.rb +0 -37
  341. data/doc/ex/text01.rb +0 -16
  342. data/doc/ex/text_align.rb +0 -36
  343. data/doc/ex/text_antialias.rb +0 -37
  344. data/doc/ex/text_styles.rb +0 -19
  345. data/doc/ex/text_undercolor.rb +0 -28
  346. data/doc/ex/texture_fill_to_border.rb +0 -34
  347. data/doc/ex/texture_floodfill.rb +0 -32
  348. data/doc/ex/texturefill.rb +0 -24
  349. data/doc/ex/threshold.rb +0 -13
  350. data/doc/ex/to_blob.rb +0 -13
  351. data/doc/ex/translate.rb +0 -39
  352. data/doc/ex/transparent.rb +0 -38
  353. data/doc/ex/transpose.rb +0 -9
  354. data/doc/ex/transverse.rb +0 -9
  355. data/doc/ex/tref01.rb +0 -24
  356. data/doc/ex/triangle01.rb +0 -15
  357. data/doc/ex/trim.rb +0 -23
  358. data/doc/ex/tspan01.rb +0 -17
  359. data/doc/ex/tspan02.rb +0 -17
  360. data/doc/ex/tspan03.rb +0 -19
  361. data/doc/ex/unsharp_mask.rb +0 -28
  362. data/doc/ex/viewex.rb +0 -33
  363. data/doc/ex/vignette.rb +0 -12
  364. data/doc/ex/watermark.rb +0 -27
  365. data/doc/ex/wave.rb +0 -9
  366. data/doc/ex/wet_floor.rb +0 -58
  367. data/doc/ex/writing_mode01.rb +0 -26
  368. data/doc/ex/writing_mode02.rb +0 -26
  369. data/doc/ilist.html +0 -2056
  370. data/doc/image1.html +0 -4680
  371. data/doc/image2.html +0 -3665
  372. data/doc/image3.html +0 -4522
  373. data/doc/imageattrs.html +0 -1638
  374. data/doc/imusage.html +0 -514
  375. data/doc/index.html +0 -416
  376. data/doc/info.html +0 -1499
  377. data/doc/magick.html +0 -565
  378. data/doc/optequiv.html +0 -2435
  379. data/doc/rvg.html +0 -975
  380. data/doc/rvgclip.html +0 -248
  381. data/doc/rvggroup.html +0 -305
  382. data/doc/rvgimage.html +0 -289
  383. data/doc/rvgpattern.html +0 -475
  384. data/doc/rvgshape.html +0 -406
  385. data/doc/rvgstyle.html +0 -270
  386. data/doc/rvgtext.html +0 -465
  387. data/doc/rvgtspan.html +0 -238
  388. data/doc/rvgtut.html +0 -530
  389. data/doc/rvguse.html +0 -145
  390. data/doc/rvgxform.html +0 -294
  391. data/doc/scripts/doc.js +0 -22
  392. data/doc/scripts/stripeTables.js +0 -23
  393. data/doc/struct.html +0 -1339
  394. data/doc/usage.html +0 -1621
  395. data/examples/constitute.rb +0 -7
  396. data/examples/crop_with_gravity.rb +0 -42
  397. data/examples/demo.rb +0 -324
  398. data/examples/describe.rb +0 -43
  399. data/examples/find_similar_region.rb +0 -34
  400. data/examples/histogram.rb +0 -321
  401. data/examples/identify.rb +0 -185
  402. data/examples/image_opacity.rb +0 -29
  403. data/examples/import_export.rb +0 -31
  404. data/examples/pattern_fill.rb +0 -38
  405. data/examples/rotating_text.rb +0 -44
  406. data/examples/spinner.rb +0 -49
  407. data/examples/thumbnail.rb +0 -64
  408. data/examples/vignette.rb +0 -78
  409. data/ext/RMagick/rmdraw.c +0 -2022
  410. data/ext/RMagick/rmenum.c +0 -1235
  411. data/ext/RMagick/rmilist.c +0 -1270
  412. data/ext/RMagick/rmimage.c +0 -15427
  413. data/ext/RMagick/rmmain.c +0 -1741
  414. data/ext/RMagick/rmmontage.c +0 -519
  415. data/ext/RMagick/rmpixel.c +0 -1114
  416. data/spec/rmagick/ImageList1_spec.rb +0 -24
  417. data/spec/rmagick/draw_spec.rb +0 -156
  418. data/spec/rmagick/image/blue_shift_spec.rb +0 -16
  419. data/spec/rmagick/image/composite_spec.rb +0 -140
  420. data/spec/rmagick/image/constitute_spec.rb +0 -15
  421. data/spec/rmagick/image/dispatch_spec.rb +0 -18
  422. data/spec/rmagick/image/from_blob_spec.rb +0 -14
  423. data/spec/rmagick/image/ping_spec.rb +0 -14
  424. data/spec/rmagick/image/properties_spec.rb +0 -29
  425. data/spec/spec_helper.rb +0 -4
  426. data/test/Image1.rb +0 -565
  427. data/test/Image2.rb +0 -1304
  428. data/test/Image3.rb +0 -1030
  429. data/test/ImageList1.rb +0 -806
  430. data/test/ImageList2.rb +0 -385
  431. data/test/Image_attributes.rb +0 -697
  432. data/test/Import_Export.rb +0 -121
  433. data/test/Info.rb +0 -345
  434. data/test/Magick.rb +0 -321
  435. data/test/Pixel.rb +0 -116
  436. data/test/Preview.rb +0 -57
  437. data/test/cmyk.icm +0 -0
  438. data/test/srgb.icm +0 -0
  439. data/test/test_all_basic.rb +0 -38
  440. data/test/tmpnam_test.rb +0 -50
  441. data/wercker.yml +0 -10
@@ -16,25 +16,45 @@
16
16
  //! Suppress warnings about deprecated functions on Windows
17
17
  #define _CRT_SECURE_NO_DEPRECATE 1
18
18
 
19
- #include <assert.h>
20
- #include <stdio.h>
21
- #include <ctype.h>
22
- #if defined(HAVE_STDINT_H)
23
- #include <stdint.h>
24
- #endif
25
- #include <stdlib.h>
26
- #include <math.h>
27
- #include <time.h>
28
- #if defined(HAVE_SYS_TYPES_H)
29
- #include <sys/types.h>
30
- #endif
31
- #include "ruby.h"
32
- #if defined(HAVE_RUBY_IO_H)
33
- #include "ruby/io.h" // >= 1.9.0-5
19
+ // ruby.h contains a C++ template, which cannot be included in extern "C".
20
+ // Therefore, it includes the header in advance.
21
+ #include "ruby/defines.h"
22
+
23
+ extern "C" {
24
+ #include <assert.h>
25
+ #include <stdio.h>
26
+ #include <ctype.h>
27
+ #include <stdlib.h>
28
+ #include <math.h>
29
+ #include <sys/types.h>
30
+ #include "ruby.h"
31
+ #include "ruby/io.h"
32
+ #include "rmagick_gvl.h"
33
+ }
34
+
35
+ #if defined(__MINGW32__)
36
+ // Ruby defines wrong format specifiers for MinGW. So this defines original macro in here.
37
+ #if SIZEOF_SIZE_T == SIZEOF_LONG
38
+ #define RMIuSIZE "lu"
39
+ #define RMIdSIZE "ld"
40
+ #define RMIsVALUE "li\v"
41
+ #elif SIZEOF_SIZE_T == SIZEOF_LONG_LONG
42
+ #define RMIuSIZE "I64u"
43
+ #define RMIdSIZE "I64d"
44
+ #define RMIsVALUE "I64i\v"
45
+ #endif
34
46
  #else
35
- #include "rubyio.h"
47
+ // Use constants defined in Ruby
48
+ #define RMIuSIZE PRIuSIZE
49
+ #define RMIdSIZE PRIdSIZE
50
+ #define RMIsVALUE PRIsVALUE
36
51
  #endif
37
52
 
53
+ #if defined(__GNUC__)
54
+ #if __GNUC__ > 6
55
+ #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
56
+ #endif
57
+ #endif
38
58
 
39
59
  // Undef Ruby's versions of these symbols
40
60
  #undef PACKAGE_VERSION
@@ -44,14 +64,23 @@
44
64
  #undef PACKAGE_TARNAME
45
65
  #undef WORDS_BIGENDIAN
46
66
 
47
- #include "magick/MagickCore.h"
48
- #include "magick/magick-config.h"
67
+ #ifndef HAVE_RB_EXT_RACTOR_SAFE
68
+ #undef RUBY_TYPED_FROZEN_SHAREABLE
69
+ #define RUBY_TYPED_FROZEN_SHAREABLE 0
70
+ #endif
49
71
 
50
- // Undef ImageMagick's versions of these symbols
51
- #undef PACKAGE_STRING
72
+ #include "extconf.h"
52
73
 
74
+ #if defined(IMAGEMAGICK_7)
75
+ #include "MagickCore/MagickCore.h"
76
+ #include "MagickCore/magick-config.h"
77
+ #else
78
+ #include "magick/MagickCore.h"
79
+ #include "magick/magick-config.h"
80
+ #endif
53
81
 
54
- #include "extconf.h"
82
+ // Undef ImageMagick's versions of these symbols
83
+ #undef PACKAGE_STRING
55
84
 
56
85
 
57
86
  //! For quoting preprocessor symbols
@@ -59,11 +88,18 @@
59
88
  //! For quoting preprocessor symbols
60
89
  #define Q(q) Q2(q)
61
90
 
91
+ #ifdef __GNUC__
92
+ #define ATTRIBUTE_UNUSED __attribute__((unused))
93
+ #define ATTRIBUTE_NORETURN __attribute__((__noreturn__))
94
+ #else
95
+ #define ATTRIBUTE_UNUSED
96
+ #define ATTRIBUTE_NORETURN
97
+ #endif
62
98
 
63
99
  //! Trace new image creation in bang methods
64
100
  #define UPDATE_DATA_PTR(_obj_, _new_) \
65
- do { (void) rm_trace_creation(_new_);\
66
- DATA_PTR(_obj_) = (void *)(_new_);\
101
+ do { \
102
+ DATA_PTR(_obj_) = (void *)(_new_); \
67
103
  } while(0)
68
104
 
69
105
 
@@ -85,65 +121,23 @@
85
121
 
86
122
  //! degrees to radians conversion
87
123
  #undef DegreesToRadians // defined in ImageMagick.h in 6.0.2
88
- #define DegreesToRadians(x) ((x)*3.14159265358979323846/180.0)
124
+ #define DegreesToRadians(x) ((x)*3.14159265358979323846/180.0)
89
125
 
90
126
  //! pixel intensity calculation
91
127
  #define PIXEL_INTENSITY(q) ((Quantum)(0.299*(q)->red + 0.587*(q)->green + 0.114*(q)->blue + 0.5))
92
128
 
93
129
  //! find maximum of longs
94
- #define LMAX(a,b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
130
+ #define LMAX(a, b) ((((long)(a))>((long)(b)))?((long)(a)):((long)(b)))
95
131
  //! find maximum of floats
96
- #define FMAX(a,b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
132
+ #define FMAX(a, b) ((((double)(a))>((double)(b)))?((double)(a)):((double)(b)))
97
133
  //! find minimum of floats
98
- #define FMIN(a,b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
134
+ #define FMIN(a, b) ((((double)(a))<=((double)(b)))?((double)(a)):((double)(b)))
99
135
 
100
136
  #define RMAGICK_PI 3.14159265358979 /**< pi */
101
137
 
102
138
  //! round to Quantum
103
139
  #define ROUND_TO_QUANTUM(value) ((Quantum) ((value) > (Quantum)QuantumRange ? QuantumRange : (value) + 0.5))
104
140
 
105
-
106
- // Ruby 1.9.0 changed the name to rb_frame_this_func
107
- #if defined(HAVE_RB_FRAME_THIS_FUNC)
108
- #define THIS_FUNC() rb_frame_this_func() /**< get the Ruby function being called */
109
- #else
110
- #define THIS_FUNC() rb_frame_last_func() /**< get the Ruby function being called */
111
- #endif
112
-
113
- // GetReadFile doesn't exist in Ruby 1.9.0
114
- #if !defined(GetReadFile)
115
- #define GetReadFile(fptr) rb_io_stdio_file(fptr) /**< Ruby read file pointer */
116
- #define GetWriteFile(fptr) rb_io_stdio_file(fptr) /**< Ruby write file pointer */
117
- #endif
118
-
119
- // rb_io_t replaces OpenFile in Ruby 1.9.0
120
- #if defined(HAVE_RB_IO_T)
121
- #undef OpenFile
122
- #define OpenFile rb_io_t /**< Ruby open file */
123
- #endif
124
-
125
- // These macros are required in 1.9.1 but aren't defined prior to 1.8.6.
126
- #if !defined(RSTRING_LEN)
127
- #define RSTRING_LEN(s) (RSTRING((s))->len) /**< Ruby string length */
128
- #endif
129
- #if !defined(RSTRING_PTR)
130
- #define RSTRING_PTR(s) (RSTRING((s))->ptr) /**< Ruby string pointer */
131
- #endif
132
-
133
- // Backport these two macros to 1.8
134
- #if !defined(RARRAY_LEN)
135
- #define RARRAY_LEN(a) RARRAY((a))->len /**< Ruby array length */
136
- #endif
137
- // Matz says this macro is read-only! (see http://www.ruby-forum.com/topic/146072)
138
- #if !defined(RARRAY_PTR)
139
- #define RARRAY_PTR(a) RARRAY((a))->ptr /**< Ruby array pointer */
140
- #endif
141
-
142
- // Backport this macro to 1.8.6
143
- #if !defined(RB_GC_GUARD)
144
- #define RB_GC_GUARD(x) (x)
145
- #endif
146
-
147
141
  //! Convert a C string to a Ruby symbol. Used in marshal_dump/marshal_load methods
148
142
  #define CSTR2SYM(s) ID2SYM(rb_intern(s))
149
143
  //! Convert a C string to a Ruby String, or nil if the ptr is NULL
@@ -154,49 +148,53 @@
154
148
  */
155
149
  #define OBJ_TO_MAGICK_STRING(f, obj) \
156
150
  if ((obj) != Qnil)\
157
- magick_clone_string(&f, RSTRING_PTR(obj));\
151
+ {\
152
+ VALUE str = rb_String(obj);\
153
+ magick_clone_string(&f, StringValueCStr(str));\
154
+ }\
158
155
  else\
159
156
  f = NULL;
160
157
 
161
158
 
162
- /** ImageMagick 6.5.7 replaced DestroyConstitute with
163
- * ConstituteComponentTerminus. Both have the same signature.
164
- */
165
- #if defined(HAVE_CONSTITUTECOMPONENTTERMINUS)
166
- #define DestroyConstitute(void) ConstituteComponentTerminus(void)
167
- #endif
168
-
169
- /** ImageMagick 6.5.9 replaced MagickLibSubversion with
170
- * MagickLibAddendum.
171
- */
172
- #if defined(HAVE_MAGICKLIBADDENDUM)
173
159
  #define MagickLibSubversion MagickLibAddendum
174
- #endif
175
-
176
- /** IM 6.4.1 replaced AllocateImage with AcquireImage.
177
- * Both have the same signature.
178
- */
179
- #if !defined(HAVE_ACQUIREIMAGE)
180
- #define AcquireImage(info) AllocateImage(info)
181
- #endif
182
160
 
183
- // ImageLayerMethod replaced MagickLayerMethod starting with 6.3.6
184
- #if defined(HAVE_TYPE_IMAGELAYERMETHOD)
185
- #define LAYERMETHODTYPE ImageLayerMethod /**< layer method */
186
- #define CLASS_LAYERMETHODTYPE Class_ImageLayerMethod /**< layer method class */
187
- #define LAYERMETHODTYPE_NAME ImageLayerMethod_name /**< layer method name */
188
- #define LAYERMETHODTYPE_NEW ImageLayerMethod_new /**< new layer method */
161
+ typedef ImageInfo Info; /**< Make type name match class name */
162
+ #if defined(IMAGEMAGICK_7)
163
+ typedef struct _QuantumPixelPacket
164
+ {
165
+ Quantum
166
+ red,
167
+ green,
168
+ blue,
169
+ alpha,
170
+ black;
171
+ } QuantumPixelPacket;
172
+
173
+ typedef QuantumPixelPacket Pixel;
174
+ typedef PixelInfo MagickPixel;
175
+ typedef PixelInfo PixelColor;
189
176
  #else
190
- #define LAYERMETHODTYPE MagickLayerMethod /**< layer method */
191
- #define CLASS_LAYERMETHODTYPE Class_MagickLayerMethod /**< layer method class */
192
- #define LAYERMETHODTYPE_NAME MagickLayerMethod_name /**< layer method name */
193
- #define LAYERMETHODTYPE_NEW MagickLayerMethod_new /**< new layer method */
177
+ typedef struct _RMagickPixelPacket
178
+ {
179
+ Quantum
180
+ red,
181
+ green,
182
+ blue,
183
+ opacity,
184
+ black;
185
+ } RMagickPixelPacket;
186
+ typedef RMagickPixelPacket Pixel;
187
+ typedef MagickPixelPacket MagickPixel;
188
+ typedef PixelPacket PixelColor;
189
+ typedef AlphaChannelType AlphaChannelOption;
190
+ typedef DistortImageMethod DistortMethod;
191
+ typedef FilterTypes FilterType;
192
+ typedef InterpolatePixelMethod PixelInterpolateMethod;
193
+ typedef ImageLayerMethod LayerMethod;
194
+ #define TransparentAlpha 0
195
+ #define IMAGEMAGICK_6 1
194
196
  #endif
195
197
 
196
-
197
- typedef ImageInfo Info; /**< Make type name match class name */
198
- typedef PixelPacket Pixel; /**< Make type name match class name */
199
-
200
198
  //! Montage
201
199
  typedef struct
202
200
  {
@@ -218,7 +216,7 @@ typedef struct
218
216
  DrawInfo *info; /**< the DrawInfo struct */
219
217
  VALUE primitives; /**< the primitive string */
220
218
  struct TmpFile_Name *tmpfile_ary; /**< the tmp filenames */
221
- PixelPacket shadow_color; /**< PolaroidOptions#shadow_color */
219
+ PixelColor shadow_color; /**< PolaroidOptions#shadow_color */
222
220
  } Draw; // make the type match the class name
223
221
 
224
222
  // Enum
@@ -293,53 +291,34 @@ typedef enum _QuantumExpressionOperator
293
291
  RShiftQuantumOperator, /**< rshift */
294
292
  SubtractQuantumOperator, /**< subtract */
295
293
  XorQuantumOperator, /**< xor */
296
- #if defined(HAVE_ENUM_POWEVALUATEOPERATOR)
297
294
  PowQuantumOperator, /**< pow */
298
- #endif
299
- #if defined(HAVE_ENUM_LOGEVALUATEOPERATOR)
300
295
  LogQuantumOperator, /**< log */
301
- #endif
302
- #if defined(HAVE_ENUM_THRESHOLDEVALUATEOPERATOR)
303
296
  ThresholdQuantumOperator, /**< threshold */
304
- #endif
305
- #if defined(HAVE_ENUM_THRESHOLDBLACKEVALUATEOPERATOR)
306
297
  ThresholdBlackQuantumOperator, /**< threshold black */
307
- #endif
308
- #if defined(HAVE_ENUM_THRESHOLDWHITEEVALUATEOPERATOR)
309
298
  ThresholdWhiteQuantumOperator, /**< threshold white */
310
- #endif
311
- #if defined(HAVE_ENUM_GAUSSIANNOISEEVALUATEOPERATOR)
312
299
  GaussianNoiseQuantumOperator, /**< gaussian noise */
313
- #endif
314
- #if defined(HAVE_ENUM_IMPULSENOISEEVALUATEOPERATOR)
315
300
  ImpulseNoiseQuantumOperator, /**< impulse noise */
316
- #endif
317
- #if defined(HAVE_ENUM_LAPLACIANNOISEEVALUATEOPERATOR)
318
301
  LaplacianNoiseQuantumOperator, /**< laplacian noise */
319
- #endif
320
- #if defined(HAVE_ENUM_MULTIPLICATIVENOISEEVALUATEOPERATOR)
321
302
  MultiplicativeNoiseQuantumOperator, /**< multiplicative noise */
322
- #endif
323
- #if defined(HAVE_ENUM_POISSONNOISEEVALUATEOPERATOR)
324
303
  PoissonNoiseQuantumOperator, /**< poisson noise */
325
- #endif
326
- #if defined(HAVE_ENUM_UNIFORMNOISEEVALUATEOPERATOR)
327
304
  UniformNoiseQuantumOperator, /**< uniform noise */
328
- #endif
329
- #if defined(HAVE_ENUM_COSINEEVALUATEOPERATOR)
330
305
  CosineQuantumOperator, /**< cosine */
331
- #endif
332
- #if defined(HAVE_ENUM_SINEEVALUATEOPERATOR)
306
+ SetQuantumOperator, /**< set */
333
307
  SineQuantumOperator, /**< sine */
334
- #endif
335
- #if defined(HAVE_ENUM_ADDMODULUSEVALUATEOPERATOR)
336
- AddModulusQuantumOperator /**< add modulus */
308
+ AddModulusQuantumOperator, /**< add modulus */
309
+ MeanQuantumOperator, /**< mean */
310
+ AbsQuantumOperator, /**< abs */
311
+ ExponentialQuantumOperator, /**< exponential */
312
+ MedianQuantumOperator, /**< median */
313
+ SumQuantumOperator /**< sum */
314
+ #if defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_8_9)
315
+ , RootMeanSquareQuantumOperator /** root mean square */
337
316
  #endif
338
317
  } QuantumExpressionOperator ;
339
318
 
340
319
 
341
320
  /** This implements the "omitted storage class model" for external variables.
342
- * (Ref: Harbison & Steele.) The rmmain.c file defines MAIN, which causes
321
+ * (Ref: Harbison & Steele.) The rmmain.cpp file defines MAIN, which causes
343
322
  * the single defining declarations to be generated. No other source files
344
323
  * define MAIN and therefore generate referencing declarations.
345
324
  */
@@ -354,8 +333,10 @@ typedef enum _QuantumExpressionOperator
354
333
  * RMagick Module and Class VALUEs
355
334
  */
356
335
  EXTERN VALUE Module_Magick;
336
+ EXTERN VALUE Module_DrawAttribute;
357
337
  EXTERN VALUE Class_ImageList;
358
338
  EXTERN VALUE Class_Info;
339
+ EXTERN VALUE Class_KernelInfo;
359
340
  EXTERN VALUE Class_Draw;
360
341
  EXTERN VALUE Class_DrawOptions;
361
342
  EXTERN VALUE Class_Image;
@@ -384,7 +365,7 @@ EXTERN VALUE Class_QuantumExpressionOperator;
384
365
  // Enum classes
385
366
  EXTERN VALUE Class_Enum;
386
367
  EXTERN VALUE Class_AlignType;
387
- EXTERN VALUE Class_AlphaChannelType;
368
+ EXTERN VALUE Class_AlphaChannelOption;
388
369
  EXTERN VALUE Class_AnchorType;
389
370
  EXTERN VALUE Class_ChannelType;
390
371
  EXTERN VALUE Class_ClassType;
@@ -394,271 +375,169 @@ EXTERN VALUE Class_CompositeOperator;
394
375
  EXTERN VALUE Class_CompressionType;
395
376
  EXTERN VALUE Class_DecorationType;
396
377
  EXTERN VALUE Class_DisposeType;
397
- EXTERN VALUE Class_DistortImageMethod;
398
- #if defined(HAVE_TYPE_DITHERMETHOD)
378
+ EXTERN VALUE Class_DistortMethod;
399
379
  EXTERN VALUE Class_DitherMethod;
400
- #endif
401
380
  EXTERN VALUE Class_EndianType;
402
- EXTERN VALUE Class_FilterTypes;
381
+ EXTERN VALUE Class_FilterType;
403
382
  EXTERN VALUE Class_GravityType;
404
383
  EXTERN VALUE Class_ImageType;
405
384
  EXTERN VALUE Class_InterlaceType;
406
- EXTERN VALUE Class_InterpolatePixelMethod;
407
- EXTERN VALUE CLASS_LAYERMETHODTYPE;
385
+ EXTERN VALUE Class_LayerMethod;
408
386
  EXTERN VALUE Class_MagickFunction;
409
387
  EXTERN VALUE Class_NoiseType;
410
388
  EXTERN VALUE Class_OrientationType;
411
389
  EXTERN VALUE Class_PaintMethod;
390
+ EXTERN VALUE Class_PixelInterpolateMethod;
412
391
  EXTERN VALUE Class_PreviewType;
413
392
  EXTERN VALUE Class_RenderingIntent;
414
393
  EXTERN VALUE Class_ResolutionType;
415
- #if defined(HAVE_SPARSECOLORIMAGE)
416
394
  EXTERN VALUE Class_SparseColorMethod;
417
- #endif
418
395
  EXTERN VALUE Class_SpreadMethod;
419
396
  EXTERN VALUE Class_StorageType;
420
397
  EXTERN VALUE Class_StretchType;
421
398
  EXTERN VALUE Class_StyleType;
422
399
  EXTERN VALUE Class_WeightType;
423
400
  EXTERN VALUE Class_VirtualPixelMethod;
401
+ EXTERN VALUE Class_GeometryFlags;
402
+ EXTERN VALUE Class_MorphologyMethod;
403
+ EXTERN VALUE Class_KernelInfoType;
424
404
 
425
405
  /**
426
406
  * Commonly-used IDs
427
407
  */
428
- EXTERN ID rm_ID_trace_proc; /**< "@trace_proc" */
429
408
  EXTERN ID rm_ID_call; /**< "call" */
430
409
  EXTERN ID rm_ID_changed; /**< "changed" */
431
410
  EXTERN ID rm_ID_cur_image; /**< "cur_image" */
432
411
  EXTERN ID rm_ID_dup; /**< "dup" */
433
412
  EXTERN ID rm_ID_fill; /**< "fill" */
434
- EXTERN ID rm_ID_flag; /**< "flag" */
435
- EXTERN ID rm_ID_from_s; /**< "from_s" */
436
413
  EXTERN ID rm_ID_Geometry; /**< "Geometry" */
437
- EXTERN ID rm_ID_GeometryValue; /**< "GeometryValue" */
438
- EXTERN ID rm_ID_has_key_q; /**< "has_key?" */
439
414
  EXTERN ID rm_ID_height; /**< "height" */
440
415
  EXTERN ID rm_ID_initialize_copy; /**< "initialize_copy" */
441
- EXTERN ID rm_ID_length; /**< "length" */
442
416
  EXTERN ID rm_ID_notify_observers; /**< "notify_observers" */
443
417
  EXTERN ID rm_ID_new; /**< "new" */
444
418
  EXTERN ID rm_ID_push; /**< "push" */
445
- EXTERN ID rm_ID_spaceship; /**< "<=>" */
446
- EXTERN ID rm_ID_to_i; /**< "to_i" */
447
- EXTERN ID rm_ID_to_s; /**< "to_s" */
448
419
  EXTERN ID rm_ID_values; /**< "values" */
449
420
  EXTERN ID rm_ID_width; /**< "width" */
450
- EXTERN ID rm_ID_x; /**< "x" */
451
- EXTERN ID rm_ID_y; /**< "y" */
421
+
422
+ extern const rb_data_type_t rm_enum_data_type;
423
+ extern const rb_data_type_t rm_info_data_type;
424
+ extern const rb_data_type_t rm_image_data_type;
425
+ extern const rb_data_type_t rm_draw_data_type;
426
+ extern const rb_data_type_t rm_pixel_data_type;
427
+ extern const rb_data_type_t rm_montage_data_type;
428
+ extern const rb_data_type_t rm_kernel_info_data_type;
452
429
 
453
430
  #if !defined(min)
454
- #define min(a,b) ((a)<(b)?(a):(b)) /**< min of two values */
431
+ #define min(a, b) ((a)<(b)?(a):(b)) /**< min of two values */
455
432
  #endif
456
433
  #if !defined(max)
457
- #define max(a,b) ((a)>(b)?(a):(b)) /**< max of two values */
434
+ #define max(a, b) ((a)>(b)?(a):(b)) /**< max of two values */
458
435
  #endif
459
436
 
460
437
  /**
461
438
  Handle warnings & errors
462
439
  */
463
440
  //! Handle warnings & errors
464
- #define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError);
465
-
441
+ #define CHECK_EXCEPTION() rm_check_exception(exception, NULL, RetainOnError)
466
442
 
467
- /*
468
- Call rb_define_method for an attribute accessor method
469
- */
470
- //! attribute reader
471
- #define DCL_ATTR_READER(class, attr) \
472
- rb_define_method(Class_##class, #attr, class##_##attr, 0);
473
- //! attribute writer
474
- #define DCL_ATTR_WRITER(class, attr) \
475
- rb_define_method(Class_##class, #attr "=", class##_##attr##_eq, 1);
476
- //! attribute accessor
477
- #define DCL_ATTR_ACCESSOR(class, attr) \
478
- DCL_ATTR_READER(class, attr) \
479
- DCL_ATTR_WRITER(class, attr)
480
- //! Borrow another class' attribute writer definition
481
- #define SHARE_ATTR_WRITER(to, from, attr) \
482
- rb_define_method(Class_##to, #attr "=", from##_##attr##_eq, 1);
483
443
 
484
444
  /*
485
445
  Define simple attribute accessor methods (boolean, int, string, and double types)
486
446
  */
487
- #define C_bool_to_R_bool(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
488
- #define R_bool_to_C_bool(attr) RTEST(attr) /**< C boolean <- Ruby boolean */
447
+ #define C_boolean_to_R_boolean(attr) (attr) ? Qtrue : Qfalse /**< C boolean -> Ruby boolean */
448
+ #define R_boolean_to_C_boolean(attr) (MagickBooleanType)RTEST(attr) /**< C boolean <- Ruby boolean */
489
449
  #define C_int_to_R_int(attr) INT2FIX(attr) /**< C int -> Ruby int */
490
450
  #define R_int_to_C_int(attr) NUM2INT(attr) /**< C int <- Ruby int */
491
- #define C_long_to_R_long(attr) INT2NUM(attr) /**< C long -> Ruby long */
451
+ #define C_long_to_R_long(attr) LONG2NUM(attr) /**< C long -> Ruby long */
492
452
  #define R_long_to_C_long(attr) NUM2LONG(attr) /**< C long <- Ruby long */
493
- #define C_ulong_to_R_ulong(attr) UINT2NUM(attr) /**< C unsigned long -> Ruby unsigned long */
453
+ #define C_ulong_to_R_ulong(attr) ULONG2NUM(attr) /**< C unsigned long -> Ruby unsigned long */
494
454
  #define R_ulong_to_C_ulong(attr) NUM2ULONG(attr) /**< C unsigned long <- Ruby unsigned long */
495
455
  #define C_str_to_R_str(attr) attr ? rb_str_new2(attr) : Qnil /**< C string -> Ruby string */
496
456
  #define C_dbl_to_R_dbl(attr) rb_float_new(attr) /**< C double -> Ruby double */
497
457
  #define R_dbl_to_C_dbl(attr) NUM2DBL(attr) /**< C double <- Ruby double */
498
458
 
499
459
  //! define attribute reader
500
- #define DEF_ATTR_READER(class, attr, type) \
501
- VALUE class##_##attr(VALUE self)\
460
+ #define IMPLEMENT_TYPED_ATTR_READER(klass, attr, type, data_type) \
502
461
  {\
503
- class *ptr;\
462
+ klass *ptr;\
504
463
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
505
- (void) rm_check_destroyed(self); \
464
+ rm_check_destroyed(self); \
506
465
  }\
507
- Data_Get_Struct(self, class, ptr);\
466
+ TypedData_Get_Struct(self, klass, data_type, ptr);\
508
467
  return C_##type##_to_R_##type(ptr->attr);\
509
468
  }
510
469
 
511
470
  //! define attribute reader when attribute name is different from the field name
512
- #define DEF_ATTR_READERF(class, attr, field, type) \
513
- VALUE class##_##attr(VALUE self)\
471
+ #define IMPLEMENT_TYPED_ATTR_READERF(klass, attr, field, type, data_type) \
514
472
  {\
515
- class *ptr;\
516
- (void) rm_check_destroyed(self); \
517
- Data_Get_Struct(self, class, ptr);\
473
+ klass *ptr;\
474
+ rm_check_destroyed(self); \
475
+ TypedData_Get_Struct(self, klass, data_type, ptr);\
518
476
  return C_##type##_to_R_##type(ptr->field);\
519
477
  }
520
478
 
521
479
  //! define attribute writer
522
- #define DEF_ATTR_WRITER(class, attr, type) \
523
- VALUE class##_##attr##_eq(VALUE self, VALUE val)\
480
+ #define IMPLEMENT_TYPED_ATTR_WRITER(klass, attr, type, data_type) \
524
481
  {\
525
- class *ptr;\
482
+ klass *ptr;\
526
483
  if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
527
- (void) rm_check_destroyed(self); \
484
+ rm_check_destroyed(self); \
528
485
  }\
529
486
  rb_check_frozen(self);\
530
- Data_Get_Struct(self, class, ptr);\
487
+ TypedData_Get_Struct(self, klass, data_type, ptr);\
531
488
  ptr->attr = R_##type##_to_C_##type(val);\
489
+ return val;\
490
+ }
491
+
492
+ //! define attribute writer when attribute name is different from the field name
493
+ #define IMPLEMENT_TYPED_ATTR_WRITERF(klass, attr, field, type, data_type) \
494
+ {\
495
+ klass *ptr;\
496
+ if (rb_obj_is_kind_of(self, Class_Image) == Qtrue) {\
497
+ rm_check_destroyed(self); \
498
+ }\
499
+ rb_check_frozen(self);\
500
+ TypedData_Get_Struct(self, klass, data_type, ptr);\
501
+ ptr->field = R_##type##_to_C_##type(val);\
532
502
  return self;\
533
503
  }
534
504
 
535
- //! define attribute accessor
536
- #define DEF_ATTR_ACCESSOR(class, attr, type)\
537
- DEF_ATTR_READER(class, attr, type)\
538
- DEF_ATTR_WRITER(class, attr, type)
539
505
 
540
506
  /*
541
507
  * Declare attribute accessors
542
508
  */
543
509
  //! declare attribute reader
544
- #define ATTR_READER(class, attr) \
545
- extern VALUE class##_##attr(VALUE);
510
+ #define ATTR_READER(klass, attr) \
511
+ extern VALUE klass##_##attr(VALUE);
546
512
  //! declare attribute writer
547
- #define ATTR_WRITER(class, attr) \
548
- extern VALUE class##_##attr##_eq(VALUE, VALUE);
513
+ #define ATTR_WRITER(klass, attr) \
514
+ extern VALUE klass##_##attr##_eq(VALUE, VALUE);
549
515
  //! declare attribute accessor
550
- #define ATTR_ACCESSOR(class, attr) \
551
- ATTR_READER(class, attr)\
552
- ATTR_WRITER(class, attr)
553
-
554
- /*
555
- * Define functions to get/set attributes in Image::Info that
556
- * use the Get/SetImageOption API.
557
- */
558
- //! Option attribute reader. For Image::Info.
559
- #define OPTION_ATTR_READER(opt, key) \
560
- VALUE Info_##opt(VALUE self)\
561
- {\
562
- return get_option(self, #key);\
563
- }
564
- //! Option attribute writer. For Image::Info.
565
- #define OPTION_ATTR_WRITER(opt, key) \
566
- VALUE Info_##opt##_eq(VALUE self, VALUE string)\
567
- {\
568
- return set_option(self, #key, string);\
569
- }
570
- //! Option attribute accessor. For Image::Info.
571
- #define OPTION_ATTR_ACCESSOR(opt, key)\
572
- OPTION_ATTR_READER(opt, key)\
573
- OPTION_ATTR_WRITER(opt, key)
574
-
575
-
576
- /*
577
- * Declare Pixel channel attribute writers
578
- */
579
- //! Pixel channel attribute writer.
580
- #define DEF_PIXEL_CHANNEL_WRITER(_channel_) \
581
- extern VALUE \
582
- Pixel_##_channel_##_eq(VALUE self, VALUE v) \
583
- { \
584
- Pixel *pixel; \
585
- \
586
- rb_check_frozen(self); \
587
- Data_Get_Struct(self, Pixel, pixel); \
588
- pixel->_channel_ = APP2QUANTUM(v); \
589
- (void) rb_funcall(self, rm_ID_changed, 0); \
590
- (void) rb_funcall(self, rm_ID_notify_observers, 1, self); \
591
- return QUANTUM2NUM((pixel->_channel_)); \
592
- }
593
-
594
-
595
- /*
596
- * Declare Pixel CMYK channel attribute accessors
597
- */
598
- //! Pixel CMYK channel attribute accessor.
599
- #define DEF_PIXEL_CMYK_CHANNEL_ACCESSOR(_cmyk_channel_, _rgb_channel_) \
600
- extern VALUE \
601
- Pixel_##_cmyk_channel_##_eq(VALUE self, VALUE v) \
602
- { \
603
- Pixel *pixel; \
604
- \
605
- rb_check_frozen(self); \
606
- Data_Get_Struct(self, Pixel, pixel); \
607
- pixel->_rgb_channel_ = APP2QUANTUM(v); \
608
- (void) rb_funcall(self, rm_ID_changed, 0); \
609
- (void) rb_funcall(self, rm_ID_notify_observers, 1, self); \
610
- return QUANTUM2NUM(pixel->_rgb_channel_); \
611
- } \
612
- \
613
- extern VALUE \
614
- Pixel_##_cmyk_channel_(VALUE self) \
615
- { \
616
- Pixel *pixel; \
617
- \
618
- Data_Get_Struct(self, Pixel, pixel); \
619
- return INT2NUM(pixel->_rgb_channel_); \
620
- }
516
+ #define ATTR_ACCESSOR(klass, attr) \
517
+ ATTR_READER(klass, attr)\
518
+ ATTR_WRITER(klass, attr)
621
519
 
622
520
 
623
- /*
624
- * Enum constants - define a subclass of Enum for the specified enumeration.
625
- * Define an instance of the subclass for each member in the enumeration.
626
- * Initialize each instance with its name and value.
627
- */
628
- //! define Ruby enum
629
- #define DEF_ENUM(tag) {\
630
- VALUE _cls, _enum;\
631
- _cls = Class_##tag = rm_define_enum_type(#tag);
632
-
633
- //! define Ruby enumerator elements
634
- #define ENUMERATOR(val)\
635
- _enum = rm_enum_new(_cls, ID2SYM(rb_intern(#val)), INT2NUM(val));\
636
- rb_define_const(Module_Magick, #val, _enum);
637
- //! end of an enumerator
638
- #define END_ENUM }
639
-
640
521
  //! Define a Magick module constant
641
522
  #if MAGICKCORE_QUANTUM_DEPTH == 64
642
523
  #define DEF_CONST(constant) rb_define_const(Module_Magick, #constant, ULL2NUM(constant))
524
+ #define DEF_CONSTV(constant, val) rb_define_const(Module_Magick, #constant, ULL2NUM(val))
643
525
  #else // MAGICKCORE_QUANTUM_DEPTH == 8, 16, 32
644
526
  #define DEF_CONST(constant) rb_define_const(Module_Magick, #constant, UINT2NUM(constant))
527
+ #define DEF_CONSTV(constant, val) rb_define_const(Module_Magick, #constant, UINT2NUM(val))
645
528
  #endif
646
529
 
647
-
648
530
  //! Convert a Ruby enum constant back to a C enum member.
649
531
  #define VALUE_TO_ENUM(value, e, type) \
650
532
  do {\
651
533
  MagickEnum *magick_enum;\
652
534
  if (CLASS_OF(value) != Class_##type)\
653
- rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s"\
654
- , rb_class2name(Class_##type),rb_class2name(CLASS_OF(value)));\
655
- Data_Get_Struct(value, MagickEnum, magick_enum);\
535
+ rb_raise(rb_eTypeError, "wrong enumeration type - expected %s, got %s", \
536
+ rb_class2name(Class_##type), rb_class2name(CLASS_OF(value)));\
537
+ TypedData_Get_Struct(value, MagickEnum, &rm_enum_data_type, magick_enum);\
656
538
  e = (type)(magick_enum->val);\
657
539
  } while(0)
658
540
 
659
- //! create case statement, mapping enum to its name
660
- #define ENUM_TO_NAME(_enum) case _enum: return #_enum;
661
-
662
541
 
663
542
  // Method, external function declarations. These declarations are
664
543
  // grouped by the source file in which the methods are defined.
@@ -668,11 +547,13 @@ Pixel_##_cmyk_channel_(VALUE self) \
668
547
  // the same source file.
669
548
 
670
549
 
671
- // rmmain.c
550
+ extern "C" {
551
+
552
+ // rmmain.cpp
672
553
  extern void Init_RMagick2(void);
673
554
 
674
555
 
675
- // rmagick.c
556
+ // rmagick.cpp
676
557
  extern VALUE Magick_colors(VALUE);
677
558
  extern VALUE Magick_fonts(VALUE);
678
559
  extern VALUE Magick_init_formats(VALUE);
@@ -681,7 +562,7 @@ extern VALUE Magick_set_cache_threshold(VALUE, VALUE);
681
562
  extern VALUE Magick_set_log_event_mask(int, VALUE *, VALUE);
682
563
  extern VALUE Magick_set_log_format(VALUE, VALUE);
683
564
 
684
- // rmdraw.c
565
+ // rmdraw.cpp
685
566
  ATTR_WRITER(Draw, affine)
686
567
  ATTR_WRITER(Draw, align)
687
568
  ATTR_WRITER(Draw, border_color)
@@ -732,7 +613,7 @@ ATTR_WRITER(PolaroidOptions, shadow_color);
732
613
  ATTR_WRITER(PolaroidOptions, border_color);
733
614
 
734
615
 
735
- // rmmontage.c
616
+ // rmmontage.cpp
736
617
  ATTR_WRITER(Montage, background_color)
737
618
  ATTR_WRITER(Montage, border_color)
738
619
  ATTR_WRITER(Montage, border_width)
@@ -755,17 +636,16 @@ extern VALUE Montage_alloc(VALUE);
755
636
  extern VALUE rm_montage_new(void);
756
637
 
757
638
 
758
- // rmilist.c
639
+ // rmilist.cpp
759
640
  extern VALUE ImageList_animate(int, VALUE *, VALUE);
760
641
  extern VALUE ImageList_append(VALUE, VALUE);
761
642
  extern VALUE ImageList_average(VALUE);
762
643
  extern VALUE ImageList_coalesce(VALUE);
644
+ extern VALUE ImageList_combine(int, VALUE *, VALUE);
763
645
  extern VALUE ImageList_composite_layers(int, VALUE *, VALUE);
764
646
  extern VALUE ImageList_deconstruct(VALUE);
765
647
  extern VALUE ImageList_display(VALUE);
766
648
  extern VALUE ImageList_flatten_images(VALUE);
767
- extern VALUE ImageList_fx(int, VALUE *, VALUE);
768
- extern VALUE ImageList_map(int, VALUE *, VALUE);
769
649
  extern VALUE ImageList_montage(VALUE);
770
650
  extern VALUE ImageList_morph(VALUE, VALUE);
771
651
  extern VALUE ImageList_mosaic(VALUE);
@@ -778,7 +658,7 @@ extern VALUE ImageList_write(VALUE, VALUE);
778
658
  extern VALUE rm_imagelist_from_images(Image *);
779
659
 
780
660
 
781
- // rminfo.c
661
+ // rminfo.cpp
782
662
  ATTR_ACCESSOR(Info, antialias)
783
663
  ATTR_ACCESSOR(Info, attenuate)
784
664
  ATTR_ACCESSOR(Info, authenticate)
@@ -802,7 +682,6 @@ ATTR_ACCESSOR(Info, font)
802
682
  ATTR_ACCESSOR(Info, format)
803
683
  ATTR_ACCESSOR(Info, fuzz)
804
684
  ATTR_ACCESSOR(Info, gravity)
805
- ATTR_ACCESSOR(Info, group)
806
685
  ATTR_ACCESSOR(Info, image_type)
807
686
  ATTR_ACCESSOR(Info, interlace)
808
687
  ATTR_ACCESSOR(Info, label)
@@ -814,7 +693,6 @@ ATTR_ACCESSOR(Info, orientation)
814
693
  ATTR_ACCESSOR(Info, origin)
815
694
  ATTR_ACCESSOR(Info, page)
816
695
  ATTR_ACCESSOR(Info, pen)
817
- // ATTR_ACCESSOR(Info, ping) obsolete
818
696
  ATTR_ACCESSOR(Info, pointsize)
819
697
  ATTR_ACCESSOR(Info, quality)
820
698
  ATTR_ACCESSOR(Info, sampling_factor)
@@ -829,7 +707,6 @@ ATTR_ACCESSOR(Info, transparent_color)
829
707
  ATTR_ACCESSOR(Info, undercolor)
830
708
  ATTR_ACCESSOR(Info, units)
831
709
  ATTR_ACCESSOR(Info, view)
832
- //ATTR_ACCESSOR(Info, verbose)
833
710
 
834
711
  extern VALUE Info_alloc(VALUE);
835
712
 
@@ -843,15 +720,26 @@ extern VALUE rm_info_new(void);
843
720
  extern DisposeType rm_dispose_to_enum(const char *);
844
721
  extern GravityType rm_gravity_to_enum(const char *);
845
722
 
846
- // rmimage.c
847
- ATTR_WRITER(Image, alpha)
723
+ // rmkinfo.cpp
724
+
725
+ extern VALUE KernelInfo_alloc(VALUE);
726
+
727
+ extern VALUE KernelInfo_initialize(VALUE, VALUE);
728
+ extern VALUE KernelInfo_unity_add(VALUE, VALUE);
729
+ extern VALUE KernelInfo_scale(VALUE, VALUE, VALUE);
730
+ extern VALUE KernelInfo_scale_geometry(VALUE, VALUE);
731
+ extern VALUE KernelInfo_clone(VALUE);
732
+
733
+ extern VALUE KernelInfo_builtin(VALUE, VALUE, VALUE);
734
+
735
+
736
+ // rmimage.cpp
848
737
  ATTR_ACCESSOR(Image, background_color)
849
738
  ATTR_READER(Image, base_columns)
850
739
  ATTR_READER(Image, base_filename)
851
740
  ATTR_READER(Image, base_rows)
852
741
  ATTR_ACCESSOR(Image, bias)
853
742
  ATTR_ACCESSOR(Image, black_point_compensation)
854
- ATTR_ACCESSOR(Image, blur)
855
743
  ATTR_ACCESSOR(Image, border_color)
856
744
  ATTR_READER(Image, bounding_box)
857
745
  ATTR_ACCESSOR(Image, chromaticity)
@@ -881,8 +769,6 @@ ATTR_ACCESSOR(Image, image_type)
881
769
  ATTR_ACCESSOR(Image, interlace)
882
770
  ATTR_ACCESSOR(Image, iptc_profile)
883
771
  ATTR_ACCESSOR(Image, iterations)
884
- ATTR_WRITER(Image, mask)
885
- ATTR_ACCESSOR(Image, matte)
886
772
  ATTR_ACCESSOR(Image, matte_color)
887
773
  ATTR_READER(Image, mean_error_per_pixel)
888
774
  ATTR_READER(Image, mime_type)
@@ -892,7 +778,6 @@ ATTR_READER(Image, normalized_mean_error)
892
778
  ATTR_READER(Image, normalized_maximum_error)
893
779
  ATTR_READER(Image, number_colors)
894
780
  ATTR_ACCESSOR(Image, offset)
895
- ATTR_WRITER(Image, opacity)
896
781
  ATTR_ACCESSOR(Image, orientation)
897
782
  ATTR_ACCESSOR(Image, page)
898
783
  ATTR_ACCESSOR(Image, pixel_interpolation_method)
@@ -912,7 +797,7 @@ ATTR_ACCESSOR(Image, x_resolution)
912
797
  ATTR_ACCESSOR(Image, y_resolution)
913
798
 
914
799
  extern ChannelType extract_channels(int *, VALUE *);
915
- extern void raise_ChannelType_error(VALUE);
800
+ extern void raise_ChannelType_error(VALUE) ATTRIBUTE_NORETURN;
916
801
  extern void add_format_prefix(Info *, VALUE);
917
802
 
918
803
  extern VALUE Image_alloc(VALUE);
@@ -954,6 +839,11 @@ extern VALUE Image_compare_channel(int, VALUE *, VALUE);
954
839
  extern VALUE Image_channel_depth(int, VALUE *, VALUE);
955
840
  extern VALUE Image_channel_extrema(int, VALUE *, VALUE);
956
841
  extern VALUE Image_channel_mean(int, VALUE *, VALUE);
842
+ #if defined(HAVE_GETIMAGECHANNELENTROPY) || defined(IMAGEMAGICK_7)
843
+ extern VALUE Image_channel_entropy(int, VALUE *, VALUE);
844
+ #else
845
+ extern VALUE Image_channel_entropy(int, VALUE *, VALUE) ATTRIBUTE_NORETURN;
846
+ #endif
957
847
  extern VALUE Image_charcoal(int, VALUE *, VALUE);
958
848
  extern VALUE Image_chop(VALUE, VALUE, VALUE, VALUE, VALUE);
959
849
  extern VALUE Image_clone(VALUE);
@@ -962,7 +852,6 @@ extern VALUE Image_color_flood_fill(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
962
852
  extern VALUE Image_color_histogram(VALUE);
963
853
  extern VALUE Image_colorize(int, VALUE *, VALUE);
964
854
  extern VALUE Image_colormap(int, VALUE *, VALUE);
965
- extern VALUE Image_combine(int, VALUE *, VALUE);
966
855
  extern VALUE Image_composite(int, VALUE *, VALUE);
967
856
  extern VALUE Image_composite_affine(VALUE, VALUE, VALUE);
968
857
  extern VALUE Image_composite_bang(int, VALUE *, VALUE);
@@ -977,6 +866,8 @@ extern VALUE Image_contrast(int, VALUE *, VALUE);
977
866
  extern VALUE Image_contrast_stretch_channel(int, VALUE *, VALUE);
978
867
  extern VALUE Image_convolve(VALUE, VALUE, VALUE);
979
868
  extern VALUE Image_convolve_channel(int, VALUE *, VALUE);
869
+ extern VALUE Image_morphology(VALUE, VALUE, VALUE, VALUE);
870
+ extern VALUE Image_morphology_channel(VALUE, VALUE, VALUE, VALUE, VALUE);
980
871
  extern VALUE Image_copy(VALUE);
981
872
  extern VALUE Image_crop(int, VALUE *, VALUE);
982
873
  extern VALUE Image_crop_bang(int, VALUE *, VALUE);
@@ -1019,6 +910,7 @@ extern VALUE Image_flop_bang(VALUE);
1019
910
  extern VALUE Image_frame(int, VALUE *, VALUE);
1020
911
  extern VALUE Image_from_blob(VALUE, VALUE);
1021
912
  extern VALUE Image_function_channel(int, VALUE *, VALUE);
913
+ extern VALUE Image_fx(int, VALUE *, VALUE);
1022
914
  extern VALUE Image_gamma_channel(int, VALUE *, VALUE);
1023
915
  extern VALUE Image_gamma_correct(int, VALUE *, VALUE);
1024
916
  extern VALUE Image_gaussian_blur(int, VALUE *, VALUE);
@@ -1039,11 +931,10 @@ extern VALUE Image_liquid_rescale(int, VALUE *, VALUE);
1039
931
  extern VALUE Image__load(VALUE, VALUE);
1040
932
  extern VALUE Image_magnify(VALUE);
1041
933
  extern VALUE Image_magnify_bang(VALUE);
1042
- extern VALUE Image_map(int, VALUE *, VALUE);
1043
934
  extern VALUE Image_marshal_dump(VALUE);
1044
935
  extern VALUE Image_marshal_load(VALUE, VALUE);
1045
936
  extern VALUE Image_mask(int, VALUE *, VALUE);
1046
- extern VALUE Image_matte_flood_fill(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
937
+ extern VALUE Image_matte_flood_fill(int, VALUE *, VALUE);
1047
938
  extern VALUE Image_median_filter(int, VALUE *, VALUE);
1048
939
  extern VALUE Image_minify(VALUE);
1049
940
  extern VALUE Image_minify_bang(VALUE);
@@ -1115,7 +1006,6 @@ extern VALUE Image_stereo(VALUE, VALUE);
1115
1006
  extern VALUE Image_store_pixels(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
1116
1007
  extern VALUE Image_strip_bang(VALUE);
1117
1008
  extern VALUE Image_swirl(VALUE, VALUE);
1118
- extern VALUE Image_sync_profiles(VALUE);
1119
1009
  extern VALUE Image_texture_flood_fill(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
1120
1010
  extern VALUE Image_threshold(VALUE, VALUE);
1121
1011
  extern VALUE Image_thumbnail(int, VALUE *, VALUE);
@@ -1144,10 +1034,9 @@ extern VALUE Image_write(VALUE, VALUE);
1144
1034
 
1145
1035
  extern VALUE rm_image_new(Image *);
1146
1036
  extern void rm_image_destroy(void *);
1147
- extern void rm_trace_creation(Image *);
1148
1037
 
1149
1038
 
1150
- // rmfill.c
1039
+ // rmfill.cpp
1151
1040
  extern VALUE GradientFill_alloc(VALUE);
1152
1041
  extern VALUE GradientFill_initialize(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE);
1153
1042
  extern VALUE GradientFill_fill(VALUE, VALUE);
@@ -1157,18 +1046,17 @@ extern VALUE TextureFill_initialize(VALUE, VALUE);
1157
1046
  extern VALUE TextureFill_fill(VALUE, VALUE);
1158
1047
 
1159
1048
 
1160
- // rmpixel.c
1049
+ // rmpixel.cpp
1161
1050
 
1162
1051
 
1163
1052
  ATTR_ACCESSOR(Pixel, red)
1164
1053
  ATTR_ACCESSOR(Pixel, green)
1165
1054
  ATTR_ACCESSOR(Pixel, blue)
1166
- ATTR_ACCESSOR(Pixel, opacity)
1055
+ ATTR_ACCESSOR(Pixel, alpha)
1167
1056
  ATTR_ACCESSOR(Pixel, cyan)
1168
1057
  ATTR_ACCESSOR(Pixel, magenta)
1169
1058
  ATTR_ACCESSOR(Pixel, yellow)
1170
1059
  ATTR_ACCESSOR(Pixel, black)
1171
- extern void destroy_Pixel(Pixel *);
1172
1060
  extern VALUE Pixel_alloc(VALUE);
1173
1061
  extern VALUE Pixel_case_eq(VALUE, VALUE);
1174
1062
  extern VALUE Pixel_clone(VALUE);
@@ -1176,7 +1064,6 @@ extern VALUE Pixel_dup(VALUE);
1176
1064
  extern VALUE Pixel_eql_q(VALUE, VALUE);
1177
1065
  extern VALUE Pixel_fcmp(int, VALUE *, VALUE);
1178
1066
  extern VALUE Pixel_from_color(VALUE, VALUE);
1179
- extern VALUE Pixel_from_HSL(VALUE, VALUE);
1180
1067
  extern VALUE Pixel_from_hsla(int, VALUE *, VALUE);
1181
1068
  extern VALUE Pixel_hash(VALUE);
1182
1069
  extern VALUE Pixel_initialize(int, VALUE *, VALUE);
@@ -1186,42 +1073,57 @@ extern VALUE Pixel_marshal_dump(VALUE);
1186
1073
  extern VALUE Pixel_marshal_load(VALUE, VALUE);
1187
1074
  extern VALUE Pixel_spaceship(VALUE, VALUE);
1188
1075
  extern VALUE Pixel_to_color(int, VALUE *, VALUE);
1189
- extern VALUE Pixel_to_HSL(VALUE);
1190
1076
  extern VALUE Pixel_to_hsla(VALUE);
1191
1077
  extern VALUE Pixel_to_s(VALUE);
1192
1078
 
1193
1079
 
1194
- // rmenum.c
1080
+ // rmenum.cpp
1195
1081
  extern VALUE Enum_alloc(VALUE);
1196
1082
  extern VALUE Enum_initialize(VALUE, VALUE, VALUE);
1197
1083
  extern VALUE Enum_to_s(VALUE);
1198
1084
  extern VALUE Enum_to_i(VALUE);
1199
1085
  extern VALUE Enum_spaceship(VALUE, VALUE);
1086
+ extern VALUE Enum_bitwise_or(VALUE, VALUE);
1200
1087
  extern VALUE Enum_case_eq(VALUE, VALUE);
1201
1088
  extern VALUE Enum_type_initialize(VALUE, VALUE, VALUE);
1089
+ extern VALUE Enum_find(VALUE, int);
1202
1090
  extern VALUE Enum_type_each(VALUE);
1203
1091
  extern VALUE rm_enum_new(VALUE, VALUE, VALUE);
1092
+ extern VALUE ClassType_find(ClassType);
1093
+ extern VALUE ColorspaceType_find(ColorspaceType);
1094
+ extern const char *ComplianceType_name(ComplianceType *);
1095
+ extern VALUE ComplianceType_find(ComplianceType);
1096
+ extern VALUE CompositeOperator_find(CompositeOperator);
1097
+ extern VALUE CompressionType_find(CompressionType);
1098
+ extern VALUE DisposeType_find(DisposeType);
1099
+ extern VALUE EndianType_find(EndianType);
1100
+ extern VALUE FilterType_find(FilterType);
1101
+ extern VALUE GravityType_find(GravityType);
1102
+ extern VALUE ImageType_find(ImageType);
1103
+ extern VALUE InterlaceType_find(InterlaceType);
1104
+ extern VALUE OrientationType_find(OrientationType);
1105
+ extern VALUE PixelInterpolateMethod_find(PixelInterpolateMethod);
1106
+ extern VALUE RenderingIntent_find(RenderingIntent);
1107
+ extern VALUE ResolutionType_find(ResolutionType);
1108
+ extern const char *StorageType_name(StorageType);
1109
+ extern VALUE StretchType_find(StretchType);
1110
+ extern const char *StretchType_name(StretchType);
1111
+ extern VALUE StyleType_find(StyleType);
1112
+ extern const char *StyleType_name(StyleType);
1113
+ extern VALUE VirtualPixelMethod_find(VirtualPixelMethod);
1204
1114
 
1205
1115
 
1206
- // rmstruct.c
1116
+ // rmstruct.cpp
1207
1117
  extern VALUE ChromaticityInfo_to_s(VALUE);
1208
1118
  extern VALUE ChromaticityInfo_new(ChromaticityInfo *);
1209
- extern void Color_to_PixelPacket(PixelPacket *, VALUE);
1210
- extern void Color_to_MagickPixelPacket(Image *, MagickPixelPacket *, VALUE);
1119
+ extern void Color_to_PixelColor(PixelColor *, VALUE);
1120
+ extern void Color_to_MagickPixel(Image *, MagickPixel *, VALUE);
1121
+ extern void Color_to_Pixel(Pixel *, VALUE);
1211
1122
  extern VALUE Color_to_s(VALUE);
1212
1123
  extern VALUE Import_ColorInfo(const ColorInfo *);
1213
- extern VALUE ClassType_new(ClassType);
1214
- extern VALUE ColorspaceType_new(ColorspaceType);
1215
- extern VALUE CompositeOperator_new(CompositeOperator);
1216
- extern VALUE CompressionType_new(CompressionType);
1217
- extern VALUE DisposeType_new(DisposeType);
1218
- extern VALUE EndianType_new(EndianType);
1219
- extern VALUE FilterTypes_new(FilterTypes);
1220
- extern VALUE GravityType_new(GravityType);
1221
1124
  extern VALUE Font_to_s(VALUE);
1222
- extern VALUE ImageType_new(ImageType);
1223
- extern VALUE InterlaceType_new(InterlaceType);
1224
- extern VALUE Pixel_from_MagickPixelPacket(const MagickPixelPacket *);
1125
+ extern VALUE Pixel_from_MagickPixel(const MagickPixel *);
1126
+ extern VALUE Pixel_from_PixelColor(const PixelColor *);
1225
1127
  extern VALUE Pixel_from_PixelPacket(const PixelPacket *);
1226
1128
  extern void Export_PointInfo(PointInfo *, VALUE);
1227
1129
  extern VALUE Import_PointInfo(PointInfo *);
@@ -1229,16 +1131,12 @@ extern VALUE PrimaryInfo_to_s(VALUE);
1229
1131
  extern VALUE Import_PrimaryInfo(PrimaryInfo *);
1230
1132
  extern VALUE RectangleInfo_to_s(VALUE);
1231
1133
  extern VALUE Import_RectangleInfo(RectangleInfo *);
1232
- extern VALUE RenderingIntent_new(RenderingIntent);
1233
- extern VALUE ResolutionType_new(ResolutionType);
1234
1134
  extern VALUE SegmentInfo_to_s(VALUE);
1235
1135
  extern VALUE Import_SegmentInfo(SegmentInfo *);
1236
1136
  extern void Export_AffineMatrix(AffineMatrix *, VALUE);
1237
1137
  extern VALUE Import_AffineMatrix(AffineMatrix *);
1238
1138
  extern void Export_ChromaticityInfo(ChromaticityInfo *, VALUE);
1239
1139
  extern void Export_ColorInfo(ColorInfo *, VALUE);
1240
- extern VALUE InterpolatePixelMethod_new(InterpolatePixelMethod);
1241
- extern VALUE OrientationType_new(OrientationType);
1242
1140
  extern void Export_PrimaryInfo(PrimaryInfo *, VALUE);
1243
1141
  extern void Export_RectangleInfo(RectangleInfo *, VALUE);
1244
1142
  extern void Export_SegmentInfo(SegmentInfo *, VALUE);
@@ -1248,48 +1146,50 @@ extern VALUE Import_TypeInfo(const TypeInfo *);
1248
1146
  extern VALUE TypeMetric_to_s(VALUE);
1249
1147
  extern void Export_TypeInfo(TypeInfo *, VALUE);
1250
1148
  extern VALUE Import_TypeMetric(TypeMetric *);
1251
- extern const char *StorageType_name(StorageType);
1252
- extern VALUE VirtualPixelMethod_new(VirtualPixelMethod);
1253
- extern VALUE LAYERMETHODTYPE_NEW(LAYERMETHODTYPE);
1254
1149
 
1255
1150
 
1256
- // rmutil.c
1151
+ // rmutil.cpp
1257
1152
  extern VALUE ImageMagickError_initialize(int, VALUE *, VALUE);
1258
1153
  extern void *magick_malloc(const size_t);
1259
1154
  extern void *magick_safe_malloc(const size_t, const size_t);
1260
1155
  extern void magick_free(void *);
1261
- extern void *magick_realloc(void *, const size_t);
1262
1156
  extern void *magick_safe_realloc(void *, const size_t, const size_t);
1263
1157
  extern void magick_clone_string(char **, const char *);
1158
+ extern Image *rm_acquire_image(ImageInfo *);
1264
1159
  extern VALUE rm_cur_image(VALUE);
1265
- extern VALUE rm_pixelpacket_to_color_name(Image *, PixelPacket *);
1266
- extern VALUE rm_pixelpacket_to_color_name_info(Info *, PixelPacket *);
1267
- extern VALUE rm_no_freeze(VALUE);
1160
+ extern VALUE rm_pixelcolor_to_color_name(Image *, PixelColor *);
1161
+ extern VALUE rm_pixelcolor_to_color_name_info(Info *, PixelColor *);
1162
+ extern void rm_init_magickpixel(const Image *, MagickPixel *);
1163
+ extern void rm_set_magickpixel(MagickPixel *, const char *);
1164
+ extern VALUE rm_no_freeze(VALUE) ATTRIBUTE_NORETURN;
1268
1165
  extern int rm_strcasecmp(const char *, const char *);
1269
1166
  extern int rm_strncasecmp(const char *, const char *, size_t);
1167
+ extern size_t rm_strnlen_s(const char *, size_t);
1270
1168
  extern void rm_check_ary_len(VALUE, long);
1169
+ extern VALUE rm_check_ary_type(VALUE ary);
1271
1170
  extern Image *rm_check_destroyed(VALUE);
1272
1171
  extern Image *rm_check_frozen(VALUE);
1273
- extern VALUE rm_to_s(VALUE);
1274
- extern char *rm_str2cstr(VALUE, long *);
1172
+ extern char *rm_str2cstr(VALUE, size_t *);
1275
1173
  extern int rm_check_num2dbl(VALUE);
1276
1174
  extern double rm_fuzz_to_dbl(VALUE);
1277
1175
  extern Quantum rm_app2quantum(VALUE);
1278
- extern double rm_percentage(VALUE,double);
1279
- extern double rm_str_to_pct(VALUE);
1176
+ extern double rm_percentage(VALUE, double);
1177
+ extern double rm_percentage2(VALUE, double, bool);
1178
+ extern double rm_str_to_pct(VALUE, bool);
1280
1179
  extern VALUE rm_define_enum_type(const char *);
1281
- extern void rm_write_temp_image(Image *, char *);
1180
+ extern void rm_write_temp_image(Image *, char *, size_t);
1282
1181
  extern void rm_delete_temp_image(char *);
1283
- extern void rm_not_implemented(void);
1182
+ extern void rm_not_implemented(void) ATTRIBUTE_NORETURN;
1284
1183
  extern void rm_attr_write(VALUE, VALUE);
1285
- extern void rm_get_geometry(VALUE, long *, long *, unsigned long *, unsigned long *, int *);
1286
1184
  extern const char *rm_get_property(const Image *, const char *);
1287
1185
  extern MagickBooleanType rm_set_property(Image *, const char *, const char *);
1288
1186
  extern void rm_set_user_artifact(Image *, Info *);
1289
- void rm_set_magick_pixel_packet(Pixel *, MagickPixelPacket *);
1290
1187
  extern void rm_sync_image_options(Image *, Info *);
1291
1188
  extern void rm_split(Image *);
1292
- extern void rm_magick_error(const char *, const char *);
1189
+ extern void rm_magick_error(const char *);
1190
+ #if defined(IMAGEMAGICK_7)
1191
+ extern void rm_set_pixelinfo_alpha(PixelInfo *, const MagickRealType);
1192
+ #endif
1293
1193
 
1294
1194
  //! whether to retain on errors
1295
1195
  typedef enum
@@ -1298,16 +1198,43 @@ typedef enum
1298
1198
  DestroyOnError = 1 /**< do not retain on error */
1299
1199
  } ErrorRetention;
1300
1200
 
1301
- extern void rm_check_image_exception(Image *, ErrorRetention);
1201
+ typedef enum
1202
+ {
1203
+ RetainExceptionRetention,
1204
+ DestroyExceptionRetention
1205
+ } ExceptionRetention;
1206
+
1302
1207
  extern void rm_check_exception(ExceptionInfo *, Image *, ErrorRetention);
1303
1208
  extern void rm_ensure_result(Image *);
1304
1209
  extern Image *rm_clone_image(Image *);
1305
- extern MagickBooleanType rm_progress_monitor(const char *, const MagickOffsetType, const MagickSizeType, void *);
1306
1210
  extern VALUE rm_exif_by_entry(Image *);
1307
1211
  extern VALUE rm_exif_by_number(Image *);
1308
1212
  extern void rm_get_optional_arguments(VALUE);
1309
- extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *);
1213
+ extern void rm_fatal_error_handler(const ExceptionType, const char *, const char *) ATTRIBUTE_NORETURN;
1310
1214
  extern void rm_error_handler(const ExceptionType, const char *, const char *);
1311
1215
  extern void rm_warning_handler(const ExceptionType, const char *, const char *);
1216
+ extern MagickBooleanType rm_should_raise_exception(ExceptionInfo *, const ExceptionRetention);
1217
+ extern void rm_raise_exception(ExceptionInfo *);
1218
+ extern VALUE rm_io_path(VALUE);
1219
+ #if defined(IMAGEMAGICK_6)
1220
+ extern void rm_check_image_exception(Image *, ErrorRetention);
1312
1221
  #endif
1313
1222
 
1223
+ #if !defined(IMAGEMAGICK_GREATER_THAN_EQUAL_6_9_0)
1224
+ /* UnityAddKernelInfo() was private function until IM 6.9 */
1225
+ MagickExport void UnityAddKernelInfo(KernelInfo *kernel, const double scale);
1226
+ /* ScaleKernelInfo() was private function until IM 6.9 */
1227
+ MagickExport void ScaleKernelInfo(KernelInfo *kernel, const double scaling_factor, const GeometryFlags normalize_flags);
1228
+ #endif
1229
+
1230
+ #if (RUBY_VERSION_MAJOR == 2 && RUBY_VERSION_MINOR < 7)
1231
+ #define RESCUE_FUNC(func) (VALUE (*)(ANYARGS))(func)
1232
+ #define RESCUE_EXCEPTION_HANDLER_FUNC(func) (VALUE (*)(ANYARGS))(func)
1233
+ #else
1234
+ #define RESCUE_FUNC(func) (VALUE(*)(VALUE))(func)
1235
+ #define RESCUE_EXCEPTION_HANDLER_FUNC(func) (VALUE(*)(VALUE, VALUE))(func)
1236
+ #endif
1237
+
1238
+ } // extern "C"
1239
+
1240
+ #endif