From 9459eff58c64acd3520248f72fada5c0f9534032 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 18 Mar 2025 20:07:30 +0100 Subject: [PATCH] Fix regression in game viewport DPI scale usage #2976 809fd2653ad0ef667f286b0dc7dc150fe138a63f --- Source/Editor/Editor.cs | 7 +++++-- Source/Engine/Engine/Screen.cpp | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 8d42ddea1..ee9251a69 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -1514,7 +1514,8 @@ namespace FlaxEditor var win = Windows.GameWin?.Root; if (win?.RootWindow is WindowRootControl root) { - pos = Float2.Round(Windows.GameWin.Viewport.PointFromScreen(pos) * root.DpiScale); + pos = Windows.GameWin.Viewport.PointFromScreen(pos); + pos = Float2.Round(pos); } else { @@ -1527,7 +1528,8 @@ namespace FlaxEditor var win = Windows.GameWin?.Root; if (win?.RootWindow is WindowRootControl root) { - pos = Float2.Round(Windows.GameWin.Viewport.PointToScreen(pos / root.DpiScale)); + pos = Windows.GameWin.Viewport.PointToScreen(pos); + pos = Float2.Round(pos); } else { @@ -1559,6 +1561,7 @@ namespace FlaxEditor else result = gameWin.Viewport.Size; + result *= root.DpiScale; result = Float2.Round(result); } } diff --git a/Source/Engine/Engine/Screen.cpp b/Source/Engine/Engine/Screen.cpp index ae644ad61..5c3e9670d 100644 --- a/Source/Engine/Engine/Screen.cpp +++ b/Source/Engine/Engine/Screen.cpp @@ -74,7 +74,7 @@ Float2 Screen::ScreenToGameViewport(const Float2& screenPos) return Editor::Managed->ScreenToGameViewport(screenPos); #else auto win = Engine::MainWindow; - return win ? win->ScreenToClient(screenPos) : Float2::Minimum; + return win ? win->ScreenToClient(screenPos) / win->GetDpiScale() : Float2::Minimum; #endif } @@ -84,7 +84,7 @@ Float2 Screen::GameViewportToScreen(const Float2& viewportPos) return Editor::Managed->GameViewportToScreen(viewportPos); #else auto win = Engine::MainWindow; - return win ? win->ClientToScreen(viewportPos) : Float2::Minimum; + return win ? win->ClientToScreen(viewportPos * win->GetDpiScale()) : Float2::Minimum; #endif }