Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: remoting/client/desktop_viewport.h

Issue 2843373005: [Remoting Client] DesktopViewport Implementation (Closed)
Patch Set: Fix Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 #ifndef REMOTING_CLIENT_DESKTOP_VIEWPORT_H_
6 #define REMOTING_CLIENT_DESKTOP_VIEWPORT_H_
7
8 #include <array>
9
10 #include "base/callback.h"
11 #include "remoting/client/simple_matrix.h"
12
joedow 2017/04/28 21:29:53 You should include 'remoting/client/viewport_geome
Yuwei 2017/04/28 23:53:40 Obsolete. I broke down viewport_geometry and moved
13 namespace remoting {
14
15 // The viewport is a sliding window on the desktop image. This class defines
16 // the viewport's position and size, provides methods to manipulate it, and
17 // outputs a desktop space -> surface space transformation matrix for drawing
18 // the desktop onto the client's view surface on the screen.
joedow 2017/04/28 21:29:53 This is a good comment, but I think it would be go
Yuwei 2017/04/28 23:53:40 Done.
19 //
20 // You may either manipulate the desktop on the surface coordinate or manipulate
21 // the viewport on the desktop coordinate, depending on how you choose the
22 // reference frame.
23 class DesktopViewport {
24 public:
25 using TransformationCallback =
26 base::Callback<void(const std::array<float, 9>&)>;
27
28 DesktopViewport();
29 ~DesktopViewport();
30
31 // Sets the desktop size.
joedow 2017/04/28 21:29:53 nit: You could just refer to the actual member ->
Yuwei 2017/04/28 23:53:40 Done.
32 void SetDesktopSize(int desktop_width, int desktop_height);
33
34 // Sets the surface size.
35 void SetSurfaceSize(int surface_width, int surface_height);
36
37 // Resizes the desktop such that the image is displayed without borders in
38 // minimum possible zoom-level. This will be called once both the desktop
39 // and the surface size are set.
joedow 2017/04/28 21:29:53 "This will be called once both the desktop and the
Yuwei 2017/04/28 23:53:40 I just moved it to the private block. SetDesktopSi
40 void ResizeToFit();
41
42 // Translates the desktop on the surface's reference frame by <dx, dy>.
43 void MoveDesktop(float dx, float dy);
44
45 // Scales the desktop on the surface's reference frame at pivot point (px, py)
46 // by |scale|.
47 void ScaleDesktop(float px, float py, float scale);
48
49 // Sets the viewport center to (x, y) on the desktop's coordinate.
50 void SetViewportCenter(float x, float y);
51
52 // Registers the callback to be called once the transformation has changed.
53 // run_immediately: If true and the viewport is ready to be used, the callback
54 // will be called immedately with the transformation matrix.
55 void RegisterOnTransformationChangedCallback(
56 const TransformationCallback& callback,
57 bool run_immediately);
58
59 private:
60 // True if desktop size and surface size are set.
61 bool IsViewportReady() const;
62
63 // Adjusts the size and position of the viewport so that the constrains always
64 // hold, then feed the matrix to |on_transformation_changed_|.
65 void UpdateViewport();
66
67 // Gets a rectangle of all possible positions where the viewport's center can
68 // locate.
69 Bounds GetViewportCenterBounds() const;
70
71 // Returns the current center of the viewport on the desktop's coordinate.
72 Point GetViewportCenter() const;
73
74 // Translates the viewport on the desktop's reference frame by <dx, dy>,
75 // without calling UpdateViewport().
76 void MoveViewportCenterWithoutUpdate(float dx, float dy);
77
78 Vector2D desktop_size_;
79 Vector2D surface_size_;
80
81 bool desktop_size_ready_ = false;
82 bool surface_size_ready_ = false;
83
84 SimpleMatrix desktop_to_surface_;
joedow 2017/04/28 21:29:53 desktop_to_surface_transform_?
Yuwei 2017/04/28 23:53:40 Done.
85
86 TransformationCallback on_transformation_changed_;
87
88 // DesktopViewport is neither copyable nor movable.
89 DesktopViewport(const DesktopViewport&) = delete;
90 DesktopViewport& operator=(const DesktopViewport&) = delete;
91 };
92
93 } // namespace remoting
94 #endif // REMOTING_CLIENT_DESKTOP_VIEWPORT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698