chromium/chromecast/graphics/gestures/cast_gesture_handler.h

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_GRAPHICS_GESTURES_CAST_GESTURE_HANDLER_H_
#define CHROMECAST_GRAPHICS_GESTURES_CAST_GESTURE_HANDLER_H_

namespace gfx {
class Point;
}  // namespace gfx

namespace chromecast {

enum class CastSideSwipeOrigin { TOP, BOTTOM, LEFT, RIGHT, NONE };

enum class CastSideSwipeEvent {
  // Indicates the beginning of a side-swipe event (finger down).
  BEGIN,
  // Indicates the continuance of a side-swipe event (finger drag).
  CONTINUE,
  // Indicates the end of a side-swipe event (finger up).
  END
};

// Interface for handlers triggered on reception of gestures on the
// root window, including side-swipe and tap.
class CastGestureHandler {
 public:
  // Gesture handler priority. If multiple handlers can process a gesture event,
  // then the highest-priority handler is the one which receives the event.
  enum class Priority {
    // Handler with NONE priority will never receive a gesture event.
    NONE = 0,
    ROOT_UI,
    MAIN_ACTIVITY,
    SETTINGS_UI,
    MAX = SETTINGS_UI,
  };

  CastGestureHandler() = default;

  CastGestureHandler(const CastGestureHandler&) = delete;
  CastGestureHandler& operator=(const CastGestureHandler&) = delete;

  virtual ~CastGestureHandler() = default;

  // Returns the gesture handler's current priority.
  virtual Priority GetPriority() = 0;

  // Return true if this handler can handle swipes from the given origin.
  virtual bool CanHandleSwipe(CastSideSwipeOrigin swipe_origin) = 0;

  // Triggered when a user swipes from an edge on the screen.
  virtual void HandleSideSwipe(CastSideSwipeEvent event,
                               CastSideSwipeOrigin swipe_origin,
                               const gfx::Point& touch_location) = 0;

  // Triggered on the completion of a tap down event, fired when the
  // finger is pressed.
  virtual void HandleTapDownGesture(const gfx::Point& touch_location) = 0;

  // Triggered on the completion of a tap event, fire after a press
  // followed by a release, within the tap timeout window
  virtual void HandleTapGesture(const gfx::Point& touch_location) = 0;
};

}  // namespace chromecast

#endif  //  CHROMECAST_GRAPHICS_GESTURES_CAST_GESTURE_HANDLER_H_