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/rvg.rb
CHANGED
@@ -27,8 +27,7 @@
|
|
27
27
|
# OSI Certified is a certification mark of the Open Source Initiative.
|
28
28
|
#
|
29
29
|
#++############################################################################
|
30
|
-
|
31
|
-
require 'RMagick'
|
30
|
+
require 'rmagick'
|
32
31
|
require 'rvg/misc'
|
33
32
|
require 'rvg/describable'
|
34
33
|
require 'rvg/stylable'
|
@@ -47,237 +46,239 @@ require 'pp' if ENV['debug_rvg']
|
|
47
46
|
# RVG is the main class in this library. All graphic elements
|
48
47
|
# must be contained within an RVG object.
|
49
48
|
module Magick
|
50
|
-
|
49
|
+
class RVG
|
50
|
+
include Stylable
|
51
|
+
include Transformable
|
52
|
+
include Stretchable
|
53
|
+
include Embellishable
|
54
|
+
include Describable
|
55
|
+
include Duplicatable
|
51
56
|
|
52
|
-
|
53
|
-
include Transformable
|
54
|
-
include Stretchable
|
55
|
-
include Embellishable
|
56
|
-
include Describable
|
57
|
-
include Duplicatable
|
57
|
+
private
|
58
58
|
|
59
|
-
|
59
|
+
# background_fill defaults to 'none'. If background_fill has been set to something
|
60
|
+
# else, combine it with the background_fill_opacity.
|
61
|
+
def bgfill
|
62
|
+
if @background_fill.nil?
|
63
|
+
color = Magick::Pixel.new(0, 0, 0, Magick::OpaqueAlpha)
|
64
|
+
else
|
65
|
+
color = @background_fill
|
66
|
+
color.alpha = @background_fill_opacity * Magick::OpaqueAlpha
|
67
|
+
end
|
68
|
+
color
|
69
|
+
end
|
60
70
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
71
|
+
def new_canvas
|
72
|
+
if @background_pattern
|
73
|
+
canvas = Magick::Image.new(@width, @height, @background_pattern)
|
74
|
+
elsif @background_image
|
75
|
+
canvas = if @width != @background_image.columns || @height != @background_image.rows
|
76
|
+
case @background_position
|
77
|
+
when :scaled
|
78
|
+
@background_image.resize(@width, @height)
|
79
|
+
when :tiled
|
80
|
+
Magick::Image.new(@width, @height, Magick::TextureFill.new(@background_image))
|
81
|
+
when :fit
|
82
|
+
width = @width
|
83
|
+
height = @height
|
84
|
+
bgcolor = bgfill
|
85
|
+
@background_image.change_geometry(Magick::Geometry.new(width, height)) do |new_cols, new_rows|
|
86
|
+
bg_image = @background_image.resize(new_cols, new_rows)
|
87
|
+
if bg_image.columns != width || bg_image.rows != height
|
88
|
+
bg = Magick::Image.new(width, height) { self.background_color = bgcolor }
|
89
|
+
bg_image = bg.composite!(bg_image, Magick::CenterGravity, Magick::OverCompositeOp)
|
90
|
+
end
|
91
|
+
bg_image
|
92
|
+
end
|
93
|
+
end
|
94
|
+
else
|
95
|
+
@background_image.copy
|
96
|
+
end
|
97
|
+
else
|
98
|
+
bgcolor = bgfill
|
99
|
+
canvas = Magick::Image.new(Integer(@width), Integer(@height)) { self.background_color = bgcolor }
|
100
|
+
end
|
101
|
+
canvas[:desc] = @desc if @desc
|
102
|
+
canvas[:title] = @title if @title
|
103
|
+
canvas[:metadata] = @metadata if @metadata
|
104
|
+
canvas
|
105
|
+
end
|
72
106
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
when :tiled
|
82
|
-
Magick::Image.new(@width, @height, Magick::TextureFill.new(@background_image))
|
83
|
-
when :fit
|
84
|
-
width, height = @width, @height
|
85
|
-
bgcolor = bgfill()
|
86
|
-
@background_image.change_geometry(Magick::Geometry.new(width, height)) do |new_cols, new_rows|
|
87
|
-
bg_image = @background_image.resize(new_cols, new_rows)
|
88
|
-
if bg_image.columns != width || bg_image.rows != height
|
89
|
-
bg = Magick::Image.new(width, height) { self.background_color = bgcolor }
|
90
|
-
bg_image = bg.composite!(bg_image, Magick::CenterGravity, Magick::OverCompositeOp)
|
91
|
-
end
|
92
|
-
bg_image
|
93
|
-
end
|
94
|
-
end
|
95
|
-
else
|
96
|
-
canvas = @background_image.copy
|
97
|
-
end
|
98
|
-
else
|
99
|
-
bgcolor = bgfill()
|
100
|
-
canvas = Magick::Image.new(Integer(@width), Integer(@height)) { self.background_color = bgcolor }
|
101
|
-
end
|
102
|
-
canvas[:desc] = @desc if @desc
|
103
|
-
canvas[:title] = @title if @title
|
104
|
-
canvas[:metadata] = @metadata if @metadata
|
105
|
-
return canvas
|
107
|
+
if ENV['debug_prim']
|
108
|
+
def print_gc(gc)
|
109
|
+
primitives = gc.inspect.split(/\n/)
|
110
|
+
indent = 0
|
111
|
+
primitives.each do |cmd|
|
112
|
+
indent -= 1 if cmd['pop ']
|
113
|
+
print((' ' * indent), cmd, "\n")
|
114
|
+
indent += 1 if cmd['push ']
|
106
115
|
end
|
116
|
+
end
|
117
|
+
end
|
107
118
|
|
108
|
-
|
109
|
-
def print_gc(gc)
|
110
|
-
primitives = gc.inspect.split(/\n/)
|
111
|
-
indent = 0
|
112
|
-
primitives.each do |cmd|
|
113
|
-
indent -= 1 if cmd['pop ']
|
114
|
-
print((' '*indent), cmd, "\n")
|
115
|
-
indent += 1 if cmd['push ']
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
+
public
|
119
120
|
|
120
|
-
|
121
|
+
WORD_SEP = / / # Regexp to separate words
|
121
122
|
|
122
|
-
|
123
|
+
# The background image specified by background_image=
|
124
|
+
attr_reader :background_image
|
125
|
+
# The background image layout specified by background_position=
|
126
|
+
attr_reader :background_position
|
127
|
+
# The background fill color specified by background_fill=
|
128
|
+
attr_reader :background_fill
|
129
|
+
# The background fill color opacity specified by background_fill_opacity=
|
130
|
+
attr_reader :background_fill_opacity
|
131
|
+
# The image after drawing has completed
|
132
|
+
attr_reader :canvas
|
133
|
+
# For embedded RVG objects, the x-axis coordinate of the upper-left corner
|
134
|
+
attr_reader :x
|
135
|
+
# For embedded RVG objects, the x-axis coordinate of the upper-left corner
|
136
|
+
attr_reader :y
|
137
|
+
attr_reader :width, :height
|
123
138
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
# The background fill color specified by background_fill=
|
129
|
-
attr_reader :background_fill
|
130
|
-
# The background fill color opacity specified by background_fill_opacity=
|
131
|
-
attr_reader :background_fill_opacity
|
132
|
-
# The image after drawing has completed
|
133
|
-
attr_reader :canvas
|
134
|
-
# For embedded RVG objects, the x-axis coordinate of the upper-left corner
|
135
|
-
attr_reader :x
|
136
|
-
# For embedded RVG objects, the x-axis coordinate of the upper-left corner
|
137
|
-
attr_reader :y
|
138
|
-
attr_reader :width, :height
|
139
|
+
# Sets an image to use as the canvas background. See background_position= for layout options.
|
140
|
+
def background_image=(bg_image)
|
141
|
+
warn 'background_image= has no effect in nested RVG objects' if @nested
|
142
|
+
raise ArgumentError, "background image must be an Image (got #{bg_image.class})" if bg_image && !bg_image.is_a?(Magick::Image)
|
139
143
|
|
140
|
-
|
141
|
-
|
142
|
-
warn "background_image= has no effect in nested RVG objects" if @nested
|
143
|
-
if bg_image && ! bg_image.kind_of?(Magick::Image)
|
144
|
-
raise ArgumentError, "background image must be an Image (got #{bg_image.class})"
|
145
|
-
end
|
146
|
-
@background_image = bg_image
|
147
|
-
end
|
144
|
+
@background_image = bg_image
|
145
|
+
end
|
148
146
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
147
|
+
# Sets an object to use to fill the canvas background.
|
148
|
+
# The object must have a <tt>fill</tt> method. See the <b>Fill Classes</b>
|
149
|
+
# section in the RMagick doc for more information.
|
150
|
+
def background_pattern=(filler)
|
151
|
+
warn 'background_pattern= has no effect in nested RVG objects' if @nested
|
152
|
+
@background_pattern = filler
|
153
|
+
end
|
156
154
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
raise ArgumentError, "background position must be `scaled', `tiled', or `fit' (#{pos} given)"
|
168
|
-
end
|
169
|
-
@background_position = bg_pos.to_sym
|
170
|
-
end
|
155
|
+
# How to position the background image on the canvas. One of the following symbols:
|
156
|
+
# [:scaled] Scale the image to the canvas width and height.
|
157
|
+
# [:tiled] Tile the image across the canvas.
|
158
|
+
# [:fit] Scale the image to fit within the canvas while retaining the
|
159
|
+
# image proportions. Center the image on the canvas. Color any part of
|
160
|
+
# the canvas not covered by the image with the background color.
|
161
|
+
def background_position=(pos)
|
162
|
+
warn 'background_position= has no effect in nested RVG objects' if @nested
|
163
|
+
bg_pos = pos.to_s.downcase
|
164
|
+
raise ArgumentError, "background position must be `scaled', `tiled', or `fit' (#{pos} given)" unless %w[scaled tiled fit].include?(bg_pos)
|
171
165
|
|
172
|
-
|
173
|
-
|
174
|
-
def background_fill=(color)
|
175
|
-
warn "background_fill= has no effect in nested RVG objects" if @nested
|
176
|
-
if ! color.kind_of?(Magick::Pixel)
|
177
|
-
begin
|
178
|
-
@background_fill = Magick::Pixel.from_color(color)
|
179
|
-
rescue Magick::ImageMagickError
|
180
|
-
raise ArgumentError, "unknown color `#{color}'"
|
181
|
-
rescue TypeError
|
182
|
-
raise TypeError, "cannot convert #{color.class} into Pixel"
|
183
|
-
rescue
|
184
|
-
raise ArgumentError, "argument must be a color name or a Pixel (got #{color.class})"
|
185
|
-
end
|
186
|
-
else
|
187
|
-
@background_fill = color
|
188
|
-
end
|
189
|
-
end
|
166
|
+
@background_position = bg_pos.to_sym
|
167
|
+
end
|
190
168
|
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
169
|
+
# Sets the canvas background color. Either a Magick::Pixel or a color name.
|
170
|
+
# The default fill is "none", that is, transparent black.
|
171
|
+
def background_fill=(color)
|
172
|
+
warn 'background_fill= has no effect in nested RVG objects' if @nested
|
173
|
+
if !color.is_a?(Magick::Pixel)
|
174
|
+
begin
|
175
|
+
@background_fill = Magick::Pixel.from_color(color)
|
176
|
+
rescue Magick::ImageMagickError
|
177
|
+
raise ArgumentError, "unknown color `#{color}'"
|
178
|
+
rescue TypeError
|
179
|
+
raise TypeError, "cannot convert #{color.class} into Pixel"
|
180
|
+
rescue StandardError
|
181
|
+
raise ArgumentError, "argument must be a color name or a Pixel (got #{color.class})"
|
200
182
|
end
|
183
|
+
else
|
184
|
+
@background_fill = color
|
185
|
+
end
|
186
|
+
end
|
201
187
|
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
#
|
213
|
-
# RVG objects are _containers_. That is, styles and transforms defined
|
214
|
-
# on the object are used by contained objects such as shapes, text, and
|
215
|
-
# groups unless overridden by an inner container or the object itself.
|
216
|
-
def initialize(width=nil, height=nil)
|
217
|
-
super
|
218
|
-
@width, @height = width, height
|
219
|
-
@content = Content.new
|
220
|
-
@canvas = nil
|
221
|
-
@background_fill = nil
|
222
|
-
@background_fill_opacity = 1.0 # applies only if background_fill= is used
|
223
|
-
@background_position = :scaled
|
224
|
-
@background_pattern, @background_image, @desc, @title, @metadata = nil
|
225
|
-
@x, @y = 0.0, 0.0
|
226
|
-
@nested = false
|
227
|
-
yield(self) if block_given?
|
228
|
-
end
|
188
|
+
# Opacity of the background fill color, a number between 0.0 (transparent) and
|
189
|
+
# 1.0 (opaque). The default is 1.0 when the background_fill= attribute has been set.
|
190
|
+
def background_fill_opacity=(opacity)
|
191
|
+
warn 'background_fill_opacity= has no effect in nested RVG objects' if @nested
|
192
|
+
begin
|
193
|
+
@background_fill_opacity = Float(opacity)
|
194
|
+
rescue ArgumentError
|
195
|
+
raise ArgumentError, "background_fill_opacity must be a number between 0 and 1 (#{opacity} given)"
|
196
|
+
end
|
197
|
+
end
|
229
198
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
199
|
+
# Draw a +width+ x +height+ image. The image is specified by calling
|
200
|
+
# one or more drawing methods on the RVG object.
|
201
|
+
# You can group the drawing method calls in the optional associated block.
|
202
|
+
# The +x+ and +y+ arguments have no meaning for the outermost RVG object.
|
203
|
+
# On nested RVG objects [+x+, +y+] is the coordinate of the upper-left
|
204
|
+
# corner in the containing canvas on which the nested RVG object is placed.
|
205
|
+
#
|
206
|
+
# Drawing occurs on a +canvas+ created by the #draw method. By default the
|
207
|
+
# canvas is transparent. You can specify a different canvas with the
|
208
|
+
# #background_fill= or #background_image= methods.
|
209
|
+
#
|
210
|
+
# RVG objects are _containers_. That is, styles and transforms defined
|
211
|
+
# on the object are used by contained objects such as shapes, text, and
|
212
|
+
# groups unless overridden by an inner container or the object itself.
|
213
|
+
def initialize(width = nil, height = nil)
|
214
|
+
super
|
215
|
+
@width = width
|
216
|
+
@height = height
|
217
|
+
@content = Content.new
|
218
|
+
@canvas = nil
|
219
|
+
@background_fill = nil
|
220
|
+
@background_fill_opacity = 1.0 # applies only if background_fill= is used
|
221
|
+
@background_position = :scaled
|
222
|
+
@background_pattern, @background_image, @desc, @title, @metadata = nil
|
223
|
+
@x = 0.0
|
224
|
+
@y = 0.0
|
225
|
+
@nested = false
|
226
|
+
yield(self) if block_given?
|
227
|
+
end
|
242
228
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
@width = rw if rw
|
248
|
-
@height = rh if rh
|
249
|
-
end
|
229
|
+
# Construct a canvas or reuse an existing canvas.
|
230
|
+
# Execute drawing commands. Return the canvas.
|
231
|
+
def draw
|
232
|
+
raise StandardError, 'draw not permitted in nested RVG objects' if @nested
|
250
233
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
234
|
+
@canvas ||= new_canvas # allow drawing over existing canvas
|
235
|
+
gc = Utility::GraphicContext.new
|
236
|
+
add_outermost_primitives(gc)
|
237
|
+
pp(self) if ENV['debug_rvg']
|
238
|
+
print_gc(gc) if ENV['debug_prim']
|
239
|
+
gc.draw(@canvas)
|
240
|
+
@canvas
|
241
|
+
end
|
257
242
|
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
self
|
267
|
-
end
|
243
|
+
# Accept #use arguments. Use (x,y) to generate an additional translate.
|
244
|
+
# Override @width and @height if new values are supplied.
|
245
|
+
# @private
|
246
|
+
def ref(x, y, rw, rh)
|
247
|
+
translate(x, y) if x != 0 || y != 0
|
248
|
+
@width = rw if rw
|
249
|
+
@height = rh if rh
|
250
|
+
end
|
268
251
|
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
add_outermost_primitives(gc)
|
278
|
-
gc.pop
|
279
|
-
end
|
252
|
+
# Used by Magick::Embellishable.rvg to set non-0 x- and y-coordinates
|
253
|
+
# @private
|
254
|
+
def corner(x, y)
|
255
|
+
@nested = true
|
256
|
+
@x = Float(x)
|
257
|
+
@y = Float(y)
|
258
|
+
translate(@x, @y) if @x != 0.0 || @y != 0.0
|
259
|
+
end
|
280
260
|
|
281
|
-
|
282
|
-
|
261
|
+
# Primitives for the outermost RVG object
|
262
|
+
# @private
|
263
|
+
def add_outermost_primitives(gc)
|
264
|
+
add_transform_primitives(gc)
|
265
|
+
gc.push
|
266
|
+
add_viewbox_primitives(@width, @height, gc)
|
267
|
+
add_style_primitives(gc)
|
268
|
+
@content.each { |element| element.add_primitives(gc) }
|
269
|
+
gc.pop
|
270
|
+
self
|
271
|
+
end
|
283
272
|
|
273
|
+
# Primitives for nested RVG objects
|
274
|
+
# @private
|
275
|
+
def add_primitives(gc)
|
276
|
+
raise ArgumentError, 'RVG width or height undefined' if @width.nil? || @height.nil?
|
277
|
+
return self if @width.zero? || @height.zero?
|
278
|
+
|
279
|
+
gc.push
|
280
|
+
add_outermost_primitives(gc)
|
281
|
+
gc.pop
|
282
|
+
end
|
283
|
+
end # end class RVG
|
284
|
+
end # end module Magick
|