From a01118c9b5e991a29163ddef01aa781afa1e60af Mon Sep 17 00:00:00 2001 From: HakuSystems Date: Fri, 27 Dec 2024 17:27:22 +0100 Subject: [PATCH] Add dynamic scaling support and remove obsolete DpiDecorator Implemented dynamic scaling modes (Off, Simple, and Experimental) across the application for better UI adaptability. Removed the deprecated DpiDecorator as it's no longer necessary. Updated layout elements in various views to support new scaling logic and integrated settings to configure scaling behavior. --- .../Config/Config.cs | 1 + .../EasyExtract/Controls/About.xaml | 485 +++---- .../EasyExtract/Controls/About.xaml.cs | 31 + .../EasyExtract/Controls/BetterSettings.xaml | 1115 +++++++++-------- .../Controls/BetterSettings.xaml.cs | 45 + .../EasyExtract/Controls/EasterEgg.xaml | 125 +- .../EasyExtract/Controls/EasterEgg.xaml.cs | 32 + .../EasyExtract/Controls/Extraction.xaml | 1030 ++++++++------- .../EasyExtract/Controls/Extraction.xaml.cs | 32 + .../EasyExtract/Controls/Feedback.xaml | 234 ++-- .../EasyExtract/Controls/Feedback.xaml.cs | 36 + .../EasyExtract/Controls/History.xaml | 295 +++-- .../EasyExtract/Controls/History.xaml.cs | 33 + .../Controls/SearchEverything.xaml | 474 ++++--- .../Controls/SearchEverything.xaml.cs | 30 + .../EasyExtract/EasyExtract.csproj | 5 +- .../EasyExtract/Models/ConfigModel.cs | 1 + .../EasyExtract/Models/DynamicScallingMode.cs | 8 + .../EasyExtract/Properties/app.manifest | 9 + .../EasyExtract/Services/DialogHelper.cs | 15 +- .../EasyExtract/Utilities/DpiDecorator.cs | 47 - .../EasyExtract/Views/Dashboard.xaml | 385 +++--- .../EasyExtract/Views/Dashboard.xaml.cs | 46 +- .../EasyExtract/Views/MainWindow.xaml | 22 +- .../EasyExtract/Views/MainWindow.xaml.cs | 17 + .../Properties/app.manifest | 1 + .../ExtractUserControlModern.xaml.cs | 3 + 27 files changed, 2437 insertions(+), 2120 deletions(-) create mode 100644 EasyExtractUnitypackageRework/EasyExtract/Models/DynamicScallingMode.cs create mode 100644 EasyExtractUnitypackageRework/EasyExtract/Properties/app.manifest delete mode 100644 EasyExtractUnitypackageRework/EasyExtract/Utilities/DpiDecorator.cs create mode 100644 EasyExtractUnitypackageRework/Properties/app.manifest diff --git a/EasyExtractUnitypackageRework/Config/Config.cs b/EasyExtractUnitypackageRework/Config/Config.cs index 27bce2a..5bba640 100644 --- a/EasyExtractUnitypackageRework/Config/Config.cs +++ b/EasyExtractUnitypackageRework/Config/Config.cs @@ -2,6 +2,7 @@ using System.IO; using System.Windows; using EasyExtractUnitypackageRework.Models; +using Newtonsoft.Json; using Formatting = System.Xml.Formatting; namespace EasyExtractUnitypackageRework.Config; diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml b/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml index 858f17f..6bec62c 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml @@ -6,8 +6,6 @@ Foreground="{DynamicResource TextFillColorPrimaryBrush}" KeyboardNavigation.TabNavigation="Cycle" Loaded="About_OnLoaded" - d:DesignHeight="450" - d:DesignWidth="1530" mc:Ignorable="d" ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" @@ -38,259 +36,276 @@ - - - - - + + + + - - + + - - - - - - + + + + + + + + + + + + + + Background="#2ca7f2" + Height="2" + Margin="0,10,0,0" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Width="60" + x:Name="AppIconLarge" /> - - - - - - - + - - - - - - + - - + AutomationProperties.Name="DeepBlueAccentSample" + Background="#2ca7f2" + Footer="#2ca7f2" + Height="Auto" + Margin="5" + MinHeight="60" + MinWidth="60" + Width="Auto" + x:Name="DeepBlueAccentSample" /> - - - - - - - + - - - + + + + - - - - + - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + - - - - - - - - - - + Background="#2ca7f2" + Height="2" + Margin="0,10,0,0" /> + + + - - - - + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml.cs index 4c05940..9bad470 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/About.xaml.cs @@ -1,3 +1,4 @@ +using System.Windows.Media; using EasyExtract.Config; using EasyExtract.Models; using EasyExtract.Services; @@ -85,4 +86,34 @@ private void ChangeRandomMargins() { foreach (var card in _cards) card.Margin = RandomMargin(); } + + private void About_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (_configHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + break; + + case DynamicScalingModes.Simple: + { + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 1530.0; + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + RootBorder.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml b/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml index aea0045..ce56f08 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml @@ -6,10 +6,9 @@ Foreground="{DynamicResource TextFillColorPrimaryBrush}" KeyboardNavigation.TabNavigation="Cycle" Loaded="BetterSettings_OnLoaded" + SizeChanged="BetterSettings_OnSizeChanged" d:DataContext="{d:DesignInstance configModel:ConfigModel, IsDesignTimeCreatable=True}" - d:DesignHeight="450" - d:DesignWidth="1530" mc:Ignorable="d" ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" @@ -23,7 +22,6 @@ xmlns:utilities="clr-namespace:EasyExtract.Utilities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - @@ -48,541 +46,600 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + SelectedItem="{Binding DynamicScalingMode, Mode=TwoWay}" + SelectionChanged="DynamicScalingComboBox_OnSelectionChanged" + Width="150" + d:DataContext="{d:DesignInstance configModel:ConfigModel, + IsDesignTimeCreatable=True}" + x:Name="DynamicScalingComboBox" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + x:Name="BackgroundOpacitySlider" /> + x:Name="BackgroundChangeButton" /> + x:Name="BackgroundResetButton" /> - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml.cs index 0ae5896..e4d2c28 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/BetterSettings.xaml.cs @@ -1,3 +1,4 @@ +using System.Windows.Media; using EasyExtract.Config; using EasyExtract.Models; using EasyExtract.Services; @@ -27,6 +28,11 @@ private async Task ChangeUiToMatchConfigAsync() { try { + var dynamicScalingMode = Enum.GetValues(typeof(DynamicScalingModes)) + .Cast() + .ToList(); + DynamicScalingComboBox.ItemsSource = dynamicScalingMode; + BorderMenuSwitch.IsChecked = _configHelper.Config.BorderThicknessActive; ContextMenuSwitch.IsChecked = _configHelper.Config.ContextMenuToggle; SkipIntroLogoAnimationToggleSwitch.IsChecked = _configHelper.Config.IntroLogoAnimation; @@ -217,4 +223,43 @@ private async void BorderMenuSwitch_OnUnchecked(object sender, RoutedEventArgs e { await UpdateBorderThicknessConfigAsync(); } + + private void BetterSettings_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (_configHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + break; + + case DynamicScalingModes.Simple: + { + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 1100.0; + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + RootShadowBorder.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } + + + private async void DynamicScalingComboBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (DynamicScalingComboBox.SelectedItem == null) return; + var selectedMode = (DynamicScalingModes)DynamicScalingComboBox.SelectedItem; + _configHelper.Config.DynamicScalingMode = selectedMode; + await _configHelper.UpdateConfigAsync(); + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml b/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml index f4addb7..d52cd57 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml @@ -6,10 +6,9 @@ Foreground="{DynamicResource TextFillColorPrimaryBrush}" KeyboardNavigation.TabNavigation="Cycle" Loaded="EasterEgg_OnLoaded" + SizeChanged="EasterEgg_OnSizeChanged" d:DataContext="{d:DesignInstance configModel:ConfigModel, IsDesignTimeCreatable=True}" - d:DesignHeight="450" - d:DesignWidth="800" mc:Ignorable="d" ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" @@ -21,7 +20,6 @@ xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - @@ -38,69 +36,68 @@ - - - - - + + + + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml.cs index 9179332..9bce1f4 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/EasterEgg.xaml.cs @@ -1,3 +1,4 @@ +using System.Windows.Media; using EasyExtract.Config; using EasyExtract.Models; using EasyExtract.Services; @@ -45,4 +46,35 @@ await BetterLogger.LogAsync($"Error updating Discord presence: {exception.Messag await BetterLogger.LogAsync("EasterEgg UserControl loaded", Importance.Info); // Log successful load } + + private void EasterEgg_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (_configHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + break; + + case DynamicScalingModes.Simple: + { + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 800.0; + + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + RootShadowBorder.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml b/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml index 3beded3..08f792b 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml @@ -8,6 +8,7 @@ Foreground="{DynamicResource TextFillColorPrimaryBrush}" KeyboardNavigation.TabNavigation="Cycle" Loaded="Extraction_OnLoaded" + SizeChanged="Extraction_OnSizeChanged" d:DataContext="{d:DesignInstance configModel:ConfigModel, IsDesignTimeCreatable=True}" d:DesignHeight="450" @@ -42,559 +43,554 @@ - - - - - - + + + + - - - - - - - + + + + + + + - + - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + + + + + + + + - - - - - - - - + ItemsSource="{Binding Path=SearchEverything}" + Margin="15" + x:Name="QueueListView"> + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + - - - - - - - + + + + ToolTip="Search for a .unitypackage to add to the queue." + x:Name="SearchFileManuallyButton" /> + - - + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - + Text="{Binding UnitypackageName}" + TextWrapping="Wrap" /> + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - - - - - + Text="{Binding UnityFileMessasge}" + TextWrapping="Wrap" /> - - - - - - - - - - - - - - - - - - - - + + + + + + + + + - + + + - - - - - + + + + + + + + + - - - - - - + + + + + + + + + + + - + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml.cs index ca36517..c17f23c 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/Extraction.xaml.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Windows.Media; using EasyExtract.Config; using EasyExtract.Models; using EasyExtract.Services; @@ -1227,4 +1228,35 @@ private void AnalyticsExpander_OnExpanded(object sender, RoutedEventArgs e) { UpdateChart(); } + + private void Extraction_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (ConfigHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + break; + + case DynamicScalingModes.Simple: + { + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 800.0; + + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + RootShadowBorder.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml b/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml index cdabd3d..bc58849 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml @@ -8,8 +8,6 @@ Loaded="Feedback_OnLoaded" d:DataContext="{d:DesignInstance configModel:ConfigModel, IsDesignTimeCreatable=True}" - d:DesignHeight="450" - d:DesignWidth="500" mc:Ignorable="d" ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" @@ -37,131 +35,131 @@ - - - - - + + + + - - + + + + + + + + + - - - - - + Margin="0,0,0,20" + Text="We value your feedback!" /> + - - - + AutomationProperties.Name="SatisfactionPrompt" + FontSize="14" + FontWeight="SemiBold" + Margin="0,0,0,8" + Text="How satisfied are you with this software?" /> - - - - - - - + + + + + + + - + - - + + - + - - - - + x:Name="DiscordNameRequest" /> + + + - - + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml.cs index a2982f0..d25a16b 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/Feedback.xaml.cs @@ -1,4 +1,7 @@ using System.Text; +using System.Windows.Media; +using EasyExtract.Config; +using EasyExtract.Models; using EasyExtract.Services; using Newtonsoft.Json; @@ -6,6 +9,8 @@ namespace EasyExtract.Controls; public partial class Feedback { + private readonly ConfigHelper _configHelper = new(); + public Feedback() { InitializeComponent(); @@ -111,4 +116,35 @@ await DialogHelper.ShowErrorDialogAsync(Window.GetWindow(this), "Error", } } } + + private void Feedback_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (_configHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + break; + + case DynamicScalingModes.Simple: + { + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 800.0; + + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + RootShadowBorder.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml b/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml index 1d4733d..44dbc3c 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml @@ -5,10 +5,9 @@ Foreground="{DynamicResource TextFillColorPrimaryBrush}" KeyboardNavigation.TabNavigation="Cycle" Loaded="History_OnLoaded" + SizeChanged="History_OnSizeChanged" d:DataContext="{d:DesignInstance configModel:ConfigModel, IsDesignTimeCreatable=True}" - d:DesignHeight="800" - d:DesignWidth="1500" mc:Ignorable="d" ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" @@ -19,7 +18,6 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - @@ -37,160 +35,159 @@ - - - - - - - - - - - - + + + + - - - - + + + + + + + + + + - + - + - - - - - - - - + + + + + + + + + - - - - - - - + + - - - - - - + + - - - - - + + + + + + + + + + + + + + + + + - - - - - - + VerticalAlignment="Center" + Visibility="Visible" + x:Name="NoHistoryLabel" /> + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml.cs index 37e0f73..dfa3ef8 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/History.xaml.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Windows.Media; using EasyExtract.Config; using EasyExtract.Models; using EasyExtract.Services; @@ -163,4 +164,36 @@ private async void ClearHistoryButton_OnClick(object sender, RoutedEventArgs e) await ConfigHelper.UpdateConfigAsync(); await BetterLogger.LogAsync("Cleared all history", Importance.Info); // Log clearing history } + + + private void History_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (ConfigHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + break; + + case DynamicScalingModes.Simple: + { + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 800.0; + + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + RootShadowBorder.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml b/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml index 10819a3..e3bb185 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml @@ -6,10 +6,9 @@ Foreground="{DynamicResource TextFillColorPrimaryBrush}" KeyboardNavigation.TabNavigation="Cycle" Loaded="SearchEverything_OnLoaded" + SizeChanged="SearchEverything_OnSizeChanged" d:DataContext="{d:DesignInstance Type=configModel:ConfigModel, IsDesignTimeCreatable=True}" - d:DesignHeight="450" - d:DesignWidth="500" mc:Ignorable="d" ui:Design.Background="{DynamicResource ApplicationBackgroundBrush}" ui:Design.Foreground="{DynamicResource TextFillColorPrimaryBrush}" @@ -21,7 +20,6 @@ xmlns:sys="clr-namespace:System;assembly=System.Runtime" xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - @@ -38,256 +36,250 @@ - - - - - - - + + + + + - - + - - - - + - - - - + - - + + - - - - - + + + + + + - - - - - - - - + + + + + - - - - - - - + + + + + + + + - - - + + + + + + + - - + - - - - - - - - - - - - - - - - - - + Icon="{ui:SymbolIcon DocumentSearch24}" + Margin="0,5,0,5" + x:Name="SearchFileManuallyButton" /> + - - - - - + + + + + + + + + + + + + + + + + + + + - - - - + + + + + - - - - - - - + + + + + + + + + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml.cs index f84b3ec..1da571c 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Controls/SearchEverything.xaml.cs @@ -1,3 +1,4 @@ +using System.Windows.Media; using EasyExtract.Config; using EasyExtract.Models; using EasyExtract.Services; @@ -307,4 +308,33 @@ private void UpdateSearchResultCreationDateFilterBtn_OnClick(object sender, Rout FoundText.Text = $"Found {SearchEverythingList.Count} results"; } + + private void SearchEverything_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (_configHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + break; + case DynamicScalingModes.Simple: + { + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 800.0; + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + RootShadowBorder.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/EasyExtract.csproj b/EasyExtractUnitypackageRework/EasyExtract/EasyExtract.csproj index 2d09fcc..910a993 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/EasyExtract.csproj +++ b/EasyExtractUnitypackageRework/EasyExtract/EasyExtract.csproj @@ -7,7 +7,10 @@ enable true Resources\Smallicon.ico - 2.0.6.5 + Properties\app.manifest + PerMonitorV2 + true/pm + 2.0.6.6 default $(NoWarn);WPF0001 diff --git a/EasyExtractUnitypackageRework/EasyExtract/Models/ConfigModel.cs b/EasyExtractUnitypackageRework/EasyExtract/Models/ConfigModel.cs index 4a6748b..971ca88 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Models/ConfigModel.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Models/ConfigModel.cs @@ -4,6 +4,7 @@ namespace EasyExtract.Models; public class ConfigModel { + public DynamicScalingModes DynamicScalingMode { get; set; } = DynamicScalingModes.Off; public string AppTitle { get; set; } = "EasyExtractUnitypackage"; public AvailableThemes ApplicationTheme { get; set; } = AvailableThemes.System; public bool EasterEggHeader { get; set; } = true; diff --git a/EasyExtractUnitypackageRework/EasyExtract/Models/DynamicScallingMode.cs b/EasyExtractUnitypackageRework/EasyExtract/Models/DynamicScallingMode.cs new file mode 100644 index 0000000..3246175 --- /dev/null +++ b/EasyExtractUnitypackageRework/EasyExtract/Models/DynamicScallingMode.cs @@ -0,0 +1,8 @@ +namespace EasyExtract.Models; + +public enum DynamicScalingModes +{ + Off, // 0 + Simple, // 1 + Experimental // 2 +} \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Properties/app.manifest b/EasyExtractUnitypackageRework/EasyExtract/Properties/app.manifest new file mode 100644 index 0000000..03f988f --- /dev/null +++ b/EasyExtractUnitypackageRework/EasyExtract/Properties/app.manifest @@ -0,0 +1,9 @@ + + + + + true/pm + PerMonitorV2 + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Services/DialogHelper.cs b/EasyExtractUnitypackageRework/EasyExtract/Services/DialogHelper.cs index 5af8b33..3cbe425 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Services/DialogHelper.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Services/DialogHelper.cs @@ -96,10 +96,21 @@ await Application.Current.Dispatcher.InvokeAsync(() => private static Grid EnsureRootGrid(Window owner) { - if (owner.Content is Grid existingGrid) - return existingGrid; + if (owner == null) + { + if (Application.Current.MainWindow?.Content is Grid mainWindowGrid) + return mainWindowGrid; + + throw new ArgumentNullException(nameof(owner)); + } + + if (owner.Content is Grid ownerGrid) + return ownerGrid; var content = owner.Content; + if (content == null) + throw new InvalidOperationException("The content of the owner window cannot be null."); + var rootGrid = CreateRootGrid(); owner.Content = rootGrid; diff --git a/EasyExtractUnitypackageRework/EasyExtract/Utilities/DpiDecorator.cs b/EasyExtractUnitypackageRework/EasyExtract/Utilities/DpiDecorator.cs deleted file mode 100644 index 5c96b9b..0000000 --- a/EasyExtractUnitypackageRework/EasyExtract/Utilities/DpiDecorator.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Windows.Media; - -namespace EasyExtract.Utilities; - -/// -/// A decorator class that provides automatic DPI scaling for its child elements. -/// This class ensures that the user interface elements are appropriately scaled -/// relative to the system's DPI settings, preserving a consistent visual appearance -/// across different display configurations. -/// -/// -/// The DpiDecorator subscribes to the Loaded event of the element and applies a -/// scaling transformation based on the system's DPI settings, calculated using -/// the TransformToDevice matrix provided by the CompositionTarget of the visual. -/// The scaling transform is applied to the LayoutTransform property of the decorator. -/// -/// -/// Use DpiDecorator to wrap elements in XAML where you need DPI scaling support. -/// -public class DpiDecorator : Decorator -{ - /// - /// A custom WPF decorator that adjusts for DPI scaling issues. - /// This class ensures consistent rendering of WPF elements by applying - /// a layout transformation to negate DPI scaling effects. - /// - /// - /// Utilizes to apply scaling transformations - /// based on the device's DPI settings. This ensures proper layout and sizing - /// independent of the screen's DPI settings. The DPI transformation is calculated - /// using the rendering target's TransformToDevice matrix. - /// - /// - /// Typically used as a wrapper for WPF content elements in XAML to ensure DPI consistency. - /// - public DpiDecorator() - { - Loaded += (s, e) => - { - var m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice; - var dpiTransform = new ScaleTransform(1 / m.M11, 1 / m.M22); - if (dpiTransform.CanFreeze) - dpiTransform.Freeze(); - LayoutTransform = dpiTransform; - }; - } -} \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml b/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml index 071a78f..5f37905 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml @@ -7,12 +7,11 @@ Focusable="True" FontFamily="{DynamicResource SegoeFluentIcons}" Foreground="{DynamicResource TextFillColorPrimaryBrush}" - Height="900" KeyboardNavigation.TabNavigation="Cycle" Loaded="Dashboard_OnLoaded" ResizeMode="CanResizeWithGrip" + SizeChanged="Dashboard_OnSizeChanged" Title="{Binding AppTitle}" - Width="1600" WindowStartupLocation="CenterScreen" d:DataContext="{d:DesignInstance configModel:ConfigModel, IsDesignTimeCreatable=True}" @@ -28,7 +27,6 @@ xmlns:extraction="clr-namespace:EasyExtract.Controls" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml" - xmlns:utilities="clr-namespace:EasyExtract.Utilities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> @@ -53,218 +51,183 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + Icon="{ui:SymbolIcon DocumentTextExtract24}" + TargetPageTag="Extraction" + TargetPageType="{x:Type extraction:Extraction}" + x:Name="ExtractionNavBtn" /> - - - + - - - - - - - - - + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml.cs index 2e7546e..1838cba 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Views/Dashboard.xaml.cs @@ -13,7 +13,7 @@ namespace EasyExtract.Views; -public partial class Dashboard +public partial class Dashboard : Window { private static Dashboard? _instance; private readonly BackgroundManager _backgroundManager = BackgroundManager.Instance; @@ -201,4 +201,48 @@ private async void DontShowAgainBtn_OnClick(object sender, RoutedEventArgs e) await _configHelper.UpdateConfigAsync(); EasterEggHeader.Visibility = Visibility.Collapsed; } + + private void Dashboard_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + switch (_configHelper.Config.DynamicScalingMode) + { + case DynamicScalingModes.Off: + DialogHelperGrid.LayoutTransform = Transform.Identity; + return; + case DynamicScalingModes.Simple: + { + var scaleFactor = e.NewSize.Width / 1600.0; + + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + DialogHelperGrid.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + case DynamicScalingModes.Experimental: + { + var scaleFactor = e.NewSize.Width / 1600.0; + + switch (scaleFactor) + { + case < 0.5: + scaleFactor = 0.5; + break; + case > 2.0: + scaleFactor = 2.0; + break; + } + + DialogHelperGrid.LayoutTransform = new ScaleTransform(scaleFactor, scaleFactor); + break; + } + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml b/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml index 56ad399..032161c 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml +++ b/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml @@ -4,9 +4,10 @@ Background="Transparent" FontFamily="{DynamicResource SegoeFluentIcons}" Foreground="{DynamicResource TextFillColorPrimaryBrush}" - Height="450" + MinHeight="450" + MinWidth="800" ShowInTaskbar="False" - Width="800" + SizeChanged="MainWindow_OnSizeChanged" WindowStartupLocation="CenterScreen" WindowStyle="None" mc:Ignorable="d" @@ -16,7 +17,18 @@ xmlns:gif="https://github.com/XamlAnimatedGif/XamlAnimatedGif" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> - - - + + + + + \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml.cs b/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml.cs index ac95d0f..705e316 100644 --- a/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml.cs +++ b/EasyExtractUnitypackageRework/EasyExtract/Views/MainWindow.xaml.cs @@ -67,4 +67,21 @@ private static async Task GenerateAllNecessaryFiles() var ignoredUnityPackagesFolder = Path.Combine(appdataFolder, "IgnoredUnitypackages"); if (!Directory.Exists(ignoredUnityPackagesFolder)) Directory.CreateDirectory(ignoredUnityPackagesFolder); } + + private void MainWindow_OnSizeChanged(object sender, SizeChangedEventArgs e) + { + // no config call, since this should be always enabled + var scaleFactor = e.NewSize.Width / 800.0; + + if (scaleFactor < 1.0) + { + LogoImage.Width = 400 * scaleFactor; + LogoImage.Height = 200 * scaleFactor; + } + else + { + LogoImage.Width = double.NaN; + LogoImage.Height = double.NaN; + } + } } \ No newline at end of file diff --git a/EasyExtractUnitypackageRework/Properties/app.manifest b/EasyExtractUnitypackageRework/Properties/app.manifest new file mode 100644 index 0000000..e3abbdc --- /dev/null +++ b/EasyExtractUnitypackageRework/Properties/app.manifest @@ -0,0 +1 @@ +true/pm diff --git a/EasyExtractUnitypackageRework/UserControls/ExtractUserControlModern.xaml.cs b/EasyExtractUnitypackageRework/UserControls/ExtractUserControlModern.xaml.cs index 40ad212..50feb4e 100644 --- a/EasyExtractUnitypackageRework/UserControls/ExtractUserControlModern.xaml.cs +++ b/EasyExtractUnitypackageRework/UserControls/ExtractUserControlModern.xaml.cs @@ -8,6 +8,9 @@ using System.Windows.Input; using System.Windows.Media; using EasyExtractUnitypackageRework.Theme.MessageBox; +using ICSharpCode.SharpZipLib.GZip; +using ICSharpCode.SharpZipLib.Tar; +using Microsoft.Toolkit.Uwp.Notifications; using Microsoft.Win32; namespace EasyExtractUnitypackageRework.UserControls;