lib/image_voodoo/awt/shapes.rb in image_voodoo-0.8.8 vs lib/image_voodoo/awt/shapes.rb in image_voodoo-0.8.9
- old
+ new
@@ -1,8 +1,45 @@
class ImageVoodoo
+ # (Experimental) An attempt at some primitive drawing in images.
module Shapes
+ # FIXME: if image has alpha values the border shows through since it is
+ # a solid fill.
##
+ # *AWT* (experimental) Add a border to the image and yield/return a new
+ # image. The following options are supported:
+ # - width: How thick is the border (default: 3)
+ # - color: Which color is the border (in rrggbb hex value)
+ # - style: etched, raised, plain (default: plain)
+ #
+ def add_border(options = {})
+ border_width = options[:width].to_i || 2
+ new_width, new_height = width + 2*border_width, height + 2*border_width
+ target = paint(BufferedImage.new(new_width, new_height, color_type)) do |g|
+ paint_border(g, new_width, new_height, options[:color])
+ g.draw_image(@src, nil, border_width, border_width)
+ end
+ block_given? ? yield(target) : target
+ end
+
+ def paint_border(g, new_width, new_height, options)
+ g.color = hex_to_color(options[:color])
+ fill_method, *args = border_style(options)
+ g.send fill_method, 0, 0, new_width, new_height, *args
+ end
+
+ def border_style(options)
+ case (options[:style] || "").to_s
+ when "raised" then
+ [:fill3DRect, true]
+ when "etched" then
+ [:fill3DRect, false]
+ else
+ [:fill_rect]
+ end
+ end
+
+ ##
# *AWT* Draw a square
#
def square(x, y, dim, rgb, fill=true)
square_rounded(x, y, dim, rgb, 0, fill)
end
@@ -16,18 +53,18 @@
##
# *AWT* Draw a rounded square
#
def square_rounded(x, y, dim, rgb, arc_width=0, fill=true)
- rect_rounded(x,y, dim, dim, rgb, arc_width, arc_width, fill)
+ rect_rounded(x, y, dim, dim, rgb, arc_width, arc_width, fill)
end
##
# *AWT* Draw a rounded rectangle
#
def rect_rounded(x, y, width, height, rgb, arc_width=0, arc_height=0, fill=true)
- as_color(ImageVoodoo.hex_to_color(rgb)) do |g|
+ as_color(hex_to_color(rgb)) do |g|
if fill
g.fill_round_rect x, y, width, height, arc_width, arc_height
else
g.draw_round_rect x, y, width, height, arc_width, arc_height
end
@@ -42,6 +79,5 @@
g.color = old_color
end
end
end
end
-