lib/shoes/swt/star.rb in shoes-swt-4.0.0.pre6 vs lib/shoes/swt/star.rb in shoes-swt-4.0.0.pre7
- old
+ new
@@ -6,10 +6,11 @@
include Common::Stroke
include Common::Clickable
include Common::PainterUpdatesPosition
include Common::Visibility
include Common::Remove
+ include Common::Translate
include ::Shoes::BackendDimensionsDelegations
def_delegators :dsl, :angle, :outer, :inner, :points
attr_reader :dsl, :app, :transform, :container
@@ -17,56 +18,11 @@
def initialize(dsl, app)
@dsl = dsl
@app = app
@container = @app.real
- @painter = Painter.new(self)
+ @painter = StarPainter.new(self)
@app.add_paint_listener @painter
- end
-
- class Painter < Common::Painter
- def fill(gc)
- gc.fillPolygon make_polygon(@obj)
- end
-
- def draw(gc)
- gc.drawPolygon make_polygon(@obj)
- end
-
- def make_polygon(obj)
- outer, inner, points, left, top = obj.outer, obj.inner, obj.points,
- obj.element_left, obj.element_top
- @polygon = []
- add_edge(left, top + outer)
- (1..points * 2).each do |i|
- make_edge(i, left, top, outer, inner, points)
- end
-
- translate_to_proper_start(obj)
-
- @polygon
- end
-
- def add_edge(start, finish)
- @polygon << start << finish
- end
-
- def make_edge(i, left, top, outer, inner, points)
- r = (i % 2 == 0) ? outer : inner
- angle = i * ::Math::PI / points
- add_edge(left + r * ::Math.sin(angle),
- top + r * ::Math.cos(angle))
- end
-
- # Prior logic centers start on left/top, so translate to where we
- # really want to start.
- def translate_to_proper_start(obj)
- return if obj.dsl.style[:center]
-
- @polygon.map! do |x|
- x + obj.element_width / 2
- end
- end
end
end
end
end