Sha256: a12dfb714ea24d709bf9bf65997cf9c344fd4b8dff20df44d98c8875827101ba

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

class Shoes
  module Swt
    class Star
      extend Forwardable
      include Common::Fill
      include Common::Stroke
      include Common::Clickable
      include Common::PainterUpdatesPosition
      include Common::Toggle
      include Common::Clear
      include ::Shoes::BackendDimensionsDelegations

      def_delegators :dsl, :angle, :outer, :inner, :points

      attr_reader :dsl, :app, :transform, :container

      def initialize(dsl, app, &blk)
        @dsl = dsl
        @app = app
        @container = @app.real

        @painter = Painter.new(self)
        @app.add_paint_listener @painter
        clickable blk if blk
      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 = []
          polygon << left << (top + outer)
          (1..points*2).each do |i|
            angle =  i * ::Math::PI / points
            r = (i % 2 == 0) ? outer : inner
            polygon << (left + r * ::Math.sin(angle)) << (top + r * ::Math.cos(angle))
          end
          polygon
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shoes-4.0.0.pre1 lib/shoes/swt/star.rb