rmagick 2.16.0 → 5.1.0

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

Potentially problematic release.


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

Files changed (405) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +63 -0
  3. data/.devcontainer/Dockerfile +14 -0
  4. data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
  5. data/.devcontainer/devcontainer.json +11 -0
  6. data/.devcontainer/setup-repo.sh +10 -0
  7. data/.devcontainer/setup-user.sh +45 -0
  8. data/.editorconfig +3 -0
  9. data/.github/ISSUE_TEMPLATE.md +17 -0
  10. data/.github/workflows/ci.yml +79 -0
  11. data/.gitignore +5 -1
  12. data/.rspec +1 -0
  13. data/.rubocop.yml +37 -340
  14. data/.rubocop_todo.yml +448 -0
  15. data/.yardopts +5 -0
  16. data/CHANGELOG.md +435 -0
  17. data/CODE_OF_CONDUCT.md +122 -7
  18. data/CONTRIBUTING.md +37 -6
  19. data/Gemfile +0 -6
  20. data/README.md +317 -0
  21. data/Rakefile +37 -35
  22. data/before_install_linux.sh +65 -28
  23. data/before_install_osx.sh +58 -2
  24. data/ext/RMagick/extconf.rb +286 -393
  25. data/ext/RMagick/rmagick.c +106 -111
  26. data/ext/RMagick/rmagick.h +235 -331
  27. data/ext/RMagick/rmagick_gvl.h +224 -0
  28. data/ext/RMagick/rmdraw.c +484 -842
  29. data/ext/RMagick/rmenum.c +316 -755
  30. data/ext/RMagick/rmfill.c +281 -191
  31. data/ext/RMagick/rmilist.c +450 -455
  32. data/ext/RMagick/rmimage.c +6247 -5289
  33. data/ext/RMagick/rminfo.c +721 -894
  34. data/ext/RMagick/rmkinfo.c +228 -0
  35. data/ext/RMagick/rmmain.c +727 -519
  36. data/ext/RMagick/rmmontage.c +127 -172
  37. data/ext/RMagick/rmpixel.c +638 -431
  38. data/ext/RMagick/rmstruct.c +102 -282
  39. data/ext/RMagick/rmutil.c +450 -363
  40. data/lib/rmagick/version.rb +5 -4
  41. data/lib/rmagick.rb +2 -0
  42. data/lib/rmagick_internal.rb +349 -413
  43. data/lib/rvg/clippath.rb +3 -4
  44. data/lib/rvg/container.rb +30 -22
  45. data/lib/rvg/deep_equal.rb +11 -11
  46. data/lib/rvg/describable.rb +2 -2
  47. data/lib/rvg/embellishable.rb +63 -68
  48. data/lib/rvg/misc.rb +136 -139
  49. data/lib/rvg/paint.rb +2 -1
  50. data/lib/rvg/pathdata.rb +7 -8
  51. data/lib/rvg/rvg.rb +47 -46
  52. data/lib/rvg/stretchable.rb +22 -28
  53. data/lib/rvg/stylable.rb +12 -10
  54. data/lib/rvg/text.rb +169 -165
  55. data/lib/rvg/transformable.rb +17 -16
  56. data/lib/rvg/units.rb +5 -5
  57. data/rmagick.gemspec +16 -39
  58. metadata +118 -395
  59. data/.hound.yml +0 -2
  60. data/.simplecov +0 -27
  61. data/.travis.yml +0 -74
  62. data/Doxyfile +0 -1514
  63. data/README.textile +0 -251
  64. data/deprecated/RMagick.rb +0 -6
  65. data/doc/.cvsignore +0 -1
  66. data/doc/comtasks.html +0 -287
  67. data/doc/constants.html +0 -1581
  68. data/doc/css/doc.css +0 -299
  69. data/doc/css/popup.css +0 -34
  70. data/doc/css/ref.css +0 -67
  71. data/doc/draw.html +0 -3272
  72. data/doc/ex/InitialCoords.rb +0 -22
  73. data/doc/ex/NewCoordSys.rb +0 -30
  74. data/doc/ex/OrigCoordSys.rb +0 -16
  75. data/doc/ex/PreserveAspectRatio.rb +0 -204
  76. data/doc/ex/RotateScale.rb +0 -36
  77. data/doc/ex/Skew.rb +0 -38
  78. data/doc/ex/Use01.rb +0 -15
  79. data/doc/ex/Use02.rb +0 -20
  80. data/doc/ex/Use03.rb +0 -16
  81. data/doc/ex/ViewBox.rb +0 -31
  82. data/doc/ex/adaptive_threshold.rb +0 -9
  83. data/doc/ex/add_noise.rb +0 -16
  84. data/doc/ex/affine.rb +0 -48
  85. data/doc/ex/affine_transform.rb +0 -20
  86. data/doc/ex/arc.rb +0 -49
  87. data/doc/ex/arcpath.rb +0 -32
  88. data/doc/ex/arcs01.rb +0 -28
  89. data/doc/ex/arcs02.rb +0 -59
  90. data/doc/ex/average.rb +0 -15
  91. data/doc/ex/axes.rb +0 -64
  92. data/doc/ex/baseline_shift01.rb +0 -17
  93. data/doc/ex/bilevel_channel.rb +0 -8
  94. data/doc/ex/blur_image.rb +0 -12
  95. data/doc/ex/border.rb +0 -10
  96. data/doc/ex/bounding_box.rb +0 -42
  97. data/doc/ex/cbezier1.rb +0 -41
  98. data/doc/ex/cbezier2.rb +0 -41
  99. data/doc/ex/cbezier3.rb +0 -41
  100. data/doc/ex/cbezier4.rb +0 -42
  101. data/doc/ex/cbezier5.rb +0 -42
  102. data/doc/ex/cbezier6.rb +0 -53
  103. data/doc/ex/channel.rb +0 -25
  104. data/doc/ex/charcoal.rb +0 -12
  105. data/doc/ex/chop.rb +0 -29
  106. data/doc/ex/circle.rb +0 -33
  107. data/doc/ex/circle01.rb +0 -16
  108. data/doc/ex/clip_path.rb +0 -60
  109. data/doc/ex/coalesce.rb +0 -57
  110. data/doc/ex/color_fill_to_border.rb +0 -29
  111. data/doc/ex/color_floodfill.rb +0 -28
  112. data/doc/ex/color_histogram.rb +0 -47
  113. data/doc/ex/color_reset.rb +0 -11
  114. data/doc/ex/colorize.rb +0 -16
  115. data/doc/ex/colors.rb +0 -64
  116. data/doc/ex/compose_mask.rb +0 -22
  117. data/doc/ex/composite.rb +0 -133
  118. data/doc/ex/composite_layers.rb +0 -53
  119. data/doc/ex/composite_tiled.rb +0 -21
  120. data/doc/ex/contrast.rb +0 -36
  121. data/doc/ex/crop.rb +0 -31
  122. data/doc/ex/crop_with_gravity.rb +0 -42
  123. data/doc/ex/cubic01.rb +0 -43
  124. data/doc/ex/cubic02.rb +0 -91
  125. data/doc/ex/cycle_colormap.rb +0 -21
  126. data/doc/ex/dissolve.rb +0 -12
  127. data/doc/ex/drawcomp.rb +0 -42
  128. data/doc/ex/drop_shadow.rb +0 -60
  129. data/doc/ex/edge.rb +0 -11
  130. data/doc/ex/ellipse.rb +0 -45
  131. data/doc/ex/ellipse01.rb +0 -21
  132. data/doc/ex/emboss.rb +0 -11
  133. data/doc/ex/enhance.rb +0 -28
  134. data/doc/ex/equalize.rb +0 -11
  135. data/doc/ex/evenodd.rb +0 -42
  136. data/doc/ex/fill_pattern.rb +0 -23
  137. data/doc/ex/flatten_images.rb +0 -36
  138. data/doc/ex/flip.rb +0 -11
  139. data/doc/ex/flop.rb +0 -11
  140. data/doc/ex/font_styles.rb +0 -32
  141. data/doc/ex/fonts.rb +0 -20
  142. data/doc/ex/frame.rb +0 -12
  143. data/doc/ex/gaussian_blur.rb +0 -11
  144. data/doc/ex/get_multiline_type_metrics.rb +0 -41
  145. data/doc/ex/get_pixels.rb +0 -47
  146. data/doc/ex/get_type_metrics.rb +0 -141
  147. data/doc/ex/gradientfill.rb +0 -27
  148. data/doc/ex/grav.rb +0 -45
  149. data/doc/ex/gravity.rb +0 -80
  150. data/doc/ex/group.rb +0 -26
  151. data/doc/ex/hatchfill.rb +0 -27
  152. data/doc/ex/image.rb +0 -44
  153. data/doc/ex/images/Apple.miff +0 -0
  154. data/doc/ex/images/Ballerina.jpg +0 -0
  155. data/doc/ex/images/Ballerina3.jpg +0 -0
  156. data/doc/ex/images/Button_0.gif +0 -0
  157. data/doc/ex/images/Button_1.gif +0 -0
  158. data/doc/ex/images/Button_2.gif +0 -0
  159. data/doc/ex/images/Button_3.gif +0 -0
  160. data/doc/ex/images/Button_4.gif +0 -0
  161. data/doc/ex/images/Button_5.gif +0 -0
  162. data/doc/ex/images/Button_6.gif +0 -0
  163. data/doc/ex/images/Button_7.gif +0 -0
  164. data/doc/ex/images/Button_8.gif +0 -0
  165. data/doc/ex/images/Button_9.gif +0 -0
  166. data/doc/ex/images/Button_A.gif +0 -0
  167. data/doc/ex/images/Button_B.gif +0 -0
  168. data/doc/ex/images/Button_C.gif +0 -0
  169. data/doc/ex/images/Button_D.gif +0 -0
  170. data/doc/ex/images/Button_E.gif +0 -0
  171. data/doc/ex/images/Button_F.gif +0 -0
  172. data/doc/ex/images/Button_G.gif +0 -0
  173. data/doc/ex/images/Button_H.gif +0 -0
  174. data/doc/ex/images/Button_I.gif +0 -0
  175. data/doc/ex/images/Button_J.gif +0 -0
  176. data/doc/ex/images/Button_K.gif +0 -0
  177. data/doc/ex/images/Button_L.gif +0 -0
  178. data/doc/ex/images/Button_M.gif +0 -0
  179. data/doc/ex/images/Button_N.gif +0 -0
  180. data/doc/ex/images/Button_O.gif +0 -0
  181. data/doc/ex/images/Button_P.gif +0 -0
  182. data/doc/ex/images/Button_Q.gif +0 -0
  183. data/doc/ex/images/Button_R.gif +0 -0
  184. data/doc/ex/images/Button_S.gif +0 -0
  185. data/doc/ex/images/Button_T.gif +0 -0
  186. data/doc/ex/images/Button_U.gif +0 -0
  187. data/doc/ex/images/Button_V.gif +0 -0
  188. data/doc/ex/images/Button_W.gif +0 -0
  189. data/doc/ex/images/Button_X.gif +0 -0
  190. data/doc/ex/images/Button_Y.gif +0 -0
  191. data/doc/ex/images/Button_Z.gif +0 -0
  192. data/doc/ex/images/Cheetah.jpg +0 -0
  193. data/doc/ex/images/Coffee.wmf +0 -0
  194. data/doc/ex/images/Flower_Hat.jpg +0 -0
  195. data/doc/ex/images/Gold_Statue.jpg +0 -0
  196. data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
  197. data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
  198. data/doc/ex/images/Leaf.miff +0 -0
  199. data/doc/ex/images/No.wmf +0 -0
  200. data/doc/ex/images/Polynesia.jpg +0 -0
  201. data/doc/ex/images/Red_Rocks.jpg +0 -0
  202. data/doc/ex/images/Rocks_On_Beach.miff +0 -0
  203. data/doc/ex/images/Shorts.jpg +0 -0
  204. data/doc/ex/images/Snake.wmf +0 -0
  205. data/doc/ex/images/Violin.jpg +0 -0
  206. data/doc/ex/images/Yellow_Rose.miff +0 -0
  207. data/doc/ex/images/big-duck.gif +0 -0
  208. data/doc/ex/images/duck.gif +0 -0
  209. data/doc/ex/images/duck0.gif +0 -0
  210. data/doc/ex/images/duck1.gif +0 -0
  211. data/doc/ex/images/duck10.gif +0 -0
  212. data/doc/ex/images/duck11.gif +0 -0
  213. data/doc/ex/images/duck12.gif +0 -0
  214. data/doc/ex/images/duck13.gif +0 -0
  215. data/doc/ex/images/duck14.gif +0 -0
  216. data/doc/ex/images/duck15.gif +0 -0
  217. data/doc/ex/images/duck2.gif +0 -0
  218. data/doc/ex/images/duck3.gif +0 -0
  219. data/doc/ex/images/duck4.gif +0 -0
  220. data/doc/ex/images/duck5.gif +0 -0
  221. data/doc/ex/images/duck6.gif +0 -0
  222. data/doc/ex/images/duck7.gif +0 -0
  223. data/doc/ex/images/duck8.gif +0 -0
  224. data/doc/ex/images/duck9.gif +0 -0
  225. data/doc/ex/images/graydient230x6.gif +0 -0
  226. data/doc/ex/images/image_with_profile.jpg +0 -0
  227. data/doc/ex/images/logo400x83.gif +0 -0
  228. data/doc/ex/images/model.miff +0 -0
  229. data/doc/ex/images/notimplemented.gif +0 -0
  230. data/doc/ex/images/smile.miff +0 -0
  231. data/doc/ex/images/spin.gif +0 -0
  232. data/doc/ex/implode.rb +0 -34
  233. data/doc/ex/level.rb +0 -11
  234. data/doc/ex/level_colors.rb +0 -11
  235. data/doc/ex/line.rb +0 -41
  236. data/doc/ex/line01.rb +0 -21
  237. data/doc/ex/mask.rb +0 -35
  238. data/doc/ex/matte_fill_to_border.rb +0 -39
  239. data/doc/ex/matte_floodfill.rb +0 -32
  240. data/doc/ex/matte_replace.rb +0 -39
  241. data/doc/ex/median_filter.rb +0 -28
  242. data/doc/ex/modulate.rb +0 -11
  243. data/doc/ex/mono.rb +0 -23
  244. data/doc/ex/morph.rb +0 -25
  245. data/doc/ex/mosaic.rb +0 -35
  246. data/doc/ex/motion_blur.rb +0 -11
  247. data/doc/ex/negate.rb +0 -11
  248. data/doc/ex/negate_channel.rb +0 -9
  249. data/doc/ex/nested_rvg.rb +0 -21
  250. data/doc/ex/nonzero.rb +0 -42
  251. data/doc/ex/normalize.rb +0 -11
  252. data/doc/ex/oil_paint.rb +0 -11
  253. data/doc/ex/opacity.rb +0 -37
  254. data/doc/ex/ordered_dither.rb +0 -11
  255. data/doc/ex/path.rb +0 -63
  256. data/doc/ex/pattern1.rb +0 -25
  257. data/doc/ex/pattern2.rb +0 -26
  258. data/doc/ex/polaroid.rb +0 -27
  259. data/doc/ex/polygon.rb +0 -23
  260. data/doc/ex/polygon01.rb +0 -21
  261. data/doc/ex/polyline.rb +0 -22
  262. data/doc/ex/polyline01.rb +0 -21
  263. data/doc/ex/posterize.rb +0 -8
  264. data/doc/ex/preview.rb +0 -8
  265. data/doc/ex/qbezierpath.rb +0 -52
  266. data/doc/ex/quad01.rb +0 -34
  267. data/doc/ex/quantize-m.rb +0 -25
  268. data/doc/ex/radial_blur.rb +0 -9
  269. data/doc/ex/raise.rb +0 -8
  270. data/doc/ex/random_threshold_channel.rb +0 -13
  271. data/doc/ex/rect01.rb +0 -14
  272. data/doc/ex/rect02.rb +0 -20
  273. data/doc/ex/rectangle.rb +0 -34
  274. data/doc/ex/reduce_noise.rb +0 -28
  275. data/doc/ex/remap.rb +0 -11
  276. data/doc/ex/remap_images.rb +0 -19
  277. data/doc/ex/resize_to_fill.rb +0 -8
  278. data/doc/ex/resize_to_fit.rb +0 -8
  279. data/doc/ex/roll.rb +0 -9
  280. data/doc/ex/rotate.rb +0 -44
  281. data/doc/ex/rotate_f.rb +0 -14
  282. data/doc/ex/roundrect.rb +0 -33
  283. data/doc/ex/rubyname.rb +0 -30
  284. data/doc/ex/rvg_clippath.rb +0 -12
  285. data/doc/ex/rvg_linecap.rb +0 -42
  286. data/doc/ex/rvg_linejoin.rb +0 -40
  287. data/doc/ex/rvg_opacity.rb +0 -18
  288. data/doc/ex/rvg_pattern.rb +0 -26
  289. data/doc/ex/rvg_stroke_dasharray.rb +0 -11
  290. data/doc/ex/segment.rb +0 -11
  291. data/doc/ex/sepiatone.rb +0 -7
  292. data/doc/ex/shade.rb +0 -11
  293. data/doc/ex/shadow.rb +0 -30
  294. data/doc/ex/shave.rb +0 -15
  295. data/doc/ex/shear.rb +0 -10
  296. data/doc/ex/sketch.rb +0 -17
  297. data/doc/ex/skewx.rb +0 -51
  298. data/doc/ex/skewy.rb +0 -47
  299. data/doc/ex/smile.rb +0 -125
  300. data/doc/ex/solarize.rb +0 -11
  301. data/doc/ex/sparse_color.rb +0 -54
  302. data/doc/ex/splice.rb +0 -8
  303. data/doc/ex/spread.rb +0 -11
  304. data/doc/ex/stegano.rb +0 -55
  305. data/doc/ex/stroke_dasharray.rb +0 -42
  306. data/doc/ex/stroke_fill.rb +0 -10
  307. data/doc/ex/stroke_linecap.rb +0 -44
  308. data/doc/ex/stroke_linejoin.rb +0 -48
  309. data/doc/ex/stroke_width.rb +0 -49
  310. data/doc/ex/swirl.rb +0 -17
  311. data/doc/ex/text.rb +0 -37
  312. data/doc/ex/text01.rb +0 -16
  313. data/doc/ex/text_align.rb +0 -36
  314. data/doc/ex/text_antialias.rb +0 -37
  315. data/doc/ex/text_styles.rb +0 -19
  316. data/doc/ex/text_undercolor.rb +0 -28
  317. data/doc/ex/texture_fill_to_border.rb +0 -34
  318. data/doc/ex/texture_floodfill.rb +0 -32
  319. data/doc/ex/texturefill.rb +0 -24
  320. data/doc/ex/threshold.rb +0 -13
  321. data/doc/ex/to_blob.rb +0 -13
  322. data/doc/ex/translate.rb +0 -39
  323. data/doc/ex/transparent.rb +0 -38
  324. data/doc/ex/transpose.rb +0 -9
  325. data/doc/ex/transverse.rb +0 -9
  326. data/doc/ex/tref01.rb +0 -24
  327. data/doc/ex/triangle01.rb +0 -15
  328. data/doc/ex/trim.rb +0 -23
  329. data/doc/ex/tspan01.rb +0 -17
  330. data/doc/ex/tspan02.rb +0 -17
  331. data/doc/ex/tspan03.rb +0 -19
  332. data/doc/ex/unsharp_mask.rb +0 -28
  333. data/doc/ex/viewex.rb +0 -33
  334. data/doc/ex/vignette.rb +0 -12
  335. data/doc/ex/watermark.rb +0 -27
  336. data/doc/ex/wave.rb +0 -9
  337. data/doc/ex/wet_floor.rb +0 -58
  338. data/doc/ex/writing_mode01.rb +0 -26
  339. data/doc/ex/writing_mode02.rb +0 -26
  340. data/doc/ilist.html +0 -2056
  341. data/doc/image1.html +0 -4680
  342. data/doc/image2.html +0 -3665
  343. data/doc/image3.html +0 -4522
  344. data/doc/imageattrs.html +0 -1638
  345. data/doc/imusage.html +0 -514
  346. data/doc/index.html +0 -416
  347. data/doc/info.html +0 -1499
  348. data/doc/magick.html +0 -565
  349. data/doc/optequiv.html +0 -2435
  350. data/doc/rvg.html +0 -975
  351. data/doc/rvgclip.html +0 -248
  352. data/doc/rvggroup.html +0 -305
  353. data/doc/rvgimage.html +0 -289
  354. data/doc/rvgpattern.html +0 -475
  355. data/doc/rvgshape.html +0 -406
  356. data/doc/rvgstyle.html +0 -270
  357. data/doc/rvgtext.html +0 -465
  358. data/doc/rvgtspan.html +0 -238
  359. data/doc/rvgtut.html +0 -530
  360. data/doc/rvguse.html +0 -145
  361. data/doc/rvgxform.html +0 -294
  362. data/doc/scripts/doc.js +0 -22
  363. data/doc/scripts/stripeTables.js +0 -23
  364. data/doc/struct.html +0 -1339
  365. data/doc/usage.html +0 -1621
  366. data/examples/constitute.rb +0 -7
  367. data/examples/crop_with_gravity.rb +0 -42
  368. data/examples/demo.rb +0 -324
  369. data/examples/describe.rb +0 -43
  370. data/examples/find_similar_region.rb +0 -34
  371. data/examples/histogram.rb +0 -321
  372. data/examples/identify.rb +0 -185
  373. data/examples/image_opacity.rb +0 -29
  374. data/examples/import_export.rb +0 -31
  375. data/examples/pattern_fill.rb +0 -38
  376. data/examples/rotating_text.rb +0 -44
  377. data/examples/spinner.rb +0 -49
  378. data/examples/thumbnail.rb +0 -64
  379. data/examples/vignette.rb +0 -78
  380. data/spec/rmagick/ImageList1_spec.rb +0 -24
  381. data/spec/rmagick/draw_spec.rb +0 -156
  382. data/spec/rmagick/image/blue_shift_spec.rb +0 -16
  383. data/spec/rmagick/image/composite_spec.rb +0 -140
  384. data/spec/rmagick/image/constitute_spec.rb +0 -15
  385. data/spec/rmagick/image/dispatch_spec.rb +0 -18
  386. data/spec/rmagick/image/from_blob_spec.rb +0 -14
  387. data/spec/rmagick/image/ping_spec.rb +0 -14
  388. data/spec/rmagick/image/properties_spec.rb +0 -29
  389. data/spec/spec_helper.rb +0 -4
  390. data/test/Image1.rb +0 -565
  391. data/test/Image2.rb +0 -1304
  392. data/test/Image3.rb +0 -1030
  393. data/test/ImageList1.rb +0 -806
  394. data/test/ImageList2.rb +0 -385
  395. data/test/Image_attributes.rb +0 -697
  396. data/test/Import_Export.rb +0 -121
  397. data/test/Info.rb +0 -345
  398. data/test/Magick.rb +0 -321
  399. data/test/Pixel.rb +0 -116
  400. data/test/Preview.rb +0 -57
  401. data/test/cmyk.icm +0 -0
  402. data/test/srgb.icm +0 -0
  403. data/test/test_all_basic.rb +0 -38
  404. data/test/tmpnam_test.rb +0 -50
  405. data/wercker.yml +0 -10
