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 -