class Glimmer::Swing::ShapeProxy

Proxy for Java2D shape objects

Follows the Proxy Design Pattern

Attributes

args[R]
block[R]
keyword[R]
original[R]
parent_proxy[R]

Public Class Methods

create(parent, keyword, *args, &block) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 37
def create(parent, keyword, *args, &block)
  shape_proxy_class(keyword).new(parent, keyword, *args, &block)
end
exist?(keyword) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 33
def exist?(keyword)
  !!shape_class(keyword)
end
flyweight_shape_class() click to toggle source

Flyweight Design Pattern memoization cache. Can be cleared if memory is needed.

# File lib/glimmer/swing/shape_proxy.rb, line 96
def flyweight_shape_class
  @flyweight_shape_class ||= {}
end
keyword(shape_proxy_class) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 59
def keyword(shape_proxy_class)
  shape_proxy_class.to_s.underscore.sub(/_proxy$/, '')
end
new(parent, keyword, *args, &block) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 103
def initialize(parent, keyword, *args, &block)
  @parent_proxy = parent
  @keyword = keyword
  @args = args
  @block = block
  build
  post_add_content if @block.nil?
end
shape_class(keyword) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 71
def shape_class(keyword)
  unless flyweight_shape_class.keys.include?(keyword)
    begin
      shape_class_name = shape_class_symbol(keyword).to_s
      shape_class = eval("#{shape_class_name}2D::Double") rescue eval(shape_class_name)
      unless shape_class.ancestors.include?(Java::JavaAwt::Shape)
        shape_class = shape_class_manual_entries[keyword]
        if shape_class.nil?
          Glimmer::Config.logger.debug {"Class #{shape_class} matching #{keyword} is not a subclass of java.awt.Component"}
          return nil
        end
      end
      flyweight_shape_class[keyword] = shape_class
    rescue SyntaxError, NameError => e
      Glimmer::Config.logger.debug {e.full_message}
      nil
    rescue => e
      Glimmer::Config.logger.debug {e.full_message}
      nil
    end
  end
  flyweight_shape_class[keyword]
end
shape_class_manual_entries() click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 63
def shape_class_manual_entries
  # add mappings for any classes (minus the namespace) that conflict with standard Ruby classes
  {
    # example:
    # 'date_time' => Java::OrgEclipseSwtWidgets::DateTime
  }
end
shape_class_symbol(keyword) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 55
def shape_class_symbol(keyword)
  keyword.camelcase(:upper).to_sym
end
shape_proxy_class(keyword) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 41
def shape_proxy_class(keyword)
  begin
    class_name = shape_proxy_class_symbol(keyword)
    Glimmer::Swing::ShapeProxy.const_get(class_name)
  rescue => e
    Glimmer::Config.logger.debug e.full_message
    Glimmer::Swing::ShapeProxy
  end
end
shape_proxy_class_symbol(keyword) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 51
def shape_proxy_class_symbol(keyword)
  "#{keyword.camelcase(:upper)}Proxy".to_sym
end

Public Instance Methods

content(&block) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 145
def content(&block)
  Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::Swing::ShapeExpression.new, @keyword, &block)
end
draw_color()
Alias for: draw_paint
draw_color=(*args)
Alias for: draw_paint=
draw_paint() click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 162
def draw_paint
  @draw_paint
end
Also aliased as: draw_color
draw_paint=(*args) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 157
def draw_paint=(*args)
  @draw_paint = Color.new(*args)
end
Also aliased as: draw_color=
fill_color()
Alias for: fill_paint
fill_color=(*args)
Alias for: fill_paint=
fill_paint() click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 172
def fill_paint
  @fill_paint
end
Also aliased as: fill_color
fill_paint=(*args) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 167
def fill_paint=(*args)
  @fill_paint = Color.new(*args)
end
Also aliased as: fill_color=
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/glimmer/swing/shape_proxy.rb, line 131
def method_missing(method_name, *args, &block)
  if @original.respond_to?("set_#{method_name}", true) && !args.empty?
    send_to_original("set_#{method_name}", *args, &block)
  elsif @original.respond_to?(method_name, true)
    send_to_original(method_name, *args, &block)
  else
    super
  end
end
post_add_content() click to toggle source

Subclasses may override to perform post add_content work (normally must call super)

# File lib/glimmer/swing/shape_proxy.rb, line 113
def post_add_content
  @parent_proxy&.post_initialize_child(self)
end
post_initialize_child(child) click to toggle source

Subclasses may override to perform post initialization work on an added child (normally must also call super)

# File lib/glimmer/swing/shape_proxy.rb, line 118
def post_initialize_child(child)
  @original.append(child.original, false) if @original&.is_a?(Path2D) && child.is_a?(ShapeProxy)
end
respond_to?(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/glimmer/swing/shape_proxy.rb, line 122
def respond_to?(method_name, *args, &block)
  respond_to_original?(method_name, *args, &block) ||
    super(method_name, true)
end
respond_to_original?(method_name, *args, &block) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 127
def respond_to_original?(method_name, *args, &block)
  @original.respond_to?(method_name, true) || @original.respond_to?("set_#{method_name}", true)
end
send_to_original(method_name, *args, &block) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 141
def send_to_original(method_name, *args, &block)
  @original.send(method_name, *normalize_args(args), &block)
end
stroke() click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 153
def stroke
  @stroke
end
stroke=(*args) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 149
def stroke=(*args)
  @stroke = BasicStroke.new(*args)
end

Private Instance Methods

build() click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 179
def build
  @original = ShapeProxy.shape_class(keyword).new(*normalize_args(args))
end
normalize_args(args) click to toggle source
# File lib/glimmer/swing/shape_proxy.rb, line 183
def normalize_args(args)
  args.map do |arg|
    arg.is_a?(ShapeProxy) ? arg.original : arg
  end
end