class Fusuma::Plugin::Buffers::GestureBuffer
manage events and generate command
Constants
- DEFAULT_SECONDS_TO_KEEP
- DEFAULT_SOURCE
Public Instance Methods
avg_attrs(attr)
click to toggle source
@param attr [Symbol] @return [Float]
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 66 def avg_attrs(attr) sum_attrs(attr).to_f / updating_events.length end
buffer(event)
click to toggle source
@param event [Event] @return [Buffer, FalseClass]
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 22 def buffer(event) # TODO: buffering events into buffer plugins # - gesture event buffer # - window event buffer # - other event buffer return if event&.tag != source @events.push(event) self end
clear_expired(current_time: Time.now)
click to toggle source
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 33 def clear_expired(current_time: Time.now) clear if ended? @seconds_to_keep ||= (config_params(:seconds_to_keep) || DEFAULT_SECONDS_TO_KEEP) @events.each do |e| break if current_time - e.time < @seconds_to_keep MultiLogger.debug("#{self.class.name}##{__method__}") @events.delete(e) end end
config_param_types()
click to toggle source
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 13 def config_param_types { source: [String], seconds_to_keep: [Float, Integer] } end
empty?()
click to toggle source
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 83 def empty? @events.empty? end
ended?()
click to toggle source
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 46 def ended? return false if empty? @events.last.record.status == 'end' end
finger()
click to toggle source
return [Integer]
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 71 def finger @events.last.record.finger.to_i end
gesture()
click to toggle source
@example
event_buffer.gesture => 'swipe'
@return [String]
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 79 def gesture @events.last.record.gesture end
select_by_events(&block)
click to toggle source
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 87 def select_by_events(&block) return enum_for(:select_by_events) unless block_given? events = @events.select(&block) self.class.new events end
select_from_last_begin()
click to toggle source
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 94 def select_from_last_begin return self if empty? index_from_last = @events.reverse.find_index { |e| e.record.status == 'begin' } return GestureBuffer.new([]) if index_from_last.nil? index_last_begin = events.length - index_from_last - 1 GestureBuffer.new(@events[index_last_begin..-1]) end
sum_attrs(attr)
click to toggle source
@param attr [Symbol] @return [Float]
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 54 def sum_attrs(attr) updating_events.map do |gesture_event| gesture_event.record.delta[attr].to_f end.inject(:+) end
updating_events()
click to toggle source
# File lib/fusuma/plugin/buffers/gesture_buffer.rb, line 60 def updating_events @events.select { |e| e.record.status == 'update' } end