| // 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_ |