blob: 134210f85ff4445ceb99360c48f0c83d264b0c86 [file] [log] [blame]
// Copyright 2019 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_PROTOCOL_DISPLAY_SIZE_H_
#define REMOTING_PROTOCOL_DISPLAY_SIZE_H_
#include <stddef.h>
#include <ostream>
#include "remoting/base/constants.h"
namespace remoting {
class DisplaySize {
public:
constexpr DisplaySize() : width_dips_(0), height_dips_(0), dpi_(0) {}
constexpr DisplaySize(int32_t width_dips, int32_t height_dips, uint32_t dpi)
: width_dips_(width_dips), height_dips_(height_dips), dpi_(dpi) {}
~DisplaySize() = default;
// Static method to build a DisplaySize from pixels rather than DIPs.
static constexpr DisplaySize FromPixels(int32_t width_px,
int32_t height_px,
uint32_t dpi) {
const int32_t width_dips = width_px * ((float)kDefaultDpi / dpi);
const int32_t height_dips = height_px * ((float)kDefaultDpi / dpi);
return DisplaySize(width_dips, height_dips, dpi);
}
bool operator==(const DisplaySize& other);
bool operator!=(const DisplaySize& other);
bool IsEmpty() const;
int32_t WidthAsDips() const;
int32_t HeightAsDips() const;
int32_t WidthAsPixels() const;
int32_t HeightAsPixels() const;
uint32_t GetDpi() const;
float GetScalingFactor() const;
private:
int32_t width_dips_, height_dips_;
uint32_t dpi_;
};
} // namespace remoting
std::ostream& operator<<(std::ostream& out, const remoting::DisplaySize& size);
#endif // REMOTING_PROTOCOL_DISPLAY_SIZE_H_