From 4170dcc1d5821662163f6a72f36fa7ef9ec4c371 Mon Sep 17 00:00:00 2001 From: Michael Bucari-Tovo Date: Fri, 28 Feb 2025 15:39:31 -0700 Subject: [PATCH] Chardonnay UI bug fixes and improvements - Theme changes do not require restart - Fix some text appearing black in dark mode - Fix dialog boxes not appearing correctly on Windows - Fix queue vertical scroll bar overlapping items --- Source/LibationAvalonia/App.axaml | 59 ++++++++++++ .../Assets/LibationVectorIcons.xaml | 26 ++++++ .../Controls/Settings/Important.axaml | 11 +-- .../LibationAvalonia/Dialogs/DialogWindow.cs | 93 +++++++++++++++++-- .../Dialogs/ScanAccountsDialog.axaml.cs | 1 - .../Dialogs/SearchSyntaxDialog.axaml.cs | 2 - Source/LibationAvalonia/FormSaveExtension.cs | 18 ---- Source/LibationAvalonia/MessageBox.cs | 10 +- .../Settings/ImportantSettingsVM.cs | 11 ++- .../Views/ProcessQueueControl.axaml | 5 +- 10 files changed, 188 insertions(+), 48 deletions(-) diff --git a/Source/LibationAvalonia/App.axaml b/Source/LibationAvalonia/App.axaml index 5ba253c0..e61e851a 100644 --- a/Source/LibationAvalonia/App.axaml +++ b/Source/LibationAvalonia/App.axaml @@ -2,6 +2,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:LibationAvalonia" xmlns:controls="using:LibationAvalonia.Controls" + xmlns:dialogs="using:LibationAvalonia.Dialogs" x:Class="LibationAvalonia.App" Name="Libation"> @@ -12,6 +13,10 @@ + + + + @@ -81,6 +86,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/LibationAvalonia/Assets/LibationVectorIcons.xaml b/Source/LibationAvalonia/Assets/LibationVectorIcons.xaml index 9c9d7ec2..095307ae 100644 --- a/Source/LibationAvalonia/Assets/LibationVectorIcons.xaml +++ b/Source/LibationAvalonia/Assets/LibationVectorIcons.xaml @@ -91,6 +91,32 @@ S 192,128 147,147 + + M262,8 + h-117 + a 192,200 0 0 0 -36,82 + a 222,334 41 0 0 138,236 + v158 + h-81 + a 16,16 0 0 0 0,32 + h192 + a 16 16 0 0 0 0,-32 + h-81 + v-158 + a 222,334 -41 0 0 138,-236 + a 192,200 0 0 0 -36,-82 + h-117 + m-99,30 + a 192,200 0 0 0 -26,95 + a 187.5,334 35 0 0 125,159 + a 187.5,334 -35 0 0 125,-159 + a 192,200 0 0 0 -26,-95 + h-198 + M158,136 + a 168,305 35 0 0 104,136 + a 168,305 -35 0 0 104,-136 + + diff --git a/Source/LibationAvalonia/Controls/Settings/Important.axaml b/Source/LibationAvalonia/Controls/Settings/Important.axaml index 9f77b898..6653b82a 100644 --- a/Source/LibationAvalonia/Controls/Settings/Important.axaml +++ b/Source/LibationAvalonia/Controls/Settings/Important.axaml @@ -166,16 +166,7 @@ MinWidth="80" SelectedItem="{CompiledBinding ThemeVariant, Mode=TwoWay}" ItemsSource="{CompiledBinding Themes}"/> - - - + diff --git a/Source/LibationAvalonia/Dialogs/DialogWindow.cs b/Source/LibationAvalonia/Dialogs/DialogWindow.cs index e6213841..38dcd109 100644 --- a/Source/LibationAvalonia/Dialogs/DialogWindow.cs +++ b/Source/LibationAvalonia/Dialogs/DialogWindow.cs @@ -1,4 +1,6 @@ -using Avalonia.Controls; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; using LibationFileManager; using System; using System.Threading.Tasks; @@ -9,19 +11,98 @@ namespace LibationAvalonia.Dialogs { public bool SaveAndRestorePosition { get; set; } = true; public Control ControlToFocusOnShow { get; set; } + protected override Type StyleKeyOverride => typeof(DialogWindow); + + public static readonly StyledProperty UseCustomTitleBarProperty = + AvaloniaProperty.Register(nameof(UseCustomTitleBar)); + + public bool UseCustomTitleBar + { + get { return GetValue(UseCustomTitleBarProperty); } + set { SetValue(UseCustomTitleBarProperty, value); } + } + public DialogWindow() { - this.HideMinMaxBtns(); - this.KeyDown += DialogWindow_KeyDown; - this.Initialized += DialogWindow_Initialized; - this.Opened += DialogWindow_Opened; - this.Closing += DialogWindow_Closing; + KeyDown += DialogWindow_KeyDown; + Initialized += DialogWindow_Initialized; + Opened += DialogWindow_Opened; + Closing += DialogWindow_Closing; + + UseCustomTitleBar = Configuration.IsWindows; } + + private bool fixedMinHeight = false; + private bool fixedMaxHeight = false; + private bool fixedHeight = false; + + protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) + { + const int customTitleBarHeight = 30; + if (UseCustomTitleBar) + { + if (change.Property == MinHeightProperty && !fixedMinHeight) + { + fixedMinHeight = true; + MinHeight += customTitleBarHeight; + fixedMinHeight = false; + } + if (change.Property == MaxHeightProperty && !fixedMaxHeight) + { + fixedMaxHeight = true; + MaxHeight += customTitleBarHeight; + fixedMaxHeight = false; + } + if (change.Property == HeightProperty && !fixedHeight) + { + fixedHeight = true; + Height += customTitleBarHeight; + fixedHeight = false; + } + } + base.OnPropertyChanged(change); + } + public DialogWindow(bool saveAndRestorePosition) : this() { SaveAndRestorePosition = saveAndRestorePosition; } + protected override void OnApplyTemplate(TemplateAppliedEventArgs e) + { + base.OnApplyTemplate(e); + + if (!UseCustomTitleBar) + return; + + var closeButton = e.NameScope.Find