Class: Fusuma::Plugin::Buffers::GestureBuffer

Inherits:
Buffer show all
Defined in:
lib/fusuma/plugin/buffers/gesture_buffer.rb

Overview

manage events and generate command

Constant Summary collapse

DEFAULT_SOURCE =
'libinput_gesture_parser'
DEFAULT_SECONDS_TO_KEEP =
100

Instance Attribute Summary

Attributes inherited from Buffer

#events

Instance Method Summary collapse

Methods inherited from Buffer

#clear, #initialize, #source, #type

Methods inherited from Fusuma::Plugin::Base

#config_index, #config_params, inherited, plugins

Methods included from CustomProcess

#fork

Constructor Details

This class inherits a constructor from Fusuma::Plugin::Buffers::Buffer

Instance Method Details

#avg_attrs(attr) ⇒ Float

Parameters:

  • attr (Symbol)

Returns:

  • (Float)


66
67
68
# 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) ⇒ Buffer, FalseClass

Parameters:

  • event (Event)

Returns:



22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# 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_typesObject



13
14
15
16
17
18
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 13

def config_param_types
  {
    source: [String],
    seconds_to_keep: [Float, Integer]
  }
end

#empty?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 83

def empty?
  @events.empty?
end

#ended?Boolean

Returns:

  • (Boolean)


46
47
48
49
50
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 46

def ended?
  return false if empty?

  @events.last.record.status == 'end'
end

#fingerObject

return [Integer]



71
72
73
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 71

def finger
  @events.last.record.finger.to_i
end

#gestureString

Examples:

event_buffer.gesture
=> 'swipe'

Returns:



79
80
81
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 79

def gesture
  @events.last.record.gesture
end

#select_by_events(&block) ⇒ Object



87
88
89
90
91
92
# 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_beginObject



94
95
96
97
98
99
100
101
102
# 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) ⇒ Float

Parameters:

  • attr (Symbol)

Returns:

  • (Float)


54
55
56
57
58
# 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_eventsObject



60
61
62
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 60

def updating_events
  @events.select { |e| e.record.status == 'update' }
end