Browse Source

ToolSet picking works

Krzysztof Krysiński 5 months ago
parent
commit
1fa375dffc

+ 2 - 0
src/PixiEditor.Extensions.CommonApi/UserPreferences/PreferencesConstants.cs

@@ -33,4 +33,6 @@ public static class PreferencesConstants
 
     public const string AnalyticsEnabled = "AnalyticsEnabled";
     public const bool AnalyticsEnabledDefault = true;
+    public const string PrimaryToolset = "PrimaryToolset";
+    public const string PrimaryToolsetDefault = "PAINT_TOOLSET";
 }

+ 2 - 0
src/PixiEditor.Extensions.CommonApi/UserPreferences/Settings/PixiEditor/PixiEditorSettings.cs

@@ -30,6 +30,8 @@ public static class PixiEditorSettings
         public static SyncedSetting<RightClickMode> RightClickMode { get; } = SyncedSetting.NonOwned<RightClickMode>(PixiEditor);
         
         public static SyncedSetting<bool> IsPenModeEnabled { get; } = SyncedSetting.NonOwned<bool>(PixiEditor);
+
+        public static SyncedSetting<string> PrimaryToolset { get; } = SyncedSetting.NonOwned<string>(PixiEditor, "PAINT_TOOLSET");
     }
 
     public static class File

+ 4 - 1
src/PixiEditor/Data/Configs/ToolSetsConfig.json

