Index: ui/gfx/win/display_info.cc |
diff --git a/ui/gfx/win/display_info.cc b/ui/gfx/win/display_info.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ea3ac43c5497382790f23001530388aca29f44d8 |
--- /dev/null |
+++ b/ui/gfx/win/display_info.cc |
@@ -0,0 +1,60 @@ |
+// Copyright 2016 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 "ui/gfx/win/display_info.h" |
+ |
+#include "base/hash.h" |
+#include "base/strings/utf_string_conversions.h" |
+ |
+namespace { |
+ |
+gfx::Display::Rotation GetRotationForDevice(const wchar_t* device_name) { |
+ DEVMODE mode; |
+ ::ZeroMemory(&mode, sizeof(mode)); |
+ mode.dmSize = sizeof(mode); |
+ mode.dmDriverExtra = 0; |
+ if (::EnumDisplaySettings(device_name, ENUM_CURRENT_SETTINGS, &mode)) { |
+ switch (mode.dmDisplayOrientation) { |
+ case DMDO_DEFAULT: |
+ return gfx::Display::ROTATE_0; |
+ case DMDO_90: |
+ return gfx::Display::ROTATE_90; |
+ case DMDO_180: |
+ return gfx::Display::ROTATE_180; |
+ case DMDO_270: |
+ return gfx::Display::ROTATE_270; |
+ default: |
+ NOTREACHED(); |
+ } |
+ } |
+ return gfx::Display::ROTATE_0; |
+} |
+ |
+} // namespace |
+ |
+namespace gfx { |
+namespace win { |
+ |
+// static |
+int64_t DisplayInfo::HashDeviceName(const wchar_t* device_name) { |
+ return static_cast<int64_t>(base::Hash(base::WideToUTF8(device_name))); |
+} |
+ |
+DisplayInfo::DisplayInfo(const MONITORINFOEX& monitor_info, |
+ float device_scale_factor) |
+ : DisplayInfo(monitor_info, |
+ device_scale_factor, |
+ GetRotationForDevice(monitor_info.szDevice)) {} |
+ |
+DisplayInfo::DisplayInfo(const MONITORINFOEX& monitor_info, |
+ float device_scale_factor, |
+ gfx::Display::Rotation rotation) |
+ : id_(HashDeviceName(monitor_info.szDevice)), |
+ screen_rect_(monitor_info.rcMonitor), |
+ screen_work_rect_(monitor_info.rcWork), |
+ rotation_(rotation), |
+ device_scale_factor_(device_scale_factor) {} |
+ |
+} // namespace win |
+} // namespace gfx |