#ifndef CHROMECAST_GRAPHICS_GESTURES_CAST_SYSTEM_GESTURE_DISPATCHER_H_
#define CHROMECAST_GRAPHICS_GESTURES_CAST_SYSTEM_GESTURE_DISPATCHER_H_
#include <queue>
#include "base/containers/flat_set.h"
#include "base/time/tick_clock.h"
#include "base/time/time.h"
#include "chromecast/graphics/gestures/cast_gesture_handler.h"
namespace chromecast {
class CastSystemGestureDispatcher : public CastGestureHandler {
public:
CastSystemGestureDispatcher();
explicit CastSystemGestureDispatcher(const base::TickClock* tick_clock);
~CastSystemGestureDispatcher() override;
void AddGestureHandler(CastGestureHandler* handler);
void RemoveGestureHandler(CastGestureHandler* handler);
Priority GetPriority() override;
bool CanHandleSwipe(CastSideSwipeOrigin swipe_origin) override;
void HandleSideSwipe(CastSideSwipeEvent event,
CastSideSwipeOrigin swipe_origin,
const gfx::Point& touch_location) override;
void HandleTapDownGesture(const gfx::Point& touch_location) override;
void HandleTapGesture(const gfx::Point& touch_location) override;
private:
struct GestureEvent {
base::TimeTicks event_time;
CastSideSwipeOrigin origin;
};
std::queue<GestureEvent> recent_events_;
bool send_gestures_to_root_;
const base::TickClock* const tick_clock_;
base::flat_set<CastGestureHandler*> gesture_handlers_;
};
}
#endif