rmagick 1.7.4 → 1.8.0

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

Potentially problematic release.


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

Files changed (130) hide show
  1. data/ChangeLog +10 -2
  2. data/README.html +284 -290
  3. data/README.txt +298 -307
  4. data/configure +180 -11
  5. data/configure.ac +18 -2
  6. data/doc/comtasks.html +1 -1
  7. data/doc/constants.html +15 -10
  8. data/doc/css/ref.css +67 -0
  9. data/doc/draw.html +1 -1
  10. data/doc/ex/InitialCoords.rb +24 -0
  11. data/doc/ex/NewCoordSys.rb +33 -0
  12. data/doc/ex/OrigCoordSys.rb +19 -0
  13. data/doc/ex/PreserveAspectRatio.rb +206 -0
  14. data/doc/ex/RotateScale.rb +38 -0
  15. data/doc/ex/Skew.rb +39 -0
  16. data/doc/ex/Use01.rb +17 -0
  17. data/doc/ex/Use02.rb +22 -0
  18. data/doc/ex/Use03.rb +17 -0
  19. data/doc/ex/ViewBox.rb +34 -0
  20. data/doc/ex/arcs01.rb +29 -0
  21. data/doc/ex/arcs02.rb +62 -0
  22. data/doc/ex/baseline_shift01.rb +19 -0
  23. data/doc/ex/bounding_box.rb +31 -37
  24. data/doc/ex/circle01.rb +18 -0
  25. data/doc/ex/cubic01.rb +46 -0
  26. data/doc/ex/cubic02.rb +95 -0
  27. data/doc/ex/drop_shadow.rb +1 -1
  28. data/doc/ex/ellipse01.rb +23 -0
  29. data/doc/ex/evenodd.rb +44 -0
  30. data/doc/ex/font_styles.rb +29 -0
  31. data/doc/ex/group.rb +27 -0
  32. data/doc/ex/image.rb +47 -0
  33. data/doc/ex/images/big-duck.gif +0 -0
  34. data/doc/ex/images/duck.gif +0 -0
  35. data/doc/ex/images/duck0.gif +0 -0
  36. data/doc/ex/images/duck1.gif +0 -0
  37. data/doc/ex/images/duck10.gif +0 -0
  38. data/doc/ex/images/duck11.gif +0 -0
  39. data/doc/ex/images/duck12.gif +0 -0
  40. data/doc/ex/images/duck13.gif +0 -0
  41. data/doc/ex/images/duck14.gif +0 -0
  42. data/doc/ex/images/duck15.gif +0 -0
  43. data/doc/ex/images/duck2.gif +0 -0
  44. data/doc/ex/images/duck3.gif +0 -0
  45. data/doc/ex/images/duck4.gif +0 -0
  46. data/doc/ex/images/duck5.gif +0 -0
  47. data/doc/ex/images/duck6.gif +0 -0
  48. data/doc/ex/images/duck7.gif +0 -0
  49. data/doc/ex/images/duck8.gif +0 -0
  50. data/doc/ex/images/duck9.gif +0 -0
  51. data/doc/ex/line01.rb +24 -0
  52. data/doc/ex/nested_rvg.rb +22 -0
  53. data/doc/ex/nonzero.rb +44 -0
  54. data/doc/ex/polygon01.rb +24 -0
  55. data/doc/ex/polyline01.rb +24 -0
  56. data/doc/ex/quad01.rb +37 -0
  57. data/doc/ex/rect01.rb +16 -0
  58. data/doc/ex/rect02.rb +23 -0
  59. data/doc/ex/rvg_clippath.rb +15 -0
  60. data/doc/ex/rvg_linecap.rb +44 -0
  61. data/doc/ex/rvg_linejoin.rb +42 -0
  62. data/doc/ex/rvg_opacity.rb +20 -0
  63. data/doc/ex/rvg_pattern.rb +27 -0
  64. data/doc/ex/rvg_stroke_dasharray.rb +13 -0
  65. data/doc/ex/sepiatone.rb +15 -0
  66. data/doc/ex/shadow.rb +37 -0
  67. data/doc/ex/smile.rb +9 -9
  68. data/doc/ex/stroke_fill.rb +12 -0
  69. data/doc/ex/text01.rb +18 -0
  70. data/doc/ex/text_styles.rb +22 -0
  71. data/doc/ex/texture_fill_to_border.rb +3 -3
  72. data/doc/ex/texture_floodfill.rb +3 -2
  73. data/doc/ex/tref01.rb +26 -0
  74. data/doc/ex/triangle01.rb +17 -0
  75. data/doc/ex/tspan01.rb +19 -0
  76. data/doc/ex/tspan02.rb +20 -0
  77. data/doc/ex/tspan03.rb +22 -0
  78. data/doc/ex/writing_mode01.rb +28 -0
  79. data/doc/ex/writing_mode02.rb +27 -0
  80. data/doc/ilist.html +1 -1
  81. data/doc/image1.html +66 -30
  82. data/doc/image2.html +1 -1
  83. data/doc/image3.html +274 -49
  84. data/doc/imageattrs.html +87 -10
  85. data/doc/imusage.html +1 -1
  86. data/doc/index.html +80 -39
  87. data/doc/info.html +149 -13
  88. data/doc/magick.html +1 -1
  89. data/doc/rvg.html +890 -0
  90. data/doc/rvgclip.html +249 -0
  91. data/doc/rvggroup.html +305 -0
  92. data/doc/rvgimage.html +288 -0
  93. data/doc/rvgpattern.html +456 -0
  94. data/doc/rvgshape.html +376 -0
  95. data/doc/rvgstyle.html +269 -0
  96. data/doc/rvgtext.html +464 -0
  97. data/doc/rvgtspan.html +237 -0
  98. data/doc/rvgtut.html +512 -0
  99. data/doc/rvguse.html +145 -0
  100. data/doc/rvgxform.html +294 -0
  101. data/doc/struct.html +9 -71
  102. data/doc/usage.html +22 -7
  103. data/ext/RMagick/MANIFEST +94 -2
  104. data/ext/RMagick/rmagick.h +10 -4
  105. data/ext/RMagick/rmagick_config.h.in +8 -2
  106. data/ext/RMagick/rmdraw.c +2 -2
  107. data/ext/RMagick/rmfill.c +2 -2
  108. data/ext/RMagick/rmilist.c +3 -3
  109. data/ext/RMagick/rmimage.c +152 -5
  110. data/ext/RMagick/rminfo.c +208 -2
  111. data/ext/RMagick/rmmain.c +14 -5
  112. data/ext/RMagick/rmutil.c +83 -22
  113. data/lib/RMagick.rb +2 -2
  114. data/lib/rvg/clippath.rb +46 -0
  115. data/lib/rvg/container.rb +129 -0
  116. data/lib/rvg/deep_equal.rb +54 -0
  117. data/lib/rvg/describable.rb +51 -0
  118. data/lib/rvg/embellishable.rb +395 -0
  119. data/lib/rvg/misc.rb +729 -0
  120. data/lib/rvg/paint.rb +48 -0
  121. data/lib/rvg/pathdata.rb +129 -0
  122. data/lib/rvg/rvg.rb +279 -0
  123. data/lib/rvg/stretchable.rb +150 -0
  124. data/lib/rvg/stylable.rb +116 -0
  125. data/lib/rvg/text.rb +185 -0
  126. data/lib/rvg/transformable.rb +131 -0
  127. data/lib/rvg/units.rb +64 -0
  128. data/rmagick.gemspec +1 -1
  129. data/uninstall.rb +3 -2
  130. metadata +96 -3
