# File lib/rabbit/image/base.rb, line 14 def initialize(filename, props) @filename = filename @props = normalize_props(props) update_size @original_width = @width @original_height = @height end
# File lib/rabbit/image/base.rb, line 22 def [](key) @props[normalize_prop_key(key)] end
# File lib/rabbit/image/base.rb, line 26 def []=(key, value) @props[normalize_prop_key(key)] = value end
# File lib/rabbit/image/base.rb, line 63 def draw(canvas, x, y, params={}) default_params = { :width => width, :height => height, } canvas.draw_pixbuf(pixbuf, x, y, default_params.merge(params)) end
# File lib/rabbit/image/base.rb, line 30 def keep_ratio self["keep_ratio"] end
# File lib/rabbit/image/base.rb, line 34 def keep_ratio=(value) self["keep_ratio"] = value end
# File lib/rabbit/image/base.rb, line 38 def pixbuf @pixbuf end
# File lib/rabbit/image/base.rb, line 42 def resize(w, h) if w.nil? and h.nil? return elsif keep_ratio if w and h.nil? h = (original_height * w.to_f / original_width).ceil elsif w.nil? and h w = (original_width * h.to_f / original_height).ceil end else w ||= width h ||= height end w = w.ceil if w h = h.ceil if h if w and w > 0 and h and h > 0 and [w, h] != [width, height] @width = w @height = h end end
# File lib/rabbit/image/base.rb, line 88 def load_data(data) loader = ImageDataLoader.new(data) begin loader.load rescue ImageLoadError raise ImageLoadError.new("#{@filename}: #{$!.message}") end @width = loader.width @height = loader.height loader.pixbuf end
# File lib/rabbit/image/base.rb, line 84 def normalize_prop_key(key) key.to_s.gsub(/-/, "_") end
# File lib/rabbit/image/base.rb, line 72 def normalize_props(props) normalized_props = {} (props || {}).each do |key, value| normalized_props[normalize_prop_key(key)] = value end keep_ratio_key = normalize_prop_key("keep_ratio") unless normalized_props.has_key?(keep_ratio_key) normalized_props[keep_ratio_key] = true end normalized_props end