Browse Source

Fixed brush loading

Krzysztof Krysiński 1 week ago
parent
commit
8f567ba056

+ 7 - 0
src/PixiEditor/ViewModels/SubViewModels/BrushesViewModel.cs

@@ -20,6 +20,8 @@ namespace PixiEditor.ViewModels.SubViewModels;
 internal class BrushesViewModel : SubViewModel<ViewModelMain>
 {
     public BrushLibrary BrushLibrary { get; private set; }
+    public event Action? OnBrushesLoaded;
+    public bool BrushesLoaded { get; private set; } = false;
 
     public BrushesViewModel(ViewModelMain owner) : base(owner)
     {
@@ -83,7 +85,12 @@ internal class BrushesViewModel : SubViewModel<ViewModelMain>
 
     private void LoadBrushLibrary()
     {
+        if (BrushesLoaded)
+            return;
+
         BrushLibrary.LoadBrushes();
+        BrushesLoaded = true;
+        OnBrushesLoaded?.Invoke();
     }
 
     [Command.Internal("PixiEditor.Brushes.Delete", "DELETE_BRUSH")]

+ 11 - 1
src/PixiEditor/ViewModels/SubViewModels/ToolsViewModel.cs

@@ -196,7 +196,17 @@ internal class ToolsViewModel : SubViewModel<ViewModelMain>, IToolsHandler
         AllToolSets.Clear();
         AddCustomTools(toolsConfig);
         AddToolSets(toolsConfig.ToolSets);
-        SetActiveToolSet(AllToolSets.First());
+        if (Owner.BrushesSubViewModel.BrushesLoaded)
+        {
+            SetActiveToolSet(AllToolSets.First());
+        }
+        else
+        {
+            Owner.BrushesSubViewModel.OnBrushesLoaded += () =>
+            {
+                SetActiveToolSet(AllToolSets.First());
+            };
+        }
     }
 
     [Command.Internal("PixiEditor.Tools.SetActiveToolSet", AnalyticsTrack = true)]

+ 24 - 4
src/PixiEditor/ViewModels/Tools/ToolSettings/Settings/BrushSettingViewModel.cs

@@ -35,12 +35,14 @@ internal class BrushSettingViewModel : Setting<BrushViewModel>
         {
             Dispatcher.UIThread.Post(() =>
             {
-                viewModels = new ObservableCollection<BrushViewModel>(Library.Brushes.Values.Select(b => new BrushViewModel(b)));
+                viewModels =
+                    new ObservableCollection<BrushViewModel>(Library.Brushes.Values.Select(b => new BrushViewModel(b)));
                 OnPropertyChanged(nameof(AllBrushes));
             });
         };
 
-        viewModels = new ObservableCollection<BrushViewModel>(Library.Brushes.Values.Select(b => new BrushViewModel(b)));
+        viewModels =
+            new ObservableCollection<BrushViewModel>(Library.Brushes.Values.Select(b => new BrushViewModel(b)));
         OnPropertyChanged(nameof(AllBrushes));
     }
 
@@ -48,11 +50,29 @@ internal class BrushSettingViewModel : Setting<BrushViewModel>
     {
         if (value is string str)
         {
+            var foundVm = viewModels.FirstOrDefault(b => b.Name == str);
+            if (foundVm != null)
+                return foundVm;
+
             var found = Library.Brushes.Values.FirstOrDefault(b => b.Name == str);
             if (found != null)
-                return new BrushViewModel(found);
+            {
+                var vm = new BrushViewModel(found);
+                viewModels.Add(vm);
+            }
+
+            if(viewModels.Count > 0)
+                return viewModels[0];
+
+            var firstFromLib = Library.Brushes.Values.FirstOrDefault();
+            if (firstFromLib != null)
+            {
+                var vm = new BrushViewModel(firstFromLib);
+                viewModels.Add(vm);
+                return vm;
+            }
 
-            return new BrushViewModel(Library.Brushes.First().Value);
+            return null;
         }
 
         return base.AdjustValue(value);

+ 1 - 0
src/PixiEditor/ViewModels/ViewModelMain.cs

@@ -158,6 +158,7 @@ internal partial class ViewModelMain : ViewModelBase, ICommandsHandler
         BrushesSubViewModel = services.GetService<BrushesViewModel>();
 
         ToolsConfig toolSetConfig = Config.GetConfig<ToolsConfig>("ToolSetsConfig");
+
         ToolsSubViewModel?.SetupTools(services, toolSetConfig);
 
         DiscordViewModel = services.GetService<DiscordViewModel>();