lib/fusuma/plugin/parsers/libinput_gesture_parser.rb in fusuma-2.0.0.pre vs lib/fusuma/plugin/parsers/libinput_gesture_parser.rb in fusuma-2.0.0.pre2

- old
+ new

@@ -1,9 +1,9 @@ # frozen_string_literal: true -require_relative '../events/records/record.rb' -require_relative '../events/records/gesture_record.rb' +require_relative '../events/records/record' +require_relative '../events/records/gesture_record' module Fusuma module Plugin module Parsers # parse libinput and generate gesture record @@ -13,40 +13,42 @@ # @param record [String] # @return [Records::GestureRecord, nil] def parse_record(record) case line = record.to_s when /GESTURE_SWIPE|GESTURE_PINCH/ - gesture, status, finger, direction = parse_libinput(line) + gesture, status, finger, delta = parse_libinput(line) else return end Events::Records::GestureRecord.new(status: status, gesture: gesture, finger: finger, - direction: direction) + delta: delta) end private def parse_libinput(line) _device, event_name, _time, other = line.strip.split(nil, 4) finger, other = other.split(nil, 2) - direction = parse_direction(other) - [*detect_gesture(event_name), finger, direction] + delta = parse_delta(other) + [*detect_gesture(event_name), finger, delta] end def detect_gesture(event_name) event_name =~ /GESTURE_(SWIPE|PINCH)_(BEGIN|UPDATE|END)/ [Regexp.last_match(1).downcase, Regexp.last_match(2).downcase] end - def parse_direction(line) + def parse_delta(line) return if line.nil? - move_x, move_y, _, _, _, zoom, _, rotate = line.tr('/|(|)', ' ').split + move_x, move_y, unaccelerated_x, unaccelerated_y, _, zoom, _, rotate = + line.tr('/|(|)', ' ').split Events::Records::GestureRecord::Delta.new(move_x.to_f, move_y.to_f, + unaccelerated_x.to_f, unaccelerated_y.to_f, zoom.to_f, rotate.to_f) end end end end