/* * Copyright (C) 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef SKY_ENGINE_CORE_PAGE_EVENTHANDLER_H_ #define SKY_ENGINE_CORE_PAGE_EVENTHANDLER_H_ #include "sky/engine/core/editing/TextGranularity.h" #include "sky/engine/core/events/TextEventInputType.h" #include "sky/engine/core/page/FocusType.h" #include "sky/engine/core/rendering/HitTestRequest.h" #include "sky/engine/core/rendering/style/RenderStyleConstants.h" #include "sky/engine/platform/Timer.h" #include "sky/engine/platform/geometry/LayoutPoint.h" #include "sky/engine/platform/heap/Handle.h" #include "sky/engine/wtf/Forward.h" #include "sky/engine/wtf/HashMap.h" #include "sky/engine/wtf/HashTraits.h" #include "sky/engine/wtf/RefPtr.h" namespace blink { class Document; class Element; class Event; class EventTarget; class FloatPoint; class FloatQuad; class HitTestRequest; class HitTestResult; class KeyboardEvent; class LocalFrame; class Node; class RenderLayer; class RenderObject; class TextEvent; class VisibleSelection; class Widget; enum AppendTrailingWhitespace { ShouldAppendTrailingWhitespace, DontAppendTrailingWhitespace }; enum CheckDragHysteresis { ShouldCheckDragHysteresis, DontCheckDragHysteresis }; class EventHandler { WTF_MAKE_NONCOPYABLE(EventHandler); public: explicit EventHandler(LocalFrame*); ~EventHandler(); void clear(); void nodeWillBeRemoved(Node&); HitTestResult hitTestResultAtPoint(const LayoutPoint&, HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active, const LayoutSize& padding = LayoutSize()); void defaultKeyboardEventHandler(KeyboardEvent*); bool handleTextInputEvent(const String& text, Event* underlyingEvent = 0, TextEventInputType = TextEventInputKeyboard); void defaultTextInputEventHandler(TextEvent*); void focusDocumentView(); void capsLockStateMayHaveChanged(); // Only called by FrameSelection void notifyElementActivated(); private: void hoverTimerFired(Timer*); void activeIntervalTimerFired(Timer*); TouchAction intersectTouchAction(const TouchAction, const TouchAction); TouchAction computeEffectiveTouchAction(const Node&); HitTestResult hitTestResultInFrame(LocalFrame*, const LayoutPoint&, HitTestRequest::HitTestRequestType hitType = HitTestRequest::ReadOnly | HitTestRequest::Active); void invalidateClick(); bool dragHysteresisExceeded(const FloatPoint&) const; bool dragHysteresisExceeded(const IntPoint&) const; void defaultTabEventHandler(KeyboardEvent*); bool capturesDragging() const { return m_capturesDragging; } LocalFrame* const m_frame; bool m_capturesDragging; enum SelectionInitiationState { HaveNotStartedSelection, PlacedCaret, ExtendedSelection }; SelectionInitiationState m_selectionInitiationState; LayoutPoint m_dragStartPos; int m_clickCount; RefPtr m_clickNode; RefPtr m_dragTarget; bool m_shouldOnlyFireDragOverEvent; bool m_didStartDrag; Timer m_activeIntervalTimer; double m_lastShowPressTimestamp; RefPtr m_lastDeferredTapElement; }; } // namespace blink #endif // SKY_ENGINE_CORE_PAGE_EVENTHANDLER_H_