From 5e27379e55fdde541a8de90187cf23fc92650595 Mon Sep 17 00:00:00 2001 From: William Date: Sat, 25 Jan 2025 17:32:28 +0000 Subject: [PATCH] Overhaul general window styling, use acrylic backgrounds (#458) --- src/SerialLoops/App.axaml | 35 +++- src/SerialLoops/Assets/Icons/AppIconDark.png | Bin 0 -> 16970 bytes src/SerialLoops/Assets/Icons/AppIconDark.svg | 76 +++++++++ src/SerialLoops/Assets/Icons/AppIconLight.png | Bin 0 -> 15644 bytes src/SerialLoops/Assets/Icons/AppIconLight.svg | 76 +++++++++ src/SerialLoops/Assets/Strings.Designer.cs | 90 ++++++----- src/SerialLoops/Assets/Strings.en-GB.resx | 3 + src/SerialLoops/Assets/Strings.resx | 10 +- .../Controls/LoopyProgressTracker.cs | 30 +++- .../ViewModels/MainWindowViewModel.cs | 15 +- .../Panels/EditorTabsPanelViewModel.cs | 9 +- .../Views/Dialogs/ProgressDialog.cs | 22 ++- .../Views/Dialogs/SearchDialog.axaml | 152 ++++++++++-------- src/SerialLoops/Views/MainWindow.axaml | 42 +++-- .../Views/Panels/EditorTabsPanel.axaml | 76 ++++++--- src/SerialLoops/Views/Panels/HomePanel.axaml | 2 +- 16 files changed, 467 insertions(+), 171 deletions(-) create mode 100644 src/SerialLoops/Assets/Icons/AppIconDark.png create mode 100644 src/SerialLoops/Assets/Icons/AppIconDark.svg create mode 100644 src/SerialLoops/Assets/Icons/AppIconLight.png create mode 100644 src/SerialLoops/Assets/Icons/AppIconLight.svg diff --git a/src/SerialLoops/App.axaml b/src/SerialLoops/App.axaml index 5161d2ab..2388b0f4 100644 --- a/src/SerialLoops/App.axaml +++ b/src/SerialLoops/App.axaml @@ -6,6 +6,7 @@ xmlns:local="using:SerialLoops" xmlns:mintoolbarthemes="using:MiniToolbar.Avalonia.Themes" xmlns:tabaloniathemes="using:Tabalonia.Themes.Custom" + xmlns:system="using:System" RequestedThemeVariant="Default"> @@ -65,6 +66,15 @@ + + @@ -84,22 +94,41 @@ + White + 0.65 + 0.9 + avares://SerialLoops/Assets/Icons/AppIconLight.png Blue - DarkGray - DarkGray + #77000000 + #44000000 + #77000000 + #55000000 #CCCCCC Transparent - DarkGray + #55000000 + Transparent #55000000 + + + Black + 0.4 + 1 + avares://SerialLoops/Assets/Icons/AppIconDark.png Cyan + Gray + DimGray Gray WhiteSmoke #222222 Transparent Gray + Transparent #AAFFFFFF + + + diff --git a/src/SerialLoops/Assets/Icons/AppIconDark.png b/src/SerialLoops/Assets/Icons/AppIconDark.png new file mode 100644 index 0000000000000000000000000000000000000000..56cb2fd5729c10f49c3450597e9972983f8789a2 GIT binary patch literal 16970 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 literal 0 HcmV?d00001 diff --git a/src/SerialLoops/Assets/Icons/AppIconDark.svg b/src/SerialLoops/Assets/Icons/AppIconDark.svg new file mode 100644 index 00000000..93f9e098 --- /dev/null +++ b/src/SerialLoops/Assets/Icons/AppIconDark.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + diff --git a/src/SerialLoops/Assets/Icons/AppIconLight.png b/src/SerialLoops/Assets/Icons/AppIconLight.png new file mode 100644 index 0000000000000000000000000000000000000000..59b6f568378e184f9985f9d3917d92a8c4052b0e GIT binary patch literal 15644 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 KWqwF~4gMc9SPjDf literal 0 HcmV?d00001 diff --git a/src/SerialLoops/Assets/Icons/AppIconLight.svg b/src/SerialLoops/Assets/Icons/AppIconLight.svg new file mode 100644 index 00000000..525d2557 --- /dev/null +++ b/src/SerialLoops/Assets/Icons/AppIconLight.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + diff --git a/src/SerialLoops/Assets/Strings.Designer.cs b/src/SerialLoops/Assets/Strings.Designer.cs index c15ec4d1..5f230d9d 100644 --- a/src/SerialLoops/Assets/Strings.Designer.cs +++ b/src/SerialLoops/Assets/Strings.Designer.cs @@ -1837,8 +1837,8 @@ public static string devkitARM_Docker_Tag { /// public static string devkitARM_is_not_detected_at_the_default_or_specified_install_location__Please_set_devkitARM_path_ { get { - return ResourceManager.GetString(("devkitARM is not detected at the default or specified install location. Please se" + - "t devkitARM path."), resourceCulture); + return ResourceManager.GetString("devkitARM is not detected at the default or specified install location. Please se" + + "t devkitARM path.", resourceCulture); } } @@ -2531,8 +2531,8 @@ public static string ERROR___0_ { /// public static string Error__duplicate_hack_detected__A_file_with_the_same_name_as_a_file_in_this_hack_has_already_been_imported_ { get { - return ResourceManager.GetString(("Error: duplicate hack detected! A file with the same name as a file in this hack " + - "has already been imported."), resourceCulture); + return ResourceManager.GetString("Error: duplicate hack detected! A file with the same name as a file in this hack " + + "has already been imported.", resourceCulture); } } @@ -2541,8 +2541,8 @@ public static string Error__duplicate_hack_detected__A_file_with_the_same_name_a /// public static string Error__duplicate_hack_detected__A_hack_with_the_same_name_has_already_been_imported_ { get { - return ResourceManager.GetString(("Error: duplicate hack detected! A hack with the same name has already been import" + - "ed."), resourceCulture); + return ResourceManager.GetString("Error: duplicate hack detected! A hack with the same name has already been import" + + "ed.", resourceCulture); } } @@ -3051,8 +3051,8 @@ public static string Failed_to_add_parameters_for_hack_file__0__in_hack__1_ { /// public static string Failed_to_apply_the_following_hacks_to_the_ROM__n_0__n_nPlease_check_the_log_file_for_more_information__n_nIn_order_to_preserve_state__no_hacks_were_applied_ { get { - return ResourceManager.GetString(("Failed to apply the following hacks to the ROM:\\n{0}\\n\\nPlease check the log file" + - " for more information.\\n\\nIn order to preserve state, no hacks were applied."), resourceCulture); + return ResourceManager.GetString("Failed to apply the following hacks to the ROM:\\n{0}\\n\\nPlease check the log file" + + " for more information.\\n\\nIn order to preserve state, no hacks were applied.", resourceCulture); } } @@ -3133,8 +3133,8 @@ public static string Failed_to_delete_file___0__ { /// public static string Failed_to_delete_files_for_hack___0______this_hack_is_likely_applied_in_the_ROM_base_and_can_t_be_disabled_ { get { - return ResourceManager.GetString(("Failed to delete files for hack \'{0}\' -- this hack is likely applied in the ROM b" + - "ase and can\'t be disabled."), resourceCulture); + return ResourceManager.GetString("Failed to delete files for hack \'{0}\' -- this hack is likely applied in the ROM b" + + "ase and can\'t be disabled.", resourceCulture); } } @@ -3224,8 +3224,8 @@ public static string Failed_to_export_system_texture__0__to_file__1_ { /// public static string Failed_to_find_character_item____have_you_saved_all_of_your_changes_to_character_names_ { get { - return ResourceManager.GetString(("Failed to find character item -- have you saved all of your changes to character " + - "names?"), resourceCulture); + return ResourceManager.GetString("Failed to find character item -- have you saved all of your changes to character " + + "names?", resourceCulture); } } @@ -3387,8 +3387,8 @@ public static string Failed_to_replace_item__0__with_file__1_ { /// public static string Failed_to_replace_screen_image__image_too_complex__generated_more_than_255_tiles___please_use_a_simpler_image { get { - return ResourceManager.GetString(("Failed to replace screen image: image too complex (generated more than 255 tiles)" + - "; please use a simpler image"), resourceCulture); + return ResourceManager.GetString("Failed to replace screen image: image too complex (generated more than 255 tiles)" + + "; please use a simpler image", resourceCulture); } } @@ -4072,9 +4072,9 @@ public static string Importing_Project { /// public static string In_order_to_edit_this_save_file__Serial_Loops_needs_to_make_a_temporary_project__However__a_project_called___0___already_exists__Would_you_like_to_overwrite_this_project_ { get { - return ResourceManager.GetString(("In order to edit this save file, Serial Loops needs to make a temporary project. " + + return ResourceManager.GetString("In order to edit this save file, Serial Loops needs to make a temporary project. " + "However, a project called \"{0}\" already exists. Would you like to overwrite this" + - " project?"), resourceCulture); + " project?", resourceCulture); } } @@ -4492,6 +4492,15 @@ public static string Loading_Project { } } + ///

+ /// Looks up a localized string similar to Loading Project: "{0}". + /// + public static string Loading_Project____0__ { + get { + return ResourceManager.GetString("Loading Project: \"{0}\"", resourceCulture); + } + } + /// /// Looks up a localized string similar to Loading prompt message box. /// @@ -4930,8 +4939,8 @@ public static string No_Emulator_Path { /// public static string No_emulator_path_has_been_set__nPlease_set_the_path_to_a_Nintendo_DS_emulator_in_Preferences_to_use_Build___Run_ { get { - return ResourceManager.GetString(("No emulator path has been set.\\nPlease set the path to a Nintendo DS emulator in " + - "Preferences to use Build & Run."), resourceCulture); + return ResourceManager.GetString("No emulator path has been set.\\nPlease set the path to a Nintendo DS emulator in " + + "Preferences to use Build & Run.", resourceCulture); } } @@ -5196,6 +5205,15 @@ public static string One_or_more_archives_is_null_ { } } + /// + /// Looks up a localized string similar to Open an item using the explorer to start editing!. + /// + public static string Open_an_item_using_the_explorer_to_start_editing_ { + get { + return ResourceManager.GetString("Open an item using the explorer to start editing!", resourceCulture); + } + } + /// /// Looks up a localized string similar to Open Chokuretsu Save File. /// @@ -6497,9 +6515,9 @@ public static string Save_voiced_line_as_WAV { /// public static string Saved_but_unbuilt_files_were_detected_in_the_project_directory__Would_you_like_to_build_before_loading_the_project__Not_building_could_result_in_these_files_being_overwritten_ { get { - return ResourceManager.GetString(("Saved but unbuilt files were detected in the project directory. Would you like to" + + return ResourceManager.GetString("Saved but unbuilt files were detected in the project directory. Would you like to" + " build before loading the project? Not building could result in these files bein" + - "g overwritten."), resourceCulture); + "g overwritten.", resourceCulture); } } @@ -7697,8 +7715,8 @@ public static string Text_Voice_Font { /// public static string The_base_ROM_hash_does_not_match_the_expected_hash__Please_check_the___Ignore_Hash___checkbox_if_you_wish_to_override_this_ { get { - return ResourceManager.GetString(("The base ROM hash does not match the expected hash! Please check the \\\"Ignore Has" + - "h\\\" checkbox if you wish to override this."), resourceCulture); + return ResourceManager.GetString("The base ROM hash does not match the expected hash! Please check the \\\"Ignore Has" + + "h\\\" checkbox if you wish to override this.", resourceCulture); } } @@ -7716,8 +7734,8 @@ public static string The_changes_made_will_require_Serial_Loops_to_be_restarted_ /// public static string The_hack_file_has_been_successfully_created__To_import_it__open_the_ASM_hacks_dialog_and_select__Import_Hack__ { get { - return ResourceManager.GetString(("The hack file has been successfully created. To import it, open the ASM hacks dia" + - "log and select \"Import Hack\"."), resourceCulture); + return ResourceManager.GetString("The hack file has been successfully created. To import it, open the ASM hacks dia" + + "log and select \"Import Hack\".", resourceCulture); } } @@ -7737,9 +7755,9 @@ public static string The_root_section_cannot_be_deleted_ { /// public static string The_selected_ROM_s_hash_does_not_match_the_expected_ROM_hash__Please_ensure_you_are_using_the_correct_base_ROM__n_nIf_you_wish_to_ignore_this__please_check_the___Ignore_Hash___checkbox_ { get { - return ResourceManager.GetString(("The selected ROM\'s hash does not match the expected ROM hash. Please ensure you a" + + return ResourceManager.GetString("The selected ROM\'s hash does not match the expected ROM hash. Please ensure you a" + "re using the correct base ROM.\\n\\nIf you wish to ignore this, please check the \\" + - "\"Ignore Hash\\\" checkbox."), resourceCulture); + "\"Ignore Hash\\\" checkbox.", resourceCulture); } } @@ -7748,8 +7766,8 @@ public static string The_selected_ROM_s_hash_does_not_match_the_expected_ROM_has /// public static string There_is_already_a_template_with_that_name__Please_choose_a_different_name_for_your_template_ { get { - return ResourceManager.GetString(("There is already a template with that name. Please choose a different name for yo" + - "ur template."), resourceCulture); + return ResourceManager.GetString("There is already a template with that name. Please choose a different name for yo" + + "ur template.", resourceCulture); } } @@ -7758,9 +7776,9 @@ public static string There_is_already_a_template_with_that_name__Please_choose_a /// public static string There_is_no_recorded_base_ROM_hash_for_this_project__This_is_likely_because_this_project_was_created_with_an_older_version_of_Serial_Loops__Please_select_the_base_ROM_used_for_this_project_so_the_hash_can_be_recorded_now_ { get { - return ResourceManager.GetString(("There is no recorded base ROM hash for this project. This is likely because this " + + return ResourceManager.GetString("There is no recorded base ROM hash for this project. This is likely because this " + "project was created with an older version of Serial Loops. Please select the bas" + - "e ROM used for this project so the hash can be recorded now."), resourceCulture); + "e ROM used for this project so the hash can be recorded now.", resourceCulture); } } @@ -7778,8 +7796,8 @@ public static string This_script_is_not_included_in_the_event_table_ { /// public static string This_system_texture_uses_a_common_palette__so_palette_replacement_has_been_disabled { get { - return ResourceManager.GetString(("This system texture uses a common palette, so palette replacement has been disabl" + - "ed"), resourceCulture); + return ResourceManager.GetString("This system texture uses a common palette, so palette replacement has been disabl" + + "ed", resourceCulture); } } @@ -7870,8 +7888,8 @@ public static string Title_screen_return_unsaved_progress_lost_prompt_message_bo /// public static string To_edit_Save_Files__you_need_to_have_a_project_open__nNo_project_is_currently_open__Would_you_like_to_create_a_new_project_ { get { - return ResourceManager.GetString(("To edit Save Files, you need to have a project open.\\nNo project is currently ope" + - "n. Would you like to create a new project?"), resourceCulture); + return ResourceManager.GetString("To edit Save Files, you need to have a project open.\\nNo project is currently ope" + + "n. Would you like to create a new project?", resourceCulture); } } @@ -8654,8 +8672,8 @@ public static string Yes { /// public static string You_have_unsaved_changes_in__0__item_s___Would_you_like_to_save_before_closing_the_project_ { get { - return ResourceManager.GetString(("You have unsaved changes in {0} item(s). Would you like to save before closing th" + - "e project?"), resourceCulture); + return ResourceManager.GetString("You have unsaved changes in {0} item(s). Would you like to save before closing th" + + "e project?", resourceCulture); } } diff --git a/src/SerialLoops/Assets/Strings.en-GB.resx b/src/SerialLoops/Assets/Strings.en-GB.resx index 33012137..4d24438d 100644 --- a/src/SerialLoops/Assets/Strings.en-GB.resx +++ b/src/SerialLoops/Assets/Strings.en-GB.resx @@ -2483,4 +2483,7 @@ Search Project + + Loading Project: "{0}" + diff --git a/src/SerialLoops/Assets/Strings.resx b/src/SerialLoops/Assets/Strings.resx index e1148f55..f7c2f10c 100644 --- a/src/SerialLoops/Assets/Strings.resx +++ b/src/SerialLoops/Assets/Strings.resx @@ -1388,8 +1388,8 @@ In order to preserve state, no hacks were applied. Loading Archives (grp.bin) - - Loading Project + + Loading Project: "{0}" Loading prompt message box @@ -3086,6 +3086,12 @@ This action is irreversible. Import Item Image + + Loading Project + + + Open an item using the explorer to start editing! + Force Drop Shadow diff --git a/src/SerialLoops/Controls/LoopyProgressTracker.cs b/src/SerialLoops/Controls/LoopyProgressTracker.cs index acc39f94..d362d298 100644 --- a/src/SerialLoops/Controls/LoopyProgressTracker.cs +++ b/src/SerialLoops/Controls/LoopyProgressTracker.cs @@ -1,4 +1,7 @@ -using Avalonia.Controls; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Layout; +using Avalonia.Media; using Avalonia.Threading; using SerialLoops.Assets; using SerialLoops.Lib.Util; @@ -7,6 +10,8 @@ namespace SerialLoops.Controls; public class LoopyProgressTracker : StackPanel, IProgressTracker { + public TextBlock TitleText { get; } + private readonly ProgressBar _loadingProgress; private readonly TextBlock _loadingItem; private readonly string _processVerb; @@ -18,12 +23,21 @@ public LoopyProgressTracker(string processVerb = "") processVerb = Strings.Loading_; } - _loadingProgress = new() { Width = 390 }; - _loadingItem = new(); - Orientation = Avalonia.Layout.Orientation.Vertical; - Margin = new(10); - Spacing = 10; - HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Center; + _loadingProgress = new() { Width = 390, Height = 12 }; + _loadingItem = new TextBlock + { + Margin = new Thickness(10), + Classes = { "secondary" } + }; + + TitleText = new TextBlock { Margin = new Thickness(10) }; + Margin = new(0); + Orientation = Orientation.Vertical; + HorizontalAlignment = HorizontalAlignment.Center; + VerticalAlignment = VerticalAlignment.Center; + + Children.Add(TitleText); + Children.Add(new StackPanel { Height = 45 }); Children.Add(_loadingItem); Children.Add(_loadingProgress); } @@ -60,4 +74,4 @@ public string CurrentlyLoading Dispatcher.UIThread.Invoke(() => _loadingItem.Text = _currentlyLoading); } } -} \ No newline at end of file +} diff --git a/src/SerialLoops/ViewModels/MainWindowViewModel.cs b/src/SerialLoops/ViewModels/MainWindowViewModel.cs index 69a37e56..6db11f30 100644 --- a/src/SerialLoops/ViewModels/MainWindowViewModel.cs +++ b/src/SerialLoops/ViewModels/MainWindowViewModel.cs @@ -516,22 +516,25 @@ public async Task OpenProjectFromPath(string path) { Project.LoadProjectResult result = new(Project.LoadProjectState.FAILED); // start us off with a failure LoopyProgressTracker tracker = new(); + string projectFileName = Path.GetFileName(path); await new ProgressDialog(() => (OpenProject, result) = Project.OpenProject(path, CurrentConfig, Strings.ResourceManager.GetString, Log, tracker), - () => { }, tracker, Strings.Loading_Project).ShowDialog(Window); + () => { }, tracker, string.Format(Strings.Loading_Project____0__, projectFileName)).ShowDialog(Window); if (OpenProject is not null && result.State == Project.LoadProjectState.LOOSELEAF_FILES) { - if ((await Window.ShowMessageBoxAsync(Strings.Build_Unbuilt_Files_, + if (await Window.ShowMessageBoxAsync( + Strings.Build_Unbuilt_Files_, Strings.Saved_but_unbuilt_files_were_detected_in_the_project_directory__Would_you_like_to_build_before_loading_the_project__Not_building_could_result_in_these_files_being_overwritten_, - ButtonEnum.YesNo, Icon.Question, Log)) == ButtonResult.Yes) + ButtonEnum.YesNo, Icon.Question, Log) == ButtonResult.Yes) { LoopyProgressTracker secondTracker = new(); await new ProgressDialog(() => Build.BuildIterative(OpenProject, CurrentConfig, Log, secondTracker), - () => { }, secondTracker, "Loading Project").ShowDialog(Window); + () => { }, secondTracker, + string.Format(Strings.Loading_Project____0__, projectFileName)).ShowDialog(Window); } LoopyProgressTracker thirdTracker = new(); - await new ProgressDialog(() => OpenProject.LoadArchives(Log, thirdTracker), () => { }, thirdTracker, - "Loading Project").ShowDialog(Window); + await new ProgressDialog(() => OpenProject.LoadArchives(Log, thirdTracker), + () => { }, thirdTracker, string.Format(Strings.Loading_Project____0__, projectFileName)).ShowDialog(Window); } else if (result.State == Project.LoadProjectState.CORRUPTED_FILE) { diff --git a/src/SerialLoops/ViewModels/Panels/EditorTabsPanelViewModel.cs b/src/SerialLoops/ViewModels/Panels/EditorTabsPanelViewModel.cs index e8db8830..c380a357 100644 --- a/src/SerialLoops/ViewModels/Panels/EditorTabsPanelViewModel.cs +++ b/src/SerialLoops/ViewModels/Panels/EditorTabsPanelViewModel.cs @@ -1,5 +1,6 @@ using System.Collections.ObjectModel; using System.IO; +using System.Linq; using System.Threading.Tasks; using System.Windows.Input; using HaruhiChokuretsuLib.Util; @@ -21,11 +22,13 @@ public class EditorTabsPanelViewModel : ViewModelBase private readonly ILogger _log; public MainWindowViewModel MainWindow { get; private set; } + [Reactive] public EditorViewModel SelectedTab { get; set; } + [Reactive] + public bool ShowTabsPanel { get; set; } public ICommand TabSwitchedCommand { get; set; } - public ObservableCollection Tabs { get; set; } = []; public EditorTabsPanelViewModel(MainWindowViewModel mainWindow, Project project, ILogger log) @@ -43,6 +46,7 @@ public void OpenTab(ItemDescription item) if (tab.Description.DisplayName.Equals(item.DisplayName)) { SelectedTab = tab; + ShowTabsPanel = Tabs.Any(); return; } } @@ -53,6 +57,7 @@ public void OpenTab(ItemDescription item) Tabs.Add(newTab); SelectedTab = newTab; } + ShowTabsPanel = Tabs.Any(); } private EditorViewModel CreateTab(ItemDescription item) @@ -141,10 +146,12 @@ public async Task OnTabClosed(EditorViewModel closedEditor) break; } } + ShowTabsPanel = Tabs.Any(); } public void OnTabMiddleClicked() { Tabs.Remove(SelectedTab); + ShowTabsPanel = Tabs.Any(); } } diff --git a/src/SerialLoops/Views/Dialogs/ProgressDialog.cs b/src/SerialLoops/Views/Dialogs/ProgressDialog.cs index d7c52937..6f0f8deb 100644 --- a/src/SerialLoops/Views/Dialogs/ProgressDialog.cs +++ b/src/SerialLoops/Views/Dialogs/ProgressDialog.cs @@ -1,6 +1,7 @@ using System; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Media; using Avalonia.Platform; using Avalonia.Threading; using SerialLoops.Controls; @@ -20,13 +21,21 @@ public ProgressDialog(Action loadingTask, Action onComplete, LoopyProgressTracke _onComplete = onComplete; Icon = new(AssetLoader.Open(new("avares://SerialLoops/Assets/serial-loops.ico"))); + _tracker.TitleText.Text = title; Title = title; - MinWidth = 300; + + MinWidth = 350; MinHeight = 100; - MaxWidth = 300; + MaxWidth = 350; MaxHeight = 100; Content = tracker; - Topmost = true; + CanResize = false; + + WindowStartupLocation = WindowStartupLocation.CenterScreen; + Background = Brushes.Transparent; + TransparencyLevelHint = [ WindowTransparencyLevel.AcrylicBlur ]; + ExtendClientAreaChromeHints = ExtendClientAreaChromeHints.NoChrome; + ExtendClientAreaToDecorationsHint = true; } protected async override void OnInitialized() @@ -35,10 +44,7 @@ protected async override void OnInitialized() await Task.Run(() => { _loadingTask(); - Dispatcher.UIThread.Invoke(() => - { - _onComplete(); - }); + Dispatcher.UIThread.Invoke(() => { _onComplete(); }); }); Close(); } @@ -51,4 +57,4 @@ protected override void OnClosing(WindowClosingEventArgs e) e.Cancel = true; } } -} \ No newline at end of file +} diff --git a/src/SerialLoops/Views/Dialogs/SearchDialog.axaml b/src/SerialLoops/Views/Dialogs/SearchDialog.axaml index d792f471..4e55ec99 100644 --- a/src/SerialLoops/Views/Dialogs/SearchDialog.axaml +++ b/src/SerialLoops/Views/Dialogs/SearchDialog.axaml @@ -16,74 +16,90 @@ x:DataType="vm:SearchDialogViewModel" x:Class="SerialLoops.Views.Dialogs.SearchDialog" Title="{x:Static assets:Strings.Search_Project}" - Name="Dialog"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + Name="Dialog" + TransparencyLevelHint="AcrylicBlur" + Background="Transparent" + ExtendClientAreaToDecorationsHint="True"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + diff --git a/src/SerialLoops/Views/MainWindow.axaml b/src/SerialLoops/Views/MainWindow.axaml index 02926fee..1d93f876 100644 --- a/src/SerialLoops/Views/MainWindow.axaml +++ b/src/SerialLoops/Views/MainWindow.axaml @@ -15,7 +15,10 @@ Closing="Window_Closing" Closed="Window_Closed" Icon="/Assets/serial-loops.ico" - Title="{Binding Title}"> + Title="{Binding Title}" + TransparencyLevelHint="AcrylicBlur" + Background="Transparent" + ExtendClientAreaToDecorationsHint="True"> + + + + + + + + + + + + + + + + + + + + + diff --git a/src/SerialLoops/Views/Panels/HomePanel.axaml b/src/SerialLoops/Views/Panels/HomePanel.axaml index 13831919..c6c4d6d8 100644 --- a/src/SerialLoops/Views/Panels/HomePanel.axaml +++ b/src/SerialLoops/Views/Panels/HomePanel.axaml @@ -11,7 +11,7 @@ - +