rmagick 2.13.2 → 4.2.2

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

Potentially problematic release.


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

Files changed (380) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +63 -0
  3. data/.editorconfig +17 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/workflows/ci.yml +107 -0
  6. data/.gitignore +25 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +37 -0
  9. data/.rubocop_todo.yml +449 -0
  10. data/.yardopts +5 -0
  11. data/CHANGELOG.md +1277 -0
  12. data/CODE_OF_CONDUCT.md +128 -0
  13. data/CONTRIBUTING.md +81 -0
  14. data/Gemfile +4 -0
  15. data/LICENSE +20 -0
  16. data/README.md +324 -0
  17. data/Rakefile +190 -0
  18. data/before_install_linux.sh +69 -0
  19. data/before_install_osx.sh +57 -0
  20. data/deprecated/RMagick.rb +6 -0
  21. data/ext/RMagick/extconf.rb +334 -333
  22. data/ext/RMagick/rmagick.c +129 -127
  23. data/ext/RMagick/rmagick.h +221 -320
  24. data/ext/RMagick/rmdraw.c +458 -767
  25. data/ext/RMagick/rmenum.c +305 -752
  26. data/ext/RMagick/rmfill.c +231 -199
  27. data/ext/RMagick/rmilist.c +437 -478
  28. data/ext/RMagick/rmimage.c +6130 -5342
  29. data/ext/RMagick/rminfo.c +695 -833
  30. data/ext/RMagick/rmkinfo.c +198 -0
  31. data/ext/RMagick/rmmain.c +752 -506
  32. data/ext/RMagick/rmmontage.c +94 -152
  33. data/ext/RMagick/rmpixel.c +619 -425
  34. data/ext/RMagick/rmstruct.c +206 -309
  35. data/ext/RMagick/rmutil.c +514 -344
  36. data/lib/rmagick/version.rb +5 -0
  37. data/lib/rmagick.rb +1 -0
  38. data/lib/rmagick_internal.rb +1922 -0
  39. data/lib/rvg/clippath.rb +35 -39
  40. data/lib/rvg/container.rb +123 -124
  41. data/lib/rvg/deep_equal.rb +45 -49
  42. data/lib/rvg/describable.rb +41 -47
  43. data/lib/rvg/embellishable.rb +380 -411
  44. data/lib/rvg/misc.rb +691 -711
  45. data/lib/rvg/paint.rb +43 -47
  46. data/lib/rvg/pathdata.rb +119 -125
  47. data/lib/rvg/rvg.rb +214 -213
  48. data/lib/rvg/stretchable.rb +153 -162
  49. data/lib/rvg/stylable.rb +111 -117
  50. data/lib/rvg/text.rb +169 -180
  51. data/lib/rvg/transformable.rb +121 -127
  52. data/lib/rvg/units.rb +58 -61
  53. data/rmagick.gemspec +36 -16
  54. metadata +188 -365
  55. data/ChangeLog +0 -773
  56. data/Doxyfile +0 -1514
  57. data/README-Mac-OSX.txt +0 -1
  58. data/README.html +0 -10
  59. data/build_tarball.rake +0 -215
  60. data/doc/comtasks.html +0 -287
  61. data/doc/constants.html +0 -1581
  62. data/doc/css/doc.css +0 -299
  63. data/doc/css/popup.css +0 -34
  64. data/doc/css/ref.css +0 -67
  65. data/doc/draw.html +0 -3269
  66. data/doc/ex/InitialCoords.rb +0 -23
  67. data/doc/ex/NewCoordSys.rb +0 -32
  68. data/doc/ex/OrigCoordSys.rb +0 -18
  69. data/doc/ex/PreserveAspectRatio.rb +0 -205
  70. data/doc/ex/RotateScale.rb +0 -37
  71. data/doc/ex/Skew.rb +0 -38
  72. data/doc/ex/Use01.rb +0 -16
  73. data/doc/ex/Use02.rb +0 -21
  74. data/doc/ex/Use03.rb +0 -16
  75. data/doc/ex/ViewBox.rb +0 -33
  76. data/doc/ex/adaptive_threshold.rb +0 -10
  77. data/doc/ex/add_noise.rb +0 -17
  78. data/doc/ex/affine.rb +0 -48
  79. data/doc/ex/affine_transform.rb +0 -20
  80. data/doc/ex/arc.rb +0 -49
  81. data/doc/ex/arcpath.rb +0 -33
  82. data/doc/ex/arcs01.rb +0 -28
  83. data/doc/ex/arcs02.rb +0 -61
  84. data/doc/ex/average.rb +0 -15
  85. data/doc/ex/axes.rb +0 -64
  86. data/doc/ex/baseline_shift01.rb +0 -18
  87. data/doc/ex/bilevel_channel.rb +0 -9
  88. data/doc/ex/blur_image.rb +0 -12
  89. data/doc/ex/border.rb +0 -10
  90. data/doc/ex/bounding_box.rb +0 -44
  91. data/doc/ex/cbezier1.rb +0 -42
  92. data/doc/ex/cbezier2.rb +0 -42
  93. data/doc/ex/cbezier3.rb +0 -42
  94. data/doc/ex/cbezier4.rb +0 -43
  95. data/doc/ex/cbezier5.rb +0 -43
  96. data/doc/ex/cbezier6.rb +0 -53
  97. data/doc/ex/channel.rb +0 -26
  98. data/doc/ex/charcoal.rb +0 -12
  99. data/doc/ex/chop.rb +0 -29
  100. data/doc/ex/circle.rb +0 -33
  101. data/doc/ex/circle01.rb +0 -17
  102. data/doc/ex/clip_path.rb +0 -60
  103. data/doc/ex/coalesce.rb +0 -60
  104. data/doc/ex/color_fill_to_border.rb +0 -29
  105. data/doc/ex/color_floodfill.rb +0 -28
  106. data/doc/ex/color_histogram.rb +0 -48
  107. data/doc/ex/color_reset.rb +0 -11
  108. data/doc/ex/colorize.rb +0 -16
  109. data/doc/ex/colors.rb +0 -64
  110. data/doc/ex/compose_mask.rb +0 -23
  111. data/doc/ex/composite.rb +0 -135
  112. data/doc/ex/composite_layers.rb +0 -53
  113. data/doc/ex/composite_tiled.rb +0 -23
  114. data/doc/ex/contrast.rb +0 -36
  115. data/doc/ex/crop.rb +0 -31
  116. data/doc/ex/crop_with_gravity.rb +0 -46
  117. data/doc/ex/cubic01.rb +0 -45
  118. data/doc/ex/cubic02.rb +0 -94
  119. data/doc/ex/cycle_colormap.rb +0 -21
  120. data/doc/ex/dissolve.rb +0 -13
  121. data/doc/ex/drawcomp.rb +0 -42
  122. data/doc/ex/drop_shadow.rb +0 -60
  123. data/doc/ex/edge.rb +0 -11
  124. data/doc/ex/ellipse.rb +0 -45
  125. data/doc/ex/ellipse01.rb +0 -22
  126. data/doc/ex/emboss.rb +0 -11
  127. data/doc/ex/enhance.rb +0 -28
  128. data/doc/ex/equalize.rb +0 -11
  129. data/doc/ex/evenodd.rb +0 -43
  130. data/doc/ex/fill_pattern.rb +0 -26
  131. data/doc/ex/flatten_images.rb +0 -36
  132. data/doc/ex/flip.rb +0 -11
  133. data/doc/ex/flop.rb +0 -11
  134. data/doc/ex/font_styles.rb +0 -34
  135. data/doc/ex/fonts.rb +0 -20
  136. data/doc/ex/frame.rb +0 -12
  137. data/doc/ex/gaussian_blur.rb +0 -11
  138. data/doc/ex/get_multiline_type_metrics.rb +0 -42
  139. data/doc/ex/get_pixels.rb +0 -48
  140. data/doc/ex/get_type_metrics.rb +0 -146
  141. data/doc/ex/gradientfill.rb +0 -27
  142. data/doc/ex/grav.rb +0 -46
  143. data/doc/ex/gravity.rb +0 -79
  144. data/doc/ex/group.rb +0 -26
  145. data/doc/ex/hatchfill.rb +0 -27
  146. data/doc/ex/image.rb +0 -46
  147. data/doc/ex/images/Apple.miff +0 -0
  148. data/doc/ex/images/Ballerina.jpg +0 -0
  149. data/doc/ex/images/Ballerina3.jpg +0 -0
  150. data/doc/ex/images/Button_0.gif +0 -0
  151. data/doc/ex/images/Button_1.gif +0 -0
  152. data/doc/ex/images/Button_2.gif +0 -0
  153. data/doc/ex/images/Button_3.gif +0 -0
  154. data/doc/ex/images/Button_4.gif +0 -0
  155. data/doc/ex/images/Button_5.gif +0 -0
  156. data/doc/ex/images/Button_6.gif +0 -0
  157. data/doc/ex/images/Button_7.gif +0 -0
  158. data/doc/ex/images/Button_8.gif +0 -0
  159. data/doc/ex/images/Button_9.gif +0 -0
  160. data/doc/ex/images/Button_A.gif +0 -0
  161. data/doc/ex/images/Button_B.gif +0 -0
  162. data/doc/ex/images/Button_C.gif +0 -0
  163. data/doc/ex/images/Button_D.gif +0 -0
  164. data/doc/ex/images/Button_E.gif +0 -0
  165. data/doc/ex/images/Button_F.gif +0 -0
  166. data/doc/ex/images/Button_G.gif +0 -0
  167. data/doc/ex/images/Button_H.gif +0 -0
  168. data/doc/ex/images/Button_I.gif +0 -0
  169. data/doc/ex/images/Button_J.gif +0 -0
  170. data/doc/ex/images/Button_K.gif +0 -0
  171. data/doc/ex/images/Button_L.gif +0 -0
  172. data/doc/ex/images/Button_M.gif +0 -0
  173. data/doc/ex/images/Button_N.gif +0 -0
  174. data/doc/ex/images/Button_O.gif +0 -0
  175. data/doc/ex/images/Button_P.gif +0 -0
  176. data/doc/ex/images/Button_Q.gif +0 -0
  177. data/doc/ex/images/Button_R.gif +0 -0
  178. data/doc/ex/images/Button_S.gif +0 -0
  179. data/doc/ex/images/Button_T.gif +0 -0
  180. data/doc/ex/images/Button_U.gif +0 -0
  181. data/doc/ex/images/Button_V.gif +0 -0
  182. data/doc/ex/images/Button_W.gif +0 -0
  183. data/doc/ex/images/Button_X.gif +0 -0
  184. data/doc/ex/images/Button_Y.gif +0 -0
  185. data/doc/ex/images/Button_Z.gif +0 -0
  186. data/doc/ex/images/Cheetah.jpg +0 -0
  187. data/doc/ex/images/Coffee.wmf +0 -0
  188. data/doc/ex/images/Flower_Hat.jpg +0 -0
  189. data/doc/ex/images/Gold_Statue.jpg +0 -0
  190. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  191. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  192. data/doc/ex/images/Leaf.miff +0 -0
  193. data/doc/ex/images/No.wmf +0 -0
  194. data/doc/ex/images/Polynesia.jpg +0 -0
  195. data/doc/ex/images/Red_Rocks.jpg +0 -0
  196. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  197. data/doc/ex/images/Shorts.jpg +0 -0
  198. data/doc/ex/images/Snake.wmf +0 -0
  199. data/doc/ex/images/Violin.jpg +0 -0
  200. data/doc/ex/images/Yellow_Rose.miff +0 -0
  201. data/doc/ex/images/big-duck.gif +0 -0
  202. data/doc/ex/images/duck.gif +0 -0
  203. data/doc/ex/images/duck0.gif +0 -0
  204. data/doc/ex/images/duck1.gif +0 -0
  205. data/doc/ex/images/duck10.gif +0 -0
  206. data/doc/ex/images/duck11.gif +0 -0
  207. data/doc/ex/images/duck12.gif +0 -0
  208. data/doc/ex/images/duck13.gif +0 -0
  209. data/doc/ex/images/duck14.gif +0 -0
  210. data/doc/ex/images/duck15.gif +0 -0
  211. data/doc/ex/images/duck2.gif +0 -0
  212. data/doc/ex/images/duck3.gif +0 -0
  213. data/doc/ex/images/duck4.gif +0 -0
  214. data/doc/ex/images/duck5.gif +0 -0
  215. data/doc/ex/images/duck6.gif +0 -0
  216. data/doc/ex/images/duck7.gif +0 -0
  217. data/doc/ex/images/duck8.gif +0 -0
  218. data/doc/ex/images/duck9.gif +0 -0
  219. data/doc/ex/images/graydient230x6.gif +0 -0
  220. data/doc/ex/images/logo400x83.gif +0 -0
  221. data/doc/ex/images/model.miff +0 -0
  222. data/doc/ex/images/notimplemented.gif +0 -0
  223. data/doc/ex/images/smile.miff +0 -0
  224. data/doc/ex/images/spin.gif +0 -0
  225. data/doc/ex/implode.rb +0 -34
  226. data/doc/ex/level.rb +0 -11
  227. data/doc/ex/level_colors.rb +0 -11
  228. data/doc/ex/line.rb +0 -42
  229. data/doc/ex/line01.rb +0 -23
  230. data/doc/ex/mask.rb +0 -36
  231. data/doc/ex/matte_fill_to_border.rb +0 -40
  232. data/doc/ex/matte_floodfill.rb +0 -33
  233. data/doc/ex/matte_replace.rb +0 -40
  234. data/doc/ex/median_filter.rb +0 -28
  235. data/doc/ex/modulate.rb +0 -11
  236. data/doc/ex/mono.rb +0 -23
  237. data/doc/ex/morph.rb +0 -26
  238. data/doc/ex/mosaic.rb +0 -35
  239. data/doc/ex/motion_blur.rb +0 -11
  240. data/doc/ex/negate.rb +0 -11
  241. data/doc/ex/negate_channel.rb +0 -9
  242. data/doc/ex/nested_rvg.rb +0 -21
  243. data/doc/ex/nonzero.rb +0 -43
  244. data/doc/ex/normalize.rb +0 -11
  245. data/doc/ex/oil_paint.rb +0 -11
  246. data/doc/ex/opacity.rb +0 -37
  247. data/doc/ex/ordered_dither.rb +0 -11
  248. data/doc/ex/path.rb +0 -64
  249. data/doc/ex/pattern1.rb +0 -25
  250. data/doc/ex/pattern2.rb +0 -26
  251. data/doc/ex/polaroid.rb +0 -28
  252. data/doc/ex/polygon.rb +0 -24
  253. data/doc/ex/polygon01.rb +0 -23
  254. data/doc/ex/polyline.rb +0 -23
  255. data/doc/ex/polyline01.rb +0 -23
  256. data/doc/ex/posterize.rb +0 -8
  257. data/doc/ex/preview.rb +0 -9
  258. data/doc/ex/qbezierpath.rb +0 -52
  259. data/doc/ex/quad01.rb +0 -36
  260. data/doc/ex/quantize-m.rb +0 -25
  261. data/doc/ex/radial_blur.rb +0 -9
  262. data/doc/ex/raise.rb +0 -8
  263. data/doc/ex/random_threshold_channel.rb +0 -13
  264. data/doc/ex/rect01.rb +0 -15
  265. data/doc/ex/rect02.rb +0 -22
  266. data/doc/ex/rectangle.rb +0 -35
  267. data/doc/ex/reduce_noise.rb +0 -28
  268. data/doc/ex/remap.rb +0 -12
  269. data/doc/ex/remap_images.rb +0 -21
  270. data/doc/ex/resize_to_fill.rb +0 -10
  271. data/doc/ex/resize_to_fit.rb +0 -10
  272. data/doc/ex/roll.rb +0 -9
  273. data/doc/ex/rotate.rb +0 -45
  274. data/doc/ex/rotate_f.rb +0 -14
  275. data/doc/ex/roundrect.rb +0 -34
  276. data/doc/ex/rubyname.rb +0 -30
  277. data/doc/ex/rvg_clippath.rb +0 -14
  278. data/doc/ex/rvg_linecap.rb +0 -43
  279. data/doc/ex/rvg_linejoin.rb +0 -41
  280. data/doc/ex/rvg_opacity.rb +0 -19
  281. data/doc/ex/rvg_pattern.rb +0 -26
  282. data/doc/ex/rvg_stroke_dasharray.rb +0 -12
  283. data/doc/ex/segment.rb +0 -11
  284. data/doc/ex/sepiatone.rb +0 -8
  285. data/doc/ex/shade.rb +0 -11
  286. data/doc/ex/shadow.rb +0 -31
  287. data/doc/ex/shave.rb +0 -15
  288. data/doc/ex/shear.rb +0 -10
  289. data/doc/ex/sketch.rb +0 -18
  290. data/doc/ex/skewx.rb +0 -52
  291. data/doc/ex/skewy.rb +0 -47
  292. data/doc/ex/smile.rb +0 -125
  293. data/doc/ex/solarize.rb +0 -11
  294. data/doc/ex/sparse_color.rb +0 -55
  295. data/doc/ex/splice.rb +0 -9
  296. data/doc/ex/spread.rb +0 -11
  297. data/doc/ex/stegano.rb +0 -55
  298. data/doc/ex/stroke_dasharray.rb +0 -43
  299. data/doc/ex/stroke_fill.rb +0 -11
  300. data/doc/ex/stroke_linecap.rb +0 -44
  301. data/doc/ex/stroke_linejoin.rb +0 -48
  302. data/doc/ex/stroke_width.rb +0 -49
  303. data/doc/ex/swirl.rb +0 -17
  304. data/doc/ex/text.rb +0 -37
  305. data/doc/ex/text01.rb +0 -17
  306. data/doc/ex/text_align.rb +0 -36
  307. data/doc/ex/text_antialias.rb +0 -38
  308. data/doc/ex/text_styles.rb +0 -21
  309. data/doc/ex/text_undercolor.rb +0 -28
  310. data/doc/ex/texture_fill_to_border.rb +0 -34
  311. data/doc/ex/texture_floodfill.rb +0 -32
  312. data/doc/ex/texturefill.rb +0 -25
  313. data/doc/ex/threshold.rb +0 -13
  314. data/doc/ex/to_blob.rb +0 -14
  315. data/doc/ex/translate.rb +0 -39
  316. data/doc/ex/transparent.rb +0 -38
  317. data/doc/ex/transpose.rb +0 -9
  318. data/doc/ex/transverse.rb +0 -9
  319. data/doc/ex/tref01.rb +0 -25
  320. data/doc/ex/triangle01.rb +0 -16
  321. data/doc/ex/trim.rb +0 -24
  322. data/doc/ex/tspan01.rb +0 -18
  323. data/doc/ex/tspan02.rb +0 -19
  324. data/doc/ex/tspan03.rb +0 -21
  325. data/doc/ex/unsharp_mask.rb +0 -28
  326. data/doc/ex/viewex.rb +0 -35
  327. data/doc/ex/vignette.rb +0 -12
  328. data/doc/ex/watermark.rb +0 -28
  329. data/doc/ex/wave.rb +0 -9
  330. data/doc/ex/wet_floor.rb +0 -59
  331. data/doc/ex/writing_mode01.rb +0 -27
  332. data/doc/ex/writing_mode02.rb +0 -26
  333. data/doc/ilist.html +0 -2056
  334. data/doc/image1.html +0 -4680
  335. data/doc/image2.html +0 -3665
  336. data/doc/image3.html +0 -4522
  337. data/doc/imageattrs.html +0 -1638
  338. data/doc/imusage.html +0 -514
  339. data/doc/index.html +0 -416
  340. data/doc/info.html +0 -1499
  341. data/doc/magick.html +0 -565
  342. data/doc/optequiv.html +0 -2435
  343. data/doc/rvg.html +0 -975
  344. data/doc/rvgclip.html +0 -248
  345. data/doc/rvggroup.html +0 -305
  346. data/doc/rvgimage.html +0 -289
  347. data/doc/rvgpattern.html +0 -475
  348. data/doc/rvgshape.html +0 -406
  349. data/doc/rvgstyle.html +0 -270
  350. data/doc/rvgtext.html +0 -465
  351. data/doc/rvgtspan.html +0 -238
  352. data/doc/rvgtut.html +0 -530
  353. data/doc/rvguse.html +0 -145
  354. data/doc/rvgxform.html +0 -294
  355. data/doc/scripts/doc.js +0 -22
  356. data/doc/scripts/stripeTables.js +0 -23
  357. data/doc/struct.html +0 -1339
  358. data/doc/usage.html +0 -1621
  359. data/examples/constitute.rb +0 -7
  360. data/examples/crop_with_gravity.rb +0 -46
  361. data/examples/demo.rb +0 -324
  362. data/examples/describe.rb +0 -44
  363. data/examples/find_similar_region.rb +0 -34
  364. data/examples/histogram.rb +0 -325
  365. data/examples/identify.rb +0 -187
  366. data/examples/image_opacity.rb +0 -29
  367. data/examples/import_export.rb +0 -31
  368. data/examples/pattern_fill.rb +0 -38
  369. data/examples/rotating_text.rb +0 -45
  370. data/examples/spinner.rb +0 -50
  371. data/examples/thumbnail.rb +0 -65
  372. data/examples/vignette.rb +0 -79
  373. data/ext/RMagick/MANIFEST +0 -358
  374. data/lib/RMagick.rb +0 -1962
  375. data/metaconfig +0 -7
  376. data/post-clean.rb +0 -12
  377. data/post-install.rb +0 -50
  378. data/post-setup.rb +0 -254
  379. data/setup.rb +0 -1585
  380. data/uninstall.rb +0 -76
