blob: e596e9c9d0a5b89c5def82b01b2d59c107274244 [file] [log] [blame]
// 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 <iosfwd>
#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 {
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.
};
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_; }
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_