lib/rvg/transformable.rb in rmagick-2.15.3 vs lib/rvg/transformable.rb in rmagick-2.15.4
- old
+ new
@@ -1,126 +1,126 @@
#--
# $Id: transformable.rb,v 1.5 2009/02/28 23:52:28 rmagick Exp $
# Copyright (C) 2009 Timothy P. Hunter
#++
-
module Magick
- class RVG
- # Transforms is an Array with a deep_copy method.
- # During unit-testing it also has a deep_equal method.
- class Transforms < Array #:nodoc:
- def deep_copy(h=nil)
- copy = self.class.new
- each { |transform| copy << [transform[0], transform[1].dup] }
- copy
- end
- end # class Transform
+ class RVG
+ # Transforms is an Array with a deep_copy method.
+ # During unit-testing it also has a deep_equal method.
+ class Transforms < Array #:nodoc:
+ def deep_copy(h = nil)
+ copy = self.class.new
+ each { |transform| copy << [transform[0], transform[1].dup] }
+ copy
+ end
+ end # class Transform
- # Transformations are operations on the coordinate system.
- # All the transformations defined within a container (an RVG object
- # or a group) are applied before drawing any shapes or text.
- # All transformations are applied in the order they were
- # defined. <em>Note:</em> This means that
- # g.translate(10,20).scale(2)
- # is not the same as
- # g.scale(2).translate(10,20)
- module Transformable
- private
+ # Transformations are operations on the coordinate system.
+ # All the transformations defined within a container (an RVG object
+ # or a group) are applied before drawing any shapes or text.
+ # All transformations are applied in the order they were
+ # defined. <em>Note:</em> This means that
+ # g.translate(10,20).scale(2)
+ # is not the same as
+ # g.scale(2).translate(10,20)
+ module Transformable
+ private
- # Apply transforms in the same order they were specified!
- def add_transform_primitives(gc)
- @transforms.each { |transform| gc.__send__(transform[0], *transform[1]) }
- end
+ # Apply transforms in the same order they were specified!
+ def add_transform_primitives(gc)
+ @transforms.each { |transform| gc.__send__(transform[0], *transform[1]) }
+ end
- def initialize(*args, &block)
- super()
- @transforms = Transforms.new
- end
+ def initialize(*args, &block)
+ super()
+ @transforms = Transforms.new
+ end
- public
+ public
- # Applies the transformation matrix [sx, rx, ry, sy, tx, ty]
- def matrix(sx, rx, ry, sy, tx, ty)
- begin
- @transforms << [:affine, [Float(sx), Float(rx), Float(ry), Float(sy), Float(tx), Float(ty)]]
- rescue ArgumentError
- raise ArgumentError, "arguments must be convertable to float (got #{sx.class}, #{rx.class}, #{ry.class}, #{sy.class}, #{sx.class}, #{sx.class}, #{tx.class}, #{ty.class})"
- end
- yield(self) if block_given?
- self
- end
+ # Applies the transformation matrix [sx, rx, ry, sy, tx, ty]
+ def matrix(sx, rx, ry, sy, tx, ty)
+ begin
+ @transforms << [:affine, [Float(sx), Float(rx), Float(ry), Float(sy), Float(tx), Float(ty)]]
+ rescue ArgumentError
+ raise ArgumentError, "arguments must be convertable to float (got #{sx.class}, #{rx.class}, #{ry.class}, #{sy.class}, #{sx.class}, #{sx.class}, #{tx.class}, #{ty.class})"
+ end
+ yield(self) if block_given?
+ self
+ end
- # Add <tt>tx</tt> to all x-coordinates and <tt>ty</tt>
- # to all y-coordinates. If <tt>ty</tt> is omitted it defaults
- # to <tt>tx</tt>.
- def translate(tx, ty=nil)
- ty ||= tx
- begin
- @transforms << [:translate, [Float(tx), Float(ty)]]
- rescue ArgumentError
- raise ArgumentError, "arguments must be convertable to float (got #{tx.class}, #{ty.class})"
- end
- yield(self) if block_given?
- self
- end
+ # Add <tt>tx</tt> to all x-coordinates and <tt>ty</tt>
+ # to all y-coordinates. If <tt>ty</tt> is omitted it defaults
+ # to <tt>tx</tt>.
+ def translate(tx, ty = nil)
+ ty ||= tx
+ begin
+ @transforms << [:translate, [Float(tx), Float(ty)]]
+ rescue ArgumentError
+ raise ArgumentError, "arguments must be convertable to float (got #{tx.class}, #{ty.class})"
+ end
+ yield(self) if block_given?
+ self
+ end
- # Multiply the x-coordinates by <tt>sx</tt> and the y-coordinates
- # by <tt>sy</tt>. If <tt>sy</tt> is omitted it defaults to <tt>sx</tt>.
- def scale(sx, sy=nil)
- sy ||= sx
- begin
- @transforms << [:scale, [Float(sx), Float(sy)]]
- rescue ArgumentError
- raise ArgumentError, "arguments must be convertable to float (got #{sx.class}, #{sy.class})"
- end
- yield(self) if block_given?
- self
- end
+ # Multiply the x-coordinates by <tt>sx</tt> and the y-coordinates
+ # by <tt>sy</tt>. If <tt>sy</tt> is omitted it defaults to <tt>sx</tt>.
+ def scale(sx, sy = nil)
+ sy ||= sx
+ begin
+ @transforms << [:scale, [Float(sx), Float(sy)]]
+ rescue ArgumentError
+ raise ArgumentError, "arguments must be convertable to float (got #{sx.class}, #{sy.class})"
+ end
+ yield(self) if block_given?
+ self
+ end
- # This method can take either of two argument lists:
- # [rotate(angle)] rotate by <tt>angle</tt> degrees
- # [rotate(angle, cx, cy)] rotate by <tt>angle</tt> degrees about
- # the point [<tt>cx</tt>, <tt>cy</tt>].
- def rotate(angle, *args)
- begin
- case args.length
- when 0
- @transforms << [:rotate, [Float(angle)]]
- when 2
- cx, cy = Float(args[0]), Float(args[1])
- @transforms << [:translate, [cx, cy]]
- @transforms << [:rotate, [angle]]
- @transforms << [:translate, [-cx, -cy]]
- else
- fail ArgumentError, "wrong number of arguments (#{args.length} for 1 or 3)"
- end
- rescue ArgumentError
- raise ArgumentError, "arguments must be convertable to float (got #{[angle, *args].collect {|a| a.class}.join(', ')})"
- end
- yield(self) if block_given?
- self
- end
+ # This method can take either of two argument lists:
+ # [rotate(angle)] rotate by <tt>angle</tt> degrees
+ # [rotate(angle, cx, cy)] rotate by <tt>angle</tt> degrees about
+ # the point [<tt>cx</tt>, <tt>cy</tt>].
+ def rotate(angle, *args)
+ begin
+ case args.length
+ when 0
+ @transforms << [:rotate, [Float(angle)]]
+ when 2
+ cx = Float(args[0])
+ cy = Float(args[1])
+ @transforms << [:translate, [cx, cy]]
+ @transforms << [:rotate, [angle]]
+ @transforms << [:translate, [-cx, -cy]]
+ else
+ fail ArgumentError, "wrong number of arguments (#{args.length} for 1 or 3)"
+ end
+ rescue ArgumentError
+ raise ArgumentError, "arguments must be convertable to float (got #{[angle, *args].collect {|a| a.class}.join(', ')})"
+ end
+ yield(self) if block_given?
+ self
+ end
- # Skew the X-axis by <tt>angle</tt> degrees.
- def skewX(angle)
- begin
- @transforms << [:skewx, [Float(angle)]]
- rescue ArgumentError
- raise ArgumentError, "argument must be convertable to float (got #{angle.class})"
- end
- yield(self) if block_given?
- self
- end
+ # Skew the X-axis by <tt>angle</tt> degrees.
+ def skewX(angle)
+ begin
+ @transforms << [:skewx, [Float(angle)]]
+ rescue ArgumentError
+ raise ArgumentError, "argument must be convertable to float (got #{angle.class})"
+ end
+ yield(self) if block_given?
+ self
+ end
- # Skew the Y-axis by <tt>angle</tt> degrees.
- def skewY(angle)
- begin
- @transforms << [:skewy, [Float(angle)]]
- rescue ArgumentError
- raise ArgumentError, "argument must be convertable to float (got #{angle.class})"
- end
- yield(self) if block_given?
- self
- end
- end # module Transformable
- end # class RVG
+ # Skew the Y-axis by <tt>angle</tt> degrees.
+ def skewY(angle)
+ begin
+ @transforms << [:skewy, [Float(angle)]]
+ rescue ArgumentError
+ raise ArgumentError, "argument must be convertable to float (got #{angle.class})"
+ end
+ yield(self) if block_given?
+ self
+ end
+ end # module Transformable
+ end # class RVG
end # module Magick