data/ext/RMagick/rmfill.c CHANGED
@@ -19,8 +19,8 @@ typedef struct
19
19
  double y1; /**< y position of first point */
20
20
  double x2; /**< x position of second point */
21
21
  double y2; /**< y position of second point */
22
- PixelPacket start_color; /**< the start color */
23
- PixelPacket stop_color; /**< the stop color */
22
+ PixelColor start_color; /**< the start color */
23
+ PixelColor stop_color; /**< the stop color */
24
24
  } rm_GradientFill;
25
25
 
26
26
  /** Data associated with a TextureFill */
@@ -44,10 +44,7 @@ static void free_Fill(void *fill)
44
44
  /**
45
45
  * Create new GradientFill object.
46
46
  *
47
- * No Ruby usage (internal function)
48
- *
49
- * @param class the Ruby class to use
50
- * @return a new GradientFill object
47
+ * @return [Magick::GradientFill] a new GradientFill object
51
48
  */
52
49
  VALUE
53
50
  GradientFill_alloc(VALUE class)
@@ -59,19 +56,15 @@ GradientFill_alloc(VALUE class)
59
56
 
60
57
 
61
58
  /**
62
- * Store the vector points and the start and stop colors.
63
- *
64
- * Ruby usage:
65
- * - @verbatim GradientFill#initialize(x1,y1,x2,y2,start_color,stop_color) @endverbatim
66
- *
67
- * @param self this object
68
- * @param x1 x position of first point
69
- * @param y1 y position of first point
70
- * @param x2 x position of second point
71
- * @param y2 y position of second point
72
- * @param start_color the start color
73
- * @param stop_color the stop color
74
- * @return self
59
+ * Initialize GradientFill object.
60
+ *
61
+ * @param x1 [Float] x position of first point
62
+ * @param y1 [Float] y position of first point
63
+ * @param x2 [Float] x position of second point
64
+ * @param y2 [Float] y position of second point
65
+ * @param start_color [Magick::Pixel, String] the start color
66
+ * @param stop_color [Magick::Pixel, String] the stop color
67
+ * @return [Magick::GradientFill] self
75
68
  */
