blob: 026ba0a1b57b1d91176e1d9e4258ae6d0a6df1f0 [file] [log] [blame]
/* 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