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