10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file. 40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_INTERPRETER_LIBEVDEV_CROS_H_ 60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_INTERPRETER_LIBEVDEV_CROS_H_ 70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <gestures/gestures.h> 90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <libevdev/libevdev.h> 100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/callback.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/memory/scoped_ptr.h" 130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "ui/events/ozone/evdev/cursor_delegate_evdev.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/events/ozone/evdev/events_ozone_evdev_export.h" 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "ui/events/ozone/evdev/libgestures_glue/event_reader_libevdev_cros.h" 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace ui { 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass Event; 200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass EventDeviceInfo; 210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass EventModifiersEvdev; 220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass CursorDelegateEvdev; 230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochtypedef base::Callback<void(Event*)> EventDispatchCallback; 250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Convert libevdev-cros events to ui::Events using libgestures. 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// This builds a GestureInterpreter for an input device (touchpad or 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// mouse). 300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// 310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Raw input events must be preprocessed into a form suitable for 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// libgestures. The kernel protocol only emits changes to the device state, 330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// so changes must be accumulated until a sync event. The full device state 340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// at sync is then processed by libgestures. 350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// 360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Once we have the state at sync, we convert it to a HardwareState object 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// and forward it to libgestures. If any gestures are produced, they are 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// converted to ui::Events and dispatched. 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class EVENTS_OZONE_EVDEV_EXPORT GestureInterpreterLibevdevCros 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch : public EventReaderLibevdevCros::Delegate { 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch public: 420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch GestureInterpreterLibevdevCros(EventModifiersEvdev* modifiers, 430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch CursorDelegateEvdev* cursor, 440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const EventDispatchCallback& callback); 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual ~GestureInterpreterLibevdevCros(); 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Overriden from ui::EventReaderLibevdevCros::Delegate 480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnLibEvdevCrosOpen(Evdev* evdev, 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventStateRec* evstate) OVERRIDE; 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnLibEvdevCrosEvent(Evdev* evdev, 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventStateRec* evstate, 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const timeval& time) OVERRIDE; 530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Handler for gesture events generated from libgestures. 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void OnGestureReady(const Gesture* gesture); 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch private: 580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void OnGestureMove(const Gesture* gesture, const GestureMove* move); 590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void OnGestureScroll(const Gesture* gesture, const GestureScroll* move); 600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void OnGestureButtonsChange(const Gesture* gesture, 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const GestureButtonsChange* move); 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnGestureContactInitiated(const Gesture* gesture); 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnGestureFling(const Gesture* gesture, const GestureFling* fling); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnGestureSwipe(const Gesture* gesture, const GestureSwipe* swipe); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnGestureSwipeLift(const Gesture* gesture, 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GestureSwipeLift* swipelift); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnGesturePinch(const Gesture* gesture, const GesturePinch* pinch); 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void OnGestureMetrics(const Gesture* gesture, const GestureMetrics* metrics); 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void Dispatch(Event* event); 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch void DispatchMouseButton(unsigned int modifier, bool down); 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Shared modifier state. 740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventModifiersEvdev* modifiers_; 750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Shared cursor state. 770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch CursorDelegateEvdev* cursor_; 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Callback for dispatching events. 800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EventDispatchCallback dispatch_callback_; 810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Gestures interpretation state. 830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch gestures::GestureInterpreter* interpreter_; 840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch DISALLOW_COPY_AND_ASSIGN(GestureInterpreterLibevdevCros); 860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}; 870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} // namspace ui 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif // UI_EVENTS_OZONE_EVDEV_LIBGESTURES_GLUE_GESTURE_INTERPRETER_LIBEVDEV_CROS_H_ 91