| /* Copyright (C) 2012 Google 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 INC. AND ITS CONTRIBUTORS ``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 INC. OR ITS 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 WebInputHandlerClient_h |
| #define WebInputHandlerClient_h |
| |
| #include "WebCommon.h" |
| #include "WebFloatSize.h" |
| #include "WebPoint.h" |
| #include "WebSize.h" |
| |
| namespace WebKit { |
| |
| class WebInputHandlerClient { |
| public: |
| enum ScrollStatus { |
| ScrollStatusOnMainThread, |
| ScrollStatusStarted, |
| ScrollStatusIgnored |
| }; |
| enum ScrollInputType { |
| ScrollInputTypeGesture, |
| ScrollInputTypeWheel, |
| ScrollInputTypeNonBubblingGesture |
| }; |
| |
| // Selects a layer to be scrolled at a given point in window coordinates. |
| // Returns ScrollStarted if the layer at the coordinates can be scrolled, |
| // ScrollOnMainThread if the scroll event should instead be delegated to the |
| // main thread, or ScrollIgnored if there is nothing to be scrolled at the |
| // given coordinates. |
| virtual ScrollStatus scrollBegin(WebPoint, ScrollInputType) = 0; |
| |
| // Scroll the selected layer starting at the given window coordinate. If |
| // there is no room to move the layer in the requested direction, its first |
| // ancestor layer that can be scrolled will be moved instead. If there is no |
| // such layer to be moved, this returns false. Returns true otherwise. |
| // Should only be called if scrollBegin() returned ScrollStarted. |
| virtual bool scrollByIfPossible(WebPoint origin, WebFloatSize delta) { return scrollByIfPossible(origin, WebSize(delta.width, delta.height)); } |
| |
| // TODO(aelias): Delete this after WebKit roll. |
| virtual bool scrollByIfPossible(WebPoint origin, WebSize delta) { return scrollByIfPossible(origin, WebFloatSize(delta.width, delta.height)); } |
| |
| // Stop scrolling the selected layer. Should only be called if scrollBegin() |
| // returned ScrollStarted. |
| virtual void scrollEnd() = 0; |
| |
| virtual void pinchGestureBegin() = 0; |
| virtual void pinchGestureUpdate(float magnifyDelta, WebPoint anchor) = 0; |
| virtual void pinchGestureEnd() = 0; |
| |
| virtual void startPageScaleAnimation(WebSize targetPosition, |
| bool anchorPoint, |
| float pageScale, |
| double startTime, |
| double duration) = 0; |
| |
| // Request another callback to WebInputHandler::animate(). |
| virtual void scheduleAnimation() = 0; |
| |
| // Returns whether there are any touch event handlers registered on the |
| // given WebPoint. |
| virtual bool haveTouchEventHandlersAt(WebPoint) = 0; |
| |
| // Indicate that the final input event for the current vsync interval was received. |
| virtual void didReceiveLastInputEventForVSync() { } |
| |
| protected: |
| virtual ~WebInputHandlerClient() { } |
| }; |
| |
| } |
| |
| #endif |