Class Magick::Geometry
In: lib/RMagick.rb
Parent: Object
Enum GeometryValue Stylable RVG\n[lib/rvg/clippath.rb\nlib/rvg/container.rb\nlib/rvg/deep_equal.rb\nlib/rvg/describable.rb\nlib/rvg/embellishable.rb\nlib/rvg/misc.rb\nlib/rvg/paint.rb\nlib/rvg/pathdata.rb\nlib/rvg/rvg.rb\nlib/rvg/stretchable.rb\nlib/rvg/stylable.rb\nlib/rvg/text.rb\nlib/rvg/transformable.rb\nlib/rvg/units.rb] Transformable Stretchable Embellishable Describable Duplicatable Comparable Image ImageList Enumerable Geometry OptionalMethodArguments HatchFill Draw lib/RMagick.rb lib/rvg/misc.rb ObjectData Application Pre_ObjectData_Descriptor Envelope Post_ObjectData_Descriptor IPTC Magick dot/m_14_0.png

Methods

from_s   new   to_s  

Constants

FLAGS = ['', '%', '!', '<', '>', '@', '^']
RFLAGS = { '%' => PercentGeometry, '!' => AspectGeometry, '<' => LessGeometry, '>' => GreaterGeometry, '@' => AreaGeometry, '^' => MinimumGeometry }
W = /(\d+\.\d+%?)|(\d*%?)/   Construct an object from a geometry string
H = W
X = /(?:([-+]\d+))?/
Y = X
RE = /\A#{W}x?#{H}#{X}#{Y}([!<>@\^]?)\Z/

Attributes

flag  [RW] 
height  [RW] 
width  [RW] 
x  [RW] 
y  [RW] 

Public Class methods

[Source]

     # File lib/RMagick.rb, line 89
 89:     def Geometry.from_s(str)
 90: 
 91:         m = RE.match(str)
 92:         if m
 93:             width  = (m[1] || m[2]).to_f
 94:             height = (m[3] || m[4]).to_f
 95:             x      = m[5].to_i
 96:             y      = m[6].to_i
 97:             flag   = RFLAGS[m[7]]
 98:         else
 99:             Kernel.raise ArgumentError, "invalid geometry format"
100:         end
101:         if str['%']
102:           flag = PercentGeometry
103:         end
104:         Geometry.new(width, height, x, y, flag)
105:     end

[Source]

    # File lib/RMagick.rb, line 53
53:     def initialize(width=nil, height=nil, x=nil, y=nil, flag=nil)
54:         raise(ArgumentError, "width set to #{width.to_s}") if width.is_a? GeometryValue
55:         raise(ArgumentError, "height set to #{height.to_s}") if height.is_a? GeometryValue
56:         raise(ArgumentError, "x set to #{x.to_s}") if x.is_a? GeometryValue
57:         raise(ArgumentError, "y set to #{y.to_s}") if y.is_a? GeometryValue
58: 
59:         # Support floating-point width and height arguments so Geometry
60:         # objects can be used to specify Image#density= arguments.
61:         if width == nil
62:             @width = 0
63:         elsif width.to_f >= 0.0
64:             @width = width.to_f
65:         else
66:             Kernel.raise ArgumentError, "width must be >= 0: #{width}"
67:         end
68:         if height == nil
69:             @height = 0
70:         elsif height.to_f >= 0.0
71:             @height = height.to_f
72:         else
73:             Kernel.raise ArgumentError, "height must be >= 0: #{height}"
74:         end
75: 
76:         @x    = x.to_i
77:         @y    = y.to_i
78:         @flag = flag
79: 
80:     end

Public Instance methods

Convert object to a geometry string

[Source]

     # File lib/RMagick.rb, line 108
108:     def to_s
109:         str = ''
110:         if @width > 0
111:           fmt = @width.truncate == @width ? "%d" : "%.2f"
112:           str << sprintf(fmt, @width)
113:           str << '%' if @flag == PercentGeometry
114:         end
115: 
116:         if (@width > 0 && @flag != PercentGeometry) || (@height > 0)
117:           str << 'x'
118:         end
119: 
120:         if @height > 0
121:           fmt = @height.truncate == @height ? "%d" : "%.2f"
122:           str << sprintf(fmt, @height)
123:           str << '%' if @flag == PercentGeometry
124:         end
125:         str << sprintf("%+d%+d", @x, @y) if (@x != 0 || @y != 0)
126:         if @flag != PercentGeometry
127:           str << FLAGS[@flag.to_i]
128:         end
129:         str
130:     end

[Validate]