Class: Glimmer::SWT::ImageProxy
- Inherits:
-
Object
- Object
- Glimmer::SWT::ImageProxy
- Includes:
- Custom::Drawable, Properties
- Defined in:
- lib/glimmer/swt/image_proxy.rb
Overview
Proxy for org.eclipse.swt.graphics.Image
Invoking ‘#swt_image` returns the SWT Image object wrapped by this proxy
Follows the Proxy Design Pattern
Instance Attribute Summary collapse
-
#file_path ⇒ Object
readonly
Returns the value of attribute file_path.
-
#image_data ⇒ Object
readonly
Returns the value of attribute image_data.
-
#jar_file_path ⇒ Object
readonly
Returns the value of attribute jar_file_path.
-
#swt_image ⇒ Object
readonly
Returns the value of attribute swt_image.
Attributes included from Custom::Drawable
#image_double_buffered, #requires_shape_disposal
Class Method Summary collapse
Instance Method Summary collapse
- #disposed? ⇒ Boolean
- #gc ⇒ Object
- #get_attribute(attribute_name) ⇒ Object
- #has_attribute?(attribute_name, *args) ⇒ Boolean
-
#initialize(*args, &content) ⇒ ImageProxy
constructor
Initializes a proxy for an SWT Image object.
- #input_stream ⇒ Object
- #method_missing(method, *args, &block) ⇒ Object
- #post_add_content ⇒ Object
- #reset_gc ⇒ Object
- #respond_to?(method, *args, &block) ⇒ Boolean
- #scale_to(width, height) ⇒ Object
- #set_attribute(attribute_name, *args) ⇒ Object
- #shape(parent_proxy = nil, args = nil) ⇒ Object
Methods included from Properties
attribute_getter, #attribute_getter, attribute_setter, #attribute_setter, normalized_attribute, #normalized_attribute, ruby_attribute_getter, #ruby_attribute_setter, ruby_attribute_setter
Methods included from Custom::Drawable
#add_shape, #clear_shapes, #deregister_shape_painting, #image_buffered_shapes, #setup_shape_painting, #shapes
Constructor Details
#initialize(*args, &content) ⇒ ImageProxy
Initializes a proxy for an SWT Image object
Takes the same args as the SWT Image class Alternatively, takes a file path string or a uri:classloader file path string (generated by JRuby when invoking ‘File.expand_path` inside a JAR file) and returns an image object. Last but not least, it could serve as a parent for nesting shapes underneath to build an image with the Canvas Shape DSL
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/glimmer/swt/image_proxy.rb', line 57 def initialize(*args, &content) @args = args @parent_proxy = nil if @args.first.is_a?(WidgetProxy) @parent_proxy = @args.shift @parent = @parent_proxy. end = @args.last.is_a?(Hash) ? @args.delete_at(-1) : {} [:swt_image] = @args.first if @args.size == 1 && @args.first.is_a?(Image) @file_path = @args.first if @args.first.is_a?(String) @args = @args.first if @args.size == 1 && @args.first.is_a?(Array) if &.keys&.include?(:swt_image) @swt_image = [:swt_image] @original_image_data = @image_data = @swt_image.image_data elsif args.size == 1 && args.first.is_a?(ImageProxy) @swt_image = @args.first.swt_image @original_image_data = @image_data = @swt_image.image_data elsif @file_path @original_image_data = @image_data = ImageData.new(input_stream || @file_path) @swt_image = Image.new(DisplayProxy.instance.swt_display, @image_data) width = [:width] height = [:height] height = (@image_data.height.to_f / @image_data.width.to_f)*width.to_f if !width.nil? && height.nil? width = (@image_data.width.to_f / @image_data.height.to_f)*height.to_f if !height.nil? && width.nil? scale_to(width, height) unless width.nil? || height.nil? elsif !@args.first.is_a?(ImageProxy) && !@args.first.is_a?(Image) @args.prepend(DisplayProxy.instance.swt_display) unless @args.first.is_a?(Display) @swt_image = Image.new(*@args) @original_image_data = @image_data = @swt_image.image_data end proxy = self # TODO consider adding a get_data/set_data method to conform with other SWT widgets @swt_image.singleton_class.define_method(:dispose) do proxy.clear_shapes super end post_add_content if content.nil? end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
183 184 185 186 187 188 |
# File 'lib/glimmer/swt/image_proxy.rb', line 183 def method_missing(method, *args, &block) swt_image.send(method, *args, &block) rescue => e Glimmer::Config.logger.debug {"Neither ImageProxy nor #{swt_image.class.name} can handle the method ##{method}"} super end |
Instance Attribute Details
#file_path ⇒ Object (readonly)
Returns the value of attribute file_path.
49 50 51 |
# File 'lib/glimmer/swt/image_proxy.rb', line 49 def file_path @file_path end |
#image_data ⇒ Object (readonly)
Returns the value of attribute image_data.
49 50 51 |
# File 'lib/glimmer/swt/image_proxy.rb', line 49 def image_data @image_data end |
#jar_file_path ⇒ Object (readonly)
Returns the value of attribute jar_file_path.
49 50 51 |
# File 'lib/glimmer/swt/image_proxy.rb', line 49 def jar_file_path @jar_file_path end |
#swt_image ⇒ Object (readonly)
Returns the value of attribute swt_image.
49 50 51 |
# File 'lib/glimmer/swt/image_proxy.rb', line 49 def swt_image @swt_image end |
Class Method Details
.create(*args) ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/glimmer/swt/image_proxy.rb', line 37 def create(*args) if args.size == 1 && args.first.is_a?(ImageProxy) args.first else new(*args) end end |
Instance Method Details
#disposed? ⇒ Boolean
141 142 143 |
# File 'lib/glimmer/swt/image_proxy.rb', line 141 def disposed? @swt_image.isDisposed end |
#gc ⇒ Object
133 134 135 |
# File 'lib/glimmer/swt/image_proxy.rb', line 133 def gc @gc ||= reset_gc end |
#get_attribute(attribute_name) ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/glimmer/swt/image_proxy.rb', line 169 def get_attribute(attribute_name) if @swt_image.respond_to?(attribute_getter(attribute_name)) @swt_image.send(attribute_getter(attribute_name)) elsif @swt_image.respond_to?(ruby_attribute_getter(attribute_name)) @swt_image.send(ruby_attribute_getter(attribute_name)) elsif @swt_image.respond_to?(attribute_name) @swt_image.send(attribute_name) elsif respond_to?(ruby_attribute_getter(attribute_name)) send(ruby_attribute_getter(attribute_name)) else send(attribute_name) end end |
#has_attribute?(attribute_name, *args) ⇒ Boolean
145 146 147 |
# File 'lib/glimmer/swt/image_proxy.rb', line 145 def has_attribute?(attribute_name, *args) @swt_image.respond_to?(attribute_setter(attribute_name), args) || respond_to?(ruby_attribute_setter(attribute_name), args) end |
#input_stream ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/glimmer/swt/image_proxy.rb', line 111 def input_stream if @file_path.start_with?('uri:classloader') @jar_file_path = @file_path file_path = @jar_file_path.sub(/^uri\:classloader\:/, '').sub('//', '/') # the latter sub is needed for Mac object = java.lang.Object.new file_input_stream = object.java_class.resource_as_stream(file_path) else file_input_stream = java.io.FileInputStream.new(@file_path) end java.io.BufferedInputStream.new(file_input_stream) if file_input_stream end |
#post_add_content ⇒ Object
96 97 98 99 100 101 102 103 |
# File 'lib/glimmer/swt/image_proxy.rb', line 96 def post_add_content if shapes.any? setup_shape_painting end if @parent.respond_to?('image=') @parent&.image = swt_image end end |
#reset_gc ⇒ Object
137 138 139 |
# File 'lib/glimmer/swt/image_proxy.rb', line 137 def reset_gc @gc = org.eclipse.swt.graphics.GC.new(swt_image) end |
#respond_to?(method, *args, &block) ⇒ Boolean
190 191 192 |
# File 'lib/glimmer/swt/image_proxy.rb', line 190 def respond_to?(method, *args, &block) super || swt_image.respond_to?(method, *args, &block) end |
#scale_to(width, height) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/glimmer/swt/image_proxy.rb', line 123 def scale_to(width, height) return if @image_data.width == width && @image_data.height == height scaled_image_data = @original_image_data.scaledTo(width, height) device = swt_image.device swt_image.dispose @swt_image = Image.new(device, scaled_image_data) @image_data = @swt_image.image_data self end |
#set_attribute(attribute_name, *args) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/glimmer/swt/image_proxy.rb', line 149 def set_attribute(attribute_name, *args) # TODO consider refactoring/unifying this code with WidgetProxy and elsewhere if args.count == 1 if args.first.is_a?(Symbol) || args.first.is_a?(String) args[0] = ColorProxy.new(args.first).swt_color end if args.first.is_a?(ColorProxy) args[0] = args.first.swt_color end end if @swt_image.respond_to?(attribute_setter(attribute_name)) @swt_image.send(attribute_setter(attribute_name), *args) unless @swt_image.send(attribute_getter(attribute_name)) == args.first elsif @swt_image.respond_to?(ruby_attribute_setter(attribute_name)) @swt_image.send(ruby_attribute_setter(attribute_name), args) else send(ruby_attribute_setter(attribute_name), args) end end |
#shape(parent_proxy = nil, args = nil) ⇒ Object
105 106 107 108 109 |
# File 'lib/glimmer/swt/image_proxy.rb', line 105 def shape(parent_proxy = nil, args = nil) parent_proxy ||= @parent_proxy args ||= [self] # TODO consider passing args if available @shape ||= Glimmer::SWT::Custom::Shape.new(parent_proxy, 'image', *args) end |