// 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 #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 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 PointerStateMap; LocalFrame& m_frame; PointerStateMap m_stateForPointer; bool m_suppressNextCharEvent; }; } #endif // SKY_ENGINE_CORE_FRAME_NEWEVENTHANDLER_H_