module CyberarmEngine class Element class Image < Element def initialize(path_or_image, options = {}, block = nil) super(options, block) @path = path_or_image if path_or_image.is_a?(String) @image = Gosu::Image.new(path_or_image, retro: @options[:retro], tileable: @options[:tileable]) if @path @image = path_or_image unless @path @scale_x = 1 @scale_y = 1 end def render @image.draw( styled(:margin_left) + styled(:border_thickness_left) + styled(:padding_left) + @x, styled(:margin_top) + styled(:border_thickness_top) + styled(:padding_top) + @y, @z + 2, @scale_x, @scale_y, styled(:color) ) end def clicked_left_mouse_button(_sender, _x, _y) @block.call(self) if @block :handled end def layout _width = dimensional_size(@style.width, :width) _height = dimensional_size(@style.height, :height) if _width && _height @scale_x = _width.to_f / @image.width @scale_y = _height.to_f / @image.height elsif _width @scale_x = _width.to_f / @image.width @scale_y = @scale_x elsif _height @scale_y = _height.to_f / @image.height @scale_x = @scale_y else @scale_x = 1 @scale_y = 1 end @width = _width || (@image.width * @scale_x).floor @height = _height || (@image.height * @scale_y).floor update_background end def value @image end def value=(path_or_image, retro: false, tileable: false) old_value = self.value @path = path_or_image if path_or_image.is_a?(String) @image = Gosu::Image.new(path_or_image, retro: retro, tileable: tileable) if @path @image = path_or_image unless @path recalculate publish(:changed, @image) if old_value != self.value self.value end def path @path end end end end