blob: cc74d47f4160a5fdcb0f4c3da337cfe8f705dc47 [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.
#include "remoting/client/input/direct_touch_input_strategy.h"
#include "remoting/client/ui/desktop_viewport.h"
namespace remoting {
namespace {
const float kTapFeedbackRadius = 25.f;
const float kDragFeedbackRadius = 55.f;
} // namespace
DirectTouchInputStrategy::DirectTouchInputStrategy() = default;
DirectTouchInputStrategy::~DirectTouchInputStrategy() = default;
void DirectTouchInputStrategy::HandleZoom(const ViewMatrix::Point& pivot,
float scale,
DesktopViewport* viewport) {
viewport->ScaleDesktop(pivot.x, pivot.y, scale);
}
bool DirectTouchInputStrategy::HandlePan(
const ViewMatrix::Vector2D& translation,
Gesture simultaneous_gesture,
DesktopViewport* viewport) {
if (simultaneous_gesture == DRAG) {
// If the user is dragging something, we should synchronize the movement
// with the object that the user is trying to move on the desktop, rather
// than moving the desktop around.
ViewMatrix::Vector2D viewport_movement =
viewport->GetTransformation().Invert().MapVector(translation);
viewport->MoveViewport(viewport_movement.x, viewport_movement.y);
return false;
}
viewport->MoveDesktop(translation.x, translation.y);
return false;
}
bool DirectTouchInputStrategy::TrackTouchInput(
const ViewMatrix::Point& touch_point,
const DesktopViewport& viewport) {
ViewMatrix::Point new_position =
viewport.GetTransformation().Invert().MapPoint(touch_point);
if (!viewport.IsPointWithinDesktopBounds(new_position)) {
return false;
}
cursor_position_ = new_position;
return true;
}
ViewMatrix::Point DirectTouchInputStrategy::GetCursorPosition() const {
return cursor_position_;
}
void DirectTouchInputStrategy::FocusViewportOnCursor(
DesktopViewport* viewport) const {
// No need to focus on the previous touch point.
}
ViewMatrix::Vector2D DirectTouchInputStrategy::MapScreenVectorToDesktop(
const ViewMatrix::Vector2D& delta,
const DesktopViewport& viewport) const {
return viewport.GetTransformation().Invert().MapVector(delta);
}
float DirectTouchInputStrategy::GetFeedbackRadius(
TouchFeedbackType type) const {
switch (type) {
case TouchFeedbackType::TAP_FEEDBACK:
return kTapFeedbackRadius;
case TouchFeedbackType::DRAG_FEEDBACK:
return kDragFeedbackRadius;
}
NOTREACHED();
return 0.f;
}
bool DirectTouchInputStrategy::IsCursorVisible() const {
return false;
}
} // namespace remoting