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
- #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 |
# 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 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
161 162 163 164 165 166 |
# File 'lib/glimmer/swt/image_proxy.rb', line 161 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
#gc ⇒ Object
115 116 117 |
# File 'lib/glimmer/swt/image_proxy.rb', line 115 def gc @gc ||= reset_gc end |
#get_attribute(attribute_name) ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/glimmer/swt/image_proxy.rb', line 147 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
123 124 125 |
# File 'lib/glimmer/swt/image_proxy.rb', line 123 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
93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/glimmer/swt/image_proxy.rb', line 93 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
89 90 91 |
# File 'lib/glimmer/swt/image_proxy.rb', line 89 def post_add_content @parent&.image = swt_image end |
#reset_gc ⇒ Object
119 120 121 |
# File 'lib/glimmer/swt/image_proxy.rb', line 119 def reset_gc @gc = org.eclipse.swt.graphics.GC.new(swt_image) end |
#respond_to?(method, *args, &block) ⇒ Boolean
168 169 170 |
# File 'lib/glimmer/swt/image_proxy.rb', line 168 def respond_to?(method, *args, &block) super || swt_image.respond_to?(method, *args, &block) end |
#scale_to(width, height) ⇒ Object
105 106 107 108 109 110 111 112 113 |
# File 'lib/glimmer/swt/image_proxy.rb', line 105 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
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/glimmer/swt/image_proxy.rb', line 127 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 |