rmagick 2.13.2 → 4.2.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rmagick might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.codeclimate.yml +63 -0
- data/.editorconfig +17 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/workflows/ci.yml +107 -0
- data/.gitignore +25 -0
- data/.rspec +2 -0
- data/.rubocop.yml +37 -0
- data/.rubocop_todo.yml +449 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +1277 -0
- data/CODE_OF_CONDUCT.md +128 -0
- data/CONTRIBUTING.md +81 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +324 -0
- data/Rakefile +190 -0
- data/before_install_linux.sh +69 -0
- data/before_install_osx.sh +57 -0
- data/deprecated/RMagick.rb +6 -0
- data/ext/RMagick/extconf.rb +334 -333
- data/ext/RMagick/rmagick.c +129 -127
- data/ext/RMagick/rmagick.h +221 -320
- data/ext/RMagick/rmdraw.c +458 -767
- data/ext/RMagick/rmenum.c +305 -752
- data/ext/RMagick/rmfill.c +231 -199
- data/ext/RMagick/rmilist.c +437 -478
- data/ext/RMagick/rmimage.c +6130 -5342
- data/ext/RMagick/rminfo.c +695 -833
- data/ext/RMagick/rmkinfo.c +198 -0
- data/ext/RMagick/rmmain.c +752 -506
- data/ext/RMagick/rmmontage.c +94 -152
- data/ext/RMagick/rmpixel.c +619 -425
- data/ext/RMagick/rmstruct.c +206 -309
- data/ext/RMagick/rmutil.c +514 -344
- data/lib/rmagick/version.rb +5 -0
- data/lib/rmagick.rb +1 -0
- data/lib/rmagick_internal.rb +1922 -0
- data/lib/rvg/clippath.rb +35 -39
- data/lib/rvg/container.rb +123 -124
- data/lib/rvg/deep_equal.rb +45 -49
- data/lib/rvg/describable.rb +41 -47
- data/lib/rvg/embellishable.rb +380 -411
- data/lib/rvg/misc.rb +691 -711
- data/lib/rvg/paint.rb +43 -47
- data/lib/rvg/pathdata.rb +119 -125
- data/lib/rvg/rvg.rb +214 -213
- data/lib/rvg/stretchable.rb +153 -162
- data/lib/rvg/stylable.rb +111 -117
- data/lib/rvg/text.rb +169 -180
- data/lib/rvg/transformable.rb +121 -127
- data/lib/rvg/units.rb +58 -61
- data/rmagick.gemspec +36 -16
- metadata +188 -365
- data/ChangeLog +0 -773
- data/Doxyfile +0 -1514
- data/README-Mac-OSX.txt +0 -1
- data/README.html +0 -10
- data/build_tarball.rake +0 -215
- 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 -3269
- data/doc/ex/InitialCoords.rb +0 -23
- data/doc/ex/NewCoordSys.rb +0 -32
- data/doc/ex/OrigCoordSys.rb +0 -18
- data/doc/ex/PreserveAspectRatio.rb +0 -205
- data/doc/ex/RotateScale.rb +0 -37
- data/doc/ex/Skew.rb +0 -38
- data/doc/ex/Use01.rb +0 -16
- data/doc/ex/Use02.rb +0 -21
- data/doc/ex/Use03.rb +0 -16
- data/doc/ex/ViewBox.rb +0 -33
- data/doc/ex/adaptive_threshold.rb +0 -10
- data/doc/ex/add_noise.rb +0 -17
- 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 -33
- data/doc/ex/arcs01.rb +0 -28
- data/doc/ex/arcs02.rb +0 -61
- data/doc/ex/average.rb +0 -15
- data/doc/ex/axes.rb +0 -64
- data/doc/ex/baseline_shift01.rb +0 -18
- data/doc/ex/bilevel_channel.rb +0 -9
- data/doc/ex/blur_image.rb +0 -12
- data/doc/ex/border.rb +0 -10
- data/doc/ex/bounding_box.rb +0 -44
- data/doc/ex/cbezier1.rb +0 -42
- data/doc/ex/cbezier2.rb +0 -42
- data/doc/ex/cbezier3.rb +0 -42
- data/doc/ex/cbezier4.rb +0 -43
- data/doc/ex/cbezier5.rb +0 -43
- data/doc/ex/cbezier6.rb +0 -53
- data/doc/ex/channel.rb +0 -26
- 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 -17
- data/doc/ex/clip_path.rb +0 -60
- data/doc/ex/coalesce.rb +0 -60
- 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 -48
- 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 -23
- data/doc/ex/composite.rb +0 -135
- data/doc/ex/composite_layers.rb +0 -53
- data/doc/ex/composite_tiled.rb +0 -23
- data/doc/ex/contrast.rb +0 -36
- data/doc/ex/crop.rb +0 -31
- data/doc/ex/crop_with_gravity.rb +0 -46
- data/doc/ex/cubic01.rb +0 -45
- data/doc/ex/cubic02.rb +0 -94
- data/doc/ex/cycle_colormap.rb +0 -21
- data/doc/ex/dissolve.rb +0 -13
- 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 -22
- 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 -43
- data/doc/ex/fill_pattern.rb +0 -26
- 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 -34
- 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 -42
- data/doc/ex/get_pixels.rb +0 -48
- data/doc/ex/get_type_metrics.rb +0 -146
- data/doc/ex/gradientfill.rb +0 -27
- data/doc/ex/grav.rb +0 -46
- data/doc/ex/gravity.rb +0 -79
- data/doc/ex/group.rb +0 -26
- data/doc/ex/hatchfill.rb +0 -27
- data/doc/ex/image.rb +0 -46
- 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/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 -42
- data/doc/ex/line01.rb +0 -23
- data/doc/ex/mask.rb +0 -36
- data/doc/ex/matte_fill_to_border.rb +0 -40
- data/doc/ex/matte_floodfill.rb +0 -33
- data/doc/ex/matte_replace.rb +0 -40
- 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 -26
- 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 -43
- 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 -64
- data/doc/ex/pattern1.rb +0 -25
- data/doc/ex/pattern2.rb +0 -26
- data/doc/ex/polaroid.rb +0 -28
- data/doc/ex/polygon.rb +0 -24
- data/doc/ex/polygon01.rb +0 -23
- data/doc/ex/polyline.rb +0 -23
- data/doc/ex/polyline01.rb +0 -23
- data/doc/ex/posterize.rb +0 -8
- data/doc/ex/preview.rb +0 -9
- data/doc/ex/qbezierpath.rb +0 -52
- data/doc/ex/quad01.rb +0 -36
- 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 -15
- data/doc/ex/rect02.rb +0 -22
- data/doc/ex/rectangle.rb +0 -35
- data/doc/ex/reduce_noise.rb +0 -28
- data/doc/ex/remap.rb +0 -12
- data/doc/ex/remap_images.rb +0 -21
- data/doc/ex/resize_to_fill.rb +0 -10
- data/doc/ex/resize_to_fit.rb +0 -10
- data/doc/ex/roll.rb +0 -9
- data/doc/ex/rotate.rb +0 -45
- data/doc/ex/rotate_f.rb +0 -14
- data/doc/ex/roundrect.rb +0 -34
- data/doc/ex/rubyname.rb +0 -30
- data/doc/ex/rvg_clippath.rb +0 -14
- data/doc/ex/rvg_linecap.rb +0 -43
- data/doc/ex/rvg_linejoin.rb +0 -41
- data/doc/ex/rvg_opacity.rb +0 -19
- data/doc/ex/rvg_pattern.rb +0 -26
- data/doc/ex/rvg_stroke_dasharray.rb +0 -12
- data/doc/ex/segment.rb +0 -11
- data/doc/ex/sepiatone.rb +0 -8
- data/doc/ex/shade.rb +0 -11
- data/doc/ex/shadow.rb +0 -31
- data/doc/ex/shave.rb +0 -15
- data/doc/ex/shear.rb +0 -10
- data/doc/ex/sketch.rb +0 -18
- data/doc/ex/skewx.rb +0 -52
- 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 -55
- data/doc/ex/splice.rb +0 -9
- data/doc/ex/spread.rb +0 -11
- data/doc/ex/stegano.rb +0 -55
- data/doc/ex/stroke_dasharray.rb +0 -43
- data/doc/ex/stroke_fill.rb +0 -11
- 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 -17
- data/doc/ex/text_align.rb +0 -36
- data/doc/ex/text_antialias.rb +0 -38
- data/doc/ex/text_styles.rb +0 -21
- 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 -25
- data/doc/ex/threshold.rb +0 -13
- data/doc/ex/to_blob.rb +0 -14
- 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 -25
- data/doc/ex/triangle01.rb +0 -16
- data/doc/ex/trim.rb +0 -24
- data/doc/ex/tspan01.rb +0 -18
- data/doc/ex/tspan02.rb +0 -19
- data/doc/ex/tspan03.rb +0 -21
- data/doc/ex/unsharp_mask.rb +0 -28
- data/doc/ex/viewex.rb +0 -35
- data/doc/ex/vignette.rb +0 -12
- data/doc/ex/watermark.rb +0 -28
- data/doc/ex/wave.rb +0 -9
- data/doc/ex/wet_floor.rb +0 -59
- data/doc/ex/writing_mode01.rb +0 -27
- 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 -46
- data/examples/demo.rb +0 -324
- data/examples/describe.rb +0 -44
- data/examples/find_similar_region.rb +0 -34
- data/examples/histogram.rb +0 -325
- data/examples/identify.rb +0 -187
- 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 -45
- data/examples/spinner.rb +0 -50
- data/examples/thumbnail.rb +0 -65
- data/examples/vignette.rb +0 -79
- data/ext/RMagick/MANIFEST +0 -358
- data/lib/RMagick.rb +0 -1962
- data/metaconfig +0 -7
- data/post-clean.rb +0 -12
- data/post-install.rb +0 -50
- data/post-setup.rb +0 -254
- data/setup.rb +0 -1585
- data/uninstall.rb +0 -76
data/lib/rvg/clippath.rb
CHANGED
@@ -3,46 +3,42 @@
|
|
3
3
|
# Copyright (C) 2009 Timothy P. Hunter
|
4
4
|
#++
|
5
5
|
module Magick
|
6
|
-
|
6
|
+
class RVG
|
7
|
+
class ClipPath
|
8
|
+
include ShapeConstructors
|
9
|
+
include UseConstructors
|
10
|
+
include TextConstructors
|
11
|
+
include Describable
|
12
|
+
include Stylable
|
13
|
+
include Duplicatable
|
7
14
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
+
# Create a clipping path. Within the block create an outline
|
16
|
+
# from one or more paths, basic shapes, text objects, or +use+.
|
17
|
+
# Everything drawn within the outline will be displayed.
|
18
|
+
# Anything drawn outside the outline will not.
|
19
|
+
#
|
20
|
+
# If the clipping path contains a +use+, it
|
21
|
+
# must directly reference path, basic shape, or text objects.
|
22
|
+
#
|
23
|
+
# Attach the clipping path to an object with the :clip_path style.
|
24
|
+
def initialize(clip_path_units = 'userSpaceOnUse')
|
25
|
+
super()
|
26
|
+
raise ArgumentError, "undefined value for clip path units: #{clip_path_units}" unless %w[userSpaceOnUse objectBoundingBox].include?(clip_path_units)
|
15
27
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
#
|
21
|
-
# If the clipping path contains a +use+, it
|
22
|
-
# must directly reference path, basic shape, or text objects.
|
23
|
-
#
|
24
|
-
# Attach the clipping path to an object with the :clip_path style.
|
25
|
-
def initialize(clip_path_units='userSpaceOnUse')
|
26
|
-
super()
|
27
|
-
if ! ['userSpaceOnUse', 'objectBoundingBox'].include?(clip_path_units)
|
28
|
-
raise ArgumentError, "undefined value for clip path units: #{clip_path_units}"
|
29
|
-
end
|
30
|
-
@clip_path_units = clip_path_units
|
31
|
-
@content = Content.new
|
32
|
-
yield(self) if block_given?
|
33
|
-
end
|
28
|
+
@clip_path_units = clip_path_units
|
29
|
+
@content = Content.new
|
30
|
+
yield(self) if block_given?
|
31
|
+
end
|
34
32
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end # class RVG
|
33
|
+
# @private
|
34
|
+
def add_primitives(gc, _style)
|
35
|
+
name = __id__.to_s
|
36
|
+
gc.define_clip_path(name) do
|
37
|
+
gc.clip_units(@clip_path_units)
|
38
|
+
@content.each { |element| element.add_primitives(gc) }
|
39
|
+
end
|
40
|
+
gc.clip_path(name)
|
41
|
+
end
|
42
|
+
end # class ClipPath
|
43
|
+
end # class RVG
|
47
44
|
end # module Magick
|
48
|
-
|
data/lib/rvg/container.rb
CHANGED
@@ -2,130 +2,129 @@
|
|
2
2
|
# $Id: container.rb,v 1.5 2009/02/28 23:52:13 rmagick Exp $
|
3
3
|
# Copyright (C) 2009 Timothy P. Hunter
|
4
4
|
#++
|
5
|
-
|
6
5
|
module Magick
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
6
|
+
class RVG
|
7
|
+
# Content is simply an Array with a deep_copy method.
|
8
|
+
# When unit-testing, it also has a deep_equal method.
|
9
|
+
# @private
|
10
|
+
class Content < Array
|
11
|
+
def deep_copy(h = {})
|
12
|
+
me = __id__
|
13
|
+
copy = h[me]
|
14
|
+
unless copy
|
15
|
+
copy = self.class.new
|
16
|
+
each do |c|
|
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
29
|
end
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
30
|
+
end
|
31
|
+
copy.freeze if frozen?
|
32
|
+
h[me] = copy
|
33
|
+
end
|
34
|
+
copy
|
35
|
+
end
|
36
|
+
end # class Content
|
37
|
+
|
38
|
+
# Define a collection of shapes, text, etc. that can be reused.
|
39
|
+
# Group objects are _containers_. That is, styles and transforms defined
|
40
|
+
# on the group are used by contained objects such as shapes, text, and
|
41
|
+
# nested groups unless overridden by a nested container or the object itself.
|
42
|
+
# Groups can be reused with the RVG::UseConstructors#use method.
|
43
|
+
# Create groups within
|
44
|
+
# containers with the RVG::StructureConstructors#g method.
|
45
|
+
#
|
46
|
+
# Example:
|
47
|
+
# # All elements in the group will be translated by 50 in the
|
48
|
+
# # x-direction and 10 in the y-direction.
|
49
|
+
# rvg.g.translate(50, 10).styles(:stroke=>'red',:fill=>'none') do |grp|
|
50
|
+
# # The line will be red.
|
51
|
+
# grp.line(10,10, 20,20)
|
52
|
+
# # The circle will be blue.
|
53
|
+
# grp.circle(10, 20, 20).styles(:stroke=>'blue')
|
54
|
+
# end
|
55
|
+
class Group
|
56
|
+
include Stylable
|
57
|
+
include Transformable
|
58
|
+
include Embellishable
|
59
|
+
include Describable
|
60
|
+
include Duplicatable
|
61
|
+
|
62
|
+
def initialize
|
63
|
+
super
|
64
|
+
@content = Content.new
|
65
|
+
yield(self) if block_given?
|
66
|
+
end
|
67
|
+
|
68
|
+
# @private
|
69
|
+
def add_primitives(gc)
|
70
|
+
gc.push
|
71
|
+
add_transform_primitives(gc)
|
72
|
+
add_style_primitives(gc)
|
73
|
+
@content.each { |element| element.add_primitives(gc) }
|
74
|
+
gc.pop
|
75
|
+
end
|
76
|
+
|
77
|
+
# Translate container according to #use arguments
|
78
|
+
# @private
|
79
|
+
def ref(x, y, _width, _height)
|
80
|
+
translate(x, y) if x != 0 || y != 0
|
81
|
+
end
|
82
|
+
|
83
|
+
# Append an arbitrary object to the group's content. Called
|
84
|
+
# by #use to insert a non-container object into a group.
|
85
|
+
# @private
|
86
|
+
def <<(obj)
|
87
|
+
@content << obj
|
88
|
+
end
|
89
|
+
end # class Group
|
90
|
+
|
91
|
+
# A Use object allows the re-use of RVG and RVG::Group
|
92
|
+
# objects within a container. Create a Use object with the
|
93
|
+
# RVG::UseConstructors#use method.
|
94
|
+
class Use
|
95
|
+
include Stylable
|
96
|
+
include Transformable
|
97
|
+
include Duplicatable
|
98
|
+
|
99
|
+
# In a container, Use objects are created indirectly via the
|
100
|
+
# RVG::UseConstructors#use method.
|
101
|
+
# The +x+ and +y+ arguments
|
102
|
+
# can be used to specify an additional translation for
|
103
|
+
# the group. The +width+ and +height+ arguments specify
|
104
|
+
# a width and height for referenced RVG objects.
|
105
|
+
def initialize(element, x = 0, y = 0, width = nil, height = nil)
|
106
|
+
super()
|
107
|
+
|
108
|
+
# If the element is not a group, defs, symbol, or rvg,
|
109
|
+
# wrap a group around it so it can get a transform and
|
110
|
+
# possibly a new viewport.
|
111
|
+
if !element.respond_to?(:ref)
|
112
|
+
@element = Group.new
|
113
|
+
@element << element.deep_copy
|
114
|
+
else
|
115
|
+
@element = element.deep_copy
|
116
|
+
end
|
117
|
+
@element.ref(x, y, width, height)
|
118
|
+
end
|
119
|
+
|
120
|
+
# @private
|
121
|
+
def add_primitives(gc)
|
122
|
+
gc.push
|
123
|
+
add_transform_primitives(gc)
|
124
|
+
add_style_primitives(gc)
|
125
|
+
@element.add_primitives(gc)
|
126
|
+
gc.pop
|
127
|
+
end
|
128
|
+
end # class Use
|
129
|
+
end # class RVG
|
130
130
|
end # module Magick
|
131
|
-
|
data/lib/rvg/deep_equal.rb
CHANGED
@@ -1,56 +1,52 @@
|
|
1
1
|
module Magick
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
return true
|
12
|
-
end
|
13
|
-
end
|
2
|
+
class RVG
|
3
|
+
[PathData, Styles, Transforms].each do |c|
|
4
|
+
c.class_eval do
|
5
|
+
def deep_equal(other)
|
6
|
+
if self != other
|
7
|
+
puts "#{c.inspect} not equal.\nself:#{self} != other:#{other}"
|
8
|
+
return false
|
9
|
+
end
|
10
|
+
true
|
14
11
|
end
|
12
|
+
end
|
13
|
+
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
return false
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
return true
|
15
|
+
[Shape, TextBase, Image, Group, Content, Use, ClipPath, Pattern, self].each do |c|
|
16
|
+
c.class_eval do
|
17
|
+
def deep_equal(other)
|
18
|
+
ivs = instance_variables
|
19
|
+
ivs.each do |iv|
|
20
|
+
itv = instance_variable_get(iv)
|
21
|
+
otv = other.instance_variable_get(iv)
|
22
|
+
if itv.respond_to?(:deep_equal)
|
23
|
+
if itv.equal?(otv)
|
24
|
+
puts "#{iv} has deep_equal but self.#{iv} and other.#{iv} are the same object."
|
25
|
+
return false
|
26
|
+
end
|
27
|
+
unless itv.deep_equal(otv)
|
28
|
+
puts "Not equal.\nself.#{iv}=#{itv.inspect}\nother.#{iv}=#{otv.inspect}"
|
29
|
+
return false
|
30
|
+
end
|
31
|
+
else
|
32
|
+
case itv
|
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
|
51
43
|
end
|
44
|
+
end
|
52
45
|
end
|
46
|
+
end
|
47
|
+
true
|
53
48
|
end
|
54
|
-
|
55
|
-
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end # class RVG
|
56
52
|
end # module Magick
|
data/lib/rvg/describable.rb
CHANGED
@@ -2,52 +2,46 @@
|
|
2
2
|
# $Id: describable.rb,v 1.5 2009/02/28 23:52:13 rmagick Exp $
|
3
3
|
# Copyright (C) 2009 Timothy P. Hunter
|
4
4
|
#++
|
5
|
-
|
6
5
|
module Magick
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end # module Describable
|
50
|
-
|
51
|
-
end # class RVG
|
6
|
+
class RVG
|
7
|
+
#--
|
8
|
+
# Corresponds to SVG's Description.class
|
9
|
+
#++
|
10
|
+
# This module defines a number of metadata attributes.
|
11
|
+
module Describable
|
12
|
+
private
|
13
|
+
|
14
|
+
def initialize(*args, &block)
|
15
|
+
super
|
16
|
+
@title, @desc, @metadata = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
public
|
20
|
+
|
21
|
+
# Sets the object description
|
22
|
+
attr_writer :desc
|
23
|
+
# Sets the object title
|
24
|
+
attr_writer :title
|
25
|
+
# Sets the object metadata
|
26
|
+
attr_writer :metadata
|
27
|
+
|
28
|
+
# Returns the title of this object. The RVG object title is stored as
|
29
|
+
# the 'title' property on the image
|
30
|
+
def title
|
31
|
+
@title.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns the description of this object. The RVG object description is
|
35
|
+
# stored as the 'desc' property on the image
|
36
|
+
def desc
|
37
|
+
@desc.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns additional metadata of this object. The RVG object metadata
|
41
|
+
# are stored as the 'metadata' property on the image
|
42
|
+
def metadata
|
43
|
+
@metadata.to_s
|
44
|
+
end
|
45
|
+
end # module Describable
|
46
|
+
end # class RVG
|
52
47
|
end # module Magick
|
53
|
-
|