From 5ad15ab8c874f91ea6e4ef179b7e7b13ed08d635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Moreau?= Date: Thu, 12 Mar 2026 15:58:14 -0400 Subject: [PATCH] Reapply DPI sizing fixes after formatting --- src/UniGetUI/Controls/CustomNavViewItem.cs | 8 +-- src/UniGetUI/MainWindow.xaml.cs | 53 +++++++++++++++---- .../Pages/DialogPages/PackageDetailsPage.xaml | 12 ++--- .../DialogPages/PackageDetailsPage.xaml.cs | 2 +- .../Pages/SettingsPages/SettingsBasePage.xaml | 6 +-- .../SoftwarePages/AbstractPackagesPage.xaml | 28 +++++----- .../AbstractPackagesPage.xaml.cs | 4 +- 7 files changed, 74 insertions(+), 39 deletions(-) diff --git a/src/UniGetUI/Controls/CustomNavViewItem.cs b/src/UniGetUI/Controls/CustomNavViewItem.cs index b1b45000c..c32a8159e 100644 --- a/src/UniGetUI/Controls/CustomNavViewItem.cs +++ b/src/UniGetUI/Controls/CustomNavViewItem.cs @@ -9,7 +9,7 @@ namespace UniGetUI.Controls; internal sealed partial class CustomNavViewItem : NavigationViewItem { - int _iconSize = 28; + int _iconSize = 24; public IconType LocalIcon { set => base.Icon = new LocalIcon(value); @@ -62,15 +62,15 @@ public string Text public CustomNavViewItem() { - Height = 60; + Height = 54; Resources["NavigationViewItemOnLeftIconBoxHeight"] = _iconSize; Resources["NavigationViewItemContentPresenterMargin"] = new Thickness(0); - var grid = new Grid { Height = 50 }; + var grid = new Grid { Height = 44 }; _progressRing = new ProgressRing { - Margin = new Thickness(-46, 0, 0, 0), + Margin = new Thickness(-42, 0, 0, 0), HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Center, IsIndeterminate = true, diff --git a/src/UniGetUI/MainWindow.xaml.cs b/src/UniGetUI/MainWindow.xaml.cs index 1fd430387..20bfb5cf0 100644 --- a/src/UniGetUI/MainWindow.xaml.cs +++ b/src/UniGetUI/MainWindow.xaml.cs @@ -748,6 +748,27 @@ public IntPtr GetWindowHandle() return WinRT.Interop.WindowNative.GetWindowHandle(this); } + private double GetWindowRasterizationScale() + { + uint dpi = NativeHelpers.GetDpiForWindow(GetWindowHandle()); + if (dpi > 0) + { + return dpi / 96.0; + } + + return MainContentGrid.XamlRoot?.RasterizationScale ?? 1.0; + } + + private int ConvertPhysicalPixelsToDips(int physicalPixels) + { + return (int)Math.Round(physicalPixels / Math.Max(GetWindowRasterizationScale(), 0.01)); + } + + private int ConvertDipsToPhysicalPixels(int dips) + { + return Math.Max(1, (int)Math.Round(dips * GetWindowRasterizationScale())); + } + public async Task HandleMissingDependencies(IReadOnlyList dependencies) { int current = 1; @@ -803,7 +824,7 @@ private async Task SaveGeometry(bool Force = false) } string geometry = - $"{AppWindow.Position.X},{AppWindow.Position.Y},{AppWindow.Size.Width},{AppWindow.Size.Height},{windowState}"; + $"v2,{AppWindow.Position.X},{AppWindow.Position.Y},{ConvertPhysicalPixelsToDips(AppWindow.Size.Width)},{ConvertPhysicalPixelsToDips(AppWindow.Size.Height)},{windowState}"; Logger.Debug($"Saving window geometry {geometry}"); Settings.SetValue(Settings.K.WindowGeometry, geometry); @@ -818,10 +839,10 @@ private void RestoreGeometry() { string geometry = Settings.GetValue(Settings.K.WindowGeometry); string[] items = geometry.Split(","); - if (items.Length != 5) + if (items.Length is not (5 or 6)) { Logger.Warn( - $"The restored geometry did not have exactly 5 items (found length was {items.Length})" + $"The restored geometry did not have a supported item count (found length was {items.Length})" ); return; } @@ -833,11 +854,22 @@ private void RestoreGeometry() State; try { - X = int.Parse(items[0]); - Y = int.Parse(items[1]); - Width = int.Parse(items[2]); - Height = int.Parse(items[3]); - State = int.Parse(items[4]); + if (items.Length == 6 && items[0] == "v2") + { + X = int.Parse(items[1]); + Y = int.Parse(items[2]); + Width = ConvertDipsToPhysicalPixels(int.Parse(items[3])); + Height = ConvertDipsToPhysicalPixels(int.Parse(items[4])); + State = int.Parse(items[5]); + } + else + { + X = int.Parse(items[0]); + Y = int.Parse(items[1]); + Width = int.Parse(items[2]); + Height = int.Parse(items[3]); + State = int.Parse(items[4]); + } } catch (Exception ex) { @@ -936,7 +968,7 @@ private void TitleBar_PaneToggleRequested(TitleBar sender, object args) if (NavigationPage is null) return; - if (this.AppWindow.Size.Width >= 1600) + if (MainContentGrid.ActualWidth >= 1600) { Settings.Set( Settings.K.CollapseNavMenuOnWideScreen, @@ -1005,6 +1037,9 @@ public static class NativeHelpers [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetForegroundWindow(IntPtr hWnd); + [DllImport("user32.dll")] + public static extern uint GetDpiForWindow(IntPtr hWnd); + public const int MONITORINFOF_PRIMARY = 0x00000001; [StructLayout(LayoutKind.Sequential)] diff --git a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml index 0cf1db206..6b2d131ae 100644 --- a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml +++ b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml @@ -39,13 +39,13 @@ - + diff --git a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs index 963db2f08..fb25feac0 100644 --- a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs @@ -581,7 +581,7 @@ public void PackageDetailsPage_SizeChanged( SizeChangedEventArgs? e = null ) { - if (MainApp.Instance.MainWindow.AppWindow.Size.Width < 950) + if (ActualWidth < 950) { if (__layout_mode != LayoutMode.Normal) { diff --git a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml index 963fe56d9..eb7dba763 100644 --- a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml +++ b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml @@ -44,8 +44,8 @@