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.
- checksums.yaml +5 -5
- 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 +5 -1
- data/.rspec +1 -0
- data/.rubocop.yml +37 -340
- data/.rubocop_todo.yml +448 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +435 -0
- data/CODE_OF_CONDUCT.md +122 -7
- data/CONTRIBUTING.md +37 -6
- data/Gemfile +0 -6
- data/README.md +317 -0
- data/Rakefile +37 -35
- data/before_install_linux.sh +65 -28
- data/before_install_osx.sh +58 -2
- data/ext/RMagick/extconf.rb +286 -393
- data/ext/RMagick/rmagick.c +106 -111
- data/ext/RMagick/rmagick.h +235 -331
- data/ext/RMagick/rmagick_gvl.h +224 -0
- data/ext/RMagick/rmdraw.c +484 -842
- data/ext/RMagick/rmenum.c +316 -755
- data/ext/RMagick/rmfill.c +281 -191
- data/ext/RMagick/rmilist.c +450 -455
- data/ext/RMagick/rmimage.c +6247 -5289
- data/ext/RMagick/rminfo.c +721 -894
- data/ext/RMagick/rmkinfo.c +228 -0
- data/ext/RMagick/rmmain.c +727 -519
- data/ext/RMagick/rmmontage.c +127 -172
- data/ext/RMagick/rmpixel.c +638 -431
- data/ext/RMagick/rmstruct.c +102 -282
- data/ext/RMagick/rmutil.c +450 -363
- data/lib/rmagick/version.rb +5 -4
- data/lib/rmagick.rb +2 -0
- data/lib/rmagick_internal.rb +349 -413
- data/lib/rvg/clippath.rb +3 -4
- data/lib/rvg/container.rb +30 -22
- data/lib/rvg/deep_equal.rb +11 -11
- data/lib/rvg/describable.rb +2 -2
- data/lib/rvg/embellishable.rb +63 -68
- data/lib/rvg/misc.rb +136 -139
- data/lib/rvg/paint.rb +2 -1
- data/lib/rvg/pathdata.rb +7 -8
- data/lib/rvg/rvg.rb +47 -46
- data/lib/rvg/stretchable.rb +22 -28
- data/lib/rvg/stylable.rb +12 -10
- data/lib/rvg/text.rb +169 -165
- data/lib/rvg/transformable.rb +17 -16
- data/lib/rvg/units.rb +5 -5
- data/rmagick.gemspec +16 -39
- metadata +118 -395
- data/.hound.yml +0 -2
- data/.simplecov +0 -27
- data/.travis.yml +0 -74
- data/Doxyfile +0 -1514
- data/README.textile +0 -251
- data/deprecated/RMagick.rb +0 -6
- 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 -53
- 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 -42
- 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 -20
- 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 -47
- data/doc/ex/get_type_metrics.rb +0 -141
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -45
- data/doc/ex/gravity.rb +0 -80
- 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.wmf +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.wmf +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.wmf +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 -35
- 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 -27
- 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 -125
- data/doc/ex/solarize.rb +0 -11
- data/doc/ex/sparse_color.rb +0 -54
- data/doc/ex/splice.rb +0 -8
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -55
- 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 -565
- 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 -324
- data/examples/describe.rb +0 -43
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -321
- data/examples/identify.rb +0 -185
- data/examples/image_opacity.rb +0 -29
- data/examples/import_export.rb +0 -31
- data/examples/pattern_fill.rb +0 -38
- data/examples/rotating_text.rb +0 -44
- data/examples/spinner.rb +0 -49
- data/examples/thumbnail.rb +0 -64
- data/examples/vignette.rb +0 -78
- data/spec/rmagick/ImageList1_spec.rb +0 -24
- data/spec/rmagick/draw_spec.rb +0 -156
- data/spec/rmagick/image/blue_shift_spec.rb +0 -16
- data/spec/rmagick/image/composite_spec.rb +0 -140
- data/spec/rmagick/image/constitute_spec.rb +0 -15
- data/spec/rmagick/image/dispatch_spec.rb +0 -18
- data/spec/rmagick/image/from_blob_spec.rb +0 -14
- data/spec/rmagick/image/ping_spec.rb +0 -14
- data/spec/rmagick/image/properties_spec.rb +0 -29
- data/spec/spec_helper.rb +0 -4
- data/test/Image1.rb +0 -565
- data/test/Image2.rb +0 -1304
- data/test/Image3.rb +0 -1030
- data/test/ImageList1.rb +0 -806
- data/test/ImageList2.rb +0 -385
- data/test/Image_attributes.rb +0 -697
- data/test/Import_Export.rb +0 -121
- data/test/Info.rb +0 -345
- data/test/Magick.rb +0 -321
- data/test/Pixel.rb +0 -116
- data/test/Preview.rb +0 -57
- data/test/cmyk.icm +0 -0
- data/test/srgb.icm +0 -0
- data/test/test_all_basic.rb +0 -38
- data/test/tmpnam_test.rb +0 -50
- data/wercker.yml +0 -10
data/lib/rvg/clippath.rb
CHANGED
@@ -23,16 +23,15 @@ module Magick
|
|
23
23
|
# Attach the clipping path to an object with the :clip_path style.
|
24
24
|
def initialize(clip_path_units = 'userSpaceOnUse')
|
25
25
|
super()
|
26
|
-
unless [
|
27
|
-
fail ArgumentError, "undefined value for clip path units: #{clip_path_units}"
|
28
|
-
end
|
26
|
+
raise ArgumentError, "undefined value for clip path units: #{clip_path_units}" unless %w[userSpaceOnUse objectBoundingBox].include?(clip_path_units)
|
29
27
|
|
30
28
|
@clip_path_units = clip_path_units
|
31
29
|
@content = Content.new
|
32
30
|
yield(self) if block_given?
|
33
31
|
end
|
34
32
|
|
35
|
-
|
33
|
+
# @private
|
34
|
+
def add_primitives(gc, _style)
|
36
35
|
name = __id__.to_s
|
37
36
|
gc.define_clip_path(name) do
|
38
37
|
gc.clip_units(@clip_path_units)
|
data/lib/rvg/container.rb
CHANGED
@@ -6,30 +6,34 @@ module Magick
|
|
6
6
|
class RVG
|
7
7
|
# Content is simply an Array with a deep_copy method.
|
8
8
|
# When unit-testing, it also has a deep_equal method.
|
9
|
-
|
9
|
+
# @private
|
10
|
+
class Content < Array
|
10
11
|
def deep_copy(h = {})
|
11
12
|
me = __id__
|
12
13
|
copy = h[me]
|
13
14
|
unless copy
|
14
15
|
copy = self.class.new
|
15
16
|
each do |c|
|
16
|
-
copy <<
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
17
|
+
copy << if c.nil?
|
18
|
+
nil
|
19
|
+
elsif c.respond_to?(:deep_copy)
|
20
|
+
c.deep_copy(h)
|
21
|
+
elsif c.respond_to?(:dup)
|
22
|
+
begin
|
23
|
+
c.dup
|
24
|
+
rescue StandardError
|
25
|
+
c
|
26
|
+
end
|
27
|
+
else
|
28
|
+
c
|
29
|
+
end
|
26
30
|
end
|
27
31
|
copy.freeze if frozen?
|
28
32
|
h[me] = copy
|
29
33
|
end
|
30
34
|
copy
|
31
35
|
end
|
32
|
-
end
|
36
|
+
end # class Content
|
33
37
|
|
34
38
|
# Define a collection of shapes, text, etc. that can be reused.
|
35
39
|
# Group objects are _containers_. That is, styles and transforms defined
|
@@ -49,11 +53,11 @@ module Magick
|
|
49
53
|
# grp.circle(10, 20, 20).styles(:stroke=>'blue')
|
50
54
|
# end
|
51
55
|
class Group
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
56
|
+
include Stylable
|
57
|
+
include Transformable
|
58
|
+
include Embellishable
|
59
|
+
include Describable
|
60
|
+
include Duplicatable
|
57
61
|
|
58
62
|
def initialize
|
59
63
|
super
|
@@ -61,7 +65,8 @@ module Magick
|
|
61
65
|
yield(self) if block_given?
|
62
66
|
end
|
63
67
|
|
64
|
-
|
68
|
+
# @private
|
69
|
+
def add_primitives(gc)
|
65
70
|
gc.push
|
66
71
|
add_transform_primitives(gc)
|
67
72
|
add_style_primitives(gc)
|
@@ -70,16 +75,18 @@ module Magick
|
|
70
75
|
end
|
71
76
|
|
72
77
|
# Translate container according to #use arguments
|
73
|
-
|
78
|
+
# @private
|
79
|
+
def ref(x, y, _width, _height)
|
74
80
|
translate(x, y) if x != 0 || y != 0
|
75
81
|
end
|
76
82
|
|
77
83
|
# Append an arbitrary object to the group's content. Called
|
78
84
|
# by #use to insert a non-container object into a group.
|
79
|
-
|
85
|
+
# @private
|
86
|
+
def <<(obj)
|
80
87
|
@content << obj
|
81
88
|
end
|
82
|
-
end
|
89
|
+
end # class Group
|
83
90
|
|
84
91
|
# A Use object allows the re-use of RVG and RVG::Group
|
85
92
|
# objects within a container. Create a Use object with the
|
@@ -110,7 +117,8 @@ module Magick
|
|
110
117
|
@element.ref(x, y, width, height)
|
111
118
|
end
|
112
119
|
|
113
|
-
|
120
|
+
# @private
|
121
|
+
def add_primitives(gc)
|
114
122
|
gc.push
|
115
123
|
add_transform_primitives(gc)
|
116
124
|
add_style_primitives(gc)
|
data/lib/rvg/deep_equal.rb
CHANGED
@@ -30,17 +30,17 @@ module Magick
|
|
30
30
|
end
|
31
31
|
else
|
32
32
|
case itv
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
33
|
+
when Float, Symbol, TrueClass, FalseClass, Integer, NilClass
|
34
|
+
return false if itv != otv
|
35
|
+
else
|
36
|
+
if itv.equal?(otv)
|
37
|
+
puts "#{iv} is dup-able but self.#{iv} and other.#{iv} are the same object."
|
38
|
+
return false
|
39
|
+
end
|
40
|
+
if itv != otv
|
41
|
+
puts "Not equal.\nself.#{iv}=#{itv.inspect}\nother.#{iv}=#{otv.inspect}"
|
42
|
+
return false
|
43
|
+
end
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
data/lib/rvg/describable.rb
CHANGED
@@ -11,7 +11,7 @@ module Magick
|
|
11
11
|
module Describable
|
12
12
|
private
|
13
13
|
|
14
|
-
def initialize(*args, &block)
|
14
|
+
def initialize(*args, &block)
|
15
15
|
super
|
16
16
|
@title, @desc, @metadata = nil
|
17
17
|
end
|
@@ -42,6 +42,6 @@ module Magick
|
|
42
42
|
def metadata
|
43
43
|
@metadata.to_s
|
44
44
|
end
|
45
|
-
end
|
45
|
+
end # module Describable
|
46
46
|
end # class RVG
|
47
47
|
end # module Magick
|
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
|
@@ -18,7 +19,7 @@ module Magick
|
|
18
19
|
gc.__send__(@primitive, *@args)
|
19
20
|
gc.pop
|
20
21
|
end
|
21
|
-
end
|
22
|
+
end # class Shape
|
22
23
|
|
23
24
|
class Circle < Shape
|
24
25
|
# Define a circle with radius +r+ and centered at [<tt>cx</tt>, <tt>cy</tt>].
|
@@ -26,14 +27,12 @@ module Magick
|
|
26
27
|
def initialize(r, cx = 0, cy = 0)
|
27
28
|
super()
|
28
29
|
r, cx, cy = Magick::RVG.convert_to_float(r, cx, cy)
|
29
|
-
if r < 0
|
30
|
-
|
31
|
-
end
|
30
|
+
raise ArgumentError, "radius must be >= 0 (#{r} given)" if r < 0
|
31
|
+
|
32
32
|
@primitive = :circle
|
33
|
-
@args = [cx, cy, cx+r, cy]
|
34
|
-
self
|
33
|
+
@args = [cx, cy, cx + r, cy]
|
35
34
|
end
|
36
|
-
end
|
35
|
+
end # class Circle
|
37
36
|
|
38
37
|
class Ellipse < Shape
|
39
38
|
# Define an ellipse with a center at [<tt>cx</tt>, <tt>cy</tt>], a horizontal radius +rx+
|
@@ -42,14 +41,13 @@ module Magick
|
|
42
41
|
def initialize(rx, ry, cx = 0, cy = 0)
|
43
42
|
super()
|
44
43
|
rx, ry, cx, cy = Magick::RVG.convert_to_float(rx, ry, cx, cy)
|
45
|
-
if rx < 0 || ry < 0
|
46
|
-
|
47
|
-
end
|
44
|
+
raise ArgumentError, "radii must be >= 0 (#{rx}, #{ry} given)" if rx < 0 || ry < 0
|
45
|
+
|
48
46
|
@primitive = :ellipse
|
49
47
|
# Ellipses are always complete.
|
50
48
|
@args = [cx, cy, rx, ry, 0, 360]
|
51
49
|
end
|
52
|
-
end
|
50
|
+
end # class Ellipse
|
53
51
|
|
54
52
|
class Line < Shape
|
55
53
|
# Define a line from [<tt>x1</tt>, <tt>y1</tt>] to [<tt>x2</tt>, <tt>y2</tt>].
|
@@ -59,7 +57,7 @@ module Magick
|
|
59
57
|
@primitive = :line
|
60
58
|
@args = [x1, y1, x2, y2]
|
61
59
|
end
|
62
|
-
end
|
60
|
+
end # class Line
|
63
61
|
|
64
62
|
class Path < Shape
|
65
63
|
# Define an SVG path. The argument can be either a path string
|
@@ -70,7 +68,7 @@ module Magick
|
|
70
68
|
@primitive = :path
|
71
69
|
@args = [path.to_s]
|
72
70
|
end
|
73
|
-
end
|
71
|
+
end # class Path
|
74
72
|
|
75
73
|
class Rect < Shape
|
76
74
|
# Define a width x height rectangle. The upper-left corner is at [<tt>x</tt>, <tt>y</tt>].
|
@@ -79,10 +77,9 @@ module Magick
|
|
79
77
|
def initialize(width, height, x = 0, y = 0)
|
80
78
|
super()
|
81
79
|
width, height, x, y = Magick::RVG.convert_to_float(width, height, x, y)
|
82
|
-
if width < 0 || height < 0
|
83
|
-
|
84
|
-
|
85
|
-
@args = [x, y, x+width, y+height]
|
80
|
+
raise ArgumentError, "width, height must be >= 0 (#{width}, #{height} given)" if width < 0 || height < 0
|
81
|
+
|
82
|
+
@args = [x, y, x + width, y + height]
|
86
83
|
@primitive = :rectangle
|
87
84
|
end
|
88
85
|
|
@@ -90,9 +87,8 @@ module Magick
|
|
90
87
|
# are the x- and y-axis radii. If y is omitted it defaults to x.
|
91
88
|
def round(rx, ry = nil)
|
92
89
|
rx, ry = Magick::RVG.convert_to_float(rx, ry || rx)
|
93
|
-
if rx < 0 || ry < 0
|
94
|
-
|
95
|
-
end
|
90
|
+
raise ArgumentError, "rx, ry must be >= 0 (#{rx}, #{ry} given)" if rx < 0 || ry < 0
|
91
|
+
|
96
92
|
@args << rx << ry
|
97
93
|
@primitive = :roundrectangle
|
98
94
|
self
|
@@ -102,24 +98,22 @@ module Magick
|
|
102
98
|
class PolyShape < Shape
|
103
99
|
def polypoints(points)
|
104
100
|
case points.length
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
points = x_coords.zip(y_coords).flatten
|
101
|
+
when 1
|
102
|
+
points = Array(points[0])
|
103
|
+
when 2
|
104
|
+
x_coords = Array(points[0])
|
105
|
+
y_coords = Array(points[1])
|
106
|
+
raise ArgumentError, 'array arguments must contain at least one point' unless !x_coords.empty? && !y_coords.empty?
|
107
|
+
|
108
|
+
n = x_coords.length - y_coords.length
|
109
|
+
short = n > 0 ? y_coords : x_coords
|
110
|
+
olen = short.length
|
111
|
+
n.abs.times { |x| short << short[x % olen] }
|
112
|
+
points = x_coords.zip(y_coords).flatten
|
118
113
|
end
|
119
114
|
n = points.length
|
120
|
-
if n < 4 || n.odd?
|
121
|
-
|
122
|
-
end
|
115
|
+
raise ArgumentError, "insufficient/odd number of points specified: #{n}" if n < 4 || n.odd?
|
116
|
+
|
123
117
|
Magick::RVG.convert_to_float(*points)
|
124
118
|
end
|
125
119
|
end # class PolyShape
|
@@ -136,7 +130,7 @@ module Magick
|
|
136
130
|
@primitive = :polygon
|
137
131
|
@args = polypoints(points)
|
138
132
|
end
|
139
|
-
end
|
133
|
+
end # class Polygon
|
140
134
|
|
141
135
|
class Polyline < PolyShape
|
142
136
|
# Draws a polyline. The arguments are [<tt>x</tt>, <tt>y</tt>] pairs that
|
@@ -149,7 +143,7 @@ module Magick
|
|
149
143
|
@primitive = :polyline
|
150
144
|
@args = Magick::RVG.convert_to_float(*points)
|
151
145
|
end
|
152
|
-
end
|
146
|
+
end # class Polyline
|
153
147
|
|
154
148
|
class Image
|
155
149
|
include Stylable
|
@@ -162,22 +156,22 @@ module Magick
|
|
162
156
|
|
163
157
|
def align_to_viewport(scale)
|
164
158
|
tx = case @align
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
159
|
+
when 'none', /\AxMin/
|
160
|
+
0
|
161
|
+
when NilClass, /\AxMid/
|
162
|
+
(@width - @image.columns * scale) / 2.0
|
163
|
+
when /\AxMax/
|
164
|
+
@width - @image.columns * scale
|
165
|
+
end
|
172
166
|
|
173
167
|
ty = case @align
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
168
|
+
when 'none', /YMin\z/
|
169
|
+
0
|
170
|
+
when NilClass, /YMid\z/
|
171
|
+
(@height - @image.rows * scale) / 2.0
|
172
|
+
when /YMax\z/
|
173
|
+
@height - @image.rows * scale
|
174
|
+
end
|
181
175
|
[tx, ty]
|
182
176
|
end
|
183
177
|
|
@@ -188,7 +182,7 @@ module Magick
|
|
188
182
|
width = @width
|
189
183
|
height = @height
|
190
184
|
elsif @meet_or_slice == 'meet'
|
191
|
-
scale = [@width
|
185
|
+
scale = [@width / @image.columns, @height / @image.rows].min
|
192
186
|
width = @image.columns
|
193
187
|
height = @image.rows
|
194
188
|
else
|
@@ -199,12 +193,12 @@ module Magick
|
|
199
193
|
end
|
200
194
|
|
201
195
|
gc.clip_path(name)
|
202
|
-
scale = [@width
|
196
|
+
scale = [@width / @image.columns, @height / @image.rows].max
|
203
197
|
width = @image.columns
|
204
198
|
height = @image.rows
|
205
199
|
end
|
206
200
|
tx, ty = align_to_viewport(scale)
|
207
|
-
gc.composite(@x+tx, @y+ty, width*scale, height*scale, @image)
|
201
|
+
gc.composite(@x + tx, @y + ty, width * scale, height * scale, @image)
|
208
202
|
end
|
209
203
|
|
210
204
|
def init_viewbox
|
@@ -223,22 +217,23 @@ module Magick
|
|
223
217
|
super() # run module initializers
|
224
218
|
@image = image.copy # use a copy of the image in case app. re-uses the argument
|
225
219
|
@x, @y, @width, @height = Magick::RVG.convert_to_float(x, y, width || @image.columns, height || @image.rows)
|
226
|
-
if @width < 0 || @height < 0
|
227
|
-
|
228
|
-
end
|
220
|
+
raise ArgumentError, 'width, height must be >= 0' if @width < 0 || @height < 0
|
221
|
+
|
229
222
|
init_viewbox
|
230
223
|
end
|
231
224
|
|
232
|
-
|
225
|
+
# @private
|
226
|
+
def add_primitives(gc)
|
233
227
|
# Do not render if width or height is 0
|
234
|
-
return if @width
|
228
|
+
return if @width.zero? || @height.zero?
|
229
|
+
|
235
230
|
gc.push
|
236
231
|
add_transform_primitives(gc)
|
237
232
|
add_style_primitives(gc)
|
238
233
|
add_composite_primitive(gc)
|
239
234
|
gc.pop
|
240
235
|
end
|
241
|
-
end
|
236
|
+
end # class Image
|
242
237
|
|
243
238
|
# Methods that construct basic shapes within a container
|
244
239
|
module ShapeConstructors
|
@@ -307,7 +302,7 @@ module Magick
|
|
307
302
|
@content << polyline
|
308
303
|
polyline
|
309
304
|
end
|
310
|
-
end
|
305
|
+
end # module ShapeContent
|
311
306
|
|
312
307
|
# Methods that reference ("use") other drawable objects within a container
|
313
308
|
module UseConstructors
|
@@ -321,7 +316,7 @@ module Magick
|
|
321
316
|
@content << use
|
322
317
|
use
|
323
318
|
end
|
324
|
-
end
|
319
|
+
end # module UseConstructors
|
325
320
|
|
326
321
|
# Methods that construct container objects within a container
|
327
322
|
module StructureConstructors
|
@@ -338,7 +333,7 @@ module Magick
|
|
338
333
|
y = Float(y)
|
339
334
|
rescue ArgumentError
|
340
335
|
args = [cols, rows, x, y]
|
341
|
-
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(', ')})"
|
342
337
|
end
|
343
338
|
rvg.corner(x, y)
|
344
339
|
@content << rvg
|
@@ -359,7 +354,7 @@ module Magick
|
|
359
354
|
@content << group
|
360
355
|
group
|
361
356
|
end
|
362
|
-
end
|
357
|
+
end # module StructureConstructors
|
363
358
|
|
364
359
|
# Methods that construct raster image objects within a container
|
365
360
|
module ImageConstructors
|
@@ -375,7 +370,7 @@ module Magick
|
|
375
370
|
@content << img
|
376
371
|
img
|
377
372
|
end
|
378
|
-
end
|
373
|
+
end # module ImageConstructors
|
379
374
|
|
380
375
|
# Methods that create shapes, text, and other drawable objects
|
381
376
|
# within container objects such as ::Magick::RVG and
|
@@ -386,6 +381,6 @@ module Magick
|
|
386
381
|
include TextConstructors
|
387
382
|
include UseConstructors
|
388
383
|
include ImageConstructors
|
389
|
-
end
|
384
|
+
end # module Embellishable
|
390
385
|
end # class RVG
|
391
386
|
end # module Magick
|