class Magick::Geometry

def initialize(width=nil, height=nil, x=nil, y=nil, flag=nil)

def initialize(width=nil, height=nil, x=nil, y=nil, flag=nil)
    raise(ArgumentError, "width set to #{width.to_s}") if width.is_a? GeometryValue
    raise(ArgumentError, "height set to #{height.to_s}") if height.is_a? GeometryValue
    raise(ArgumentError, "x set to #{x.to_s}") if x.is_a? GeometryValue
    raise(ArgumentError, "y set to #{y.to_s}") if y.is_a? GeometryValue
    # Support floating-point width and height arguments so Geometry
    # objects can be used to specify Image#density= arguments.
    if width == nil
        @width = 0
    elsif width.to_f >= 0.0
        @width = width.to_f
    else
        Kernel.raise ArgumentError, "width must be >= 0: #{width}"
    end
    if height == nil
        @height = 0
    elsif height.to_f >= 0.0
        @height = height.to_f
    else
        Kernel.raise ArgumentError, "height must be >= 0: #{height}"
    end
    @x    = x.to_i
    @y    = y.to_i
    @flag = flag
end

def to_s

Convert object to a geometry string
def to_s
    str = ''
    if @width > 0
      fmt = @width.truncate == @width ? "%d" : "%.2f"
      str << sprintf(fmt, @width)
      str << '%' if @flag == PercentGeometry
    end
    if (@width > 0 && @flag != PercentGeometry) || (@height > 0)
      str << 'x'
    end
    if @height > 0
      fmt = @height.truncate == @height ? "%d" : "%.2f"
      str << sprintf(fmt, @height)
      str << '%' if @flag == PercentGeometry
    end
    str << sprintf("%+d%+d", @x, @y) if (@x != 0 || @y != 0)
    if @flag != PercentGeometry
      str << FLAGS[@flag.to_i]
    end
    str
end