data/lib/rvg/misc.rb CHANGED
@@ -14,29 +14,27 @@ module Magick
14
14
  ivars = instance_variables
15
15
  ivars.each do |ivar|
16
16
  ivalue = instance_variable_get(ivar)
17
- cvalue = case
18
- when NilClass === ivalue, Symbol === ivalue, Float === ivalue,
19
- Fixnum === ivalue, FalseClass === ivalue, TrueClass === ivalue
20
- ivalue
21
- when ivalue.respond_to?(:deep_copy)
22
- ivalue.deep_copy(h)
23
- when ivalue.respond_to?(:dup)
24
- ivalue.dup
25
- else
26
- ivalue
27
- end
17
+ cvalue = if ivalue.is_a?(NilClass) || ivalue.is_a?(Symbol) || ivalue.is_a?(Float) || ivalue.is_a?(Integer) || ivalue.is_a?(FalseClass) || ivalue.is_a?(TrueClass)
18
+ ivalue
19
+ elsif ivalue.respond_to?(:deep_copy)
20
+ ivalue.deep_copy(h)
21
+ elsif ivalue.respond_to?(:dup)
22
+ ivalue.dup
23
+ else
24
+ ivalue
25
+ end
28
26
  copy.instance_variable_set(ivar, cvalue)
