class Fusuma::Plugin::Parsers::TapParser
parse libinput and generate event
Constants
- DEFAULT_SOURCE
- 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
Public Instance Methods
parse_record(record)
click to toggle source
@param record [String] @return [Records::Gesture, nil]
# 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 /\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, delta: nil) end
tag()
click to toggle source
# File lib/fusuma/plugin/parsers/tap_parser.rb, line 153 def tag 'libinput_tap_parser' end