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
#config_index, #config_params, inherited, plugins
#fork
Instance Method Details
#avg_attrs(attr) ⇒ 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
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 22
def buffer(event)
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_types ⇒ Object
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
83
84
85
|
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 83
def empty?
@events.empty?
end
|
#ended? ⇒ 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
|
#finger ⇒ Object
71
72
73
|
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 71
def finger
@events.last.record.finger.to_i
end
|
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_begin ⇒ Object
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
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_events ⇒ Object
60
61
62
|
# File 'lib/fusuma/plugin/buffers/gesture_buffer.rb', line 60
def updating_events
@events.select { |e| e.record.status == 'update' }
end
|