blob: c4ef5ad8cf86e10aa25c2e40da46947495481fc7 [file] [log] [blame]
// Copyright 2017 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 REMOTING_CLIENT_INPUT_TOUCH_INPUT_STRATEGY_H_
#define REMOTING_CLIENT_INPUT_TOUCH_INPUT_STRATEGY_H_
#include "remoting/client/ui/view_matrix.h"
namespace remoting {
class DesktopViewport;
// This is an interface used by GestureInterpreter to customize the way gestures
// are handled.
class TouchInputStrategy {
public:
enum TouchFeedbackType {
TAP_FEEDBACK,
DRAG_FEEDBACK,
};
enum Gesture {
NONE,
ZOOM,
DRAG,
};
virtual ~TouchInputStrategy() {}
// Called when the GestureInterpreter receives a zoom gesture. The
// implementation is responsible for modifying the viewport and observing the
// change.
virtual void HandleZoom(const ViewMatrix::Point& pivot,
float scale,
DesktopViewport* viewport) = 0;
// Called when the GestureInterpreter receives a pan gesture. The
// implementation is responsible for modifying the viewport and observing the
// change.
// simultaneous_gesture: Gesture that is simultaneously in progress.
// Returns true if this changes the cursor position.
virtual bool HandlePan(const ViewMatrix::Vector2D& translation,
Gesture simultaneous_gesture,
DesktopViewport* viewport) = 0;
// Called when a touch input (which will end up injecting a mouse event at
// certain position in the host) is done at |touch_point|.
// The implementation should move the cursor to proper position.
//
// Returns true if |touch_point| is a valid input, false otherwise. If the
// input is not valid, the implementation should not change its cursor
// position.
virtual bool TrackTouchInput(const ViewMatrix::Point& touch_point,
const DesktopViewport& viewport) = 0;
// Returns the current cursor position.
virtual ViewMatrix::Point GetCursorPosition() const = 0;
// Focuses the viewport on the cursor position if necessary.
virtual void FocusViewportOnCursor(DesktopViewport* viewport) const = 0;
// Maps a vector (or movement) in the surface coordinate to the vector to be
// used on the desktop. For example it can be used to map a scroll gesture
// on the screen to change in mouse wheel position.
virtual ViewMatrix::Vector2D MapScreenVectorToDesktop(
const ViewMatrix::Vector2D& delta,
const DesktopViewport& viewport) const = 0;
// Returns the maximum radius of the feedback animation on the surface's
// coordinate for the given input type. The feedback will then be shown on the
// cursor positions returned by GetCursorPosition(). Return 0 if no feedback
// should be shown.
virtual float GetFeedbackRadius(TouchFeedbackType type) const = 0;
// Returns true if the input strategy maintains a visible cursor on the
// desktop.
virtual bool IsCursorVisible() const = 0;
};
} // namespace remoting
#endif // REMOTING_CLIENT_INPUT_TOUCH_INPUT_STRATEGY_H_