Index: remoting/host/desktop_resizer_win.cc |
diff --git a/remoting/host/desktop_resizer_win.cc b/remoting/host/desktop_resizer_win.cc |
index 813a487e654e6d4f06bdc02144bfcda10f35ef59..f12b4729971958c473d9859cfad9089e1fd8b50a 100644 |
--- a/remoting/host/desktop_resizer_win.cc |
+++ b/remoting/host/desktop_resizer_win.cc |
@@ -8,26 +8,37 @@ |
#include "base/logging.h" |
-// Provide comparison operation for SkISize so we can use it in std::map. |
-static inline bool operator <(const SkISize& a, const SkISize& b) { |
- if (a.width() != b.width()) |
- return a.width() < b.width(); |
- return a.height() < b.height(); |
-} |
+namespace { |
+// TODO(jamiewalch): Use the correct DPI for the mode: http://crbug.com/172405. |
+const int kDPI = 96; |
+}; // namespace |
namespace remoting { |
+// Provide comparison operation for ScreenResolution so we can use it in |
+// std::map. |
+static inline bool operator <(const ScreenResolution& a, |
+ const ScreenResolution& b) { |
+ if (a.resolution().width() != b.resolution().width()) |
+ return a.width() < b.width(); |
+ if (a.resolution().height() != b.resolution().height()) |
+ return a.height() < b.height(); |
+ if (a.dpi().x() != b.dpi().x()) |
+ return a.dpi().x() < b.dpi().x(); |
+ return a.dpi().y() < b.dpi().y(); |
+} |
+ |
class DesktopResizerWin : public DesktopResizer { |
public: |
DesktopResizerWin(); |
virtual ~DesktopResizerWin(); |
// DesktopResizer interface. |
- virtual SkISize GetCurrentSize() OVERRIDE; |
- virtual std::list<SkISize> GetSupportedSizes( |
- const SkISize& preferred) OVERRIDE; |
- virtual void SetSize(const SkISize& size) OVERRIDE; |
- virtual void RestoreSize(const SkISize& original) OVERRIDE; |
+ virtual ScreenResolution GetCurrentResolution() OVERRIDE; |
+ virtual std::list<ScreenResolution> GetSupportedResolutions( |
+ const ScreenResolution& preferred) OVERRIDE; |
+ virtual void SetResolution(const ScreenResolution& resolution) OVERRIDE; |
+ virtual void RestoreResolution(const ScreenResolution& original) OVERRIDE; |
private: |
static bool IsResizeSupported(); |
@@ -42,9 +53,9 @@ class DesktopResizerWin : public DesktopResizer { |
static bool IsModeValid(const DEVMODE& mode); |
// Returns the width & height of |mode|, or 0x0 if they are missing. |
- static SkISize GetModeSize(const DEVMODE& mode); |
+ static ScreenResolution GetModeResolution(const DEVMODE& mode); |
- std::map<SkISize, DEVMODE> best_mode_for_size_; |
+ std::map<ScreenResolution, DEVMODE> best_mode_for_resolution_; |
DISALLOW_COPY_AND_ASSIGN(DesktopResizerWin); |
}; |
@@ -55,29 +66,29 @@ DesktopResizerWin::DesktopResizerWin() { |
DesktopResizerWin::~DesktopResizerWin() { |
} |
-SkISize DesktopResizerWin::GetCurrentSize() { |
+ScreenResolution DesktopResizerWin::GetCurrentResolution() { |
DEVMODE current_mode; |
if (GetPrimaryDisplayMode(ENUM_CURRENT_SETTINGS, 0, ¤t_mode) && |
IsModeValid(current_mode)) |
- return GetModeSize(current_mode); |
- return SkISize::Make(0, 0); |
+ return GetModeResolution(current_mode); |
+ return ScreenResolution(); |
} |
-std::list<SkISize> DesktopResizerWin::GetSupportedSizes( |
- const SkISize& preferred) { |
+std::list<ScreenResolution> DesktopResizerWin::GetSupportedResolutions( |
+ const ScreenResolution& preferred) { |
if (!IsResizeSupported()) |
- return std::list<SkISize>(); |
+ return std::list<ScreenResolution>(); |
- // Enumerate the sizes to return, and where there are multiple modes of |
- // the same size, store the one most closely matching the current mode |
- // in |best_mode_for_size_|. |
+ // Enumerate the resolutions to return, and where there are multiple modes of |
+ // the same resolution, store the one most closely matching the current mode |
+ // in |best_mode_for_resolution_|. |
DEVMODE current_mode; |
if (!GetPrimaryDisplayMode(ENUM_CURRENT_SETTINGS, 0, ¤t_mode) || |
!IsModeValid(current_mode)) |
- return std::list<SkISize>(); |
+ return std::list<ScreenResolution>(); |
- std::list<SkISize> sizes; |
- best_mode_for_size_.clear(); |
+ std::list<ScreenResolution> resolutions; |
+ best_mode_for_resolution_.clear(); |
for (DWORD i = 0; ; ++i) { |
DEVMODE candidate_mode; |
if (!GetPrimaryDisplayMode(i, EDS_ROTATEDMODE, &candidate_mode)) |
@@ -95,9 +106,9 @@ std::list<SkISize> DesktopResizerWin::GetSupportedSizes( |
// - Prefer the modes which match the current rotation. |
// - Among those, prefer modes which match the current frequency. |
// - Otherwise, prefer modes with a higher frequency. |
- SkISize candidate_size = GetModeSize(candidate_mode); |
- if (best_mode_for_size_.count(candidate_size) != 0) { |
- DEVMODE best_mode = best_mode_for_size_[candidate_size]; |
+ ScreenResolution candidate_resolution = GetModeResolution(candidate_mode); |
+ if (best_mode_for_resolution_.count(candidate_resolution) != 0) { |
+ DEVMODE best_mode = best_mode_for_resolution_[candidate_resolution]; |
if ((candidate_mode.dmDisplayOrientation != |
current_mode.dmDisplayOrientation) && |
@@ -113,31 +124,31 @@ std::list<SkISize> DesktopResizerWin::GetSupportedSizes( |
continue; |
} |
} else { |
- // If we haven't seen this size before, add it to those we return. |
- sizes.push_back(candidate_size); |
+ // If we haven't seen this resolution before, add it to those we return. |
+ resolutions.push_back(candidate_resolution); |
} |
- best_mode_for_size_[candidate_size] = candidate_mode; |
+ best_mode_for_resolution_[candidate_resolution] = candidate_mode; |
} |
- return sizes; |
+ return resolutions; |
} |
-void DesktopResizerWin::SetSize(const SkISize& size) { |
- if (best_mode_for_size_.count(size) == 0) |
+void DesktopResizerWin::SetResolution(const ScreenResolution& resolution) { |
+ if (best_mode_for_resolution_.count(resolution) == 0) |
return; |
- DEVMODE new_mode = best_mode_for_size_[size]; |
+ DEVMODE new_mode = best_mode_for_resolution_[resolution]; |
DWORD result = ChangeDisplaySettings(&new_mode, CDS_FULLSCREEN); |
if (result != DISP_CHANGE_SUCCESSFUL) |
- LOG(ERROR) << "SetSize failed: " << result; |
+ LOG(ERROR) << "SetResolution failed: " << result; |
} |
-void DesktopResizerWin::RestoreSize(const SkISize& original) { |
+void DesktopResizerWin::RestoreResolution(const ScreenResolution& original) { |
// Restore the display mode based on the registry configuration. |
DWORD result = ChangeDisplaySettings(NULL, 0); |
if (result != DISP_CHANGE_SUCCESSFUL) |
- LOG(ERROR) << "RestoreSize failed: " << result; |
+ LOG(ERROR) << "RestoreResolution failed: " << result; |
} |
// static |
@@ -165,9 +176,11 @@ bool DesktopResizerWin::IsModeValid(const DEVMODE& mode) { |
} |
// static |
-SkISize DesktopResizerWin::GetModeSize(const DEVMODE& mode) { |
+ScreenResolution DesktopResizerWin::GetModeResolution(const DEVMODE& mode) { |
DCHECK(IsModeValid(mode)); |
- return SkISize::Make(mode.dmPelsWidth, mode.dmPelsHeight); |
+ return ScreenResolution::Make( |
+ webrtc::DesktopSize(mode.dmPelsWidth, mode.dmPelsHeight), |
+ webrtc::DesktopVector(kDPI, kDPI)); |
} |
scoped_ptr<DesktopResizer> DesktopResizer::Create() { |