Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: ui/gfx/screen_win_unittest.cc

Issue 1426933002: Refactor Windows DPI Point, Rect, and Size for Multiple Monitor DPI Awareness (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed Other Unit Tests - Moved Inner Classes Outside Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/gfx/screen_win_unittest.cc
diff --git a/ui/gfx/screen_win_unittest.cc b/ui/gfx/screen_win_unittest.cc
index b1118c17e23b693c07341a39dc97452ac685eb5f..4deb52a5c9c81f431692251c1ce7a708acd6658a 100644
--- a/ui/gfx/screen_win_unittest.cc
+++ b/ui/gfx/screen_win_unittest.cc
@@ -5,16 +5,22 @@
#include "ui/gfx/screen_win.h"
#include <cwchar>
+#include <memory>
#include <string>
+#include <unordered_map>
#include <vector>
#include <windows.h>
#include <stddef.h>
+#include "base/macros.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/display.h"
#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/win/display_info.h"
+#include "ui/gfx/win/display_manager.h"
#include "ui/gfx/win/dpi.h"
+#include "ui/gfx/win/screen_win_display.h"
namespace gfx {
@@ -34,8 +40,130 @@ MONITORINFOEX CreateMonitorInfo(gfx::Rect monitor,
return monitor_info;
}
+class TestDisplayManager : public gfx::win::DisplayManager {
+ public:
+ static void InitializeDisplayManager(
+ const std::vector<gfx::win::DisplayInfo>& display_infos,
+ const std::vector<MONITORINFOEX>& monitor_infos,
+ const std::unordered_map<HWND, gfx::Rect>& hwnd_map) {
+ scoped_ptr<TestDisplayManager> display_manager(
+ new TestDisplayManager(display_infos, monitor_infos, hwnd_map));
+ SetInstanceForTesting(std::move(display_manager));
+ }
+
+ private:
+ friend std::default_delete<TestDisplayManager>;
+
+ TestDisplayManager(const std::vector<gfx::win::DisplayInfo>& display_infos,
+ const std::vector<MONITORINFOEX>& monitor_infos,
+ const std::unordered_map<HWND, gfx::Rect>& hwnd_map)
+ : monitor_infos_(monitor_infos),
+ hwnd_map_(hwnd_map) {
+ UpdateFromDisplayInfos(display_infos);
+ }
+
+ ~TestDisplayManager() override = default;
+
+ MONITORINFOEX MonitorInfoFromScreenPoint(const gfx::Point& screen_point) const
+ override {
+ for (const MONITORINFOEX& monitor_info : monitor_infos_) {
+ if (gfx::Rect(monitor_info.rcMonitor).Contains(screen_point)) {
+ return monitor_info;
+ }
+ }
+ NOTREACHED();
+ return monitor_infos_[0];
+ }
+
+ MONITORINFOEX MonitorInfoFromScreenRect(const gfx::Rect& screen_rect) const
+ override {
+ MONITORINFOEX candidate = monitor_infos_[0];
+ int largest_area = 0;
+ for (const MONITORINFOEX& monitor_info : monitor_infos_) {
+ gfx::Rect bounds(monitor_info.rcMonitor);
+ if (bounds.Intersects(screen_rect)) {
+ bounds.Intersect(screen_rect);
+ int area = bounds.height() * bounds.width();
+ if (largest_area < area) {
+ candidate = monitor_info;
+ largest_area = area;
+ }
+ }
+ }
+ EXPECT_NE(largest_area, 0);
+ return candidate;
+ }
+
+ MONITORINFOEX MonitorInfoFromWindow(HWND hwnd) const override {
+ auto search = hwnd_map_.find(hwnd);
+ EXPECT_NE(search, hwnd_map_.end());
+ return MonitorInfoFromScreenRect(search->second);
+ }
+
+ HWND GetRootWindow(HWND hwnd) const override {
+ return hwnd;
+ }
+
+ std::vector<MONITORINFOEX> monitor_infos_;
+ std::unordered_map<HWND, gfx::Rect> hwnd_map_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestDisplayManager);
+};
+
} // namespace
+// Manages setting up the ScreenWin global state.
+class TestScreenWinInitializer {
+ public:
+ TestScreenWinInitializer() : hwndLast_(0) {}
+
+ ~TestScreenWinInitializer() {
+ gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, nullptr);
+ }
+
+ void AddMonitor(const gfx::Rect& pixel_bounds,
+ const gfx::Rect& pixel_work,
+ const wchar_t* device_name,
+ float device_scale_factor) {
+ MONITORINFOEX monitor_info = CreateMonitorInfo(pixel_bounds,
+ pixel_work,
+ device_name);
+ monitor_infos_.push_back(monitor_info);
+ display_infos_.push_back(gfx::win::DisplayInfo(monitor_info,
+ gfx::Display::ROTATE_0,
+ device_scale_factor));
+ }
+
+ void InitializeScreenWin() {
+ ASSERT_EQ(screen_win_, nullptr);
+ TestDisplayManager::InitializeDisplayManager(display_infos_,
+ monitor_infos_,
+ hwnd_map_);
+ screen_win_.reset(new gfx::ScreenWin());
+ gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, screen_win_.get());
+ }
+
+ HWND CreateFakeHwnd(const gfx::Rect& bounds) {
+ EXPECT_EQ(screen_win_, nullptr);
+ hwnd_map_.insert(std::pair<HWND, gfx::Rect>(++hwndLast_, bounds));
+ return hwndLast_;
+ }
+
+ Screen* GetScreen() {
+ if (!screen_win_) {
+ InitializeScreenWin();
+ }
+ return screen_win_.get();
+ }
+
+ private:
+ HWND hwndLast_;
+ scoped_ptr<ScreenWin> screen_win_;
+ std::vector<MONITORINFOEX> monitor_infos_;
+ std::vector<gfx::win::DisplayInfo> display_infos_;
+ std::unordered_map<HWND, gfx::Rect> hwnd_map_;
+};
+
class ScreenWinTest : public testing::Test {
private:
void SetUp() override {
@@ -49,32 +177,869 @@ class ScreenWinTest : public testing::Test {
}
};
-TEST_F(ScreenWinTest, SingleDisplay1x) {
- std::vector<MONITORINFOEX> monitor_infos;
- monitor_infos.push_back(CreateMonitorInfo(gfx::Rect(0, 0, 1920, 1200),
- gfx::Rect(0, 0, 1920, 1100),
- L"primary"));
- std::vector<gfx::Display> displays =
- ScreenWin::GetDisplaysForMonitorInfos(monitor_infos);
+// Single Display of 1.0 Device Scale Factor.
+class ScreenWinTestSingleDisplay1x : public ScreenWinTest {
+ public:
+ static void SetUpTestCase() {
+ ScreenWinTest::SetUpTestCase();
+ screen_win_initializer_.reset(new TestScreenWinInitializer());
+ screen_win_initializer_->AddMonitor(gfx::Rect(0, 0, 1920, 1200),
+ gfx::Rect(0, 0, 1920, 1100),
+ L"primary",
+ 1.0);
+ fake_hwnd_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100));
+ screen_win_initializer_->InitializeScreenWin();
+ }
+
+ static void TearDownTestCase() {
+ screen_win_initializer_.reset();
+ ScreenWinTest::TearDownTestCase();
+ }
+
+ Screen* GetScreen() {
+ return screen_win_initializer_->GetScreen();
+ }
+
+ HWND GetFakeHwnd() {
+ return fake_hwnd_;
+ }
+
+ private:
+ static scoped_ptr<TestScreenWinInitializer> screen_win_initializer_;
+ static HWND fake_hwnd_;
+};
+
+scoped_ptr<TestScreenWinInitializer>
+ScreenWinTestSingleDisplay1x::screen_win_initializer_;
+HWND ScreenWinTestSingleDisplay1x::fake_hwnd_ = NULL;
+
+TEST_F(ScreenWinTestSingleDisplay1x, GetDisplays) {
+ std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays();
ASSERT_EQ(1u, displays.size());
EXPECT_EQ(gfx::Rect(0, 0, 1920, 1200), displays[0].bounds());
EXPECT_EQ(gfx::Rect(0, 0, 1920, 1100), displays[0].work_area());
}
-TEST_F(ScreenWinTest, SingleDisplay2x) {
- gfx::SetDefaultDeviceScaleFactor(2.0);
+TEST_F(ScreenWinTestSingleDisplay1x, ScreenToDIPPoints) {
+ gfx::Point origin(0, 0);
+ gfx::Point middle(365, 694);
+ gfx::Point lower_right(1919, 1199);
+
+ EXPECT_EQ(origin, ScreenWin::ScreenToDIPPoint(origin));
+ EXPECT_EQ(middle, ScreenWin::ScreenToDIPPoint(middle));
+ EXPECT_EQ(lower_right, ScreenWin::ScreenToDIPPoint(lower_right));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, DIPToScreenPoints) {
+ gfx::Point origin(0, 0);
+ gfx::Point middle(365, 694);
+ gfx::Point lower_right(1919, 1199);
+
+ EXPECT_EQ(origin, ScreenWin::DIPToScreenPoint(origin));
+ EXPECT_EQ(middle, ScreenWin::DIPToScreenPoint(middle));
+ EXPECT_EQ(lower_right, ScreenWin::DIPToScreenPoint(lower_right));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, ClientToDIPPoints) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Point origin(0, 0);
+ gfx::Point middle(365, 694);
+ gfx::Point lower_right(1919, 1199);
+
+ EXPECT_EQ(origin, ScreenWin::ClientToDIPPoint(hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::ClientToDIPPoint(hwnd, middle));
+ EXPECT_EQ(lower_right, ScreenWin::ClientToDIPPoint(hwnd, lower_right));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, DIPToClientPoints) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Point origin(0, 0);
+ gfx::Point middle(365, 694);
+ gfx::Point lower_right(1919, 1199);
+
+ EXPECT_EQ(origin, ScreenWin::DIPToClientPoint(hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::DIPToClientPoint(hwnd, middle));
+ EXPECT_EQ(lower_right, ScreenWin::DIPToClientPoint(hwnd, lower_right));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, ScreenToDIPRects) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Rect origin(0, 0, 50, 100);
+ gfx::Rect middle(253, 495, 41, 52);
+
+ EXPECT_EQ(origin, ScreenWin::ScreenToDIPRect(hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::ScreenToDIPRect(hwnd, middle));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, DIPToScreenRects) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Rect origin(0, 0, 50, 100);
+ gfx::Rect middle(253, 495, 41, 52);
+
+ EXPECT_EQ(origin, ScreenWin::DIPToScreenRect(hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::DIPToScreenRect(hwnd, middle));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, ClientToDIPRects) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Rect origin(0, 0, 50, 100);
+ gfx::Rect middle(253, 495, 41, 52);
+
+ EXPECT_EQ(origin, ScreenWin::ClientToDIPRect(hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::ClientToDIPRect(hwnd, middle));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, DIPToClientRects) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Rect origin(0, 0, 50, 100);
+ gfx::Rect middle(253, 495, 41, 52);
+
+ EXPECT_EQ(origin, ScreenWin::DIPToClientRect(hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::DIPToClientRect(hwnd, middle));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, ScreenToDIPSize) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Size size(42, 131);
+ EXPECT_EQ(size, ScreenWin::ScreenToDIPSize(hwnd, size));
+}
+
+TEST_F(ScreenWinTestSingleDisplay1x, DIPToScreenSize) {
+ HWND hwnd = GetFakeHwnd();
+
+ gfx::Size size(42, 131);
+ EXPECT_EQ(size, ScreenWin::DIPToScreenSize(hwnd, size));
+}
+
+// Single Display of 2.0 Device Scale Factor.
+class ScreenWinTestSingleDisplay2x : public ScreenWinTest {
+ public:
+ static void SetUpTestCase() {
+ ScreenWinTest::SetUpTestCase();
+ screen_win_initializer_.reset(new TestScreenWinInitializer());
+ screen_win_initializer_->AddMonitor(gfx::Rect(0, 0, 1920, 1200),
+ gfx::Rect(0, 0, 1920, 1100),
+ L"primary",
+ 2.0);
+ fake_hwnd_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100));
+ screen_win_initializer_->InitializeScreenWin();
+ }
+
+ static void TearDownTestCase() {
+ screen_win_initializer_.reset();
+ ScreenWinTest::TearDownTestCase();
+ }
+
+ Screen* GetScreen() {
+ return screen_win_initializer_->GetScreen();
+ }
+
+ HWND GetFakeHwnd() {
+ return fake_hwnd_;
+ }
+
+ private:
+ static scoped_ptr<TestScreenWinInitializer> screen_win_initializer_;
+ static HWND fake_hwnd_;
+};
- std::vector<MONITORINFOEX> monitor_infos;
- monitor_infos.push_back(CreateMonitorInfo(gfx::Rect(0, 0, 1920, 1200),
- gfx::Rect(0, 0, 1920, 1100),
- L"primary"));
- std::vector<gfx::Display> displays =
- ScreenWin::GetDisplaysForMonitorInfos(monitor_infos);
+scoped_ptr<TestScreenWinInitializer>
+ScreenWinTestSingleDisplay2x::screen_win_initializer_;
+HWND ScreenWinTestSingleDisplay2x::fake_hwnd_ = NULL;
+
+TEST_F(ScreenWinTestSingleDisplay2x, GetDisplays) {
+ std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays();
ASSERT_EQ(1u, displays.size());
EXPECT_EQ(gfx::Rect(0, 0, 960, 600), displays[0].bounds());
EXPECT_EQ(gfx::Rect(0, 0, 960, 550), displays[0].work_area());
}
+TEST_F(ScreenWinTestSingleDisplay2x, ScreenToDIPPoints) {
+ EXPECT_EQ(gfx::Point(0, 0), ScreenWin::ScreenToDIPPoint(gfx::Point(0, 0)));
+ EXPECT_EQ(gfx::Point(182, 347),
+ ScreenWin::ScreenToDIPPoint(gfx::Point(365, 694)));
+ EXPECT_EQ(gfx::Point(959, 599),
+ ScreenWin::ScreenToDIPPoint(gfx::Point(1919, 1199)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, DIPToScreenPoints) {
+ EXPECT_EQ(gfx::Point(0, 0), ScreenWin::DIPToScreenPoint(gfx::Point(0, 0)));
+ EXPECT_EQ(gfx::Point(364, 694),
+ ScreenWin::DIPToScreenPoint(gfx::Point(182, 347)));
+ EXPECT_EQ(gfx::Point(1918, 1198),
+ ScreenWin::DIPToScreenPoint(gfx::Point(959, 599)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, ClientToDIPPoints) {
+ HWND hwnd = GetFakeHwnd();
+ EXPECT_EQ(gfx::Point(0, 0),
+ ScreenWin::ClientToDIPPoint(hwnd, gfx::Point(0, 0)));
+ EXPECT_EQ(gfx::Point(182, 347),
+ ScreenWin::ClientToDIPPoint(hwnd, gfx::Point(365, 694)));
+ EXPECT_EQ(gfx::Point(959, 599),
+ ScreenWin::ClientToDIPPoint(hwnd, gfx::Point(1919, 1199)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, DIPToClientPoints) {
+ HWND hwnd = GetFakeHwnd();
+ EXPECT_EQ(gfx::Point(0, 0),
+ ScreenWin::DIPToClientPoint(hwnd, gfx::Point(0, 0)));
+ EXPECT_EQ(gfx::Point(364, 694),
+ ScreenWin::DIPToClientPoint(hwnd, gfx::Point(182, 347)));
+ EXPECT_EQ(gfx::Point(1918, 1198),
+ ScreenWin::DIPToClientPoint(hwnd, gfx::Point(959, 599)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, ScreenToDIPRects) {
+ HWND hwnd = GetFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ScreenToDIPRect(hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ScreenToDIPRect(hwnd, gfx::Rect(253, 496, 41, 52)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, DIPToScreenRects) {
+ HWND hwnd = GetFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToScreenRect(hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToScreenRect(hwnd, gfx::Rect(126, 248, 21, 26)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, ClientToDIPRects) {
+ HWND hwnd = GetFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ClientToDIPRect(hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ClientToDIPRect(hwnd, gfx::Rect(253, 496, 41, 52)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, DIPToClientRects) {
+ HWND hwnd = GetFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToClientRect(hwnd, gfx::Rect(126, 248, 21, 26)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, ScreenToDIPSize) {
+ EXPECT_EQ(gfx::Size(21, 66),
+ ScreenWin::ScreenToDIPSize(GetFakeHwnd(), gfx::Size(42, 131)));
+}
+
+TEST_F(ScreenWinTestSingleDisplay2x, DIPToScreenSize) {
+ EXPECT_EQ(gfx::Size(42, 132),
+ ScreenWin::DIPToScreenSize(GetFakeHwnd(), gfx::Size(21, 66)));
+}
+
+// Two Displays of 1.0 Device Scale Factor.
+class ScreenWinTestTwoDisplays1x : public ScreenWinTest {
+ public:
+ static void SetUpTestCase() {
+ ScreenWinTest::SetUpTestCase();
+ screen_win_initializer_.reset(new TestScreenWinInitializer());
+ screen_win_initializer_->AddMonitor(gfx::Rect(0, 0, 1920, 1200),
+ gfx::Rect(0, 0, 1920, 1100),
+ L"primary",
+ 1.0);
+ screen_win_initializer_->AddMonitor(gfx::Rect(1920, 0, 800, 600),
+ gfx::Rect(1920, 0, 800, 600),
+ L"secondary",
+ 1.0);
+ fake_hwnd_left_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100));
+ fake_hwnd_right_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(1920, 0, 800, 600));
+ screen_win_initializer_->InitializeScreenWin();
+ }
+
+ static void TearDownTestCase() {
+ screen_win_initializer_.reset();
+ ScreenWinTest::TearDownTestCase();
+ }
+
+ Screen* GetScreen() {
+ return screen_win_initializer_->GetScreen();
+ }
+
+ HWND GetLeftFakeHwnd() {
+ return fake_hwnd_left_;
+ }
+
+ HWND GetRightFakeHwnd() {
+ return fake_hwnd_right_;
+ }
+
+ private:
+ static scoped_ptr<TestScreenWinInitializer> screen_win_initializer_;
+ static HWND fake_hwnd_left_;
+ static HWND fake_hwnd_right_;
+};
+
+scoped_ptr<TestScreenWinInitializer>
+ScreenWinTestTwoDisplays1x::screen_win_initializer_;
+
+HWND ScreenWinTestTwoDisplays1x::fake_hwnd_left_ = NULL;
+
+HWND ScreenWinTestTwoDisplays1x::fake_hwnd_right_ = NULL;
+
+TEST_F(ScreenWinTestTwoDisplays1x, GetDisplays) {
+ std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays();
+ ASSERT_EQ(2u, displays.size());
+ EXPECT_EQ(gfx::Rect(0, 0, 1920, 1200), displays[0].bounds());
+ EXPECT_EQ(gfx::Rect(0, 0, 1920, 1100), displays[0].work_area());
+ EXPECT_EQ(gfx::Rect(1920, 0, 800, 600), displays[1].bounds());
+ EXPECT_EQ(gfx::Rect(1920, 0, 800, 600), displays[1].work_area());
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x, ScreenToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ gfx::Rect left_origin(0, 0, 50, 100);
+ gfx::Rect left_middle(253, 495, 41, 52);
+ EXPECT_EQ(left_origin, ScreenWin::ScreenToDIPRect(left_hwnd, left_origin));
+ EXPECT_EQ(left_middle, ScreenWin::ScreenToDIPRect(left_hwnd, left_middle));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ gfx::Rect right_origin(1920, 0, 200, 300);
+ gfx::Rect right_middle(2000, 496, 100, 200);
+ EXPECT_EQ(right_origin, ScreenWin::ScreenToDIPRect(right_hwnd, right_origin));
+ EXPECT_EQ(right_middle, ScreenWin::ScreenToDIPRect(right_hwnd, right_middle));
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x, DIPToScreenRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ gfx::Rect left_origin(0, 0, 50, 100);
+ gfx::Rect left_middle(253, 495, 41, 52);
+ EXPECT_EQ(left_origin, ScreenWin::DIPToScreenRect(left_hwnd, left_origin));
+ EXPECT_EQ(left_middle, ScreenWin::DIPToScreenRect(left_hwnd, left_middle));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ gfx::Rect right_origin(1920, 0, 200, 300);
+ gfx::Rect right_middle(2000, 496, 100, 200);
+ EXPECT_EQ(right_origin, ScreenWin::DIPToScreenRect(right_hwnd, right_origin));
+ EXPECT_EQ(right_middle, ScreenWin::DIPToScreenRect(right_hwnd, right_middle));
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x, ClientToDIPRects) {
+ gfx::Rect origin(0, 0, 50, 100);
+ gfx::Rect middle(253, 495, 41, 52);
+
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(origin, ScreenWin::ClientToDIPRect(left_hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::ClientToDIPRect(left_hwnd, middle));
+
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(origin, ScreenWin::ClientToDIPRect(right_hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::ClientToDIPRect(right_hwnd, middle));
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x, DIPToClientRects) {
+ gfx::Rect origin(0, 0, 50, 100);
+ gfx::Rect middle(253, 495, 41, 52);
+
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(origin, ScreenWin::DIPToClientRect(left_hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::DIPToClientRect(left_hwnd, middle));
+
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(origin, ScreenWin::DIPToClientRect(right_hwnd, origin));
+ EXPECT_EQ(middle, ScreenWin::DIPToClientRect(right_hwnd, middle));
+}
+
+// Two Displays of 2.0 Device Scale Factor.
+class ScreenWinTestTwoDisplays2x : public ScreenWinTest {
+ public:
+ static void SetUpTestCase() {
+ ScreenWinTest::SetUpTestCase();
+ screen_win_initializer_.reset(new TestScreenWinInitializer());
+ screen_win_initializer_->AddMonitor(gfx::Rect(0, 0, 1920, 1200),
+ gfx::Rect(0, 0, 1920, 1100),
+ L"primary",
+ 2.0);
+ screen_win_initializer_->AddMonitor(gfx::Rect(1920, 0, 800, 600),
+ gfx::Rect(1920, 0, 800, 600),
+ L"secondary",
+ 2.0);
+ fake_hwnd_left_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100));
+ fake_hwnd_right_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(1920, 0, 800, 600));
+ screen_win_initializer_->InitializeScreenWin();
+ }
+
+ static void TearDownTestCase() {
+ screen_win_initializer_.reset();
+ ScreenWinTest::TearDownTestCase();
+ }
+
+ Screen* GetScreen() {
+ return screen_win_initializer_->GetScreen();
+ }
+
+ HWND GetLeftFakeHwnd() {
+ return fake_hwnd_left_;
+ }
+
+ HWND GetRightFakeHwnd() {
+ return fake_hwnd_right_;
+ }
+
+ private:
+ static scoped_ptr<TestScreenWinInitializer> screen_win_initializer_;
+ static HWND fake_hwnd_left_;
+ static HWND fake_hwnd_right_;
+};
+
+scoped_ptr<TestScreenWinInitializer>
+ScreenWinTestTwoDisplays2x::screen_win_initializer_;
+
+HWND ScreenWinTestTwoDisplays2x::fake_hwnd_left_ = NULL;
+
+HWND ScreenWinTestTwoDisplays2x::fake_hwnd_right_ = NULL;
+
+TEST_F(ScreenWinTestTwoDisplays2x, GetDisplays) {
+ std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays();
+ ASSERT_EQ(2u, displays.size());
+ EXPECT_EQ(gfx::Rect(0, 0, 960, 600), displays[0].bounds());
+ EXPECT_EQ(gfx::Rect(0, 0, 960, 550), displays[0].work_area());
+ EXPECT_EQ(gfx::Rect(960, 0, 400, 300), displays[1].bounds());
+ EXPECT_EQ(gfx::Rect(960, 0, 400, 300), displays[1].work_area());
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x, ScreenToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(960, 0, 100, 150),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(1920, 0, 200, 300)));
+ EXPECT_EQ(gfx::Rect(1000, 248, 50, 100),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(2000, 496, 100, 200)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x, DIPToScreenRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(126, 248, 21, 26)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(1920, 0, 200, 300),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(960, 0, 100, 150)));
+ EXPECT_EQ(gfx::Rect(2000, 496, 100, 200),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(1000, 248, 50, 100)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x, ClientToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ClientToDIPRect(right_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ClientToDIPRect(right_hwnd,
+ gfx::Rect(253, 496, 41, 52)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x, DIPToClientRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(126, 248, 21, 26)));
+}
+
+// Two Displays of 1.0 (Left) and 2.0 (Right) Device Scale Factor.
+class ScreenWinTestTwoDisplays1x2x : public ScreenWinTest {
+ public:
+ static void SetUpTestCase() {
+ ScreenWinTest::SetUpTestCase();
+ screen_win_initializer_.reset(new TestScreenWinInitializer());
+ screen_win_initializer_->AddMonitor(gfx::Rect(0, 0, 1920, 1200),
+ gfx::Rect(0, 0, 1920, 1100),
+ L"primary",
+ 1.0);
+ screen_win_initializer_->AddMonitor(gfx::Rect(1920, 0, 800, 600),
+ gfx::Rect(1920, 0, 800, 600),
+ L"secondary",
+ 2.0);
+ fake_hwnd_left_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100));
+ fake_hwnd_right_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(1920, 0, 800, 600));
+ screen_win_initializer_->InitializeScreenWin();
+ }
+
+ static void TearDownTestCase() {
+ screen_win_initializer_.reset();
+ ScreenWinTest::TearDownTestCase();
+ }
+
+ Screen* GetScreen() {
+ return screen_win_initializer_->GetScreen();
+ }
+
+ HWND GetLeftFakeHwnd() {
+ return fake_hwnd_left_;
+ }
+
+ HWND GetRightFakeHwnd() {
+ return fake_hwnd_right_;
+ }
+
+ private:
+ static scoped_ptr<TestScreenWinInitializer> screen_win_initializer_;
+ static HWND fake_hwnd_left_;
+ static HWND fake_hwnd_right_;
+};
+
+scoped_ptr<TestScreenWinInitializer>
+ScreenWinTestTwoDisplays1x2x::screen_win_initializer_;
+
+HWND ScreenWinTestTwoDisplays1x2x::fake_hwnd_left_ = NULL;
+
+HWND ScreenWinTestTwoDisplays1x2x::fake_hwnd_right_ = NULL;
+
+TEST_F(ScreenWinTestTwoDisplays1x2x, GetDisplays) {
+ std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays();
+ ASSERT_EQ(2u, displays.size());
+ EXPECT_EQ(gfx::Rect(0, 0, 1920, 1200), displays[0].bounds());
+ EXPECT_EQ(gfx::Rect(0, 0, 1920, 1100), displays[0].work_area());
+ EXPECT_EQ(gfx::Rect(1920, 0, 400, 300), displays[1].bounds());
+ EXPECT_EQ(gfx::Rect(1920, 0, 400, 300), displays[1].work_area());
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x2x, ScreenToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(253, 496, 41, 52),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(1920, 0, 100, 150),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(1920, 0, 200, 300)));
+ EXPECT_EQ(gfx::Rect(1960, 248, 50, 100),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(2000, 496, 100, 200)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x2x, DIPToScreenRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(252, 496, 42, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(1920, 0, 200, 300),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(1920, 0, 100, 150)));
+ EXPECT_EQ(gfx::Rect(2000, 496, 100, 200),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(1960, 248, 50, 100)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x2x, ClientToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(253, 496, 41, 52),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ClientToDIPRect(right_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ClientToDIPRect(right_hwnd,
+ gfx::Rect(253, 496, 41, 52)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays1x2x, DIPToClientRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(252, 496, 42, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(right_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToClientRect(right_hwnd,
+ gfx::Rect(126, 248, 21, 26)));
+}
+
+// Two Displays of 2.0 (Left) and 1.0 (Right) Device Scale Factor.
+class ScreenWinTestTwoDisplays2x1x : public ScreenWinTest {
+ public:
+ static void SetUpTestCase() {
+ ScreenWinTest::SetUpTestCase();
+ screen_win_initializer_.reset(new TestScreenWinInitializer());
+ screen_win_initializer_->AddMonitor(gfx::Rect(0, 0, 1920, 1200),
+ gfx::Rect(0, 0, 1920, 1100),
+ L"primary",
+ 2.0);
+ screen_win_initializer_->AddMonitor(gfx::Rect(1920, 0, 800, 600),
+ gfx::Rect(1920, 0, 800, 600),
+ L"secondary",
+ 1.0);
+ fake_hwnd_left_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(0, 0, 1920, 1100));
+ fake_hwnd_right_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(1920, 0, 800, 600));
+ screen_win_initializer_->InitializeScreenWin();
+ }
+
+ static void TearDownTestCase() {
+ screen_win_initializer_.reset();
+ ScreenWinTest::TearDownTestCase();
+ }
+
+ Screen* GetScreen() {
+ return screen_win_initializer_->GetScreen();
+ }
+
+ HWND GetLeftFakeHwnd() {
+ return fake_hwnd_left_;
+ }
+
+ HWND GetRightFakeHwnd() {
+ return fake_hwnd_right_;
+ }
+
+ private:
+ static scoped_ptr<TestScreenWinInitializer> screen_win_initializer_;
+ static HWND fake_hwnd_left_;
+ static HWND fake_hwnd_right_;
+};
+
+scoped_ptr<TestScreenWinInitializer>
+ScreenWinTestTwoDisplays2x1x::screen_win_initializer_;
+
+HWND ScreenWinTestTwoDisplays2x1x::fake_hwnd_left_ = NULL;
+
+HWND ScreenWinTestTwoDisplays2x1x::fake_hwnd_right_ = NULL;
+
+TEST_F(ScreenWinTestTwoDisplays2x1x, GetDisplays) {
+ std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays();
+ ASSERT_EQ(2u, displays.size());
+ EXPECT_EQ(gfx::Rect(0, 0, 960, 600), displays[0].bounds());
+ EXPECT_EQ(gfx::Rect(0, 0, 960, 550), displays[0].work_area());
+ EXPECT_EQ(gfx::Rect(960, 0, 800, 600), displays[1].bounds());
+ EXPECT_EQ(gfx::Rect(960, 0, 800, 600), displays[1].work_area());
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1x, ScreenToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(960, 0, 200, 300),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(1920, 0, 200, 300)));
+ EXPECT_EQ(gfx::Rect(1040, 496, 100, 200),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(2000, 496, 100, 200)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1x, DIPToScreenRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(126, 248, 21, 26)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(1920, 0, 200, 300),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(960, 0, 200, 300)));
+ EXPECT_EQ(gfx::Rect(2000, 496, 100, 200),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(1040, 496, 100, 200)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1x, ClientToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::ClientToDIPRect(right_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(253, 496, 41, 52),
+ ScreenWin::ClientToDIPRect(right_hwnd,
+ gfx::Rect(253, 496, 41, 52)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1x, DIPToClientRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(126, 248, 21, 26)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(right_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(253, 496, 41, 52),
+ ScreenWin::DIPToClientRect(right_hwnd,
+ gfx::Rect(253, 496, 41, 52)));
+}
+
+// Two Displays of 2.0 (Left) and 1.0 (Right) Device Scale Factor under
+// Windows DPI Virtualization. Note that the displays do not form a euclidean
+// space.
+class ScreenWinTestTwoDisplays2x1xVirtualized : public ScreenWinTest {
+ public:
+ static void SetUpTestCase() {
+ ScreenWinTest::SetUpTestCase();
+ screen_win_initializer_.reset(new TestScreenWinInitializer());
+ screen_win_initializer_->AddMonitor(gfx::Rect(0, 0, 3200, 1600),
+ gfx::Rect(0, 0, 3200, 1500),
+ L"primary",
+ 2.0);
+ screen_win_initializer_->AddMonitor(gfx::Rect(6400, 0, 3840, 2400),
+ gfx::Rect(6400, 0, 3840, 2400),
+ L"secondary",
+ 2.0);
+ fake_hwnd_left_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(0, 0, 3200, 1500));
+ fake_hwnd_right_ =
+ screen_win_initializer_->CreateFakeHwnd(gfx::Rect(6400, 0, 3840, 2400));
+ screen_win_initializer_->InitializeScreenWin();
+ }
+
+ static void TearDownTestCase() {
+ screen_win_initializer_.reset();
+ ScreenWinTest::TearDownTestCase();
+ }
+
+ Screen* GetScreen() {
+ return screen_win_initializer_->GetScreen();
+ }
+
+ HWND GetLeftFakeHwnd() {
+ return fake_hwnd_left_;
+ }
+
+ HWND GetRightFakeHwnd() {
+ return fake_hwnd_right_;
+ }
+
+ private:
+ static scoped_ptr<TestScreenWinInitializer> screen_win_initializer_;
+ static HWND fake_hwnd_left_;
+ static HWND fake_hwnd_right_;
+};
+
+scoped_ptr<TestScreenWinInitializer>
+ScreenWinTestTwoDisplays2x1xVirtualized::screen_win_initializer_;
+
+HWND ScreenWinTestTwoDisplays2x1xVirtualized::fake_hwnd_left_ = NULL;
+
+HWND ScreenWinTestTwoDisplays2x1xVirtualized::fake_hwnd_right_ = NULL;
+
+TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, GetDisplays) {
+ std::vector<gfx::Display> displays = GetScreen()->GetAllDisplays();
+ ASSERT_EQ(2u, displays.size());
+ EXPECT_EQ(gfx::Rect(0, 0, 1600, 800), displays[0].bounds());
+ EXPECT_EQ(gfx::Rect(0, 0, 1600, 750), displays[0].work_area());
+ EXPECT_EQ(gfx::Rect(3200, 0, 1920, 1200), displays[1].bounds());
+ EXPECT_EQ(gfx::Rect(3200, 0, 1920, 1200), displays[1].work_area());
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, ScreenToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ScreenToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(3200, 0, 100, 150),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(6400, 0, 200, 300)));
+ EXPECT_EQ(gfx::Rect(3500, 248, 50, 100),
+ ScreenWin::ScreenToDIPRect(right_hwnd,
+ gfx::Rect(7000, 496, 100, 200)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, DIPToScreenRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToScreenRect(left_hwnd, gfx::Rect(126, 248, 21, 26)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(6400, 0, 200, 300),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(3200, 0, 100, 150)));
+ EXPECT_EQ(gfx::Rect(7000, 496, 100, 200),
+ ScreenWin::DIPToScreenRect(right_hwnd,
+ gfx::Rect(3500, 248, 50, 100)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, ClientToDIPRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ClientToDIPRect(left_hwnd, gfx::Rect(253, 496, 41, 52)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 25, 50),
+ ScreenWin::ClientToDIPRect(right_hwnd, gfx::Rect(0, 0, 50, 100)));
+ EXPECT_EQ(gfx::Rect(126, 248, 21, 26),
+ ScreenWin::ClientToDIPRect(right_hwnd,
+ gfx::Rect(253, 496, 41, 52)));
+}
+
+TEST_F(ScreenWinTestTwoDisplays2x1xVirtualized, DIPToClientRects) {
+ HWND left_hwnd = GetLeftFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToClientRect(left_hwnd, gfx::Rect(126, 248, 21, 26)));
+
+ HWND right_hwnd = GetRightFakeHwnd();
+ EXPECT_EQ(gfx::Rect(0, 0, 50, 100),
+ ScreenWin::DIPToClientRect(right_hwnd, gfx::Rect(0, 0, 25, 50)));
+ EXPECT_EQ(gfx::Rect(252, 496, 42, 52),
+ ScreenWin::DIPToClientRect(right_hwnd,
+ gfx::Rect(126, 248, 21, 26)));
+}
+
} // namespace gfx

Powered by Google App Engine
This is Rietveld 408576698