| Index: ui/gfx/win/screen_win_display.cc
|
| diff --git a/ui/gfx/win/screen_win_display.cc b/ui/gfx/win/screen_win_display.cc
|
| index ccef28aafc0279aa73ce71c36cafd12962cf25f0..058adb19bd9d263622b64fe1d613ecd6aff43dfc 100644
|
| --- a/ui/gfx/win/screen_win_display.cc
|
| +++ b/ui/gfx/win/screen_win_display.cc
|
| @@ -4,21 +4,46 @@
|
|
|
| #include "ui/gfx/win/screen_win_display.h"
|
|
|
| +#include "ui/gfx/geometry/insets.h"
|
| #include "ui/gfx/win/display_info.h"
|
| #include "ui/gfx/win/dpi.h"
|
| +#include "ui/gfx/win/rect_util.h"
|
|
|
| namespace {
|
|
|
| gfx::Display CreateDisplayFromDisplayInfo(
|
| const gfx::win::DisplayInfo& display_info) {
|
| gfx::Display display(display_info.id());
|
| - gfx::Rect dip_screen_bounds(
|
| - gfx::win::ScreenToDIPRect(display_info.screen_rect()));
|
| - display.set_bounds(dip_screen_bounds);
|
| + float scale_factor = display_info.device_scale_factor();
|
| + display.set_device_scale_factor(scale_factor);
|
| display.set_work_area(
|
| - gfx::win::ScreenToDIPRect(display_info.screen_work_rect()));
|
| - display.SetScaleAndBounds(display_info.device_scale_factor(),
|
| - display_info.screen_rect());
|
| + gfx::ScaleToEnclosingRect(display_info.screen_work_rect(),
|
| + 1.0f / scale_factor));
|
| + display.set_bounds(gfx::ScaleToEnclosingRect(display_info.screen_rect(),
|
| + 1.0f / scale_factor));
|
| + display.set_rotation(display_info.rotation());
|
| + return display;
|
| +}
|
| +
|
| +gfx::Display CreateDisplayWithReferenceFromDisplayInfo(
|
| + const gfx::win::ScreenWinDisplay& reference,
|
| + const gfx::win::DisplayInfo& display_info) {
|
| + gfx::Display display(display_info.id());
|
| + float scale_factor = display_info.device_scale_factor();
|
| + display.set_device_scale_factor(scale_factor);
|
| + const gfx::Insets pixel_insets =
|
| + display_info.screen_rect().InsetsFrom(display_info.screen_work_rect());
|
| + const gfx::Insets scaled_insets = pixel_insets.Scale(1.0f / scale_factor,
|
| + 1.0f / scale_factor);
|
| + const gfx::Rect scaled_bounds =
|
| + gfx::win::ScaleAndPositionRect(reference.display().bounds(),
|
| + reference.pixel_bounds(),
|
| + display_info.screen_rect(),
|
| + scale_factor);
|
| + display.set_bounds(scaled_bounds);
|
| + gfx::Rect scaled_work_area(scaled_bounds);
|
| + scaled_work_area.Inset(scaled_insets);
|
| + display.set_work_area(scaled_work_area);
|
| display.set_rotation(display_info.rotation());
|
| return display;
|
| }
|
| @@ -34,5 +59,11 @@ ScreenWinDisplay::ScreenWinDisplay(const DisplayInfo& display_info)
|
| : display_(CreateDisplayFromDisplayInfo(display_info)),
|
| pixel_bounds_(display_info.screen_rect()) {}
|
|
|
| +ScreenWinDisplay::ScreenWinDisplay(const ScreenWinDisplay& reference,
|
| + const DisplayInfo& display_info)
|
| + : display_(CreateDisplayWithReferenceFromDisplayInfo(reference,
|
| + display_info)),
|
| + pixel_bounds_(display_info.screen_rect()) {}
|
| +
|
| } // namespace win
|
| } // namespace gfx
|
|
|