rmagick 3.2.0 → 4.3.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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +63 -0
- data/.devcontainer/Dockerfile +14 -0
- data/.devcontainer/ImageMagick6/devcontainer.json +11 -0
- data/.devcontainer/devcontainer.json +11 -0
- data/.devcontainer/setup-repo.sh +10 -0
- data/.devcontainer/setup-user.sh +45 -0
- data/.editorconfig +3 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +79 -0
- data/.gitignore +3 -1
- data/.rspec +1 -0
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +151 -297
- data/.yardopts +5 -0
- data/CHANGELOG.md +233 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +14 -10
- data/README.md +326 -0
- data/Rakefile +16 -22
- data/before_install_linux.sh +22 -28
- data/before_install_osx.sh +57 -2
- data/ext/RMagick/extconf.rb +149 -105
- data/ext/RMagick/rmagick.c +77 -104
- data/ext/RMagick/rmagick.h +121 -103
- data/ext/RMagick/rmdraw.c +364 -436
- data/ext/RMagick/rmenum.c +106 -114
- data/ext/RMagick/rmfill.c +149 -70
- data/ext/RMagick/rmilist.c +225 -367
- data/ext/RMagick/rmimage.c +4751 -4405
- data/ext/RMagick/rminfo.c +574 -787
- data/ext/RMagick/rmkinfo.c +51 -121
- data/ext/RMagick/rmmain.c +454 -286
- data/ext/RMagick/rmmontage.c +64 -130
- data/ext/RMagick/rmpixel.c +488 -437
- data/ext/RMagick/rmstruct.c +83 -96
- data/ext/RMagick/rmutil.c +302 -214
- data/lib/rmagick/version.rb +1 -1
- data/lib/rmagick_internal.rb +138 -93
- data/lib/rvg/clippath.rb +2 -1
- data/lib/rvg/container.rb +10 -5
- data/lib/rvg/describable.rb +1 -1
- data/lib/rvg/embellishable.rb +5 -4
- data/lib/rvg/misc.rb +15 -12
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +12 -11
- data/lib/rvg/rvg.rb +12 -8
- data/lib/rvg/stylable.rb +9 -7
- data/lib/rvg/text.rb +11 -6
- data/lib/rvg/transformable.rb +3 -2
- data/lib/rvg/units.rb +1 -1
- data/rmagick.gemspec +10 -11
- metadata +52 -423
- data/.appveyor.yml +0 -45
- data/.circleci/config.yml +0 -56
- data/.ruby-version +0 -1
- data/.simplecov +0 -27
- data/.travis.yml +0 -62
- data/Doxyfile +0 -1514
- data/README.textile +0 -259
- data/benchmarks/memory/README.md +0 -50
- data/benchmarks/memory/image_new.rb +0 -8
- data/benchmarks/memory/rmagick.gnuplot +0 -16
- data/doc/.cvsignore +0 -1
- data/doc/comtasks.html +0 -287
- data/doc/constants.html +0 -1581
- data/doc/css/doc.css +0 -299
- data/doc/css/popup.css +0 -34
- data/doc/css/ref.css +0 -67
- data/doc/draw.html +0 -3272
- data/doc/ex/InitialCoords.rb +0 -22
- data/doc/ex/NewCoordSys.rb +0 -30
- data/doc/ex/OrigCoordSys.rb +0 -16
- data/doc/ex/PreserveAspectRatio.rb +0 -204
- data/doc/ex/RotateScale.rb +0 -36
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -15
- data/doc/ex/Use02.rb +0 -20
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -31
- data/doc/ex/adaptive_threshold.rb +0 -9
- data/doc/ex/add_noise.rb +0 -16
- data/doc/ex/affine.rb +0 -48
- data/doc/ex/affine_transform.rb +0 -20
- data/doc/ex/arc.rb +0 -49
- data/doc/ex/arcpath.rb +0 -32
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -59
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -17
- data/doc/ex/bilevel_channel.rb +0 -8
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -42
- data/doc/ex/cbezier1.rb +0 -41
- data/doc/ex/cbezier2.rb +0 -41
- data/doc/ex/cbezier3.rb +0 -41
- data/doc/ex/cbezier4.rb +0 -42
- data/doc/ex/cbezier5.rb +0 -42
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -25
- data/doc/ex/charcoal.rb +0 -12
- data/doc/ex/chop.rb +0 -29
- data/doc/ex/circle.rb +0 -33
- data/doc/ex/circle01.rb +0 -16
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -57
- data/doc/ex/color_fill_to_border.rb +0 -29
- data/doc/ex/color_floodfill.rb +0 -28
- data/doc/ex/color_histogram.rb +0 -47
- data/doc/ex/color_reset.rb +0 -11
- data/doc/ex/colorize.rb +0 -16
- data/doc/ex/colors.rb +0 -64
- data/doc/ex/compose_mask.rb +0 -22
- data/doc/ex/composite.rb +0 -133
- data/doc/ex/composite_layers.rb +0 -52
- data/doc/ex/composite_tiled.rb +0 -21
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -42
- data/doc/ex/cubic01.rb +0 -43
- data/doc/ex/cubic02.rb +0 -91
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -12
- data/doc/ex/drawcomp.rb +0 -41
- data/doc/ex/drop_shadow.rb +0 -60
- data/doc/ex/edge.rb +0 -11
- data/doc/ex/ellipse.rb +0 -45
- data/doc/ex/ellipse01.rb +0 -21
- data/doc/ex/emboss.rb +0 -11
- data/doc/ex/enhance.rb +0 -28
- data/doc/ex/equalize.rb +0 -11
- data/doc/ex/evenodd.rb +0 -42
- data/doc/ex/fill_pattern.rb +0 -23
- data/doc/ex/flatten_images.rb +0 -36
- data/doc/ex/flip.rb +0 -11
- data/doc/ex/flop.rb +0 -11
- data/doc/ex/font_styles.rb +0 -32
- data/doc/ex/fonts.rb +0 -16
- data/doc/ex/frame.rb +0 -12
- data/doc/ex/gaussian_blur.rb +0 -11
- data/doc/ex/get_multiline_type_metrics.rb +0 -41
- data/doc/ex/get_pixels.rb +0 -45
- data/doc/ex/get_type_metrics.rb +0 -142
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -78
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -44
- data/doc/ex/images/Apple.miff +0 -0
- data/doc/ex/images/Ballerina.jpg +0 -0
- data/doc/ex/images/Ballerina3.jpg +0 -0
- data/doc/ex/images/Button_0.gif +0 -0
- data/doc/ex/images/Button_1.gif +0 -0
- data/doc/ex/images/Button_2.gif +0 -0
- data/doc/ex/images/Button_3.gif +0 -0
- data/doc/ex/images/Button_4.gif +0 -0
- data/doc/ex/images/Button_5.gif +0 -0
- data/doc/ex/images/Button_6.gif +0 -0
- data/doc/ex/images/Button_7.gif +0 -0
- data/doc/ex/images/Button_8.gif +0 -0
- data/doc/ex/images/Button_9.gif +0 -0
- data/doc/ex/images/Button_A.gif +0 -0
- data/doc/ex/images/Button_B.gif +0 -0
- data/doc/ex/images/Button_C.gif +0 -0
- data/doc/ex/images/Button_D.gif +0 -0
- data/doc/ex/images/Button_E.gif +0 -0
- data/doc/ex/images/Button_F.gif +0 -0
- data/doc/ex/images/Button_G.gif +0 -0
- data/doc/ex/images/Button_H.gif +0 -0
- data/doc/ex/images/Button_I.gif +0 -0
- data/doc/ex/images/Button_J.gif +0 -0
- data/doc/ex/images/Button_K.gif +0 -0
- data/doc/ex/images/Button_L.gif +0 -0
- data/doc/ex/images/Button_M.gif +0 -0
- data/doc/ex/images/Button_N.gif +0 -0
- data/doc/ex/images/Button_O.gif +0 -0
- data/doc/ex/images/Button_P.gif +0 -0
- data/doc/ex/images/Button_Q.gif +0 -0
- data/doc/ex/images/Button_R.gif +0 -0
- data/doc/ex/images/Button_S.gif +0 -0
- data/doc/ex/images/Button_T.gif +0 -0
- data/doc/ex/images/Button_U.gif +0 -0
- data/doc/ex/images/Button_V.gif +0 -0
- data/doc/ex/images/Button_W.gif +0 -0
- data/doc/ex/images/Button_X.gif +0 -0
- data/doc/ex/images/Button_Y.gif +0 -0
- data/doc/ex/images/Button_Z.gif +0 -0
- data/doc/ex/images/Cheetah.jpg +0 -0
- data/doc/ex/images/Coffee.png +0 -0
- data/doc/ex/images/Flower_Hat.jpg +0 -0
- data/doc/ex/images/Gold_Statue.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons.jpg +0 -0
- data/doc/ex/images/Hot_Air_Balloons_H.jpg +0 -0
- data/doc/ex/images/Leaf.miff +0 -0
- data/doc/ex/images/No.png +0 -0
- data/doc/ex/images/Polynesia.jpg +0 -0
- data/doc/ex/images/Red_Rocks.jpg +0 -0
- data/doc/ex/images/Rocks_On_Beach.miff +0 -0
- data/doc/ex/images/Shorts.jpg +0 -0
- data/doc/ex/images/Snake.png +0 -0
- data/doc/ex/images/Violin.jpg +0 -0
- data/doc/ex/images/Yellow_Rose.miff +0 -0
- data/doc/ex/images/big-duck.gif +0 -0
- data/doc/ex/images/duck.gif +0 -0
- data/doc/ex/images/duck0.gif +0 -0
- data/doc/ex/images/duck1.gif +0 -0
- data/doc/ex/images/duck10.gif +0 -0
- data/doc/ex/images/duck11.gif +0 -0
- data/doc/ex/images/duck12.gif +0 -0
- data/doc/ex/images/duck13.gif +0 -0
- data/doc/ex/images/duck14.gif +0 -0
- data/doc/ex/images/duck15.gif +0 -0
- data/doc/ex/images/duck2.gif +0 -0
- data/doc/ex/images/duck3.gif +0 -0
- data/doc/ex/images/duck4.gif +0 -0
- data/doc/ex/images/duck5.gif +0 -0
- data/doc/ex/images/duck6.gif +0 -0
- data/doc/ex/images/duck7.gif +0 -0
- data/doc/ex/images/duck8.gif +0 -0
- data/doc/ex/images/duck9.gif +0 -0
- data/doc/ex/images/graydient230x6.gif +0 -0
- data/doc/ex/images/image_with_profile.jpg +0 -0
- data/doc/ex/images/logo400x83.gif +0 -0
- data/doc/ex/images/model.miff +0 -0
- data/doc/ex/images/notimplemented.gif +0 -0
- data/doc/ex/images/smile.miff +0 -0
- data/doc/ex/images/spin.gif +0 -0
- data/doc/ex/implode.rb +0 -34
- data/doc/ex/level.rb +0 -11
- data/doc/ex/level_colors.rb +0 -11
- data/doc/ex/line.rb +0 -41
- data/doc/ex/line01.rb +0 -21
- data/doc/ex/mask.rb +0 -35
- data/doc/ex/matte_fill_to_border.rb +0 -39
- data/doc/ex/matte_floodfill.rb +0 -32
- data/doc/ex/matte_replace.rb +0 -39
- data/doc/ex/median_filter.rb +0 -28
- data/doc/ex/modulate.rb +0 -11
- data/doc/ex/mono.rb +0 -23
- data/doc/ex/morph.rb +0 -25
- data/doc/ex/mosaic.rb +0 -37
- data/doc/ex/motion_blur.rb +0 -11
- data/doc/ex/negate.rb +0 -11
- data/doc/ex/negate_channel.rb +0 -9
- data/doc/ex/nested_rvg.rb +0 -21
- data/doc/ex/nonzero.rb +0 -42
- data/doc/ex/normalize.rb +0 -11
- data/doc/ex/oil_paint.rb +0 -11
- data/doc/ex/opacity.rb +0 -37
- data/doc/ex/ordered_dither.rb +0 -11
- data/doc/ex/path.rb +0 -63
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -26
- data/doc/ex/polygon.rb +0 -23
- data/doc/ex/polygon01.rb +0 -21
- data/doc/ex/polyline.rb +0 -22
- data/doc/ex/polyline01.rb +0 -21
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -8
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -34
- data/doc/ex/quantize-m.rb +0 -25
- data/doc/ex/radial_blur.rb +0 -9
- data/doc/ex/raise.rb +0 -8
- data/doc/ex/random_threshold_channel.rb +0 -13
- data/doc/ex/rect01.rb +0 -14
- data/doc/ex/rect02.rb +0 -20
- data/doc/ex/rectangle.rb +0 -34
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -11
- data/doc/ex/remap_images.rb +0 -19
- data/doc/ex/resize_to_fill.rb +0 -8
- data/doc/ex/resize_to_fit.rb +0 -8
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -44
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -33
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -12
- data/doc/ex/rvg_linecap.rb +0 -42
- data/doc/ex/rvg_linejoin.rb +0 -40
- data/doc/ex/rvg_opacity.rb +0 -18
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -11
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -7
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -30
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -17
- data/doc/ex/skewx.rb +0 -51
- data/doc/ex/skewy.rb +0 -47
- data/doc/ex/smile.rb +0 -126
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -55
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -54
- data/doc/ex/stroke_dasharray.rb +0 -42
- data/doc/ex/stroke_fill.rb +0 -10
- data/doc/ex/stroke_linecap.rb +0 -44
- data/doc/ex/stroke_linejoin.rb +0 -48
- data/doc/ex/stroke_width.rb +0 -49
- data/doc/ex/swirl.rb +0 -17
- data/doc/ex/text.rb +0 -37
- data/doc/ex/text01.rb +0 -16
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -37
- data/doc/ex/text_styles.rb +0 -19
- data/doc/ex/text_undercolor.rb +0 -28
- data/doc/ex/texture_fill_to_border.rb +0 -34
- data/doc/ex/texture_floodfill.rb +0 -32
- data/doc/ex/texturefill.rb +0 -24
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -13
- data/doc/ex/translate.rb +0 -39
- data/doc/ex/transparent.rb +0 -38
- data/doc/ex/transpose.rb +0 -9
- data/doc/ex/transverse.rb +0 -9
- data/doc/ex/tref01.rb +0 -24
- data/doc/ex/triangle01.rb +0 -15
- data/doc/ex/trim.rb +0 -23
- data/doc/ex/tspan01.rb +0 -17
- data/doc/ex/tspan02.rb +0 -17
- data/doc/ex/tspan03.rb +0 -19
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -33
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -27
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -58
- data/doc/ex/writing_mode01.rb +0 -26
- data/doc/ex/writing_mode02.rb +0 -26
- data/doc/ilist.html +0 -2056
- data/doc/image1.html +0 -4680
- data/doc/image2.html +0 -3665
- data/doc/image3.html +0 -4522
- data/doc/imageattrs.html +0 -1638
- data/doc/imusage.html +0 -514
- data/doc/index.html +0 -416
- data/doc/info.html +0 -1499
- data/doc/magick.html +0 -570
- data/doc/optequiv.html +0 -2435
- data/doc/rvg.html +0 -975
- data/doc/rvgclip.html +0 -248
- data/doc/rvggroup.html +0 -305
- data/doc/rvgimage.html +0 -289
- data/doc/rvgpattern.html +0 -475
- data/doc/rvgshape.html +0 -406
- data/doc/rvgstyle.html +0 -270
- data/doc/rvgtext.html +0 -465
- data/doc/rvgtspan.html +0 -238
- data/doc/rvgtut.html +0 -530
- data/doc/rvguse.html +0 -145
- data/doc/rvgxform.html +0 -294
- data/doc/scripts/doc.js +0 -22
- data/doc/scripts/stripeTables.js +0 -23
- data/doc/struct.html +0 -1339
- data/doc/usage.html +0 -1621
- data/examples/constitute.rb +0 -7
- data/examples/crop_with_gravity.rb +0 -42
- data/examples/demo.rb +0 -323
- data/examples/describe.rb +0 -41
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -312
- data/examples/identify.rb +0 -174
- data/examples/image_opacity.rb +0 -28
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -37
- data/examples/rotating_text.rb +0 -45
- data/examples/spinner.rb +0 -49
- data/examples/thumbnail.rb +0 -64
- data/examples/vignette.rb +0 -78
- data/lib/obsolete.rb +0 -66
- data/spec/rmagick/ImageList1_spec.rb +0 -24
- data/spec/rmagick/draw_spec.rb +0 -155
- data/spec/rmagick/image/blue_shift_spec.rb +0 -14
- data/spec/rmagick/image/channel_entropy_spec.rb +0 -9
- data/spec/rmagick/image/composite_spec.rb +0 -72
- data/spec/rmagick/image/constitute_spec.rb +0 -13
- data/spec/rmagick/image/dispatch_spec.rb +0 -16
- data/spec/rmagick/image/from_blob_spec.rb +0 -12
- data/spec/rmagick/image/ping_spec.rb +0 -12
- data/spec/rmagick/image/properties_spec.rb +0 -27
- data/spec/rmagick/image/read_spec.rb +0 -28
- data/spec/spec_helper.rb +0 -10
- data/spec/support/issue_200/app.rb +0 -8
- data/test/Draw.rb +0 -351
- data/test/Enum.rb +0 -228
- data/test/Fill.rb +0 -93
- data/test/Image1.rb +0 -627
- data/test/Image2.rb +0 -1426
- data/test/Image3.rb +0 -1091
- data/test/ImageList1.rb +0 -858
- data/test/ImageList2.rb +0 -406
- data/test/Image_attributes.rb +0 -666
- data/test/Import_Export.rb +0 -115
- data/test/Info.rb +0 -444
- data/test/KernelInfo.rb +0 -67
- data/test/Magick.rb +0 -311
- data/test/Pixel.rb +0 -285
- data/test/PolaroidOptions.rb +0 -23
- data/test/Preview.rb +0 -26
- data/test/Struct.rb +0 -45
- data/test/appearance/Montage.rb +0 -26
- data/test/appearance/appearance_assertion.rb +0 -13
- data/test/appearance/expected/montage_border_color.jpg +0 -0
- data/test/cmyk.icm +0 -0
- data/test/lib/Obsolete.rb +0 -30
- data/test/lib/internal/Draw.rb +0 -823
- data/test/lib/internal/Geometry.rb +0 -98
- data/test/lib/internal/Magick.rb +0 -40
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -49
- data/test/tmpnam_test.rb +0 -50
data/lib/rvg/embellishable.rb
CHANGED
@@ -5,7 +5,8 @@
|
|
5
5
|
module Magick
|
6
6
|
class RVG
|
7
7
|
# Parent class of Circle, Ellipse, Text, etc.
|
8
|
-
|
8
|
+
# @private
|
9
|
+
class Shape
|
9
10
|
include Stylable
|
10
11
|
include Transformable
|
11
12
|
include Duplicatable
|
@@ -30,7 +31,6 @@ module Magick
|
|
30
31
|
|
31
32
|
@primitive = :circle
|
32
33
|
@args = [cx, cy, cx + r, cy]
|
33
|
-
self
|
34
34
|
end
|
35
35
|
end # class Circle
|
36
36
|
|
@@ -222,7 +222,8 @@ module Magick
|
|
222
222
|
init_viewbox
|
223
223
|
end
|
224
224
|
|
225
|
-
|
225
|
+
# @private
|
226
|
+
def add_primitives(gc)
|
226
227
|
# Do not render if width or height is 0
|
227
228
|
return if @width.zero? || @height.zero?
|
228
229
|
|
@@ -332,7 +333,7 @@ module Magick
|
|
332
333
|
y = Float(y)
|
333
334
|
rescue ArgumentError
|
334
335
|
args = [cols, rows, x, y]
|
335
|
-
raise ArgumentError, "at least one argument is not convertable to Float (got #{args.
|
336
|
+
raise ArgumentError, "at least one argument is not convertable to Float (got #{args.map(&:class).join(', ')})"
|
336
337
|
end
|
337
338
|
rvg.corner(x, y)
|
338
339
|
@content << rvg
|
data/lib/rvg/misc.rb
CHANGED
@@ -34,7 +34,7 @@ module Magick
|
|
34
34
|
# Convert an array of method arguments to Float objects. If any
|
35
35
|
# cannot be converted, raise ArgumentError and issue a message.
|
36
36
|
def self.fmsg(*args)
|
37
|
-
"at least one argument cannot be converted to Float (got #{args.
|
37
|
+
"at least one argument cannot be converted to Float (got #{args.map(&:class).join(', ')})"
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.convert_to_float(*args)
|
@@ -44,7 +44,7 @@ module Magick
|
|
44
44
|
args.pop
|
45
45
|
end
|
46
46
|
begin
|
47
|
-
fargs = args.
|
47
|
+
fargs = args.map { |a| allow_nil && a.nil? ? a : Float(a) }
|
48
48
|
rescue ArgumentError, TypeError
|
49
49
|
raise ArgumentError, fmsg(*args)
|
50
50
|
end
|
@@ -173,7 +173,7 @@ module Magick
|
|
173
173
|
|
174
174
|
def render(x, y, text)
|
175
175
|
x_rel_coords, y_rel_coords = text_rel_coords(text)
|
176
|
-
dx = x_rel_coords.
|
176
|
+
dx = x_rel_coords.reduce(0) { |sum, a| sum + a }
|
177
177
|
dy = y_rel_coords.max
|
178
178
|
|
179
179
|
# We're handling the anchoring.
|
@@ -234,7 +234,7 @@ module Magick
|
|
234
234
|
def render(x, y, text)
|
235
235
|
x_rel_coords, y_rel_coords = text_rel_coords(text)
|
236
236
|
dx = x_rel_coords.max
|
237
|
-
dy = y_rel_coords.
|
237
|
+
dy = y_rel_coords.reduce(0) { |sum, a| sum + a }
|
238
238
|
|
239
239
|
# We're handling the anchoring.
|
240
240
|
@ctx.gc.push
|
@@ -478,9 +478,12 @@ module Magick
|
|
478
478
|
}
|
479
479
|
|
480
480
|
TEXT_STRATEGIES = {
|
481
|
-
'lr-tb' => LRTextStrategy,
|
482
|
-
'
|
483
|
-
'tb
|
481
|
+
'lr-tb' => LRTextStrategy,
|
482
|
+
'lr' => LRTextStrategy,
|
483
|
+
'rt-tb' => RLTextStrategy,
|
484
|
+
'rl' => RLTextStrategy,
|
485
|
+
'tb-rl' => TBTextStrategy,
|
486
|
+
'tb' => TBTextStrategy
|
484
487
|
}
|
485
488
|
|
486
489
|
def self.degrees_to_radians(deg)
|
@@ -533,7 +536,7 @@ module Magick
|
|
533
536
|
def baseline_shift(value)
|
534
537
|
@text_attrs.baseline_shift = case value
|
535
538
|
when 'baseline', 'sub', 'super'
|
536
|
-
value.
|
539
|
+
value.to_sym
|
537
540
|
when /[-+]?\d+%/, Numeric
|
538
541
|
value
|
539
542
|
else
|
@@ -561,14 +564,14 @@ module Magick
|
|
561
564
|
end
|
562
565
|
|
563
566
|
def font_stretch(stretch)
|
564
|
-
stretch = FONT_STRETCH.fetch(stretch.
|
567
|
+
stretch = FONT_STRETCH.fetch(stretch.to_sym, Magick::NormalStretch)
|
565
568
|
@gc.font_stretch(stretch)
|
566
569
|
@shadow[-1].font_stretch = stretch
|
567
570
|
nil
|
568
571
|
end
|
569
572
|
|
570
573
|
def font_style(style)
|
571
|
-
style = FONT_STYLE.fetch(style.
|
574
|
+
style = FONT_STYLE.fetch(style.to_sym, Magick::NormalStyle)
|
572
575
|
@gc.font_style(style)
|
573
576
|
@shadow[-1].font_style = style
|
574
577
|
nil
|
@@ -677,7 +680,7 @@ module Magick
|
|
677
680
|
end
|
678
681
|
|
679
682
|
def text_anchor(anchor)
|
680
|
-
anchor = anchor.
|
683
|
+
anchor = anchor.to_sym
|
681
684
|
anchor_enum = TEXT_ANCHOR.fetch(anchor, Magick::StartAnchor)
|
682
685
|
@gc.text_anchor(anchor_enum)
|
683
686
|
align = ANCHOR_TO_ALIGN.fetch(anchor, Magick::LeftAlign)
|
@@ -687,7 +690,7 @@ module Magick
|
|
687
690
|
end
|
688
691
|
|
689
692
|
def text_decoration(decoration)
|
690
|
-
decoration = TEXT_DECORATION.fetch(decoration.
|
693
|
+
decoration = TEXT_DECORATION.fetch(decoration.to_sym, Magick::NoDecoration)
|
691
694
|
@gc.decorate(decoration)
|
692
695
|
@shadow[-1].decorate = decoration
|
693
696
|
nil
|
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
|
-
|
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
@@ -15,7 +15,7 @@ module Magick
|
|
15
15
|
return unless coords
|
16
16
|
raise ArgumentError, "wrong number of coordinates specified. A multiple of #{req} required, #{req + coords.length} given." if coords.length % req != 0
|
17
17
|
|
18
|
-
coords.each { |c| @path <<
|
18
|
+
coords.each { |c| @path << sprintf('%g', c) }
|
19
19
|
end
|
20
20
|
|
21
21
|
public
|
@@ -30,7 +30,8 @@ module Magick
|
|
30
30
|
@path
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
# @private
|
34
|
+
def deep_copy(_h = nil)
|
34
35
|
@path.dup
|
35
36
|
end
|
36
37
|
|
@@ -38,7 +39,7 @@ module Magick
|
|
38
39
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
39
40
|
# the coordinates are relative.
|
40
41
|
def moveto(abs, x, y, *coords)
|
41
|
-
@path <<
|
42
|
+
@path << sprintf('%s%g,%g ', (abs ? 'M' : 'm'), x, y)
|
42
43
|
# "subsequent pairs are treated as implicit lineto commands"
|
43
44
|
add_points(2, *coords)
|
44
45
|
end
|
@@ -54,7 +55,7 @@ module Magick
|
|
54
55
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
55
56
|
# the coordinates are relative.
|
56
57
|
def lineto(abs, x, y, *coords)
|
57
|
-
@path <<
|
58
|
+
@path << sprintf('%s%g,%g ', (abs ? 'L' : 'l'), x, y)
|
58
59
|
# "a number of coordinate pairs may be specified to draw a polyline"
|
59
60
|
add_points(2, *coords)
|
60
61
|
end
|
@@ -63,14 +64,14 @@ module Magick
|
|
63
64
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
64
65
|
# the coordinates are relative.
|
65
66
|
def hlineto(abs, x)
|
66
|
-
@path <<
|
67
|
+
@path << sprintf('%s%g ', (abs ? 'H' : 'h'), x)
|
67
68
|
end
|
68
69
|
|
69
70
|
# Add a <tt>vertical lineto</tt> command. If <tt>abs</tt> is
|
70
71
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
71
72
|
# the coordinates are relative.
|
72
73
|
def vlineto(abs, y)
|
73
|
-
@path <<
|
74
|
+
@path << sprintf('%s%g ', (abs ? 'V' : 'v'), y)
|
74
75
|
end
|
75
76
|
|
76
77
|
# Add a <tt>curveto</tt> (<em>cubic Bezier</em>) command.
|
@@ -78,7 +79,7 @@ module Magick
|
|
78
79
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
79
80
|
# the coordinates are relative.
|
80
81
|
def curveto(abs, x1, y1, x2, y2, x, y, *coords)
|
81
|
-
@path <<
|
82
|
+
@path << sprintf('%s%g,%g %g,%g %g,%g ', (abs ? 'C' : 'c'), x1, y1, x2, y2, x, y)
|
82
83
|
# "multiple sets of coordinates may be specified to draw a polybezier"
|
83
84
|
add_points(6, *coords)
|
84
85
|
end
|
@@ -88,7 +89,7 @@ module Magick
|
|
88
89
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
89
90
|
# the coordinates are relative.
|
90
91
|
def smooth_curveto(abs, x2, y2, x, y, *coords)
|
91
|
-
@path <<
|
92
|
+
@path << sprintf('%s%g,%g %g,%g ', (abs ? 'S' : 's'), x2, y2, x, y)
|
92
93
|
# "multiple sets of coordinates may be specified to draw a polybezier"
|
93
94
|
add_points(4, *coords)
|
94
95
|
end
|
@@ -98,7 +99,7 @@ module Magick
|
|
98
99
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
99
100
|
# the coordinates are relative.
|
100
101
|
def quadratic_curveto(abs, x1, y1, x, y, *coords)
|
101
|
-
@path <<
|
102
|
+
@path << sprintf('%s%g,%g %g,%g ', (abs ? 'Q' : 'q'), x1, y1, x, y)
|
102
103
|
add_points(4, *coords)
|
103
104
|
end
|
104
105
|
|
@@ -107,7 +108,7 @@ module Magick
|
|
107
108
|
# <tt>true</tt> the coordinates are absolute, otherwise
|
108
109
|
# the coordinates are relative.
|
109
110
|
def smooth_quadratic_curveto(abs, x, y, *coords)
|
110
|
-
@path <<
|
111
|
+
@path << sprintf('%s%g,%g ', (abs ? 'T' : 't'), x, y)
|
111
112
|
add_points(2, *coords)
|
112
113
|
end
|
113
114
|
|
@@ -117,7 +118,7 @@ module Magick
|
|
117
118
|
# the coordinates are relative.
|
118
119
|
|
119
120
|
def arc(abs, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y)
|
120
|
-
@path <<
|
121
|
+
@path << sprintf('%s%g,%g %g %d %d %g,%g ', (abs ? 'A' : 'a'), rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, x, y)
|
121
122
|
end
|
122
123
|
end # class PathData
|
123
124
|
end # class RVG
|
data/lib/rvg/rvg.rb
CHANGED
@@ -60,10 +60,10 @@ module Magick
|
|
60
60
|
# else, combine it with the background_fill_opacity.
|
61
61
|
def bgfill
|
62
62
|
if @background_fill.nil?
|
63
|
-
color = Magick::Pixel.new(0, 0, 0, Magick::
|
63
|
+
color = Magick::Pixel.new(0, 0, 0, Magick::OpaqueAlpha)
|
64
64
|
else
|
65
65
|
color = @background_fill
|
66
|
-
color.
|
66
|
+
color.alpha = @background_fill_opacity * Magick::OpaqueAlpha
|
67
67
|
end
|
68
68
|
color
|
69
69
|
end
|
@@ -85,7 +85,7 @@ module Magick
|
|
85
85
|
@background_image.change_geometry(Magick::Geometry.new(width, height)) do |new_cols, new_rows|
|
86
86
|
bg_image = @background_image.resize(new_cols, new_rows)
|
87
87
|
if bg_image.columns != width || bg_image.rows != height
|
88
|
-
bg = Magick::Image.new(width, height) {
|
88
|
+
bg = Magick::Image.new(width, height) { |options| options.background_color = bgcolor }
|
89
89
|
bg_image = bg.composite!(bg_image, Magick::CenterGravity, Magick::OverCompositeOp)
|
90
90
|
end
|
91
91
|
bg_image
|
@@ -96,7 +96,7 @@ module Magick
|
|
96
96
|
end
|
97
97
|
else
|
98
98
|
bgcolor = bgfill
|
99
|
-
canvas = Magick::Image.new(Integer(@width), Integer(@height)) {
|
99
|
+
canvas = Magick::Image.new(Integer(@width), Integer(@height)) { |options| options.background_color = bgcolor }
|
100
100
|
end
|
101
101
|
canvas[:desc] = @desc if @desc
|
102
102
|
canvas[:title] = @title if @title
|
@@ -242,14 +242,16 @@ module Magick
|
|
242
242
|
|
243
243
|
# Accept #use arguments. Use (x,y) to generate an additional translate.
|
244
244
|
# Override @width and @height if new values are supplied.
|
245
|
-
|
245
|
+
# @private
|
246
|
+
def ref(x, y, rw, rh)
|
246
247
|
translate(x, y) if x != 0 || y != 0
|
247
248
|
@width = rw if rw
|
248
249
|
@height = rh if rh
|
249
250
|
end
|
250
251
|
|
251
252
|
# Used by Magick::Embellishable.rvg to set non-0 x- and y-coordinates
|
252
|
-
|
253
|
+
# @private
|
254
|
+
def corner(x, y)
|
253
255
|
@nested = true
|
254
256
|
@x = Float(x)
|
255
257
|
@y = Float(y)
|
@@ -257,7 +259,8 @@ module Magick
|
|
257
259
|
end
|
258
260
|
|
259
261
|
# Primitives for the outermost RVG object
|
260
|
-
|
262
|
+
# @private
|
263
|
+
def add_outermost_primitives(gc)
|
261
264
|
add_transform_primitives(gc)
|
262
265
|
gc.push
|
263
266
|
add_viewbox_primitives(@width, @height, gc)
|
@@ -268,7 +271,8 @@ module Magick
|
|
268
271
|
end
|
269
272
|
|
270
273
|
# Primitives for nested RVG objects
|
271
|
-
|
274
|
+
# @private
|
275
|
+
def add_primitives(gc)
|
272
276
|
raise ArgumentError, 'RVG width or height undefined' if @width.nil? || @height.nil?
|
273
277
|
return self if @width.zero? || @height.zero?
|
274
278
|
|
data/lib/rvg/stylable.rb
CHANGED
@@ -5,13 +5,15 @@
|
|
5
5
|
module Magick
|
6
6
|
class RVG
|
7
7
|
#:stopdoc:
|
8
|
-
STYLES = %i[
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
STYLES = %i[
|
9
|
+
clip_path clip_rule fill fill_opacity fill_rule font
|
10
|
+
font_family font_size font_stretch font_style font_weight
|
11
|
+
opacity stroke stroke_dasharray stroke_dashoffset stroke_linecap
|
12
|
+
stroke_linejoin stroke_miterlimit stroke_opacity stroke_width
|
13
|
+
text_anchor text_decoration
|
14
|
+
glyph_orientation_vertical glyph_orientation_horizontal
|
15
|
+
letter_spacing word_spacing baseline_shift writing_mode
|
16
|
+
]
|
15
17
|
|
16
18
|
Styles = Struct.new(*STYLES)
|
17
19
|
|
data/lib/rvg/text.rb
CHANGED
@@ -12,7 +12,7 @@ module Magick
|
|
12
12
|
|
13
13
|
private
|
14
14
|
|
15
|
-
def initialize(text)
|
15
|
+
def initialize(text)
|
16
16
|
super()
|
17
17
|
@text = text.to_s if text
|
18
18
|
@dx = @dy = 0
|
@@ -48,7 +48,8 @@ module Magick
|
|
48
48
|
end
|
49
49
|
|
50
50
|
# We do our own transformations.
|
51
|
-
|
51
|
+
# @private
|
52
|
+
def add_primitives(gc)
|
52
53
|
return if !@text && @tspans.empty?
|
53
54
|
|
54
55
|
gc.push
|
@@ -73,7 +74,8 @@ module Magick
|
|
73
74
|
end # class TextBase
|
74
75
|
|
75
76
|
# Tspan and Tref shared methods - read/update @cx, @cy in parent Text object.
|
76
|
-
|
77
|
+
# @private
|
78
|
+
module TextLink
|
77
79
|
def add_primitives(gc)
|
78
80
|
@parent.cx = @x if @x
|
79
81
|
@parent.cy = @y if @y
|
@@ -97,7 +99,8 @@ module Magick
|
|
97
99
|
end
|
98
100
|
end # module TextLink
|
99
101
|
|
100
|
-
|
102
|
+
# @private
|
103
|
+
class Tref < TextBase
|
101
104
|
include TextLink
|
102
105
|
|
103
106
|
def initialize(obj, x, y, parent)
|
@@ -108,7 +111,8 @@ module Magick
|
|
108
111
|
end
|
109
112
|
end # class Tref
|
110
113
|
|
111
|
-
|
114
|
+
# @private
|
115
|
+
class Tspan < TextBase
|
112
116
|
include TextLink
|
113
117
|
|
114
118
|
attr_accessor :parent
|
@@ -125,7 +129,8 @@ module Magick
|
|
125
129
|
end # class Tspan
|
126
130
|
|
127
131
|
class Text < TextBase
|
128
|
-
|
132
|
+
# @private
|
133
|
+
attr_accessor :cx, :cy
|
129
134
|
|
130
135
|
# Define a text string starting at [<tt>x</tt>, <tt>y</tt>].
|
131
136
|
# Use the RVG::TextConstructors#text method to create Text objects in a container.
|
data/lib/rvg/transformable.rb
CHANGED
@@ -6,7 +6,8 @@ module Magick
|
|
6
6
|
class RVG
|
7
7
|
# Transforms is an Array with a deep_copy method.
|
8
8
|
# During unit-testing it also has a deep_equal method.
|
9
|
-
|
9
|
+
# @private
|
10
|
+
class Transforms < Array
|
10
11
|
def deep_copy(_h = nil)
|
11
12
|
copy = self.class.new
|
12
13
|
each { |transform| copy << [transform[0], transform[1].dup] }
|
@@ -94,7 +95,7 @@ module Magick
|
|
94
95
|
raise ArgumentError, "wrong number of arguments (#{args.length} for 1 or 3)"
|
95
96
|
end
|
96
97
|
rescue ArgumentError
|
97
|
-
raise ArgumentError, "arguments must be convertable to float (got #{[angle, *args].
|
98
|
+
raise ArgumentError, "arguments must be convertable to float (got #{[angle, *args].map(&:class).join(', ')})"
|
98
99
|
end
|
99
100
|
yield(self) if block_given?
|
100
101
|
self
|
data/lib/rvg/units.rb
CHANGED
data/rmagick.gemspec
CHANGED
@@ -14,26 +14,25 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.license = 'MIT'
|
15
15
|
|
16
16
|
tracked_files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
17
|
-
file_exclusion_regex = %r{(
|
18
|
-
files
|
19
|
-
test_files = files.grep(%r{^(test|spec|features)/})
|
20
|
-
executables = files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
17
|
+
file_exclusion_regex = %r{\A(doc|benchmarks|examples|spec|lib/rvg/to_c.rb)}
|
18
|
+
files = tracked_files.reject { |file| file[file_exclusion_regex] }
|
21
19
|
|
22
|
-
s.files
|
23
|
-
s.test_files = test_files
|
24
|
-
s.executables = executables
|
20
|
+
s.files = files
|
25
21
|
s.require_paths << 'ext' << 'deprecated'
|
26
22
|
|
27
|
-
s.rubyforge_project = 'rmagick'
|
28
23
|
s.extensions = %w[ext/RMagick/extconf.rb]
|
29
24
|
s.required_ruby_version = ">= #{Magick::MIN_RUBY_VERSION}"
|
30
25
|
s.requirements << "ImageMagick #{Magick::MIN_IM_VERSION} or later"
|
31
26
|
|
27
|
+
s.add_development_dependency 'pry', '~> 0.14'
|
32
28
|
s.add_development_dependency 'rake-compiler', '~> 1.0'
|
33
29
|
s.add_development_dependency 'rspec', '~> 3.8'
|
34
30
|
s.add_development_dependency 'rspec_junit_formatter', '~> 0.4.1'
|
35
|
-
|
36
|
-
|
31
|
+
if RUBY_PLATFORM !~ /mswin|mingw/
|
32
|
+
s.add_development_dependency 'rubocop', '~> 0.81.0'
|
33
|
+
s.add_development_dependency 'rubocop-rspec', '~> 1.38.1'
|
34
|
+
s.add_development_dependency 'rubocop-performance', '~> 1.5.2'
|
35
|
+
end
|
37
36
|
s.add_development_dependency 'simplecov', '~> 0.16.1'
|
38
|
-
s.add_development_dependency '
|
37
|
+
s.add_development_dependency 'yard', '~> 0.9.24'
|
39
38
|
end
|