dyi 1.1.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +7 -1
- data/lib/dyi.rb +3 -1
- data/lib/dyi/animation.rb +5 -4
- data/lib/dyi/canvas.rb +5 -8
- data/lib/dyi/chart.rb +1 -1
- data/lib/dyi/chart/array_reader.rb +104 -10
- data/lib/dyi/chart/axis_util.rb +31 -17
- data/lib/dyi/chart/base.rb +104 -7
- data/lib/dyi/chart/csv_reader.rb +56 -8
- data/lib/dyi/chart/excel_reader.rb +27 -4
- data/lib/dyi/chart/legend.rb +10 -8
- data/lib/dyi/chart/line_chart.rb +29 -25
- data/lib/dyi/chart/pie_chart.rb +192 -29
- data/lib/dyi/chart/table.rb +12 -10
- data/lib/dyi/color.rb +9 -7
- data/lib/dyi/coordinate.rb +177 -61
- data/lib/dyi/drawing.rb +1 -1
- data/lib/dyi/drawing/clipping.rb +9 -3
- data/lib/dyi/drawing/color_effect.rb +7 -4
- data/lib/dyi/drawing/filter.rb +10 -7
- data/lib/dyi/drawing/pen.rb +421 -11
- data/lib/dyi/drawing/pen_3d.rb +12 -7
- data/lib/dyi/element.rb +5 -4
- data/lib/dyi/event.rb +3 -3
- data/lib/dyi/font.rb +6 -4
- data/lib/dyi/formatter.rb +1 -1
- data/lib/dyi/formatter/base.rb +24 -15
- data/lib/dyi/formatter/emf_formatter.rb +6 -5
- data/lib/dyi/formatter/eps_formatter.rb +15 -14
- data/lib/dyi/formatter/svg_formatter.rb +16 -14
- data/lib/dyi/formatter/svg_reader.rb +4 -3
- data/lib/dyi/formatter/xaml_formatter.rb +9 -7
- data/lib/dyi/length.rb +213 -114
- data/lib/dyi/matrix.rb +4 -2
- data/lib/dyi/painting.rb +161 -87
- data/lib/dyi/script.rb +1 -1
- data/lib/dyi/script/ecmascript.rb +18 -29
- data/lib/dyi/script/simple_script.rb +4 -8
- data/lib/dyi/shape.rb +1 -1
- data/lib/dyi/shape/base.rb +8 -17
- data/lib/dyi/shape/path.rb +102 -19
- data/lib/dyi/stylesheet.rb +4 -3
- data/lib/dyi/svg_element.rb +9 -7
- data/lib/dyi/type.rb +5 -2
- data/lib/dyi/util.rb +36 -1
- data/lib/ironruby.rb +1 -1
- data/lib/util.rb +53 -5
- metadata +4 -19
data/lib/dyi/drawing/pen_3d.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: UTF-8 -*-
|
2
2
|
|
3
|
-
# Copyright (c) 2009-
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
4
|
#
|
5
5
|
# Author:: Mamoru Yuo
|
6
6
|
#
|
@@ -19,9 +19,11 @@
|
|
19
19
|
# You should have received a copy of the GNU General Public License
|
20
20
|
# along with DYI. If not, see <http://www.gnu.org/licenses/>.
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
#
|
23
|
+
module DYI
|
24
|
+
module Drawing
|
24
25
|
|
26
|
+
# @since 0.0.0
|
25
27
|
class CubicPen < Pen
|
26
28
|
POSITION_TYPE_VALUES = [:baseline, :center, :backline]
|
27
29
|
attr_reader :position_type, :background_color, :background_opacity, :dx, :dy
|
@@ -93,14 +95,14 @@ module DYI #:nodoc:
|
|
93
95
|
|
94
96
|
private
|
95
97
|
|
96
|
-
def adjust_z_coordinate(shape)
|
98
|
+
def adjust_z_coordinate(shape)
|
97
99
|
case position_type
|
98
100
|
when :center then shape.translate(-dx / 2, -dy / 2)
|
99
101
|
when :backline then shape.translate(-dx, -dy)
|
100
102
|
end
|
101
103
|
end
|
102
104
|
|
103
|
-
def draw_background_shape(canvas, start_point, end_point, options={})
|
105
|
+
def draw_background_shape(canvas, start_point, end_point, options={})
|
104
106
|
brush.draw_polygon(canvas, start_point, options) {|polygon|
|
105
107
|
polygon.line_to(end_point)
|
106
108
|
polygon.line_to(Coordinate.new(end_point) + Coordinate.new(dx, dy))
|
@@ -109,6 +111,7 @@ module DYI #:nodoc:
|
|
109
111
|
end
|
110
112
|
end
|
111
113
|
|
114
|
+
# @since 0.0.0
|
112
115
|
class CylinderBrush < Brush
|
113
116
|
|
114
117
|
# @since 1.1.0
|
@@ -160,7 +163,7 @@ module DYI #:nodoc:
|
|
160
163
|
|
161
164
|
private
|
162
165
|
|
163
|
-
def body_gradient(canvas)
|
166
|
+
def body_gradient(canvas)
|
164
167
|
gradient = ColorEffect::LinearGradient.new([0,0],[1,0])
|
165
168
|
gradient.add_color(0, color.merge(Color.white, 0.4))
|
166
169
|
gradient.add_color(0.3, color.merge(Color.white, 0.65))
|
@@ -171,13 +174,15 @@ module DYI #:nodoc:
|
|
171
174
|
gradient
|
172
175
|
end
|
173
176
|
|
174
|
-
def top_color
|
177
|
+
def top_color
|
175
178
|
color.merge(Color.white, 0.3)
|
176
179
|
end
|
177
180
|
end
|
178
181
|
|
182
|
+
# @since 0.0.0
|
179
183
|
class ColumnBrush < Brush
|
180
184
|
|
185
|
+
# @since 1.1.0
|
181
186
|
def initialize(options={})
|
182
187
|
self.flank_color = options.delete(:flank_color)
|
183
188
|
self.dy = options.delete(:dy)
|
data/lib/dyi/element.rb
CHANGED
@@ -19,6 +19,7 @@
|
|
19
19
|
# You should have received a copy of the GNU General Public License
|
20
20
|
# along with DYI. If not, see <http://www.gnu.org/licenses/>.
|
21
21
|
|
22
|
+
#
|
22
23
|
module DYI
|
23
24
|
|
24
25
|
# Abstract class that represents a element contained in the image.
|
@@ -108,7 +109,7 @@ module DYI
|
|
108
109
|
# Sets a CSS class attribute.
|
109
110
|
# @param [String] css_class a CSS class attribute
|
110
111
|
# @see {#css_class}
|
111
|
-
# @raise [ArgumentError] parameter
|
112
|
+
# @raise [ArgumentError] parameter 'css_class' is illegal class name
|
112
113
|
def css_class=(css_class)
|
113
114
|
return @css_class = nil if css_class.nil?
|
114
115
|
classes = css_class.to_s.split(/\s+/)
|
@@ -128,9 +129,9 @@ module DYI
|
|
128
129
|
|
129
130
|
# Adds a CSS class.
|
130
131
|
# @param [String] css_class a CSS class name
|
131
|
-
# @return [String, nil] value of parameter
|
132
|
+
# @return [String, nil] value of parameter 'css_class' if successes to add
|
132
133
|
# a class, nil if failures
|
133
|
-
# @raise [ArgumentError] parameter
|
134
|
+
# @raise [ArgumentError] parameter 'css_class' is illegal class name
|
134
135
|
def add_css_class(css_class)
|
135
136
|
if css_class.to_s !~ CLASS_REGEXP
|
136
137
|
raise ArgumentError, "`#{css_class}' is a illegal class-name"
|
@@ -144,7 +145,7 @@ module DYI
|
|
144
145
|
|
145
146
|
# Remove a CSS class.
|
146
147
|
# @param [String] css_class a CSS class name that will be removed
|
147
|
-
# @return [String, nil] value of parameter
|
148
|
+
# @return [String, nil] value of parameter 'css_class' if successes to
|
148
149
|
# remove a class, nil if failures
|
149
150
|
def remove_css_class(css_class)
|
150
151
|
classes = css_classes
|
data/lib/dyi/event.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: UTF-8 -*-
|
2
2
|
|
3
|
-
# Copyright (c) 2009-
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
4
|
#
|
5
5
|
# Author:: Mamoru Yuo
|
6
6
|
#
|
@@ -26,13 +26,13 @@
|
|
26
26
|
#
|
27
27
|
# See the documentation to the DYI::Length class for more details and
|
28
28
|
# examples of usage.
|
29
|
-
#
|
30
|
-
# @since 1.0.0
|
31
29
|
|
30
|
+
#
|
32
31
|
module DYI
|
33
32
|
|
34
33
|
# Class representing a event. The event becomes effective only when it is
|
35
34
|
# output by SVG format.
|
35
|
+
# @since 1.0.0
|
36
36
|
class Event
|
37
37
|
IMPLEMENT_EVENTS = [:focusin,:focusout,:click,:mousedown,:mouseup,
|
38
38
|
:mouseover,:mousemove,:mouseout,:load]
|
data/lib/dyi/font.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: UTF-8 -*-
|
2
2
|
|
3
|
-
# Copyright (c) 2009-
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
4
|
#
|
5
5
|
# Author:: Mamoru Yuo
|
6
6
|
#
|
@@ -19,8 +19,10 @@
|
|
19
19
|
# You should have received a copy of the GNU General Public License
|
20
20
|
# along with DYI. If not, see <http://www.gnu.org/licenses/>.
|
21
21
|
|
22
|
-
|
22
|
+
#
|
23
|
+
module DYI
|
23
24
|
|
25
|
+
# @since 0.0.0
|
24
26
|
class Font
|
25
27
|
IMPLEMENT_ATTRIBUTES = [:font_family, :style, :variant, :weight, :size, :size_adjust, :stretch]
|
26
28
|
VALID_VALUES = {
|
@@ -95,7 +97,7 @@ module DYI #:nodoc:
|
|
95
97
|
@size = Length.new_or_nil(value)
|
96
98
|
end
|
97
99
|
|
98
|
-
def size_adjust=(value)
|
100
|
+
def size_adjust=(value)
|
99
101
|
@size_adjust = value ? value.to_f : nil
|
100
102
|
end
|
101
103
|
|
@@ -119,7 +121,7 @@ module DYI #:nodoc:
|
|
119
121
|
|
120
122
|
class << self
|
121
123
|
|
122
|
-
def new(*args)
|
124
|
+
def new(*args)
|
123
125
|
return args.first if args.size == 1 && args.first.instance_of?(self)
|
124
126
|
super
|
125
127
|
end
|
data/lib/dyi/formatter.rb
CHANGED
data/lib/dyi/formatter/base.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: UTF-8 -*-
|
2
2
|
|
3
|
-
# Copyright (c) 2009-
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
4
|
#
|
5
5
|
# Author:: Mamoru Yuo
|
6
6
|
#
|
@@ -21,9 +21,10 @@
|
|
21
21
|
|
22
22
|
require 'stringio'
|
23
23
|
|
24
|
-
module DYI
|
25
|
-
module Formatter
|
24
|
+
module DYI
|
25
|
+
module Formatter
|
26
26
|
|
27
|
+
# @since 0.0.0
|
27
28
|
class Base
|
28
29
|
|
29
30
|
def initialize(canvas)
|
@@ -88,9 +89,10 @@ module DYI #:nodoc:
|
|
88
89
|
end
|
89
90
|
end
|
90
91
|
|
91
|
-
|
92
|
+
# @since 0.0.0
|
93
|
+
module XmlChar
|
92
94
|
# See http://intertwingly.net/stories/2004/04/14/i18n.html#CleaningWindows
|
93
|
-
CP1252 = {
|
95
|
+
CP1252 = {
|
94
96
|
128 => 8364, # euro sign
|
95
97
|
130 => 8218, # single low-9 quotation mark
|
96
98
|
131 => 402, # latin small letter f with hook
|
@@ -121,14 +123,14 @@ module DYI #:nodoc:
|
|
121
123
|
}
|
122
124
|
|
123
125
|
# See http://www.w3.org/TR/REC-xml/#dt-chardata for details.
|
124
|
-
PREDEFINED = {
|
126
|
+
PREDEFINED = {
|
125
127
|
38 => '&', # ampersand
|
126
128
|
60 => '<', # left angle bracket
|
127
129
|
62 => '>' # right angle bracket
|
128
130
|
}
|
129
131
|
|
130
132
|
# See http://www.w3.org/TR/REC-xml/#dt-chardata for details.
|
131
|
-
ATTR_PREDEFINED = PREDEFINED.merge(
|
133
|
+
ATTR_PREDEFINED = PREDEFINED.merge(
|
132
134
|
34 => '"', # double quote
|
133
135
|
39 => ''' # single quote
|
134
136
|
)
|
@@ -143,19 +145,19 @@ module DYI #:nodoc:
|
|
143
145
|
|
144
146
|
private
|
145
147
|
|
146
|
-
def escape(s)
|
148
|
+
def escape(s)
|
147
149
|
s.to_s.unpack('U*').map {|n| code_to_char(n)}.join # ASCII, UTF-8
|
148
150
|
rescue
|
149
151
|
s.to_s.unpack('C*').map {|n| code_to_char(n)}.join # ISO-8859-1, WIN-1252
|
150
152
|
end
|
151
153
|
|
152
|
-
def attr_escape(s)
|
154
|
+
def attr_escape(s)
|
153
155
|
s.to_s.unpack('U*').map {|n| code_to_char(n, true)}.join # ASCII, UTF-8
|
154
156
|
rescue
|
155
157
|
s.to_s.unpack('C*').map {|n| code_to_char(n, true)}.join # ISO-8859-1, WIN-1252
|
156
158
|
end
|
157
159
|
|
158
|
-
def code_to_char(code, is_attr=false)
|
160
|
+
def code_to_char(code, is_attr=false)
|
159
161
|
code = CP1252[code] || code
|
160
162
|
case code when *VALID
|
161
163
|
(is_attr ? ATTR_PREDEFINED : PREDEFINED)[code] || (code<128 ? code.chr : "&##{code};")
|
@@ -165,8 +167,11 @@ module DYI #:nodoc:
|
|
165
167
|
end
|
166
168
|
end
|
167
169
|
|
170
|
+
# @since 0.0.0
|
168
171
|
class XmlFormatter < Base
|
169
172
|
include XmlChar
|
173
|
+
|
174
|
+
# @since 1.1.0
|
170
175
|
attr_reader :namespace
|
171
176
|
|
172
177
|
def initialize(canvas, options={})
|
@@ -178,18 +183,22 @@ module DYI #:nodoc:
|
|
178
183
|
@namespace = namespace.empty? ? nil : namespace
|
179
184
|
end
|
180
185
|
|
186
|
+
# @since 1.1.0
|
181
187
|
def inline_mode?
|
182
188
|
@inline_mode ? true : false
|
183
189
|
end
|
184
190
|
|
191
|
+
# @since 1.1.0
|
185
192
|
def inline_mode=(boolean)
|
186
193
|
@inline_mode = boolean ? true : false
|
187
194
|
end
|
188
195
|
|
196
|
+
# @since 1.0.0
|
189
197
|
def xml_instruction
|
190
198
|
%Q{<?xml version="1.0" encoding="UTF-8"?>}
|
191
199
|
end
|
192
200
|
|
201
|
+
# @since 1.0.0
|
193
202
|
def stylesheet_instruction(stylesheet)
|
194
203
|
styles = []
|
195
204
|
styles << '<?xml-stylesheet href="'
|
@@ -234,13 +243,13 @@ module DYI #:nodoc:
|
|
234
243
|
|
235
244
|
private
|
236
245
|
|
237
|
-
def puts_line(io, &block)
|
246
|
+
def puts_line(io, &block)
|
238
247
|
io << (' ' * (@indent * @level)) if @indent != 0 && @level != 0
|
239
248
|
yield io
|
240
249
|
io << "\n" if @indent != 0
|
241
250
|
end
|
242
251
|
|
243
|
-
def create_node(io, tag_name, attributes={}, &block)
|
252
|
+
def create_node(io, tag_name, attributes={}, &block)
|
244
253
|
_tag_name = @namespace ? "#{namespace}:#{tag_name}" : tag_name
|
245
254
|
puts_line(io) {
|
246
255
|
io << '<' << _tag_name
|
@@ -253,7 +262,7 @@ module DYI #:nodoc:
|
|
253
262
|
puts_line(io) {io << '</' << _tag_name << '>'}
|
254
263
|
end
|
255
264
|
|
256
|
-
def create_leaf_node(io, tag_name, *attr)
|
265
|
+
def create_leaf_node(io, tag_name, *attr)
|
257
266
|
_tag_name = @namespace ? "#{namespace}:#{tag_name}" : tag_name
|
258
267
|
puts_line(io) {
|
259
268
|
io << '<' << _tag_name
|
@@ -275,7 +284,7 @@ module DYI #:nodoc:
|
|
275
284
|
}
|
276
285
|
end
|
277
286
|
|
278
|
-
def create_nested_nodes(io, &block)
|
287
|
+
def create_nested_nodes(io, &block)
|
279
288
|
@level += 1
|
280
289
|
yield io
|
281
290
|
ensure
|
@@ -283,7 +292,7 @@ module DYI #:nodoc:
|
|
283
292
|
end
|
284
293
|
|
285
294
|
# @since 1.0.0
|
286
|
-
def create_cdata_node(io, tag_name, attributes={}, &block)
|
295
|
+
def create_cdata_node(io, tag_name, attributes={}, &block)
|
287
296
|
_tag_name = @namespace ? "#{namespace}:#{tag_name}" : tag_name
|
288
297
|
puts_line(io) {
|
289
298
|
io << '<' << _tag_name
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: UTF-8 -*-
|
2
2
|
|
3
|
-
# Copyright (c) 2009-
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
4
|
#
|
5
5
|
# Author:: Mamoru Yuo
|
6
6
|
#
|
@@ -22,9 +22,10 @@
|
|
22
22
|
require 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
|
23
23
|
require 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
|
24
24
|
|
25
|
-
module DYI
|
26
|
-
module Formatter
|
25
|
+
module DYI
|
26
|
+
module Formatter
|
27
27
|
|
28
|
+
# @since 0.0.0
|
28
29
|
class EmfFormatter < Base
|
29
30
|
|
30
31
|
def save(file_name, options={})
|
@@ -206,7 +207,7 @@ module DYI #:nodoc:
|
|
206
207
|
|
207
208
|
private
|
208
209
|
=begin
|
209
|
-
def pre_render(shape)
|
210
|
+
def pre_render(shape)
|
210
211
|
attributes = {}
|
211
212
|
style = create_style(shape)
|
212
213
|
transform = create_transform(shape)
|
@@ -217,7 +218,7 @@ module DYI #:nodoc:
|
|
217
218
|
attributes
|
218
219
|
end
|
219
220
|
=end
|
220
|
-
def set_transform(shape, graphics, &block)
|
221
|
+
def set_transform(shape, graphics, &block)
|
221
222
|
shape.transform.each do |tr|
|
222
223
|
case tr.first
|
223
224
|
when :translate
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: UTF-8 -*-
|
2
2
|
|
3
|
-
# Copyright (c) 2009-
|
3
|
+
# Copyright (c) 2009-2012 Sound-F Co., Ltd. All rights reserved.
|
4
4
|
#
|
5
5
|
# Author:: Mamoru Yuo
|
6
6
|
#
|
@@ -21,9 +21,10 @@
|
|
21
21
|
|
22
22
|
require 'nkf'
|
23
23
|
|
24
|
-
module DYI
|
25
|
-
module Formatter
|
24
|
+
module DYI
|
25
|
+
module Formatter
|
26
26
|
|
27
|
+
# @since 0.0.0
|
27
28
|
class EpsFormatter < Base
|
28
29
|
|
29
30
|
def header_comment
|
@@ -245,17 +246,17 @@ module DYI #:nodoc:
|
|
245
246
|
|
246
247
|
private
|
247
248
|
|
248
|
-
def puts_line(io, *args)
|
249
|
+
def puts_line(io, *args)
|
249
250
|
io << args.flatten.join(' ') << "\n"
|
250
251
|
end
|
251
252
|
|
252
|
-
def command_block(io)
|
253
|
+
def command_block(io)
|
253
254
|
puts_line(io, 'gsave')
|
254
255
|
yield
|
255
256
|
puts_line(io, 'grestore')
|
256
257
|
end
|
257
258
|
|
258
|
-
def stroke_path(io, shape)
|
259
|
+
def stroke_path(io, shape)
|
259
260
|
cmds = []
|
260
261
|
if shape.respond_to?(:painting) && (attrs = shape.painting)
|
261
262
|
cmds.push([attrs.stroke, 'setrgbcolor']) if attrs.stroke
|
@@ -274,13 +275,13 @@ module DYI #:nodoc:
|
|
274
275
|
}
|
275
276
|
end
|
276
277
|
|
277
|
-
def stroke_current_path(io, shape)
|
278
|
+
def stroke_current_path(io, shape)
|
278
279
|
stroke_path(io, shape) {
|
279
280
|
puts_line(io, 'stroke')
|
280
281
|
} if shape.painting.stroke
|
281
282
|
end
|
282
283
|
|
283
|
-
def fill_path(io, shape)
|
284
|
+
def fill_path(io, shape)
|
284
285
|
cmds = []
|
285
286
|
if shape.respond_to?(:painting) && (attrs = shape.painting)
|
286
287
|
if attrs.fill
|
@@ -300,13 +301,13 @@ module DYI #:nodoc:
|
|
300
301
|
}
|
301
302
|
end
|
302
303
|
|
303
|
-
def fill_current_path(io, shape)
|
304
|
+
def fill_current_path(io, shape)
|
304
305
|
fill_path(io, shape) {
|
305
306
|
puts_line(io, shape.painting.fill_rule == 'evenodd' ? 'eofill' : 'fill')
|
306
307
|
} if shape.painting.fill
|
307
308
|
end
|
308
309
|
|
309
|
-
def linecap_to_num(linecap)
|
310
|
+
def linecap_to_num(linecap)
|
310
311
|
case linecap
|
311
312
|
when 'butt' then 0
|
312
313
|
when 'round' then 1
|
@@ -314,7 +315,7 @@ module DYI #:nodoc:
|
|
314
315
|
end
|
315
316
|
end
|
316
317
|
|
317
|
-
def linejoin_to_num(linejoin)
|
318
|
+
def linejoin_to_num(linejoin)
|
318
319
|
case linejoin
|
319
320
|
when 'miter' then 0
|
320
321
|
when 'round' then 1
|
@@ -322,7 +323,7 @@ module DYI #:nodoc:
|
|
322
323
|
end
|
323
324
|
end
|
324
325
|
|
325
|
-
def write_lines(io, points)
|
326
|
+
def write_lines(io, points)
|
326
327
|
puts_line(io, points.first.x, points.first.y, 'moveto')
|
327
328
|
points[1..-1].each do |pt|
|
328
329
|
pt = Coordinate.new(pt)
|
@@ -360,7 +361,7 @@ module DYI #:nodoc:
|
|
360
361
|
cmds
|
361
362
|
end
|
362
363
|
|
363
|
-
def transform_path(io, shape)
|
364
|
+
def transform_path(io, shape)
|
364
365
|
if shape.respond_to?(:transform) && !(tr = shape.transform).empty?
|
365
366
|
tr.each do |t|
|
366
367
|
case t[0]
|
@@ -381,7 +382,7 @@ module DYI #:nodoc:
|
|
381
382
|
end
|
382
383
|
end
|
383
384
|
|
384
|
-
def clip_path(io, shape)
|
385
|
+
def clip_path(io, shape)
|
385
386
|
if shape.respond_to?(:clipping) && shape.clipping
|
386
387
|
shape.clipping.each_shapes do |shape, rule|
|
387
388
|
s = shape.clone
|