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