OLD | NEW |
| (Empty) |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "remoting/client/ui/trackpad_input_strategy.h" | |
6 | |
7 #include "remoting/client/ui/desktop_viewport.h" | |
8 | |
9 namespace remoting { | |
10 | |
11 namespace { | |
12 | |
13 // Trackpad mode does not need tap feedback. | |
14 const float kTapFeedbackRadius = 0.f; | |
15 | |
16 const float kDragFeedbackRadius = 8.f; | |
17 | |
18 } // namespace | |
19 | |
20 TrackpadInputStrategy::TrackpadInputStrategy(const DesktopViewport& viewport) | |
21 : cursor_position_(viewport.GetViewportCenter()) {} | |
22 | |
23 TrackpadInputStrategy::~TrackpadInputStrategy() {} | |
24 | |
25 void TrackpadInputStrategy::HandleZoom(const ViewMatrix::Point& pivot, | |
26 float scale, | |
27 DesktopViewport* viewport) { | |
28 // The cursor position is the pivot point. | |
29 ViewMatrix::Point cursor_pivot = | |
30 viewport->GetTransformation().MapPoint(cursor_position_); | |
31 viewport->ScaleDesktop(cursor_pivot.x, cursor_pivot.y, scale); | |
32 | |
33 // Keep the cursor on focus. | |
34 viewport->SetViewportCenter(cursor_position_.x, cursor_position_.y); | |
35 } | |
36 | |
37 bool TrackpadInputStrategy::HandlePan(const ViewMatrix::Vector2D& translation, | |
38 Gesture simultaneous_gesture, | |
39 DesktopViewport* viewport) { | |
40 if (simultaneous_gesture == ZOOM) { | |
41 // Don't move the cursor if the user is scaling the viewport. | |
42 return false; | |
43 } | |
44 ViewMatrix::Vector2D translation_on_desktop = | |
45 viewport->GetTransformation().Invert().MapVector(translation); | |
46 | |
47 cursor_position_.x += translation_on_desktop.x; | |
48 cursor_position_.y += translation_on_desktop.y; | |
49 | |
50 cursor_position_ = viewport->ConstrainPointToDesktop(cursor_position_); | |
51 | |
52 // Keep the cursor on focus. | |
53 viewport->SetViewportCenter(cursor_position_.x, cursor_position_.y); | |
54 return true; | |
55 } | |
56 | |
57 bool TrackpadInputStrategy::TrackTouchInput( | |
58 const ViewMatrix::Point& touch_point, | |
59 const DesktopViewport& viewport) { | |
60 // Do nothing. The cursor position is independent of the touch position. | |
61 // |touch_point| is always valid. | |
62 return true; | |
63 } | |
64 | |
65 ViewMatrix::Point TrackpadInputStrategy::GetCursorPosition() const { | |
66 return cursor_position_; | |
67 } | |
68 | |
69 ViewMatrix::Vector2D TrackpadInputStrategy::MapScreenVectorToDesktop( | |
70 const ViewMatrix::Vector2D& delta, | |
71 const DesktopViewport& viewport) const { | |
72 // No conversion is needed for trackpad mode. | |
73 return delta; | |
74 } | |
75 | |
76 float TrackpadInputStrategy::GetFeedbackRadius(InputFeedbackType type) const { | |
77 switch (type) { | |
78 case InputFeedbackType::TAP_FEEDBACK: | |
79 return kTapFeedbackRadius; | |
80 case InputFeedbackType::DRAG_FEEDBACK: | |
81 return kDragFeedbackRadius; | |
82 } | |
83 NOTREACHED(); | |
84 return 0.f; | |
85 } | |
86 | |
87 bool TrackpadInputStrategy::IsCursorVisible() const { | |
88 return true; | |
89 } | |
90 } // namespace remoting | |
OLD | NEW |