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_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_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