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.
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
Methods included from Properties
#attribute_getter, #attribute_setter, #normalized_attribute, #ruby_attribute_setter
Methods included from Custom::Drawable
#clear_shapes, #resetup_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.
56 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 56 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.size == 1 && @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? else @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 @swt_image.singleton_class.alias_method(:dispose_without_glimmer, :dispose) 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 dispose_without_glimmer 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
172 173 174 175 176 177 |
# File 'lib/glimmer/swt/image_proxy.rb', line 172 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
130 131 132 |
# File 'lib/glimmer/swt/image_proxy.rb', line 130 def disposed? @swt_image.isDisposed end |
#gc ⇒ Object
122 123 124 |
# File 'lib/glimmer/swt/image_proxy.rb', line 122 def gc @gc ||= reset_gc end |
#get_attribute(attribute_name) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/glimmer/swt/image_proxy.rb', line 158 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
134 135 136 |
# File 'lib/glimmer/swt/image_proxy.rb', line 134 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
100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/glimmer/swt/image_proxy.rb', line 100 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 |
# File 'lib/glimmer/swt/image_proxy.rb', line 96 def post_add_content @parent&.image = swt_image end |
#reset_gc ⇒ Object
126 127 128 |
# File 'lib/glimmer/swt/image_proxy.rb', line 126 def reset_gc @gc = org.eclipse.swt.graphics.GC.new(swt_image) end |
#respond_to?(method, *args, &block) ⇒ Boolean
179 180 181 |
# File 'lib/glimmer/swt/image_proxy.rb', line 179 def respond_to?(method, *args, &block) super || swt_image.respond_to?(method, *args, &block) end |
#scale_to(width, height) ⇒ Object
112 113 114 115 116 117 118 119 120 |
# File 'lib/glimmer/swt/image_proxy.rb', line 112 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
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/glimmer/swt/image_proxy.rb', line 138 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 |