@@ -0,0 +1,24 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ rvg = RVG.new(300, 100) do |canvas|
5
+ canvas.desc = "Example InitialCoords - SVG's initial coordinate system"
6
+ canvas.background_fill = 'white'
7
+ canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
8
+ grp.line(0, 1.5, 300, 1.5)
9
+ grp.line(1.5, 0, 1.5, 100)
10
+ end
11
+ canvas.g.styles(:fill=>'red', :stroke=>'none') do |grp|
12
+ grp.rect(3, 3)
13
+ grp.rect(3, 3, 297, 0)
14
+ grp.rect(3, 3, 0, 97)
15
+ end
16
+ canvas.g.styles(:font_size=>14, :font_family=>'Verdana') do |grp|
17
+ grp.text(10, 20, '(0,0)')
18
+ grp.text(240, 20, '(300,0)')
19
+ grp.text(10, 90, '(0,100)')
20
+ end
21
+ end
22
+
23
+ rvg.draw.write('InitialCoords.gif')
24
+
@@ -0,0 +1,33 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ rvg = RVG.new(400, 150) do |canvas|
5
+ canvas.background_fill = 'white'
6
+ canvas.desc = 'Example NewCoordSys - New user coordinate system'
7
+ canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
8
+ # Draw the axes of the original coordinate system
9
+ grp.line(0, 1.5, 400, 1.5)
10
+ grp.line(1.5, 0, 1.5, 150)
11
+ end
12
+
13
+ canvas.g do |grp|
14
+ grp.text(30, 30, 'ABC (orig coord system)').styles(:font_size=>20, :font_family=>'Verdana')
15
+ end
16
+
17
+ # Establish a new coordinate system, which is
18
+ # shifted (i.e., translated) from the initial coordinate
19
+ # system by 50 user units along each axis.
20
+ canvas.g.translate(50, 50) do |grp|
21
+ grp.g.styles(:fill=>'none', :stroke=>'red', :stroke_width=>3) do |grp2|
22
+ # Draw lines of length 50 user units along
23
+ # the axes of the new coordinate system
24
+ grp2.line(0, 0, 50, 0)
25
+ grp2.line(0, 0, 0, 50)
26
+ end
27
+ grp.text(30, 30, 'ABC (translated coord system)').styles(:font_size=>20, :font_family=>'Verdana')
28
+ end
29
+
30
+ end
31
+
32
+ rvg.draw.write('NewCoordSys.gif')
33
+
@@ -0,0 +1,19 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ rvg = RVG.new(400, 150) do |canvas|
5
+ canvas.desc = "Example OrigCoordSys - Simple transformations: original picture"
6
+ canvas.background_fill = 'white'
7
+
8
+ canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
9
+ # Draw the axes of the original coordinate system
10
+ grp.line(0, 1.5, 400, 1.5)
11
+ grp.line(1.5, 0, 1.5, 150)
12
+ end
13
+
14
+ canvas.text(30, 30, 'ABC (orig coord system)').styles(:font_size=>20, :font_family=>'Verdana')
15
+
16
+ end
17
+
18
+ rvg.draw.write('OrigCoordSys.gif')
19
+
@@ -0,0 +1,206 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ rvg = RVG.new(450, 300) do |canvas|
5
+ canvas.desc = 'Example Preserve Aspect Ratio'
6
+ canvas.background_fill = 'white'
7
+
8
+ canvas.rect(448, 298, 1, 1).styles(:fill=>'none', :stroke=>'blue')
9
+
10
+ # Define the smiley-face
11
+ smile = RVG::Group.new do |grp|
12
+ grp.translate(0, 5)
13
+ grp.circle(10, 15, 15).styles(:fill=>'yellow', :stroke=>'none')
14
+ grp.circle(1.5, 12, 12).styles(:fill=>'black', :stroke=>'none')
15
+ grp.circle(1.5, 17, 12).styles(:fill=>'black', :stroke=>'none')
16
+ grp.path("M10 19 A 8 8 0 0 0 20 19").styles(:stroke=>'black', :stroke_width=>2)
17
+ end
18
+
19
+ viewport1 = RVG::Group.new do |grp|
20
+ grp.rect(49, 29, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
21
+ end
22
+
23
+ viewport2 = RVG::Group.new do |grp|
24
+ grp.rect(29, 39, 0.5, 0.5).styles(:fill=>'black', :stroke=>'red')
25
+ end
26
+
27
+ # SVG to fit
28
+ grp = canvas.g.styles(:font_size=>9) do |grp|
29
+ grp.text(10, 30, "SVG to fit")
30
+ grp.g.translate(20, 40) do |grp2|
31
+ grp2.use(viewport2)
32
+ grp2.use(smile)
33
+ end
34
+
35
+ # Viewport 1
36
+ grp.g.translate(10, 120) do |grp2|
37
+ grp2.use(viewport1)
38
+ end
39
+ grp.text(10, 110, 'Viewport 1')
40
+
41
+ # Viewport 2
42
+ grp.g.translate(20, 190) do |grp2|
43
+ grp2.rect(29, 50, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
44
+ end
45
+ grp.text(10, 180, 'Viewport 2')
46
+
47
+ # meet-group-1
48
+ grp.g.translate(100, 60) do |grp2|
49
+ grp2.text(0, -30, "--------------- meet ---------------")
50
+ grp2.g do |grp3|
51
+ grp3.text(0, -10, "xMin*")
52
+ grp3.use(viewport1)
53
+
54
+ # xMin
55
+ grp3.rvg(50, 30).viewbox(0,0,30,40).preserve_aspect_ratio('xMinYMin', 'meet') do |canvas2|
56
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
57
+ canvas2.use(smile)
58
+ end
59
+ end
60
+
61
+ # xMid
62
+ grp2.g.translate(70, 0) do |grp3|
63
+ grp3.text(0, -10, "xMid*")
64
+ grp3.use(viewport1)
65
+ grp3.rvg(50, 30).viewbox(0, 0, 30, 40).preserve_aspect_ratio('xMidYMid', 'meet') do |canvas2|
66
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
67
+ canvas2.use(smile)
68
+ end
69
+ end
70
+
71
+ # xMax
72
+ grp2.g.translate(0, 70) do |grp3|
73
+ grp3.text(0, -10, "xMax*")
74
+ grp3.use(viewport1)
75
+ grp3.rvg(50, 30).viewbox(0,0,30,40).preserve_aspect_ratio('xMaxYMax', 'meet') do |canvas2|
76
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
77
+ canvas2.use(smile)
78
+ end
79
+ end
80
+ end
81
+
82
+ # meet-group-2
83
+ grp.g.translate(250, 60) do |grp2|
84
+ grp2.text(0, -30, "--------------- meet ---------------")
85
+
86
+ # xMin
87
+ grp2.g do |grp3|
88
+ grp3.text(0, -10, "*YMin")
89
+ grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
90
+ grp3.rvg(30, 60).viewbox(0,0,30,40).preserve_aspect_ratio('xMinYMin', 'meet') do |canvas2|
91
+ canvas2.use(viewport2)
92
+ canvas2.use(smile)
93
+ end
94
+ end
95
+
96
+ # xMid
97
+ grp2.g.translate(50, 0) do |grp3|
98
+ grp3.text(0, -10, "*YMid")
99
+ grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
100
+ grp3.rvg(30, 60).viewbox(0, 0, 30, 40).preserve_aspect_ratio('xMidYMid', 'meet') do |canvas2|
101
+ canvas2.use(viewport2)
102
+ canvas2.use(smile)
103
+ end
104
+ end
105
+
106
+ # xMax
107
+ grp2.g.translate(100, 0) do |grp3|
108
+ grp3.text(0, -10, "*YMax")
109
+ grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
110
+ grp3.rvg(30, 60).viewbox(0,0,30,40).preserve_aspect_ratio('xMaxYMax', 'meet') do |canvas2|
111
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
112
+ canvas2.use(smile)
113
+ end
114
+ end
115
+ end
116
+
117
+ # slice-group-1
118
+ grp.g.translate(100, 220) do |grp2|
119
+ grp2.text(0, -30, "--------------- slice ---------------")
120
+
121
+ # xMin
122
+ grp2.g do |grp3|
123
+ grp3.text(0, -10, "xMin*")
124
+ grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
125
+ grp3.rvg(30, 60) do |canvas2|
126
+ canvas2.preserve_aspect_ratio('xMinYMin', 'slice')
127
+ canvas2.viewbox(0,0,30,40)
128
+ canvas2.use(viewport2)
129
+ canvas2.use(smile)
130
+ end
131
+ end
132
+
133
+ # xMid
134
+ grp2.g do |grp3|
135
+ grp3.text(0, -10, "xMid*")
136
+ grp3.translate(50, 0)
137
+ grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
138
+ grp3.rvg(30, 60) do |canvas2|
139
+ canvas2.preserve_aspect_ratio('xMidYMid', 'slice')
140
+ canvas2.viewbox(0,0,30,40)
141
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
142
+ canvas2.use(smile)
143
+ end
144
+ end
145
+
146
+ # xMax
147
+ grp2.g do |grp3|
148
+ grp3.text(0, -10, "xMax*")
149
+ grp3.translate(100, 0)
150
+ grp3.rect(29, 59, 0.5, 0.5).styles(:fill => 'none', :stroke => 'blue')
151
+ grp3.rvg(30, 60) do |canvas2|
152
+ canvas2.preserve_aspect_ratio('xMaxYMax', 'slice')
153
+ canvas2.viewbox(0,0,30,40)
154
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
155
+ canvas2.use(smile)
156
+ end
157
+ end
158
+ end
159
+
160
+ # slice-group-2
161
+ grp.g.translate(250, 200) do |grp2|
162
+ grp2.text(0, -30, "--------------- slice ---------------")
163
+
164
+ # YMin
165
+ grp2.g do |grp3|
166
+ grp3.text(0, -10, "*YMin")
167
+ grp3.use(viewport1)
168
+ grp3.rvg(50, 30) do |canvas2|
169
+ canvas2.preserve_aspect_ratio('xMinYMin', 'slice')
170
+ canvas2.viewbox(0,0,30,40)
171
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
172
+ canvas2.use(smile)
173
+ end
174
+ end
175
+
176
+ # YMid
177
+ grp2.g do |grp3|
178
+ grp3.text(0, -10, "*YMid")
179
+ grp3.translate(70, 0)
180
+ grp3.use(viewport1)
181
+ grp3.rvg(50, 30) do |canvas2|
182
+ canvas2.preserve_aspect_ratio('xMidYMid', 'slice')
183
+ canvas2.viewbox(0,0,30,40)
184
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
185
+ canvas2.use(smile)
186
+ end
187
+ end
188
+
189
+ # YMax
190
+ grp2.g do |grp3|
191
+ grp3.text(0, -10, "*YMax")
192
+ grp3.translate(140, 0)
193
+ grp3.use(viewport1)
194
+ grp3.rvg(50, 30) do |canvas2|
195
+ canvas2.preserve_aspect_ratio('xMaxYMax', 'slice')
196
+ canvas2.viewbox(0,0,30,40)
197
+ canvas2.rect(29, 39, 0.5, 0.5).styles(:fill => 'black', :stroke => 'red')
198
+ canvas2.use(smile)
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
204
+
205
+ rvg.draw.write('PreserveAspectRatio.gif')
206
+
@@ -0,0 +1,38 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ rvg = RVG.new(400, 120) do |canvas|
5
+ canvas.desc = 'Example RotateScale - Rotate and scale transforms'
6
+ canvas.background_fill = 'white'
7
+ canvas.g.styles(:fill=>'none', :stroke=>'black', :stroke_width=>3) do |grp|
8
+ # Draw the axes of the original coordinate system
9
+ grp.line(0, 1.5, 400, 1.5)
10
+ grp.line(1.5, 0, 1.5, 120)
11
+ end
12
+ # Establish a new coordinate system whose origin is at (50,30)
13
+ # in the original coord. system and which is rotated by 30 degrees.
14
+ canvas.g.translate(50,30) do |grp|
15
+ grp.g.rotate(30) do |grp2|
16
+ grp2.g.styles(:fill=>'none',:stroke=>'red',:stroke_width=>3) do |grp3|
17
+ grp3.line(0, 0, 50, 0)
18
+ grp3.line(0, 0, 0, 50)
19
+ end
20
+ grp2.text(0, 0, "ABC (rotate)").styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
21
+ end
22
+ end
23
+
24
+ # Establish a new coordinate system whose origin is at (200,40)
25
+ # in the original coord. systm and which is scaled by 1.5
26
+ canvas.g.translate(200,40) do |grp|
27
+ grp.g.scale(1.5) do |grp2|
28
+ grp2.g.styles(:fill=>'none',:stroke=>'red',:stroke_width=>3) do |grp3|
29
+ grp3.line(0, 0, 50, 0)
30
+ grp3.line(0, 0, 0, 50)
31
+ end
32
+ grp2.text(0, 0, "ABC (scale)").styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
33
+ end
34
+ end
35
+ end
36
+
37
+ rvg.draw.write('RotateScale.gif')
38
+
@@ -0,0 +1,39 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ rvg = RVG.new(400, 120) do |canvas|
5
+ canvas.desc = 'Example Skew - Show effects of skewX and skewY'
6
+ canvas.background_fill = 'white'
7
+
8
+ canvas.g.styles(:fill=>'none',:stroke=>'black',:stroke_width=>3) do |grp|
9
+ # Draw the axes of the original coordinate system
10
+ grp.line(0, 1.5, 400, 1.5)
11
+ grp.line(1.5, 0, 1.5, 120)
12
+ end
13
+
14
+ # Establisha new coordinate system whose origin is at (30,30)
15
+ # in the initial coord. system and which is skewed in X by 30 degrees.
16
+ canvas.g.translate(30,30) do |grp|
17
+ grp.skewX(30) do |grp2|
18
+ grp2.g.styles(:fill=>'none', :stroke=>'red', :stroke_width=>3) do |grp3|
19
+ grp3.line(0, 0, 50, 0)
20
+ grp3.line(0, 0, 0, 50)
21
+ end
22
+ grp.text(0, 0, 'ABC (skewX)').styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
23
+ end
24
+ end
25
+
26
+ # Establish a new coordinate system whose origin is at (200,30)
27
+ # in the initial coord. system and which is skewed in Y by 30 degrees.
28
+ canvas.g.translate(200,30) do |grp|
29
+ grp.skewY(30) do |grp2|
30
+ grp2.g.styles(:fill=>'none', :stroke=>'red', :stroke_width=>3) do |grp3|
31
+ grp3.line(0, 0, 50, 0)
32
+ grp3.line(0, 0, 0, 50)
33
+ end
34
+ grp.text(0, 0, 'ABC (skewY)').styles(:font_size=>20, :fill=>'blue', :font_family=>'Verdana')
35
+ end
36
+ end
37
+ end
38
+
39
+ rvg.draw.write('Skew.gif')
@@ -0,0 +1,17 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ rvg = RVG.new(10.cm, 3.cm).viewbox(0, 0, 100, 30) do |canvas|
7
+ canvas.background_fill = 'white'
8
+ canvas.desc = "Example Use01 - Simple case of 'use' on a 'rect'"
9
+ r = RVG::Group.new do |grp|
10
+ grp.rect(60, 10)
11
+ end
12
+ canvas.rect(99.6, 29.6, 0.1, 0.1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>0.2)
13
+ canvas.use(r, 20, 10)
14
+ end
15
+
16
+ rvg.draw.write('Use01.gif')
17
+
@@ -0,0 +1,22 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ rvg = RVG.new(10.cm, 3.5.cm).viewbox(0, 0, 100, 35) do |canvas|
7
+ canvas.background_fill = 'white'
8
+ canvas.desc = "Example Use02 - Chain 'styles' to 'use'"
9
+ r = RVG::Group.new do |grp|
10
+ grp.rect(60, 10).styles(:fill=>'yellow')
11
+ end
12
+ canvas.rect(99.6, 34.6, 0.1, 0.1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>0.2)
13
+
14
+ # Since the rectangle specified the fill color the :fill style is ignored here.
15
+ # However, since the rectangle did not specify a stroke color, the :stroke style
16
+ # specified here is respected.
17
+ canvas.use(r, 20, 5).styles(:fill=>'green', :stroke=>'red')
18
+ canvas.use(r, 20, 20).styles(:fill=>'green', :stroke=>'blue')
19
+ end
20
+
21
+ rvg.draw.write('Use02.gif')
22
+
@@ -0,0 +1,17 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ rvg = RVG.new(10.cm, 3.cm).viewbox(0, 0, 100, 30) do |canvas|
7
+ canvas.background_fill = 'white'
8
+ canvas.desc = "Example Use03 - 'use' with a 'transform' attribute"
9
+
10
+ myrect = RVG::Group.new do |grp|
11
+ grp.rect(60, 10)
12
+ end
13
+ canvas.rect(99.6, 29.6, 0.1, 0.1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>0.2)
14
+ canvas.use(myrect).translate(20,2.5).rotate(10)
15
+ end
16
+
17
+ rvg.draw.write('Use03.gif')
@@ -0,0 +1,34 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ def example(cols, rows)
5
+ rvg = RVG.new(cols, rows) do |canvas|
6
+ canvas.background_fill = 'white'
7
+ canvas.desc = <<-'END_DESC'
8
+ Example ViewBox - uses the viewBox attribute to automatically create an
9
+ initial user coordinate system which causes the graphic to scale to fit
10
+ into the viewport no matter what size the viewport is.
11
+ END_DESC
12
+
13
+ canvas.viewbox(0, 0, 1500, 1000)
14
+ canvas.preserve_aspect_ratio('none')
15
+
16
+ # This rectangle goes from (0,0) to (1500,1000) in user space.
17
+ # Because of the viewBox attribute above,
18
+ # the rectangle will end up filling the entire area
19
+ # reserved for the SVG content.
20
+ canvas.rect(1500, 1000).styles(:fill=>'yellow',:stroke=>'blue',:stroke_width=>12)
21
+
22
+ # A large, red triangle
23
+ canvas.path("M 750,100 L 250,900 L 1250,900 z").styles(:fill=>'red')
24
+
25
+ # A text string that spans most of the viewport
26
+ canvas.text(100, 600, 'Stretch to fit').styles(:font_size=>200, :font_family=>'Verdana')
27
+
28
+ end
29
+ return rvg.draw
30
+ end
31
+
32
+ example(300, 200).write('ViewBox_300x200.gif')
33
+ example(150, 200).write('ViewBox_150x200.gif')
34
+