class UnderOs::Crop
Attributes
image[R]
ratio[R]
Public Class Methods
new(options={})
click to toggle source
Calls superclass method
# File lib/under_os/crop.rb, line 10 def initialize(options={}) super options.merge(class: 'crop') append @scroll = Scroll.new append @window = Window.new @processor = Processor.new self.ratio = nil end
Public Instance Methods
ratio=(ratio)
click to toggle source
# File lib/under_os/crop.rb, line 20 def ratio=(ratio) ratio = ratio.to_s ratio = "#{@original.size.width}:#{@original.size.height}" if ratio == 'true' if m = ratio.match(/^([\d\.+]+):([\d\.]+)$/) @ratio = m[1].to_f / m[2].to_f else @ratio = nil end @window.expand @ratio if self.size.x > 0 end
repaint(*args)
click to toggle source
Calls superclass method
# File lib/under_os/crop.rb, line 33 def repaint(*args) super(*args).tap{ @window.expand @ratio if @window } end
reset()
click to toggle source
# File lib/under_os/crop.rb, line 47 def reset @scroll.resetting! render { @processor.reset } end
src()
click to toggle source
# File lib/under_os/crop.rb, line 37 def src @processor.render *original_crop_rectangle end
src=(image)
click to toggle source
# File lib/under_os/crop.rb, line 41 def src=(image) @processor.image = image @original = @processor.image # fixed original reset end
tilt(angle)
click to toggle source
# File lib/under_os/crop.rb, line 56 def tilt(angle) render { @processor.tilt(angle) } end
turn(angle)
click to toggle source
# File lib/under_os/crop.rb, line 52 def turn(angle) render { @processor.turn(angle) } end
Protected Instance Methods
original_crop_rectangle()
click to toggle source
# File lib/under_os/crop.rb, line 75 def original_crop_rectangle content_size = @scroll.contentSize / @scroll.scale crop_offset = @scroll.contentOffset / @scroll.scale + @window.position / 2 + 1 crop_frame = @window.size / @scroll.scale crop_offset.x = 0 if crop_offset.x < 0 # tall image crop_offset.y = 0 if crop_offset.y < 0 # wide image crop_frame.x = content_size.x if crop_frame.x > content_size.x crop_frame.y = content_size.y if crop_frame.y > content_size.y original_is_h = @original.size.width / @original.size.height > 1 content_is_h = content_size.x / content_size.y > 1 original_scale = @original.size.width / content_size.__send__(original_is_h == content_is_h ? :x : :y) original_offset = crop_offset * original_scale original_frame = crop_frame * original_scale [original_offset.x, original_offset.y, original_frame.x, original_frame.y] end
render(&block)
click to toggle source
# File lib/under_os/crop.rb, line 62 def render(&block) return if @_working; @_working = true Dispatch::Queue.new("uos.gems.crop.tilt").async do new_image = block.call Dispatch::Queue.main.async do @scroll.image = new_image @_working = false end end end