From a4d8405957197c19fef0735978a52c49f4d3a5eb Mon Sep 17 00:00:00 2001 From: Noraa Junker Date: Fri, 5 Dec 2025 14:54:13 +0100 Subject: [PATCH] Fix dpi issues in Quick Accent (#43314) ## Summary of the Pull Request ## PR Checklist - [x] Closes: #40865 - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx ## Detailed Description of the Pull Request / Additional comments ## Validation Steps Performed --- .../poweraccent/PowerAccent.Core/PowerAccent.cs | 5 ++--- .../poweraccent/PowerAccent.Core/Tools/Calculation.cs | 10 +++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs index a50eedfc1b..d538d5d139 100644 --- a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs +++ b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs @@ -324,13 +324,12 @@ public partial class PowerAccent : IDisposable public Point GetDisplayCoordinates(Size window) { (Point Location, Size Size, double Dpi) activeDisplay = WindowsFunctions.GetActiveDisplay(); - double primaryDPI = Screen.PrimaryScreen.Bounds.Width / SystemParameters.PrimaryScreenWidth; - Rect screen = new Rect(activeDisplay.Location, activeDisplay.Size) / primaryDPI; + Rect screen = new(activeDisplay.Location, activeDisplay.Size); Position position = _settingService.Position; /* Debug.WriteLine("Dpi: " + activeDisplay.Dpi); */ - return Calculation.GetRawCoordinatesFromPosition(position, screen, window); + return Calculation.GetRawCoordinatesFromPosition(position, screen, window, activeDisplay.Dpi) / activeDisplay.Dpi; } public double GetDisplayMaxWidth() diff --git a/src/modules/poweraccent/PowerAccent.Core/Tools/Calculation.cs b/src/modules/poweraccent/PowerAccent.Core/Tools/Calculation.cs index 4929af535b..0945bfc99f 100644 --- a/src/modules/poweraccent/PowerAccent.Core/Tools/Calculation.cs +++ b/src/modules/poweraccent/PowerAccent.Core/Tools/Calculation.cs @@ -18,18 +18,18 @@ namespace PowerAccent.Core.Tools top < screen.Y ? caret.Y + 20 : top); } - public static Point GetRawCoordinatesFromPosition(Position position, Rect screen, Size window) + public static Point GetRawCoordinatesFromPosition(Position position, Rect screen, Size window, double dpi) { int offset = 24; double pointX = position switch { Position.Top or Position.Bottom or Position.Center - => screen.X + (screen.Width / 2) - (window.Width / 2), + => screen.X + (screen.Width / 2) - (window.Width * dpi / 2), Position.TopLeft or Position.Left or Position.BottomLeft => screen.X + offset, Position.TopRight or Position.Right or Position.BottomRight - => screen.X + screen.Width - (window.Width + offset), + => screen.X + screen.Width - ((window.Width * dpi) + offset), _ => throw new NotImplementedException(), }; @@ -38,9 +38,9 @@ namespace PowerAccent.Core.Tools Position.TopLeft or Position.Top or Position.TopRight => screen.Y + offset, Position.Left or Position.Center or Position.Right - => screen.Y + (screen.Height / 2) - (window.Height / 2), + => screen.Y + (screen.Height / 2) - (window.Height * dpi / 2), Position.BottomLeft or Position.Bottom or Position.BottomRight - => screen.Y + screen.Height - (window.Height + offset), + => screen.Y + screen.Height - ((window.Height * dpi) + offset), _ => throw new NotImplementedException(), };