| // Copyright (c) 2013 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. |
| |
| #include "remoting/host/screen_resolution.h" |
| |
| #include <stdint.h> |
| |
| #include <algorithm> |
| #include <limits> |
| |
| #include "base/logging.h" |
| |
| namespace remoting { |
| |
| ScreenResolution::ScreenResolution() |
| : dimensions_(webrtc::DesktopSize(0, 0)), |
| dpi_(webrtc::DesktopVector(0, 0)) { |
| } |
| |
| ScreenResolution::ScreenResolution(const webrtc::DesktopSize& dimensions, |
| const webrtc::DesktopVector& dpi) |
| : dimensions_(dimensions), |
| dpi_(dpi) { |
| // Check that dimensions are not negative. |
| DCHECK(!dimensions.is_empty() || dimensions.equals(webrtc::DesktopSize())); |
| DCHECK_GE(dpi.x(), 0); |
| DCHECK_GE(dpi.y(), 0); |
| } |
| |
| webrtc::DesktopSize ScreenResolution::ScaleDimensionsToDpi( |
| const webrtc::DesktopVector& new_dpi) const { |
| int64_t width = dimensions_.width(); |
| int64_t height = dimensions_.height(); |
| |
| // Scale the screen dimensions to new DPI. |
| width = std::min(width * new_dpi.x() / dpi_.x(), |
| static_cast<int64_t>(std::numeric_limits<int32_t>::max())); |
| height = std::min(height * new_dpi.y() / dpi_.y(), |
| static_cast<int64_t>(std::numeric_limits<int32_t>::max())); |
| return webrtc::DesktopSize(width, height); |
| } |
| |
| bool ScreenResolution::IsEmpty() const { |
| return dimensions_.is_empty() || dpi_.is_zero(); |
| } |
| |
| bool ScreenResolution::Equals(const ScreenResolution& other) const { |
| return dimensions_.equals(other.dimensions()) && dpi_.equals(other.dpi()); |
| } |
| |
| } // namespace remoting |