1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
// Copyright 2018 The Chromium Authors
// 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 <iosfwd>
#include <memory>
#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 {
namespace protocol {
class VideoLayout;
} // namespace protocol
struct DisplayGeometry {
DisplayGeometry();
DisplayGeometry(webrtc::ScreenId id,
int32_t x,
int32_t y,
uint32_t width,
uint32_t height,
uint32_t dpi,
uint32_t bpp,
bool is_default,
const std::string& display_name);
DisplayGeometry(const DisplayGeometry&);
DisplayGeometry& operator=(const DisplayGeometry&);
~DisplayGeometry();
webrtc::ScreenId 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.
std::string display_name; // Sent to the client, informational only.
};
class DesktopDisplayInfo {
public:
DesktopDisplayInfo();
DesktopDisplayInfo(DesktopDisplayInfo&&);
DesktopDisplayInfo& operator=(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;
const DisplayGeometry* GetDisplayInfo(unsigned int id) const;
// Calculate the offset to the origin (upper left) of the specific display.
webrtc::DesktopVector CalcDisplayOffset(webrtc::ScreenId id) const;
// Add a new display with the given info to the display list.
void AddDisplay(const DisplayGeometry& display);
void AddDisplayFrom(const protocol::VideoTrackLayout& track);
bool operator==(const DesktopDisplayInfo& other) const;
bool operator!=(const DesktopDisplayInfo& other) const;
const std::vector<DisplayGeometry>& displays() const { return displays_; }
std::unique_ptr<protocol::VideoLayout> GetVideoLayoutProto() const;
private:
std::vector<DisplayGeometry> displays_;
};
// The output format is:
// "Display <id>: <x>+<y>-<width>x<height>@<dpi>"
std::ostream& operator<<(std::ostream& out, const DisplayGeometry& geo);
} // namespace remoting
#endif // REMOTING_HOST_DESKTOP_DISPLAY_INFO_H_
|