@@ -1,6 +1,7 @@
 [
   {
-    "Name": "PIXEL_PERFECT_TOOLSET",
+    "Name": "PIXEL_ART_TOOLSET",
+    "Icon": "\uE986",
     "Tools": [
       "MoveViewport",
       "RotateViewport",
@@ -42,6 +43,7 @@
   },
   {
     "Name": "PAINT_TOOLSET",
+    "Icon": "\uE912",
     "Tools": [
       "MoveViewport",
       "RotateViewport",
@@ -115,6 +117,7 @@
   },
   {
     "Name": "VECTOR_TOOLSET",
+    "Icon": "\uE945",
     "Tools": [
       "MoveViewport",
       "RotateViewport",

+ 1 - 1
src/PixiEditor/Data/Localization/Languages/en.json

@@ -757,7 +757,7 @@
   "MODULO": "Modulo",
   "STEP": "Step",
   "SMOOTH_STEP": "Smoothstep",
-  "PIXEL_PERFECT_TOOLSET": "Pixel Art",
+  "PIXEL_ART_TOOLSET": "Pixel Art",
   "VECTOR_TOOLSET": "Vector",
   "VECTOR_LAYER": "Vector Layer",
   "STROKE_COLOR_LABEL": "Stroke",

+ 4 - 1
src/PixiEditor/Models/Config/ToolSetConfig.cs

@@ -10,9 +10,12 @@ public class ToolSetsConfig : List<ToolSetConfig>
 public class ToolSetConfig
 {
     public string Name { get; set; }
-    
+
+    public string? Icon { get; set; }
+
     [JsonConverter(typeof(ToolConverter))]
     public List<ToolConfig> Tools { get; set; }
+
 }
 
 public class ToolConfig

+ 1 - 0
src/PixiEditor/Models/Handlers/IToolSetHandler.cs

@@ -3,6 +3,7 @@
 internal interface IToolSetHandler : IHandler
 {
     public string Name { get; }
+    public string Icon { get; }
     public ICollection<IToolHandler> Tools { get; }
     public void ApplyToolSetSettings();
     public IReadOnlyDictionary<IToolHandler, string> IconOverwrites { get; }

+ 5 - 0
src/PixiEditor/Styles/Templates/ShortcutsTemplateCard.axaml

@@ -34,6 +34,11 @@
                                 </Transitions>
                             </Image.Transitions>
                         </Image>
+                        <TextBlock Classes="pixi-icon" Text="{TemplateBinding Icon}"
+                                   FontSize="64"
+                                   Grid.Row="0" Grid.RowSpan="2" Name="icon" HorizontalAlignment="Center"
+                               VerticalAlignment="Center">
+                        </TextBlock>
                         <TextBlock
                             Grid.Row="2" HorizontalAlignment="Center" VerticalAlignment="Center"
                             Margin="0, 0, 0, 10" Padding="0"

+ 3 - 1
src/PixiEditor/ViewModels/SubViewModels/ToolSetViewModel.cs

@@ -8,14 +8,16 @@ namespace PixiEditor.ViewModels.SubViewModels;
 internal class ToolSetViewModel : PixiObservableObject, IToolSetHandler
 {
     public string Name { get; }
+    public string Icon { get; }
     ICollection<IToolHandler> IToolSetHandler.Tools => Tools;
     IReadOnlyDictionary<IToolHandler, string> IToolSetHandler.IconOverwrites => IconOverwrites;
 
     public ObservableCollection<IToolHandler> Tools { get; } = new();
     public Dictionary<IToolHandler, string> IconOverwrites { get; set; } = new Dictionary<IToolHandler, string>();
 
-    public ToolSetViewModel(string setName)
+    public ToolSetViewModel(string setName, string? icon = null)
     {
+        Icon = icon ?? string.Empty;
         Name = setName;
     }
 

+ 12 - 2
src/PixiEditor/ViewModels/SubViewModels/ToolsViewModel.cs

@@ -471,9 +471,19 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>, IToolsHandler
 
     private void AddToolSets(ToolSetsConfig toolSetConfig)
     {
-        foreach (ToolSetConfig toolSet in toolSetConfig)
+        var primaryToolSet = PixiEditorSettings.Tools.PrimaryToolset.Value;
+        if (string.IsNullOrEmpty(primaryToolSet))
         {
-            var toolSetViewModel = new ToolSetViewModel(toolSet.Name);
+            primaryToolSet = toolSetConfig.First().Name;
+        }
+
+        var orderedToolSetConfig = toolSetConfig
+            .OrderByDescending(toolSet => toolSet.Name == primaryToolSet)
+            .ToList();
+
+        foreach (ToolSetConfig toolSet in orderedToolSetConfig)
+        {
+            var toolSetViewModel = new ToolSetViewModel(toolSet.Name, toolSet.Icon);
 
             foreach (var toolFromToolset in toolSet.Tools)
             {

+ 17 - 0
src/PixiEditor/ViewModels/UserPreferences/OnboardingViewModel.cs

@@ -2,6 +2,7 @@
 using System.Windows.Input;
 using CommunityToolkit.Mvvm.ComponentModel;
 using CommunityToolkit.Mvvm.Input;
+using Drawie.Numerics;
 using PixiEditor.Extensions.Common.Localization;
 using PixiEditor.Models.Commands;
 using PixiEditor.Models.Commands.Templates;
@@ -55,6 +56,8 @@ internal class OnboardingViewModel : PixiObservableObject
     public RelayCommand PreviousFormStepCommand { get; }
 
     public GeneralSettings GeneralSettings { get; } = new();
+    public FileSettings FileSettings { get; } = new();
+    public ToolsSettings ToolSettings { get; } = new();
 
     public ObservableCollection<SelectionCard<ShortcutProvider>> Templates { get; set; }
     public ObservableCollection<SelectionCard<IToolSetHandler>> ToolSets { get; }
@@ -63,6 +66,13 @@ internal class OnboardingViewModel : PixiObservableObject
 
     public RelayCommand<IToolSetHandler> SelectToolsetCommand { get; }
 
+    Dictionary<string, VecI> DefaultNewFileSizes = new()
+    {
+        { "PIXEL_ART_TOOLSET", new VecI(64, 64) },
+        { "PAINT_TOOLSET", new VecI(1920, 1080) },
+        { "VECTOR_TOOLSET", new VecI(512, 512) }
+    };
+
     public OnboardingViewModel()
     {
         NextFormStepCommand = new RelayCommand(NextFormStep, CanNextFormStep);
@@ -74,6 +84,13 @@ internal class OnboardingViewModel : PixiObservableObject
             {
                 toolset.IsSelected = toolset.Item == x;
             }
+
+            ToolSettings.PrimaryToolset = x.Name;
+            if (DefaultNewFileSizes.ContainsKey(x.Name))
+            {
+                FileSettings.DefaultNewFileWidth = DefaultNewFileSizes[x.Name].X;
+                FileSettings.DefaultNewFileHeight = DefaultNewFileSizes[x.Name].Y;
+            }
         });
 
         SelectShortcutCommand = new AsyncRelayCommand<ShortcutProvider>(

+ 12 - 1
src/PixiEditor/ViewModels/UserPreferences/Settings/ToolsSettings.cs

@@ -1,4 +1,6 @@
-namespace PixiEditor.ViewModels.UserPreferences.Settings;
+using PixiEditor.Extensions.CommonApi.UserPreferences;
+
+namespace PixiEditor.ViewModels.UserPreferences.Settings;
 
 internal class ToolsSettings : SettingsGroup
 {
@@ -13,4 +15,13 @@ internal class ToolsSettings : SettingsGroup
             RaiseAndUpdatePreference(nameof(EnableSharedToolbar), value);
         }
     }
+
+    private string primaryToolset =
+        GetPreference(PreferencesConstants.PrimaryToolset, PreferencesConstants.PrimaryToolsetDefault);
+
+    public string PrimaryToolset
+    {
+        get => primaryToolset;
+        set => RaiseAndUpdatePreference(ref primaryToolset, value);
+    }
 }

+ 24 - 3
src/PixiEditor/Views/Dialogs/OnboardingDialog.axaml

@@ -84,9 +84,30 @@
                                 <shortcuts:ShortcutsTemplateCard
                                     TemplateName="{Binding Item.Name}"
                                     Margin="0 0 5 0"
-                                    Logo="{Binding Item.LogoPath}"
-                                    Cursor="Hand"
-                                    HoverLogo="{Binding Path=Item.HoverLogoPath}" />
+                                    Icon="{Binding Item.Icon}"
+                                    PressedCommand="{Binding SelectCommand}"
+                                    PressedCommandParameter="{Binding Item}"
+                                    Classes.Selected="{Binding IsSelected}"
+                                    Cursor="Hand">
+                                    <shortcuts:ShortcutsTemplateCard.Styles>
+                                        <Style Selector="TextBlock.pixi-icon">
+                                            <Setter Property="Foreground"
+                                                    Value="{DynamicResource ThemeBorderHighBrush}" />
+                                            <Setter Property="Transitions">
+                                                <Setter.Value>
+                                                    <Transitions>
+                                                        <BrushTransition Property="Foreground" Duration="0.2" />
+                                                    </Transitions>
+                                                </Setter.Value>
+                                            </Setter>
+                                        </Style>
+
+                                        <Style Selector="shortcuts|ShortcutsTemplateCard.Selected TextBlock.pixi-icon">
+                                            <Setter Property="Foreground"
+                                                    Value="{DynamicResource ThemeAccentHighBrush}" />
+                                        </Style>
+                                    </shortcuts:ShortcutsTemplateCard.Styles>
+                                </shortcuts:ShortcutsTemplateCard>
                             </DataTemplate>
                         </ItemsControl.ItemTemplate>
                     </ItemsControl>

+ 8 - 0
src/PixiEditor/Views/Shortcuts/ShortcutsTemplateCard.cs

@@ -30,6 +30,14 @@ public partial class ShortcutsTemplateCard : TemplatedControl
     public static readonly StyledProperty<object> PressedCommandParameterProperty = AvaloniaProperty.Register<ShortcutsTemplateCard, object>(
         nameof(PressedCommandParameter));
 
+    public static readonly StyledProperty<string> IconProperty = AvaloniaProperty.Register<ShortcutsTemplateCard, string>(
+        nameof(Icon));
+
+    public string Icon
+    {
+        get => GetValue(IconProperty);
+        set => SetValue(IconProperty, value);
+    }
     public object PressedCommandParameter
     {
         get => GetValue(PressedCommandParameterProperty);