76
69
  VALUE
77
70
  GradientFill_initialize(
@@ -91,8 +84,8 @@ GradientFill_initialize(
91
84
  fill->y1 = NUM2DBL(y1);
92
85
  fill->x2 = NUM2DBL(x2);
93
86
  fill->y2 = NUM2DBL(y2);
94
- Color_to_PixelPacket(&fill->start_color, start_color);
95
- Color_to_PixelPacket(&fill->stop_color, stop_color);
87
+ Color_to_PixelColor(&fill->start_color, start_color);
88
+ Color_to_PixelColor(&fill->stop_color, stop_color);
96
89
 
97
90
  return self;
98
91
  }
@@ -113,17 +106,15 @@ point_fill(
113
106
  Image *image,
114
107
  double x0,
115
108
  double y0,
116
- PixelPacket *start_color,
117
- PixelPacket *stop_color)
109
+ PixelColor *start_color,
110
+ PixelColor *stop_color)
118
111
  {
119
112
  double steps, distance;
120
- unsigned long x, y;
113
+ ssize_t x, y;
121
114
  MagickRealType red_step, green_step, blue_step;
122
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
123
- ExceptionInfo exception;
115
+ ExceptionInfo *exception;
124
116
 
125
- GetExceptionInfo(&exception);
126
- #endif
117
+ exception = AcquireExceptionInfo();
127
118
 
128
119
  steps = sqrt((double)((image->columns-x0)*(image->columns-x0)
129
120
  + (image->rows-y0)*(image->rows-y0)));
@@ -132,38 +123,41 @@ point_fill(
132
123
  green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
133
124
  blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
134
125
 
135
- for (y = 0; y < image->rows; y++)
126
+ for (y = 0; y < (ssize_t) image->rows; y++)
136
127
  {
137
- PixelPacket *row_pixels;
138
-
139
- #if defined(HAVE_QUEUEAUTHENTICPIXELS)
140
- row_pixels = QueueAuthenticPixels(image, 0, (long int)y, image->columns, 1, &exception);
141
- CHECK_EXCEPTION()
128
+ #if defined(IMAGEMAGICK_7)
129
+ Quantum *row_pixels;
142
130
  #else
143
- row_pixels = SetImagePixels(image, 0, (long int)y, image->columns, 1);
144
- rm_check_image_exception(image, RetainOnError);
131
+ PixelPacket *row_pixels;
145
132
  #endif
146
- for (x = 0; x < image->columns; x++)
133
+
134
+ row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
135
+ CHECK_EXCEPTION();
136
+
137
+ for (x = 0; x < (ssize_t) image->columns; x++)
147
138
  {
148
139
  distance = sqrt((double)((x-x0)*(x-x0)+(y-y0)*(y-y0)));
140
+
141
+ #if defined(IMAGEMAGICK_7)
142
+ SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
143
+ SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
144
+ SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
145
+ SetPixelAlpha(image, OpaqueAlpha, row_pixels);
146
+
147
+ row_pixels += GetPixelChannels(image);
148
+ #else
149
149
  row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
150
150
  row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
151
151
  row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
152
152
  row_pixels[x].opacity = OpaqueOpacity;
153
+ #endif
153
154
  }
154
155
 
155
- #if defined(HAVE_SYNCAUTHENTICPIXELS)
156
- SyncAuthenticPixels(image, &exception);
157
- CHECK_EXCEPTION()
158
- #else
159
- SyncImagePixels(image);
160
- rm_check_image_exception(image, RetainOnError);
161
- #endif
156
+ SyncAuthenticPixels(image, exception);
157
+ CHECK_EXCEPTION();
162
158
  }
163
159
 
164
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
165
- DestroyExceptionInfo(&exception);
166
- #endif
160
+ DestroyExceptionInfo(exception);
167
161
  }
168
162
 
169
163
  /**
@@ -181,19 +175,19 @@ static void
181
175
  vertical_fill(
182
176
  Image *image,
183
177
  double x1,
184
- PixelPacket *start_color,
185
- PixelPacket *stop_color)
178
+ PixelColor *start_color,
179
+ PixelColor *stop_color)
186
180
  {
187
181
  double steps;
188
- unsigned long x, y;
189
- PixelPacket *master;
182
+ ssize_t x, y;
190
183
  MagickRealType red_step, green_step, blue_step;
191
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
192
- ExceptionInfo exception;
193
-
194
- GetExceptionInfo(&exception);
184
+ ExceptionInfo *exception;
185
+ #if defined(IMAGEMAGICK_6)
186
+ PixelPacket *master;
195
187
  #endif
196
188
 
189
+ exception = AcquireExceptionInfo();
190
+
197
191
  steps = FMAX(x1, ((long)image->columns)-x1);
198
192
 
199
193
  // If x is to the left of the x-axis, add that many steps so that
@@ -208,11 +202,37 @@ vertical_fill(
208
202
  green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
209
203
  blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
210
204
 
205
+
206
+ #if defined(IMAGEMAGICK_7)
207
+ for (y = 0; y < (ssize_t) image->rows; y++)
208
+ {
209
+ Quantum *row_pixels;
210
+
211
+ row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
212
+ CHECK_EXCEPTION();
213
+
214
+ for (x = 0; x < (ssize_t) image->columns; x++)
215
+ {
216
+ double distance = fabs(x1 - x);
217
+ SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
218
+ SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
219
+ SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
220
+ SetPixelAlpha(image, OpaqueAlpha, row_pixels);
221
+
222
+ row_pixels += GetPixelChannels(image);
223
+ }
224
+
225
+ SyncAuthenticPixels(image, exception);
226
+ CHECK_EXCEPTION();
227
+ }
228
+
229
+ DestroyExceptionInfo(exception);
230
+ #else
211
231
  // All the rows are the same. Make a "master row" and simply copy
212
232
  // it to each actual row.
213
233
  master = ALLOC_N(PixelPacket, image->columns);
214
234
 
215
- for (x = 0; x < image->columns; x++)
235
+ for (x = 0; x < (ssize_t) image->columns; x++)
216
236
  {
217
237
  double distance = fabs(x1 - x);
218
238
  master[x].red = ROUND_TO_QUANTUM(start_color->red + (red_step * distance));
@@ -222,34 +242,31 @@ vertical_fill(
222
242
  }
223
243
 
224
244
  // Now copy the master row to each actual row.
225
- for (y = 0; y < image->rows; y++)
245
+ for (y = 0; y < (ssize_t) image->rows; y++)
226
246
  {
227
247
  PixelPacket *row_pixels;
228
248
 
229
- #if defined(HAVE_QUEUEAUTHENTICPIXELS)
230
- row_pixels = QueueAuthenticPixels(image, 0, (long int)y, image->columns, 1, &exception);
231
- CHECK_EXCEPTION()
232
- #else
233
- row_pixels = SetImagePixels(image, 0, (long int)y, image->columns, 1);
234
- rm_check_image_exception(image, RetainOnError);
235
- #endif
249
+ row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
250
+ if (rm_should_raise_exception(exception, RetainExceptionRetention))
251
+ {
252
+ xfree((void *)master);
253
+ rm_raise_exception(exception);
254
+ }
236
255
 
237
256
  memcpy(row_pixels, master, image->columns * sizeof(PixelPacket));
238
257
 
239
- #if defined(HAVE_SYNCAUTHENTICPIXELS)
240
- SyncAuthenticPixels(image, &exception);
241
- CHECK_EXCEPTION()
242
- #else
243
- SyncImagePixels(image);
244
- rm_check_image_exception(image, RetainOnError);
245
- #endif
258
+ SyncAuthenticPixels(image, exception);
259
+ if (rm_should_raise_exception(exception, RetainExceptionRetention))
260
+ {
261
+ xfree((void *)master);
262
+ rm_raise_exception(exception);
263
+ }
246
264
  }
247
265
 
248
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
249
- DestroyExceptionInfo(&exception);
250
- #endif
266
+ DestroyExceptionInfo(exception);
251
267
 
252
- xfree((void *)master);
268
+ xfree((void *) master);
269
+ #endif
253
270
  }
254
271
 
255
272
  /**
@@ -266,19 +283,19 @@ static void
266
283
  horizontal_fill(
267
284
  Image *image,
268
285
  double y1,
269
- PixelPacket *start_color,
270
- PixelPacket *stop_color)
286
+ PixelColor *start_color,
287
+ PixelColor *stop_color)
271
288
  {
272
289
  double steps;
273
- unsigned long x, y;
274
- PixelPacket *master;
290
+ ssize_t x, y;
275
291
  MagickRealType red_step, green_step, blue_step;
276
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
277
- ExceptionInfo exception;
278
-
279
- GetExceptionInfo(&exception);
292
+ ExceptionInfo *exception;
293
+ #if defined(IMAGEMAGICK_6)
294
+ PixelPacket *master;
280
295
  #endif
281
296
 
297
+ exception = AcquireExceptionInfo();
298
+
282
299
  steps = FMAX(y1, ((long)image->rows)-y1);
283
300
 
284
301
  // If the line is below the y-axis, add that many steps so the color
@@ -292,11 +309,36 @@ horizontal_fill(
292
309
  green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
293
310
  blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
294
311
 
312
+ #if defined(IMAGEMAGICK_7)
313
+ for (y = 0; y < (ssize_t) image->rows; y++)
314
+ {
315
+ Quantum *row_pixels;
316
+
317
+ row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
318
+ CHECK_EXCEPTION();
319
+
320
+ double distance = fabs(y1 - y);
321
+ for (x = 0; x < (ssize_t) image->columns; x++)
322
+ {
323
+ SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
324
+ SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
325
+ SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
326
+ SetPixelAlpha(image, OpaqueAlpha, row_pixels);
327
+
328
+ row_pixels += GetPixelChannels(image);
329
+ }
330
+
331
+ SyncAuthenticPixels(image, exception);
332
+ CHECK_EXCEPTION();
333
+ }
334
+
335
+ DestroyExceptionInfo(exception);
336
+ #else
295
337
  // All the columns are the same, so make a master column and copy it to
296
338
  // each of the "real" columns.
297
339
  master = ALLOC_N(PixelPacket, image->rows);
298
340
 
299
- for (y = 0; y < image->rows; y++)
341
+ for (y = 0; y < (ssize_t) image->rows; y++)
300
342
  {
301
343
  double distance = fabs(y1 - y);
302
344
  master[y].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
@@ -305,32 +347,31 @@ horizontal_fill(
305
347
  master[y].opacity = OpaqueOpacity;
306
348
  }
307
349
 
308
- for (x = 0; x < image->columns; x++)
350
+ for (x = 0; x < (ssize_t) image->columns; x++)
309
351
  {
310
352
  PixelPacket *col_pixels;
311
353
 
312
- #if defined(HAVE_QUEUEAUTHENTICPIXELS)
313
- col_pixels = QueueAuthenticPixels(image, (long int)x, 0, 1, image->rows, &exception);
314
- #else
315
- col_pixels = SetImagePixels(image, (long int)x, 0, 1, image->rows);
316
- rm_check_image_exception(image, RetainOnError);
317
- #endif
354
+ col_pixels = QueueAuthenticPixels(image, x, 0, 1, image->rows, exception);
355
+ if (rm_should_raise_exception(exception, RetainExceptionRetention))
356
+ {
357
+ xfree((void *)master);
358
+ rm_raise_exception(exception);
359
+ }
360
+
318
361
  memcpy(col_pixels, master, image->rows * sizeof(PixelPacket));
319
362
 
320
- #if defined(HAVE_SYNCAUTHENTICPIXELS)
321
- SyncAuthenticPixels(image, &exception);
322
- CHECK_EXCEPTION()
323
- #else
324
- SyncImagePixels(image);
325
- rm_check_image_exception(image, RetainOnError);
326
- #endif
363
+ SyncAuthenticPixels(image, exception);
364
+ if (rm_should_raise_exception(exception, RetainExceptionRetention))
365
+ {
366
+ xfree((void *)master);
367
+ rm_raise_exception(exception);
368
+ }
327
369
  }
328
370
 
329
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
330
- DestroyExceptionInfo(&exception);
331
- #endif
371
+ DestroyExceptionInfo(exception);
332
372
 
333
- xfree((PixelPacket *)master);
373
+ xfree((void *) master);
374
+ #endif
334
375
  }
335
376
 
336
377
  /**
@@ -354,18 +395,16 @@ v_diagonal_fill(
354
395
  double y1,
355
396
  double x2,
356
397
  double y2,
357
- PixelPacket *start_color,
358
- PixelPacket *stop_color)
398
+ PixelColor *start_color,
399
+ PixelColor *stop_color)
359
400
  {
360
- unsigned long x, y;
401
+ ssize_t x, y;
361
402
  MagickRealType red_step, green_step, blue_step;
362
403
  double m, b, steps = 0.0;
363
404
  double d1, d2;
364
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
365
- ExceptionInfo exception;
405
+ ExceptionInfo *exception;
366
406
 
367
- GetExceptionInfo(&exception);
368
- #endif
407
+ exception = AcquireExceptionInfo();
369
408
 
370
409
  // Compute the equation of the line: y=mx+b
371
410
  m = ((double)(y2 - y1))/((double)(x2 - x1));
@@ -379,7 +418,7 @@ v_diagonal_fill(
379
418
 
380
419
  if (d1 < 0 && d2 < 0)
381
420
  {
382
- steps += FMAX(fabs(d1),fabs(d2));
421
+ steps += FMAX(fabs(d1), fabs(d2));
383
422
  }
384
423
  else if (d1 > (double)image->rows && d2 > (double)image->rows)
385
424
  {
@@ -393,7 +432,7 @@ v_diagonal_fill(
393
432
  // If the line is entirely > image->rows, swap the start & end color
394
433
  if (steps < 0)
395
434
  {
396
- PixelPacket t = *stop_color;
435
+ PixelColor t = *stop_color;
397
436
  *stop_color = *start_color;
398
437
  *start_color = t;
399
438
  steps = -steps;
@@ -403,39 +442,40 @@ v_diagonal_fill(
403
442
  green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
404
443
  blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
405
444
 
406
- for (y = 0; y < image->rows; y++)
445
+ for (y = 0; y < (ssize_t) image->rows; y++)
407
446
  {
408
- PixelPacket *row_pixels;
409
-
410
- #if defined(HAVE_QUEUEAUTHENTICPIXELS)
411
- row_pixels = QueueAuthenticPixels(image, 0, (long int)y, image->columns, 1, &exception);
412
- CHECK_EXCEPTION()
447
+ #if defined(IMAGEMAGICK_7)
448
+ Quantum *row_pixels;
413
449
  #else
414
- row_pixels = SetImagePixels(image, 0, (long int)y, image->columns, 1);
415
- rm_check_image_exception(image, RetainOnError);
450
+ PixelPacket *row_pixels;
416
451
  #endif
417
- for (x = 0; x < image->columns; x++)
452
+
453
+ row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
454
+ CHECK_EXCEPTION();
455
+
456
+ for (x = 0; x < (ssize_t) image->columns; x++)
418
457
  {
419
458
  double distance = (double) abs((int)(y-(m * x + b)));
459
+ #if defined(IMAGEMAGICK_7)
460
+ SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
461
+ SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
462
+ SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
463
+ SetPixelAlpha(image, OpaqueAlpha, row_pixels);
464
+
465
+ row_pixels += GetPixelChannels(image);
466
+ #else
420
467
  row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
421
468
  row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
422
469
  row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
423
470
  row_pixels[x].opacity = OpaqueOpacity;
471
+ #endif
424
472
  }
425
473
 
426
- #if defined(HAVE_SYNCAUTHENTICPIXELS)
427
- SyncAuthenticPixels(image, &exception);
428
- CHECK_EXCEPTION()
429
- #else
430
- SyncImagePixels(image);
431
- rm_check_image_exception(image, RetainOnError);
432
- #endif
474
+ SyncAuthenticPixels(image, exception);
475
+ CHECK_EXCEPTION();
433
476
  }
434
477
 
435
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
436
- DestroyExceptionInfo(&exception);
437
- #endif
438
-
478
+ DestroyExceptionInfo(exception);
439
479
  }
440
480
 
441
481
  /**
@@ -459,18 +499,16 @@ h_diagonal_fill(
459
499
  double y1,
460
500
  double x2,
461
501
  double y2,
462
- PixelPacket *start_color,
463
- PixelPacket *stop_color)
502
+ PixelColor *start_color,
503
+ PixelColor *stop_color)
464
504
  {
465
- unsigned long x, y;
505
+ ssize_t x, y;
466
506
  double m, b, steps = 0.0;
467
507
  MagickRealType red_step, green_step, blue_step;
468
508
  double d1, d2;
469
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
470
- ExceptionInfo exception;
509
+ ExceptionInfo *exception;
471
510
 
472
- GetExceptionInfo(&exception);
473
- #endif
511
+ exception = AcquireExceptionInfo();
474
512
 
475
513
  // Compute the equation of the line: y=mx+b
476
514
  m = ((double)(y2 - y1))/((double)(x2 - x1));
@@ -486,11 +524,11 @@ h_diagonal_fill(
486
524
  // the number of steps.
487
525
  if (d1 < 0 && d2 < 0)
488
526
  {
489
- steps += FMAX(fabs(d1),fabs(d2));
527
+ steps += FMAX(fabs(d1), fabs(d2));
490
528
  }
491
529
  else if (d1 > (double)image->columns && d2 > (double)image->columns)
492
530
  {
493
- steps += FMAX(abs((int)(image->columns-d1)),abs((int)(image->columns-d2)));
531
+ steps += FMAX(abs((int)(image->columns-d1)), abs((int)(image->columns-d2)));
494
532
  }
495
533
 
496
534
  d1 = FMAX(d1, image->columns-d1);
@@ -500,7 +538,7 @@ h_diagonal_fill(
500
538
  // If the line is entirely > image->columns, swap the start & end color
501
539
  if (steps < 0)
502
540
  {
503
- PixelPacket t = *stop_color;
541
+ PixelColor t = *stop_color;
504
542
  *stop_color = *start_color;
505
543
  *start_color = t;
506
544
  steps = -steps;
@@ -510,57 +548,55 @@ h_diagonal_fill(
510
548
  green_step = ((MagickRealType)stop_color->green - (MagickRealType)start_color->green) / steps;
511
549
  blue_step = ((MagickRealType)stop_color->blue - (MagickRealType)start_color->blue) / steps;
512
550
 
513
- for (y = 0; y < image->rows; y++)
551
+ for (y = 0; y < (ssize_t) image->rows; y++)
514
552
  {
515
- PixelPacket *row_pixels;
516
-
517
- #if defined(HAVE_QUEUEAUTHENTICPIXELS)
518
- row_pixels = QueueAuthenticPixels(image, 0, (long int)y, image->columns, 1, &exception);
519
- CHECK_EXCEPTION()
553
+ #if defined(IMAGEMAGICK_7)
554
+ Quantum *row_pixels;
520
555
  #else
521
- row_pixels = SetImagePixels(image, 0, (long int)y, image->columns, 1);
522
- rm_check_image_exception(image, RetainOnError);
556
+ PixelPacket *row_pixels;
523
557
  #endif
524
- for (x = 0; x < image->columns; x++)
558
+
559
+ row_pixels = QueueAuthenticPixels(image, 0, y, image->columns, 1, exception);
560
+ CHECK_EXCEPTION();
561
+
562
+ for (x = 0; x < (ssize_t) image->columns; x++)
525
563
  {
526
564
  double distance = (double) abs((int)(x-((y-b)/m)));
565
+ #if defined(IMAGEMAGICK_7)
566
+ SetPixelRed(image, ROUND_TO_QUANTUM(start_color->red + (distance * red_step)), row_pixels);
567
+ SetPixelGreen(image, ROUND_TO_QUANTUM(start_color->green + (distance * green_step)), row_pixels);
568
+ SetPixelBlue(image, ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step)), row_pixels);
569
+ SetPixelAlpha(image, OpaqueAlpha, row_pixels);
570
+
571
+ row_pixels += GetPixelChannels(image);
572
+ #else
527
573
  row_pixels[x].red = ROUND_TO_QUANTUM(start_color->red + (distance * red_step));
528
574
  row_pixels[x].green = ROUND_TO_QUANTUM(start_color->green + (distance * green_step));
529
575
  row_pixels[x].blue = ROUND_TO_QUANTUM(start_color->blue + (distance * blue_step));
530
576
  row_pixels[x].opacity = OpaqueOpacity;
577
+ #endif
531
578
  }
532
579
 
533
- #if defined(HAVE_SYNCAUTHENTICPIXELS)
534
- SyncAuthenticPixels(image, &exception);
535
- CHECK_EXCEPTION()
536
- #else
537
- SyncImagePixels(image);
538
- rm_check_image_exception(image, RetainOnError);
539
- #endif
580
+ SyncAuthenticPixels(image, exception);
581
+ CHECK_EXCEPTION();
540
582
  }
541
583
 
542
- #if defined(HAVE_SYNCAUTHENTICPIXELS) || defined(HAVE_QUEUEAUTHENTICPIXELS)
543
- DestroyExceptionInfo(&exception);
544
- #endif
584
+ DestroyExceptionInfo(exception);
545
585
  }
546
586
 
547
587
  /**
548
588
  * Call GradientFill with the start and stop colors specified when this fill
549
589
  * object was created.
550
590
  *
551
- * Ruby usage:
552
- * - @verbatim GradientFill#fill(image) @endverbatim
553
- *
554
- * @param self this object
555
- * @param image_obj the image
556
- * @return self
591
+ * @param image_obj [Magick::Image] the image to fill
592
+ * @return [Magick::GradientFill] self
557
593
  */
558
594
  VALUE
559
595
  GradientFill_fill(VALUE self, VALUE image_obj)
560
596
  {
561
597
  rm_GradientFill *fill;
562
598
  Image *image;
563
- PixelPacket start_color, stop_color;
599
+ PixelColor start_color, stop_color;
564
600
  double x1, y1, x2, y2; // points on the line
565
601
 
566
602
  Data_Get_Struct(self, rm_GradientFill, fill);
@@ -631,51 +667,38 @@ free_TextureFill(void *fill_obj)
631
667
  rm_TextureFill *fill = (rm_TextureFill *)fill_obj;
632
668
 
633
669
  // Do not trace destruction
634
- (void) DestroyImage(fill->texture);
670
+ if (fill->texture)
671
+ {
672
+ DestroyImage(fill->texture);
673
+ }
635
674
  xfree(fill);
636
675
  }
637
676
 
638
677
  /**
639
678
  * Create new TextureFill object.
640
679
  *
641
- * No Ruby usage (internal function)
642
- *
643
- * Notes:
644
- * - The texture is an Image or Image *object
645
- *
646
- * @param class the Ruby class to use
647
- * @return a new TextureFill object
680
+ * @return [Magick::TextureFill] a new TextureFill object
648
681
  */
649
682
  VALUE
650
683
  TextureFill_alloc(VALUE class)
651
684
  {
652
685
  rm_TextureFill *fill;
653
- return Data_Make_Struct(class
654
- , rm_TextureFill
655
- , NULL
656
- , free_TextureFill
657
- , fill);
686
+ return Data_Make_Struct(class, rm_TextureFill, NULL, free_TextureFill, fill);
658
687
  }
659
688
 
660
689
  /**
661
- * Store the texture image.
662
- *
663
- * Ruby usage:
664
- * - @verbatim TextureFill#initialize(texture) @endverbatim
665
- *
666
- * Notes:
667
- * - The texture is an Image or Image *object
690
+ * Initialize TextureFill object.
668
691
  *
669
- * @param self this object
670
- * @param texture_arg the texture
671
- * @return self
692
+ * @param texture_arg [Magick::Image, Magick::ImageList] Either an imagelist or an image. If an
693
+ * imagelist, uses the current image.
694
+ * @return [Magick::TextureFill] self
672
695
  */
673
696
  VALUE
674
697
  TextureFill_initialize(VALUE self, VALUE texture_arg)
675
698
  {
676
699
  rm_TextureFill *fill;
677
700
  Image *texture;
678
- volatile VALUE texture_image;
701
+ VALUE texture_image;
679
702
 
680
703
  Data_Get_Struct(self, rm_TextureFill, fill);
681
704
 
@@ -683,9 +706,12 @@ TextureFill_initialize(VALUE self, VALUE texture_arg)
683
706
 
684
707
  // Bump the reference count on the texture image.
685
708
  texture = rm_check_destroyed(texture_image);
686
- (void) ReferenceImage(texture);
709
+ ReferenceImage(texture);
687
710
 
688
711
  fill->texture = texture;
712
+
713
+ RB_GC_GUARD(texture_image);
714
+
689
715
  return self;
690
716
  }
691
717
 
@@ -693,24 +719,30 @@ TextureFill_initialize(VALUE self, VALUE texture_arg)
693
719
  * Call TextureFill with the texture specified when this fill object was
694
720
  * created.
695
721
  *
696
- * Ruby usage:
697
- * - @verbatim TextureFill#fill(image) @endverbatim
698
- *
699
- * @param self this object
700
- * @param image_obj the image
701
- * @return self
722
+ * @param image_obj [Magick::Image] the image to fill
723
+ * @return [Magick::TextureFill] self
702
724
  */
703
725
  VALUE
704
726
  TextureFill_fill(VALUE self, VALUE image_obj)
705
727
  {
706
728
  rm_TextureFill *fill;
707
729
  Image *image;
730
+ #if defined(IMAGEMAGICK_7)
731
+ ExceptionInfo *exception;
732
+ #endif
708
733
 
709
734
  image = rm_check_destroyed(image_obj);
710
735
  Data_Get_Struct(self, rm_TextureFill, fill);
711
736
 
712
- (void) TextureImage(image, fill->texture);
737
+ #if defined(IMAGEMAGICK_7)
738
+ exception = AcquireExceptionInfo();
739
+ TextureImage(image, fill->texture, exception);
740
+ CHECK_EXCEPTION();
741
+ DestroyExceptionInfo(exception);
742
+ #else
743
+ TextureImage(image, fill->texture);
713
744
  rm_check_image_exception(image, RetainOnError);
745
+ #endif
714
746
 
715
747
  return self;
716
748
  }