| // Copyright 2018 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_HOST_DESKTOP_DISPLAY_INFO_H_ |
| #define REMOTING_HOST_DESKTOP_DISPLAY_INFO_H_ |
| |
| #include <stddef.h> |
| |
| #include "base/macros.h" |
| #include "remoting/proto/control.pb.h" |
| #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" |
| #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
| |
| namespace remoting { |
| |
| struct DisplayGeometry { |
| int32_t id; |
| int32_t x, y; |
| uint32_t width, height; |
| uint32_t dpi; // Number of pixels per logical inch. |
| uint32_t bpp; // Number of bits per pixel. |
| bool is_default; // True if this is the default display. |
| }; |
| |
| class DesktopDisplayInfo { |
| public: |
| DesktopDisplayInfo(); |
| ~DesktopDisplayInfo(); |
| |
| static webrtc::DesktopSize CalcSizeDips(webrtc::DesktopSize size, |
| int dpi_x, |
| int dpi_y); |
| |
| // Clear out the display info. |
| void Reset(); |
| int NumDisplays(); |
| const DisplayGeometry* GetDisplayInfo(unsigned int id); |
| |
| // Calculate the offset to the origin (upper left) of the specific display. |
| webrtc::DesktopVector CalcDisplayOffset(webrtc::ScreenId id); |
| |
| // Add a new display with the given info to the display list. |
| void AddDisplay(std::unique_ptr<DisplayGeometry> display); |
| |
| void AddDisplayFrom(protocol::VideoTrackLayout track); |
| |
| // Query the OS for the set of currently active desktop displays. |
| void LoadCurrentDisplayInfo(); |
| |
| bool operator==(const DesktopDisplayInfo& other); |
| bool operator!=(const DesktopDisplayInfo& other); |
| |
| const std::vector<std::unique_ptr<DisplayGeometry>>& displays() const { |
| return displays_; |
| } |
| |
| private: |
| std::vector<std::unique_ptr<DisplayGeometry>> displays_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DesktopDisplayInfo); |
| }; |
| |
| } // namespace remoting |
| |
| #endif // REMOTING_HOST_DESKTOP_DISPLAY_INFO_H_ |