win: Reland screen_1443650 changes (fixes #3489)
Use ScaleToRoundedRect instead of ScaleToEnclosedRect.
This commit is contained in:
parent
980cc4b9fe
commit
b070564ec5
|
@ -611,6 +611,11 @@ patches = [
|
|||
# Create top-level widget type when Widget::InitParams::child is false.
|
||||
'name': 'ui_views_widget_type'
|
||||
},
|
||||
{
|
||||
# win/linux: Fix rounding errors with Screen[Win] DIP/pixel conversions.
|
||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=1443650#c18
|
||||
'name': 'screen_1443650'
|
||||
},
|
||||
{
|
||||
# mac: Keep bubble popups on-screen.
|
||||
# https://bugs.chromium.org/p/chromium/issues/detail?id=893292#c10
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
diff --git ui/display/screen.cc ui/display/screen.cc
|
||||
index 3090a05e91f31..d9667f9526278 100644
|
||||
--- ui/display/screen.cc
|
||||
+++ ui/display/screen.cc
|
||||
@@ -108,13 +108,13 @@ base::TimeDelta Screen::CalculateIdleTime() const {
|
||||
gfx::Rect Screen::ScreenToDIPRectInWindow(gfx::NativeWindow window,
|
||||
const gfx::Rect& screen_rect) const {
|
||||
float scale = GetDisplayNearestWindow(window).device_scale_factor();
|
||||
- return ScaleToEnclosingRect(screen_rect, 1.0f / scale);
|
||||
+ return ScaleToRoundedRect(screen_rect, 1.0f / scale);
|
||||
}
|
||||
|
||||
gfx::Rect Screen::DIPToScreenRectInWindow(gfx::NativeWindow window,
|
||||
const gfx::Rect& dip_rect) const {
|
||||
float scale = GetDisplayNearestWindow(window).device_scale_factor();
|
||||
- return ScaleToEnclosingRect(dip_rect, scale);
|
||||
+ return ScaleToRoundedRect(dip_rect, scale);
|
||||
}
|
||||
|
||||
bool Screen::GetDisplayWithDisplayId(int64_t display_id,
|
||||
diff --git ui/display/win/screen_win.cc ui/display/win/screen_win.cc
|
||||
index 767d02f5b660a..f6926e4ef96fa 100644
|
||||
--- ui/display/win/screen_win.cc
|
||||
+++ ui/display/win/screen_win.cc
|
||||
@@ -619,7 +619,7 @@ gfx::Rect ScreenWin::ScreenToDIPRect(HWND hwnd, const gfx::Rect& pixel_bounds) {
|
||||
gfx::PointF(pixel_bounds.origin()), screen_win_display));
|
||||
const float scale_factor =
|
||||
1.0f / screen_win_display.display().device_scale_factor();
|
||||
- return {origin, ScaleToEnclosingRect(pixel_bounds, scale_factor).size()};
|
||||
+ return {origin, ScaleToRoundedRect(pixel_bounds, scale_factor).size()};
|
||||
}
|
||||
|
||||
// static
|
||||
@@ -634,7 +634,7 @@ gfx::Rect ScreenWin::DIPToScreenRect(HWND hwnd, const gfx::Rect& dip_bounds) {
|
||||
const gfx::Point origin =
|
||||
display::win::DIPToScreenPoint(dip_bounds.origin(), screen_win_display);
|
||||
const float scale_factor = screen_win_display.display().device_scale_factor();
|
||||
- return {origin, ScaleToEnclosingRect(dip_bounds, scale_factor).size()};
|
||||
+ return {origin, ScaleToRoundedRect(dip_bounds, scale_factor).size()};
|
||||
}
|
||||
|
||||
// static
|
Loading…
Reference in New Issue