Class: Fusuma::Plugin::Parsers::TapParser
- Inherits:
-
Parser
- Object
- Parser
- Fusuma::Plugin::Parsers::TapParser
- Defined in:
- lib/fusuma/plugin/parsers/tap_parser.rb
Overview
parse libinput and generate event
Constant Summary collapse
- DEFAULT_SOURCE =
'libinput_command_input'- STATE =
TAP_STATE_IDLE = 4,
TAP_STATE_TOUCH, TAP_STATE_HOLD, TAP_STATE_TAPPED, TAP_STATE_TOUCH_2, TAP_STATE_TOUCH_2_HOLD, TAP_STATE_TOUCH_2_RELEASE, TAP_STATE_TOUCH_3, TAP_STATE_TOUCH_3_HOLD, TAP_STATE_DRAGGING_OR_DOUBLETAP, TAP_STATE_DRAGGING_OR_TAP, TAP_STATE_DRAGGING, TAP_STATE_DRAGGING_WAIT, TAP_STATE_DRAGGING_2, TAP_STATE_DEAD { idle: 'TAP_STATE_IDLE', holds: %w[ TAP_STATE_TOUCH_3_HOLD TAP_STATE_TOUCH_2_HOLD TAP_STATE_HOLD TAP_STATE_DEAD ], touches: %w[ TAP_STATE_TOUCH_3 TAP_STATE_TOUCH_2 TAP_STATE_TOUCH TAP_STATE_DEAD ], releases: %w[ TAP_STATE_TOUCH_2_RELEASE TAP_STATE_TOUCH_2_HOLD TAP_STATE_TAPPED TAP_STATE_HOLD TAP_STATE_DEAD ] }.freeze
Instance Method Summary collapse
Instance Method Details
#parse_record(record) ⇒ Records::Gesture?
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/fusuma/plugin/parsers/tap_parser.rb', line 53 def parse_record(record) gesture = 'tap' case record.to_s # BEGIN when /\stap(?:| state):\s.*TAP_STATE_IDLE → TAP_EVENT_TOUCH → TAP_STATE_TOUCH/ status = 'begin' finger = 1 # TOUCH when /\stap(?:| state):\s.*(#{STATE[:touches].join('|')}) → TAP_EVENT_(?:TOUCH|MOTION) → (#{STATE[:touches].join('|')})/ status = 'touch' finger = case Regexp.last_match(2) when 'TAP_STATE_DEAD' 4 when 'TAP_STATE_TOUCH_3' 3 when 'TAP_STATE_TOUCH_2' 2 when 'TAP_STATE_TOUCH' 1 end # HOLD when /\stap(?:| state):\s.*(#{STATE[:touches].join('|')}) → TAP_EVENT_TIMEOUT → (#{STATE[:holds].join('|')})/ status = 'hold' matched = Regexp.last_match finger = case matched[2] when 'TAP_STATE_DEAD' 4 when 'TAP_STATE_TOUCH_3_HOLD' 3 when 'TAP_STATE_TOUCH_2_HOLD' 2 when 'TAP_STATE_HOLD' 1 end # KEEP when /\sgesture(| state):\s/, 'LIBINPUT TIMEOUT' # NOTE: treat the "gesture(| state):" as KEEP status = 'keep' finger = 0 # RELEASE when /\stap(?:| state):\s.*(#{(STATE[:touches] | STATE[:holds]).join('|')}) → TAP_EVENT_RELEASE → (#{STATE[:releases].join('|')})/ status = 'release' matched = Regexp.last_match finger = case matched[1] when 'TAP_STATE_DEAD' 4 when 'TAP_STATE_TOUCH_3', 'TAP_STATE_TOUCH_3_HOLD' 3 when 'TAP_STATE_TOUCH_2', 'TAP_STATE_TOUCH_2_HOLD' 2 when 'TAP_STATE_TOUCH', 'TAP_STATE_HOLD' 1 end # END when /\stap(?:| state):\s.*(#{STATE[:releases].join('|')}) → TAP_EVENT_(.*) → #{STATE[:idle]}/ status = 'end' matched = Regexp.last_match finger = case matched[1] when 'TAP_STATE_DEAD' 4 when 'TAP_STATE_TOUCH_3', 'TAP_STATE_TOUCH_3_HOLD' 3 when 'TAP_STATE_TOUCH_2', 'TAP_STATE_TOUCH_2_HOLD', 'TAP_STATE_TOUCH_2_RELEASE' 2 when 'TAP_STATE_TOUCH', 'TAP_STATE_HOLD', 'TAP_STATE_TAPPED' 1 end else return end Events::Records::GestureRecord.new(status: status, gesture: gesture, finger: finger, direction: nil) end |
#tag ⇒ Object
144 145 146 |
# File 'lib/fusuma/plugin/parsers/tap_parser.rb', line 144 def tag 'libinput_tap_parser' end |