Class: Fusuma::Plugin::Buffers::TapBuffer

Inherits:
Buffer
  • Object
show all
Defined in:
lib/fusuma/plugin/buffers/tap_buffer.rb

Overview

manage events and generate command

Constant Summary collapse

DEFAULT_SOURCE =
'libinput_tap_parser'
DEFAULT_SECONDS_TO_KEEP =
0.1

Instance Method Summary collapse

Instance Method Details

#begin?(event) ⇒ Boolean



77
78
79
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 77

def begin?(event)
  event.record.status == 'begin'
end

#buffer(event) ⇒ NilClass, TapBuffer



24
25
26
27
28
29
30
31
32
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 24

def buffer(event)
  return if event&.tag != source

  # NOTE: need to set `begin` event at first of buffer
  clear && return unless bufferable?(event)

  @events.push(event)
  self
end

#bufferable?(event) ⇒ Boolean



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 43

def bufferable?(event)
  case event.record.status
  when 'end'
    true
  when 'begin'
    if empty?
      true
    else
      false
    end
  else # 'keep', 'touch', 'hold', 'release'
    if empty?
      false
    else
      true
    end
  end
end

#clear_expiredObject

clear old events



18
19
20
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 18

def clear_expired(*)
  clear if @events.any? { |e| ended?(e) }
end

#config_param_typesObject



11
12
13
14
15
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 11

def config_param_types
  {
    'source': [String]
  }
end

#empty?Boolean



39
40
41
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 39

def empty?
  @events.empty?
end

#ended?(event) ⇒ Boolean



73
74
75
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 73

def ended?(event)
  event.record.status == 'end'
end

#fingerObject

return [Integer]



35
36
37
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 35

def finger
  @events.map { |e| e.record.finger }.max
end

#present?Boolean



62
63
64
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 62

def present?
  !empty?
end

#select_by_eventsObject



66
67
68
69
70
71
# File 'lib/fusuma/plugin/buffers/tap_buffer.rb', line 66

def select_by_events
  return enum_for(:select) unless block_given?

  events = @events.select { |event| yield event }
  self.class.new events
end