29
27
  end
30
28
  copy.freeze if frozen?
31
29
  end
32
30
  copy
33
31
  end
34
- end # module Duplicatable
32
+ end # module Duplicatable
35
33
 
36
34
  # Convert an array of method arguments to Float objects. If any
37
35
  # cannot be converted, raise ArgumentError and issue a message.
38
36
  def self.fmsg(*args)
39
- "at least one argument cannot be converted to Float (got #{args.collect {|a| a.class}.join(', ')})"
37
+ "at least one argument cannot be converted to Float (got #{args.map(&:class).join(', ')})"
40
38
  end
41
39
 
42
40
  def self.convert_to_float(*args)
@@ -46,7 +44,7 @@ module Magick
46
44
  args.pop
47
45
  end
48
46
  begin
49
- fargs = args.collect { |a| (allow_nil && a.nil?) ? a : Float(a) }
47
+ fargs = args.map { |a| allow_nil && a.nil? ? a : Float(a) }
50
48
  rescue ArgumentError, TypeError
51
49
  raise ArgumentError, fmsg(*args)
52
50
  end
@@ -74,16 +72,16 @@ module Magick
74
72
  end
75
73
 
76
74
  def enquote(text)
77
- if text.length > 2 && /\A(?:\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})\z/.match(text)
78
- return text
79
- elsif !text['\'']
80
- text = '\''+text+'\''
75
+ return text if text.length > 2 && /\A(?:\"[^\"]+\"|\'[^\']+\'|\{[^\}]+\})\z/.match(text)
76
+
77
+ if !text['\'']
78
+ text = '\'' + text + '\''
81
79
  return text
82
80
  elsif !text['"']
83
- text = '"'+text+'"'
81
+ text = '"' + text + '"'
84
82
  return text
85
83
  elsif !(text['{'] || text['}'])
86
- text = '{'+text+'}'
84
+ text = '{' + text + '}'
87
85
  return text
88
86
  end
89
87
 
@@ -97,7 +95,7 @@ module Magick
97
95
  gm2 = @ctx.shadow.get_type_metrics('aa')
98
96
  h = (gm.ascent - gm.descent + 0.5).to_i
99
97
  w = gm.width - gm2.width
100
- if glyph_orientation == 0 || glyph_orientation == 180
98
+ if glyph_orientation.zero? || glyph_orientation == 180
101
99
  [w, h]
102
100
  else
103
101
  [h, w]
@@ -127,29 +125,29 @@ module Magick
127
125
 
128
126
  def shift_baseline(glyph_orientation, glyph)
129
127
  glyph_dimensions = @ctx.shadow.get_type_metrics(glyph)
130
- if glyph_orientation == 0 || glyph_orientation == 180
131
- x = glyph_dimensions.width
132
- else
133
- x = glyph_dimensions.ascent - glyph_dimensions.descent
134
- end
128
+ x = if glyph_orientation.zero? || glyph_orientation == 180
129
+ glyph_dimensions.width
130
+ else
131
+ glyph_dimensions.ascent - glyph_dimensions.descent
132
+ end
135
133
  case @ctx.text_attrs.baseline_shift
136
- when :baseline
137
- x = 0
138
- when :sub
139
-
140
- when :super
141
- x = -x
142
- when /[-+]?(\d+)%/
143
- m = $1 == '-' ? -1.0 : 1.0
144
- x = (m * x * $1.to_f / 100.0)
145
- else
146
- x = -@ctx.text_attrs.baseline_shift
134
+ when :baseline
135
+ x = 0
136
+ when :sub
137
+
138
+ when :super
139
+ x = -x
140
+ when /[-+]?(\d+)%/
141
+ m = Regexp.last_match(1) == '-' ? -1.0 : 1.0
142
+ x = (m * x * Regexp.last_match(1).to_f / 100.0)
143
+ else
144
+ x = -@ctx.text_attrs.baseline_shift
147
145
  end
148
146
  x
149
147
  end
150
148
 
151
149
  def render_glyph(glyph_orientation, x, y, glyph)
152
- if glyph_orientation == 0
150
+ if glyph_orientation.zero?
153
151
  @ctx.gc.text(x, y, enquote(glyph))
154
152
  else
155
153
  @ctx.gc.push
@@ -160,7 +158,7 @@ module Magick
160
158
  @ctx.gc.pop
161
159
  end
162
160
  end
163
- end # class TextStrategy
161
+ end # class TextStrategy
164
162
 
165
163
  class LRTextStrategy < TextStrategy
166
164
  def get_word_spacing
@@ -170,12 +168,12 @@ module Magick
170
168
 
171
169
  def get_letter_spacing(glyph)
172
170
  gx, gy = glyph_metrics(@ctx.text_attrs.glyph_orientation_horizontal, glyph)
173
- [gx+@ctx.text_attrs.letter_spacing, gy]
171
+ [gx + @ctx.text_attrs.letter_spacing, gy]
174
172
  end
175
173
 
176
174
  def render(x, y, text)
177
175
  x_rel_coords, y_rel_coords = text_rel_coords(text)
178
- dx = x_rel_coords.inject(0) {|sum, a| sum + a}
176
+ dx = x_rel_coords.reduce(0) { |sum, a| sum + a }
179
177
  dy = y_rel_coords.max
180
178
 
181
179
  # We're handling the anchoring.
@@ -189,25 +187,21 @@ module Magick
189
187
 
190
188
  # Align the first glyph
191
189
  case @ctx.text_attrs.glyph_orientation_horizontal
192
- when 0
193
-
194
- when 90
195
- y -= dy
196
- when 180
197
- x += x_rel_coords.shift
198
- x_rel_coords << 0
199
- y -= dy
200
- when 270
201
- x += x_rel_coords[0]
190
+ when 90
191
+ y -= dy
192
+ when 180
193
+ x += x_rel_coords.shift
194
+ x_rel_coords << 0
195
+ y -= dy
196
+ when 270
197
+ x += x_rel_coords[0]
202
198
  end
203
199
 
204
- y += shift_baseline(@ctx.text_attrs.glyph_orientation_horizontal, text[0,1])
200
+ y += shift_baseline(@ctx.text_attrs.glyph_orientation_horizontal, text[0, 1])
205
201
 
206
202
  first_word = true
207
203
  text.split(::Magick::RVG::WORD_SEP).each do |word|
208
- unless first_word
209
- x += x_rel_coords.shift
210
- end
204
+ x += x_rel_coords.shift unless first_word
211
205
  first_word = false
212
206
  word.split('').each do |glyph|
213
207
  render_glyph(@ctx.text_attrs.glyph_orientation_horizontal, x, y, glyph)
@@ -221,8 +215,8 @@ module Magick
221
215
  end # class LRTextStrategy
222
216
 
223
217
  class RLTextStrategy < TextStrategy
224
- def render(x, y, text)
225
- fail NotImplementedError
218
+ def render(_x, _y, _text)
219
+ raise NotImplementedError
226
220
  end
227
221
  end # class RLTextStrategy
228
222
 
@@ -234,13 +228,13 @@ module Magick
234
228
 
235
229
  def get_letter_spacing(glyph)
236
230
  gx, gy = glyph_metrics(@ctx.text_attrs.glyph_orientation_vertical, glyph)
237
- [gx, gy+@ctx.text_attrs.letter_spacing]
231
+ [gx, gy + @ctx.text_attrs.letter_spacing]
238
232
  end
239
233
 
240
234
  def render(x, y, text)
241
235
  x_rel_coords, y_rel_coords = text_rel_coords(text)
242
236
  dx = x_rel_coords.max
243
- dy = y_rel_coords.inject(0) {|sum, a| sum + a}
237
+ dy = y_rel_coords.reduce(0) { |sum, a| sum + a }
244
238
 
245
239
  # We're handling the anchoring.
246
240
  @ctx.gc.push
@@ -255,20 +249,20 @@ module Magick
255
249
  # is aligned on x and its top is aligned on y.
256
250
 
257
251
  case @ctx.text_attrs.glyph_orientation_vertical
258
- when 0
259
- x -= x_rel_coords.max / 2
260
- y += y_rel_coords[0]
261
- when 90
262
- x -= x_rel_coords.max / 2
263
- when 180
264
- x += x_rel_coords.max / 2
265
- when 270
266
- x += x_rel_coords.max / 2
267
- y += y_rel_coords.shift
268
- y_rel_coords << 0 # since we used an element we need to add a dummy
252
+ when 0
253
+ x -= x_rel_coords.max / 2
254
+ y += y_rel_coords[0]
255
+ when 90
256
+ x -= x_rel_coords.max / 2
257
+ when 180
258
+ x += x_rel_coords.max / 2
259
+ when 270
260
+ x += x_rel_coords.max / 2
261
+ y += y_rel_coords.shift
262
+ y_rel_coords << 0 # since we used an element we need to add a dummy
269
263
  end
270
264
 
271
- x -= shift_baseline(@ctx.text_attrs.glyph_orientation_vertical, text[0,1])
265
+ x -= shift_baseline(@ctx.text_attrs.glyph_orientation_vertical, text[0, 1])
272
266
 
273
267
  first_word = true
274
268
  text.split(::Magick::RVG::WORD_SEP).each do |word|
@@ -279,13 +273,13 @@ module Magick
279
273
  first_word = false
280
274
  word.split('').each do |glyph|
281
275
  case @ctx.text_attrs.glyph_orientation_vertical.to_i
282
- when 0, 90, 270
283
- x_shift = (dx - x_rel_coords.shift) / 2
284
- when 180
285
- x_shift = -(dx - x_rel_coords.shift) / 2
276
+ when 0, 90, 270
277
+ x_shift = (dx - x_rel_coords.shift) / 2
278
+ when 180
279
+ x_shift = -(dx - x_rel_coords.shift) / 2
286
280
  end
287
281
 
288
- render_glyph(@ctx.text_attrs.glyph_orientation_vertical, x+x_shift, y, glyph)
282
+ render_glyph(@ctx.text_attrs.glyph_orientation_vertical, x + x_shift, y, glyph)
289
283
  y += y_rel_coords.shift
290
284
  end
291
285
  end
@@ -293,7 +287,7 @@ module Magick
293
287
  @ctx.gc.pop
294
288
  [0, dy]
295
289
  end
296
- end # class TBTextStrategy
290
+ end # class TBTextStrategy
297
291
 
298
292
  # Handle "easy" text
299
293
  class DefaultTextStrategy < TextStrategy
@@ -301,16 +295,16 @@ module Magick
301
295
  @ctx.gc.text(x, y, enquote(text))
302
296
  tm = @ctx.shadow.get_type_metrics(text)
303
297
  dx = case @ctx.text_attrs.text_anchor
304
- when :start
298
+ when :start
305
299
  tm.width
306
- when :middle
300
+ when :middle
307
301
  tm.width / 2
308
- when :end
302
+ when :end
309
303
  0
310
- end
304
+ end
311
305
  [dx, 0]
312
306
  end
313
- end # class NormalTextStrategy
307
+ end # class NormalTextStrategy
314
308
  end # class Utility
315
309
  end # class RVG
316
310
  end # module Magick
@@ -319,9 +313,7 @@ module Magick
319
313
  class RVG
320
314
  class Utility
321
315
  class TextAttributes
322
- public
323
-
324
- WRITING_MODE = %w{lr-tb lr rl-tb rl tb-rl tb}
316
+ WRITING_MODE = %w[lr-tb lr rl-tb rl tb-rl tb]
325
317
 
326
318
  def initialize
327
319
  @affine = []
@@ -419,8 +411,8 @@ module Magick
419
411
 
420
412
  def non_default?
421
413
  @baseline_shift[-1] != :baseline || @letter_spacing[-1] != 0 ||
422
- @word_spacing[-1] != 0 || @writing_mode[-1][/\Alr/].nil? ||
423
- @glyph_orientation_horizontal[-1] != 0
414
+ @word_spacing[-1] != 0 || @writing_mode[-1][/\Alr/].nil? ||
415
+ @glyph_orientation_horizontal[-1] != 0
424
416
  end
425
417
 
426
418
  def word_spacing
@@ -438,56 +430,60 @@ module Magick
438
430
  def writing_mode=(mode)
439
431
  @writing_mode[-1] = WRITING_MODE.include?(mode) ? mode : 'lr-tb'
440
432
  end
441
- end # class TextAttributes
433
+ end # class TextAttributes
442
434
 
443
435
  class GraphicContext
444
436
  FONT_STRETCH = {
445
- :normal => Magick::NormalStretch,
446
- :ultra_condensed => Magick::UltraCondensedStretch,
447
- :extra_condensed => Magick::ExtraCondensedStretch,
448
- :condensed => Magick::CondensedStretch,
449
- :semi_condensed => Magick::SemiCondensedStretch,
450
- :semi_expanded => Magick::SemiExpandedStretch,
451
- :expanded => Magick::ExpandedStretch,
452
- :extra_expanded => Magick::ExtraExpandedStretch,
453
- :ultra_expanded => Magick::UltraExpandedStretch
437
+ normal: Magick::NormalStretch,
438
+ ultra_condensed: Magick::UltraCondensedStretch,
439
+ extra_condensed: Magick::ExtraCondensedStretch,
440
+ condensed: Magick::CondensedStretch,
441
+ semi_condensed: Magick::SemiCondensedStretch,
442
+ semi_expanded: Magick::SemiExpandedStretch,
443
+ expanded: Magick::ExpandedStretch,
444
+ extra_expanded: Magick::ExtraExpandedStretch,
445
+ ultra_expanded: Magick::UltraExpandedStretch
454
446
  }
455
447
 
456
448
  FONT_STYLE = {
457
- :normal => Magick::NormalStyle,
458
- :italic => Magick::ItalicStyle,
459
- :oblique => Magick::ObliqueStyle
449
+ normal: Magick::NormalStyle,
450
+ italic: Magick::ItalicStyle,
451
+ oblique: Magick::ObliqueStyle
460
452
  }
461
453
 
462
454
  FONT_WEIGHT = {
463
- 'normal' => Magick::NormalWeight,
464
- 'bold' => Magick::BoldWeight,
465
- 'bolder' => Magick::BolderWeight,
455
+ 'normal' => Magick::NormalWeight,
456
+ 'bold' => Magick::BoldWeight,
457
+ 'bolder' => Magick::BolderWeight,
466
458
  'lighter' => Magick::LighterWeight
467
459
  }
468
460
 
469
461
  TEXT_ANCHOR = {
470
- :start => Magick::StartAnchor,
471
- :middle => Magick::MiddleAnchor,
472
- :end => Magick::EndAnchor
462
+ start: Magick::StartAnchor,
463
+ middle: Magick::MiddleAnchor,
464
+ end: Magick::EndAnchor
473
465
  }
474
466
 
475
467
  ANCHOR_TO_ALIGN = {
476
- :start => Magick::LeftAlign,
477
- :middle => Magick::CenterAlign,
478
- :end => Magick::RightAlign
468
+ start: Magick::LeftAlign,
469
+ middle: Magick::CenterAlign,
470
+ end: Magick::RightAlign
479
471
  }
480
472
 
481
473
  TEXT_DECORATION = {
482
- :none => Magick::NoDecoration,
483
- :underline => Magick::UnderlineDecoration,
484
- :overline => Magick::OverlineDecoration,
485
- :line_through => Magick::LineThroughDecoration}
486
-
487
- TEXT_STRATEGIES = {
488
- 'lr-tb' => LRTextStrategy, 'lr' => LRTextStrategy,
489
- 'rt-tb' => RLTextStrategy, 'rl' => RLTextStrategy,
490
- 'tb-rl' => TBTextStrategy, 'tb' => TBTextStrategy
474
+ none: Magick::NoDecoration,
475
+ underline: Magick::UnderlineDecoration,
476
+ overline: Magick::OverlineDecoration,
477
+ line_through: Magick::LineThroughDecoration
478
+ }
479
+
480
+ TEXT_STRATEGIES = {
481
+ 'lr-tb' => LRTextStrategy,
482
+ 'lr' => LRTextStrategy,
483
+ 'rt-tb' => RLTextStrategy,
484
+ 'rl' => RLTextStrategy,
485
+ 'tb-rl' => TBTextStrategy,
486
+ 'tb' => TBTextStrategy
491
487
  }
492
488
 
493
489
  def self.degrees_to_radians(deg)
@@ -526,8 +522,8 @@ module Magick
526
522
  init_matrix
527
523
  end
528
524
 
529
- def method_missing(methID, *args, &block)
530
- @gc.__send__(methID, *args, &block)
525
+ def method_missing(meth_id, *args, &block)
526
+ @gc.__send__(meth_id, *args, &block)
531
527
  end
532
528
 
533
529
  def affine(sx, rx, ry, sy, tx, ty)
@@ -539,13 +535,13 @@ module Magick
539
535
 
540
536
  def baseline_shift(value)
541
537
  @text_attrs.baseline_shift = case value
542
- when 'baseline', 'sub', 'super'
543
- value.intern
544
- when /[-+]?\d+%/, Numeric
545
- value
546
- else
547
- :baseline
548
- end
538
+ when 'baseline', 'sub', 'super'
539
+ value.to_sym
540
+ when /[-+]?\d+%/, Numeric
541
+ value
542
+ else
543
+ :baseline
544
+ end
549
545
  nil
550
546
  end
551
547
 
@@ -568,14 +564,14 @@ module Magick
568
564
  end
569
565
 
570
566
  def font_stretch(stretch)
571
- stretch = FONT_STRETCH.fetch(stretch.intern, Magick::NormalStretch)
567
+ stretch = FONT_STRETCH.fetch(stretch.to_sym, Magick::NormalStretch)
572
568
  @gc.font_stretch(stretch)
573
569
  @shadow[-1].font_stretch = stretch
574
570
  nil
575
571
  end
576
572
 
577
573
  def font_style(style)
578
- style = FONT_STYLE.fetch(style.intern, Magick::NormalStyle)
574
+ style = FONT_STYLE.fetch(style.to_sym, Magick::NormalStyle)
579
575
  @gc.font_style(style)
580
576
  @shadow[-1].font_style = style
581
577
  nil
@@ -583,7 +579,7 @@ module Magick
583
579
 
584
580
  def font_weight(weight)
585
581
  # If the arg is not in the hash use it directly. Handles numeric values.
586
- weight = FONT_WEIGHT.fetch(weight) {|key| key}
582
+ weight = FONT_WEIGHT.fetch(weight) { |key| key }
587
583
  @gc.font_weight(weight)
588
584
  @shadow[-1].font_weight = weight
589
585
  nil
@@ -672,18 +668,19 @@ module Magick
672
668
  end
673
669
 
674
670
  def text(x, y, text)
675
- return if text.length == 0
676
- if @text_attrs.non_default?
677
- text_renderer = TEXT_STRATEGIES[@text_attrs.writing_mode].new(self)
678
- else
679
- text_renderer = DefaultTextStrategy.new(self)
680
- end
671
+ return if text.length.zero?
672
+
673
+ text_renderer = if @text_attrs.non_default?
674
+ TEXT_STRATEGIES[@text_attrs.writing_mode].new(self)
675
+ else
676
+ DefaultTextStrategy.new(self)
677
+ end
681
678
 
682
679
  text_renderer.render(x, y, text)
683
680
  end
684
681
 
685
682
  def text_anchor(anchor)
686
- anchor = anchor.intern
683
+ anchor = anchor.to_sym
687
684
  anchor_enum = TEXT_ANCHOR.fetch(anchor, Magick::StartAnchor)
688
685
  @gc.text_anchor(anchor_enum)
689
686
  align = ANCHOR_TO_ALIGN.fetch(anchor, Magick::LeftAlign)
@@ -693,7 +690,7 @@ module Magick
693
690
  end
694
691
 
695
692
  def text_decoration(decoration)
696
- decoration = TEXT_DECORATION.fetch(decoration.intern, Magick::NoDecoration)
693
+ decoration = TEXT_DECORATION.fetch(decoration.to_sym, Magick::NoDecoration)
697
694
  @gc.decorate(decoration)
698
695
  @shadow[-1].decorate = decoration
699
696
  nil
@@ -717,7 +714,7 @@ module Magick
717
714
  @text_attrs.writing_mode = mode
718
715
  nil
719
716
  end
720
- end # class GraphicContext
717
+ end # class GraphicContext
721
718
  end # class Utility
722
719
  end # class RVG
723
720
  end # module Magick
data/lib/rvg/paint.rb CHANGED
@@ -37,7 +37,8 @@ module Magick
37
37
  yield(self) if block_given?
38
38
  end
39
39
 
40
- def add_primitives(gc, style) #:nodoc:
40
+ # @private
41
+ def add_primitives(gc, style)
41
42
  name = __id__.to_s
42
43
  gc.pattern(name, @x, @y, @width, @height) do
43
44
  add_viewbox_primitives(@width, @height, gc)
data/lib/rvg/pathdata.rb CHANGED
@@ -12,12 +12,10 @@ module Magick
12
12
  private
13
13
 
14
14
  def add_points(req, *coords)
15
- if coords
16
- if coords.length % req != 0
17
- fail ArgumentError, "wrong number of coordinates specified. A multiple of #{req} required, #{req+coords.length} given."
18
- end
19
- coords.each {|c| @path << ('%g' % c)}
20
- end
15
+ return unless coords
16
+ raise ArgumentError, "wrong number of coordinates specified. A multiple of #{req} required, #{req + coords.length} given." if coords.length % req != 0
17
+
18
+ coords.each { |c| @path << sprintf('%g', c) }
21
19
  end
22
20
 
23
21
  public
@@ -32,7 +30,8 @@ module Magick
32
30
  @path
33
31
  end
34
32
 
35
- def deep_copy(h = nil) #:nodoc:
33
+ # @private
34
+ def deep_copy(_h = nil)
36
35
  @path.dup
37
36
  end
38
37
 
@@ -47,7 +46,7 @@ module Magick
47
46
 
48
47
  # Add a <tt>closepath</tt> command. The <tt>abs</tt> argument
49
48
  # is ignored.
50
- def closepath(abs = true)
49
+ def closepath(_abs = true)
51
50
  @path << 'Z' # ignore `abs'
52
51
  end
53
52