blob: 85053d33c842c25e3bba9bb7df13e663f3a7cda9 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SKY_ENGINE_CORE_FRAME_NEWEVENTHANDLER_H_
#define SKY_ENGINE_CORE_FRAME_NEWEVENTHANDLER_H_
#include <map>
#include "sky/engine/core/dom/Node.h"
#include "sky/engine/core/rendering/HitTestRequest.h"
#include "sky/engine/core/rendering/HitTestResult.h"
#include "sky/engine/wtf/HashMap.h"
namespace blink {
class LocalFrame;
class WebGestureEvent;
class WebKeyboardEvent;
class WebPointerEvent;
class WebWheelEvent;
class NewEventHandler {
WTF_MAKE_NONCOPYABLE(NewEventHandler);
public:
explicit NewEventHandler(LocalFrame&);
~NewEventHandler();
bool handlePointerEvent(const WebPointerEvent&);
bool handleGestureEvent(const WebGestureEvent&);
bool handleKeyboardEvent(const WebKeyboardEvent&);
bool handleWheelEvent(const WebWheelEvent&);
private:
struct PointerState {
RefPtr<Node> target;
double x = 0;
double y = 0;
};
bool handlePointerDownEvent(const WebPointerEvent&);
bool handlePointerUpEvent(const WebPointerEvent&);
bool handlePointerMoveEvent(const WebPointerEvent&);
bool handlePointerCancelEvent(const WebPointerEvent&);
bool dispatchGestureEvent(Node& target, const WebGestureEvent& event);
bool dispatchPointerEvent(PointerState& state, const WebPointerEvent&);
bool dispatchClickEvent(Node& capturingTarget, const WebPointerEvent&);
bool dispatchKeyboardEvent(Node& target, const WebKeyboardEvent& event);
bool dispatchWheelEvent(Node& target, const WebWheelEvent& event);
Node* targetForKeyboardEvent() const;
Node* targetForHitTestResult(const HitTestResult& hitTestResult);
HitTestResult performHitTest(const LayoutPoint&);
void updateSelectionForPointerDown(const HitTestResult&, const WebPointerEvent&);
typedef std::map<int, PointerState> PointerStateMap;
LocalFrame& m_frame;
PointerStateMap m_stateForPointer;
bool m_suppressNextCharEvent;
};
}
#endif // SKY_ENGINE_CORE_FRAME_NEWEVENTHANDLER_H_