lib/shoes/swt/rect_painter.rb in shoes-swt-4.0.0.pre6 vs lib/shoes/swt/rect_painter.rb in shoes-swt-4.0.0.pre7
- old
+ new
@@ -1,23 +1,41 @@
class Shoes
module Swt
class RectPainter < Common::Painter
- def fill(graphics_context)
- graphics_context.fill_round_rectangle(@obj.element_left,
- @obj.element_top,
- @obj.element_width,
- @obj.element_height,
- @obj.corners * 2,
- @obj.corners * 2)
+ def fill(gc)
+ gc.fill_round_rectangle(@obj.translate_left + @obj.element_left + inset,
+ @obj.translate_top + @obj.element_top + inset,
+ @obj.element_width - inset * 2,
+ @obj.element_height - inset * 2,
+ @obj.corners * 2,
+ @obj.corners * 2)
end
def draw(gc)
stroke_width = gc.get_line_width
- gc.draw_round_rectangle(@obj.element_left + stroke_width / 2,
- @obj.element_top + stroke_width / 2,
+ gc.draw_round_rectangle(@obj.translate_left + @obj.element_left + stroke_width / 2,
+ @obj.translate_top + @obj.element_top + stroke_width / 2,
@obj.element_width - stroke_width,
@obj.element_height - stroke_width,
@obj.corners * 2, @obj.corners * 2)
+ end
+
+ def inset
+ # If drawing a stroke around the shape, inset the fill so the draw
+ # isn't inside bounds of fill because of integer division remainders.
+ inset_fill? ? 1 : 0
+ end
+
+ def inset_fill?
+ rounded? && strokewidth?
+ end
+
+ def rounded?
+ (@obj.corners || 0) > 0
+ end
+
+ def strokewidth?
+ (@obj.dsl.style[:strokewidth] || 0) > 0
end
end
end
end