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 143 144 145 146 147 148 149 150 151 152 |
# 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' if Regexp.last_match(1) == 'TAP_STATE_TOUCH_3' 4 else 0 end 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 'LIBINPUT TIMEOUT', # Timeout Event /\sgesture(| state):\s/ # 1.10.4 prints "gesture state: GESTURE_STATE_.*" # NOTE: treat the "gesture(| state):" as KEEP status = 'keep' finger = 0 # MOVE when /\sPOINTER_AXIS\s/, /\sPOINTER_MOTION\s/, /\sTAP_EVENT_PALM\s/ status = 'move' 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' # NOTE: 2 finger hold -> scroll become TAP_STATE_DEAD 0 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
154 155 156 |
# File 'lib/fusuma/plugin/parsers/tap_parser.rb', line 154 def tag 'libinput_tap_parser' end |