Browse Source

Replacer fully works

Krzysztof Krysiński 3 years ago
parent
commit
8003a29347

+ 0 - 20
PixiEditor/Helpers/Converters/ReplaceColorsPackConverter.cs

@@ -1,20 +0,0 @@
-using System;
-using System.Globalization;
-using System.Windows.Media;
-using SkiaSharp;
-
-namespace PixiEditor.Helpers.Converters
-{
-    public class ReplaceColorsPackConverter : SingleInstanceMultiValueConverter<ReplaceColorsPackConverter>
-    {
-        public override object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
-        {
-            SKColor first = (SKColor)values[0];
-            Color rawSecond = (Color)values[1];
-
-            SKColor second = new SKColor(rawSecond.R, rawSecond.G, rawSecond.B, rawSecond.A);
-
-            return (first, second);
-        }
-    }
-}

+ 0 - 6
PixiEditor/Models/Layers/Layer.cs

@@ -708,10 +708,6 @@ namespace PixiEditor.Models.Layers
                 return;
                 return;
             }
             }
 
 
-            Stopwatch sw = new Stopwatch();
-
-            sw.Start();
-
             int maxThreads = Environment.ProcessorCount;
             int maxThreads = Environment.ProcessorCount;
             int rowsPerThread = Height / maxThreads;
             int rowsPerThread = Height / maxThreads;
 
 
@@ -746,8 +742,6 @@ namespace PixiEditor.Models.Layers
 
 
             threads.ToList().ForEach(x => x.Join());
             threads.ToList().ForEach(x => x.Join());
 
 
-            sw.Stop();
-
             layerBitmap.SkiaSurface.Canvas.DrawSurface(layerBitmap.SkiaSurface, 0, 0, new SKPaint { BlendMode = SKBlendMode.Dst });
             layerBitmap.SkiaSurface.Canvas.DrawSurface(layerBitmap.SkiaSurface, 0, 0, new SKPaint { BlendMode = SKBlendMode.Dst });
 
 
             InvokeLayerBitmapChange();
             InvokeLayerBitmapChange();

+ 11 - 1
PixiEditor/ViewModels/SubViewModels/Main/ColorsViewModel.cs

@@ -82,7 +82,17 @@ namespace PixiEditor.ViewModels.SubViewModels.Main
 
 
         private void ReplaceColors((SKColor oldColor, SKColor newColor) colors)
         private void ReplaceColors((SKColor oldColor, SKColor newColor) colors)
         {
         {
-            Owner.BitmapManager?.ActiveDocument?.ReplaceColor(colors.oldColor, colors.newColor);
+            Document activeDocument = Owner.BitmapManager?.ActiveDocument;
+            if (activeDocument != null)
+            {
+                activeDocument.ReplaceColor(colors.oldColor, colors.newColor);
+                int oldIndex = activeDocument.Palette.IndexOf(colors.oldColor);
+                if (oldIndex != -1)
+                {
+                    activeDocument.Palette[oldIndex] = colors.newColor;
+                }
+            }
+
         }
         }
 
 
         private async void OwnerOnStartupEvent(object? sender, EventArgs e)
         private async void OwnerOnStartupEvent(object? sender, EventArgs e)

+ 3 - 10
PixiEditor/Views/UserControls/Palettes/ColorReplacer.xaml

@@ -37,16 +37,9 @@
                         Style="{StaticResource DefaultColorPickerStyle}"
                         Style="{StaticResource DefaultColorPickerStyle}"
                         Width="50" Focusable="False" Margin="0 0 10 0"
                         Width="50" Focusable="False" Margin="0 0 10 0"
                         ShowAlpha="False"/>
                         ShowAlpha="False"/>
-                    <Button Content="Replace" Command="{Binding ElementName=uc, Path=ReplaceColorsCommand}"
-                            Style="{StaticResource AccentDarkRoundButton}" Height="30" Width="60">
-                        <Button.CommandParameter>
-                            <MultiBinding Converter="{converters:ReplaceColorsPackConverter}">
-                                <Binding ElementName="uc" Path="ColorToReplace"/>
-                                <Binding ElementName="uc" Path="NewColor"/>
-                            </MultiBinding>
-                        </Button.CommandParameter>
-                    </Button>
-                </StackPanel>
+                    <Button Content="Replace" Click="ReplaceButton_OnClick"
+                            Style="{StaticResource AccentDarkRoundButton}" Height="30" Width="60"/>
+                    </StackPanel>
                     <CheckBox Focusable="False" Panel.ZIndex="10" Name="VisibilityCheckbox" Margin="0,0,5,0" Height="16" HorizontalAlignment="Right">
                     <CheckBox Focusable="False" Panel.ZIndex="10" Name="VisibilityCheckbox" Margin="0,0,5,0" Height="16" HorizontalAlignment="Right">
                         <CheckBox.Triggers>
                         <CheckBox.Triggers>
                             <EventTrigger RoutedEvent="CheckBox.Checked">
                             <EventTrigger RoutedEvent="CheckBox.Checked">

+ 19 - 2
PixiEditor/Views/UserControls/Palettes/ColorReplacer.xaml.cs

@@ -3,6 +3,7 @@ using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Controls;
 using System.Windows.Input;
 using System.Windows.Input;
 using System.Windows.Media;
 using System.Windows.Media;
+using PixiEditor.Helpers.Converters;
 
 
 namespace PixiEditor.Views.UserControls.Palettes
 namespace PixiEditor.Views.UserControls.Palettes
 {
 {
@@ -55,9 +56,9 @@ namespace PixiEditor.Views.UserControls.Palettes
 
 
         private void UIElement_OnDrop(object sender, DragEventArgs e)
         private void UIElement_OnDrop(object sender, DragEventArgs e)
         {
         {
-            if (e.Data.GetDataPresent(PaletteViewer.PaletteColorDaoFormat))
+            if (e.Data.GetDataPresent(PaletteColor.PaletteColorDaoFormat))
             {
             {
-                string hex = (string)e.Data.GetData(PaletteViewer.PaletteColorDaoFormat);
+                string hex = (string)e.Data.GetData(PaletteColor.PaletteColorDaoFormat);
                 ColorToReplace = SKColor.Parse(hex);
                 ColorToReplace = SKColor.Parse(hex);
             }
             }
         }
         }
@@ -66,5 +67,21 @@ namespace PixiEditor.Views.UserControls.Palettes
         {
         {
             InitializeComponent();
             InitializeComponent();
         }
         }
+
+        private void ReplaceButton_OnClick(object sender, RoutedEventArgs e)
+        {
+            SKColor first = ColorToReplace;
+            Color rawSecond = NewColor;
+
+            SKColor second = new SKColor(rawSecond.R, rawSecond.G, rawSecond.B, rawSecond.A);
+
+            var pack = (first, second);
+            if (ReplaceColorsCommand.CanExecute(pack))
+            {
+                ReplaceColorsCommand.Execute(pack);
+            }
+
+            ColorToReplace = SKColor.Empty;
+        }
     }
     }
 }
 }

+ 1 - 1
PixiEditor/Views/UserControls/Palettes/PaletteColor.xaml

@@ -6,7 +6,7 @@
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:converters="clr-namespace:PixiEditor.Helpers.Converters"
              xmlns:palettes="clr-namespace:PixiEditor.Views.UserControls.Palettes"
              xmlns:palettes="clr-namespace:PixiEditor.Views.UserControls.Palettes"
              mc:Ignorable="d"
              mc:Ignorable="d"
-             d:DesignHeight="45" d:DesignWidth="45" Name="uc">
+             d:DesignHeight="45" d:DesignWidth="45" Name="uc" MouseMove="PaletteColor_OnMouseMove">
     <UserControl.Resources>
     <UserControl.Resources>
         <converters:SKColorToMediaColorConverter x:Key="SKColorToMediaColorConverter" />
         <converters:SKColorToMediaColorConverter x:Key="SKColorToMediaColorConverter" />
         <BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter" />
         <BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter" />

+ 15 - 0
PixiEditor/Views/UserControls/Palettes/PaletteColor.xaml.cs

@@ -1,11 +1,14 @@
 using System.Windows;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Controls;
+using System.Windows.Input;
 using SkiaSharp;
 using SkiaSharp;
 
 
 namespace PixiEditor.Views.UserControls.Palettes;
 namespace PixiEditor.Views.UserControls.Palettes;
 
 
 public partial class PaletteColor : UserControl
 public partial class PaletteColor : UserControl
 {
 {
+    public const string PaletteColorDaoFormat = "PixiEditor.PaletteColor";
+
     public static readonly DependencyProperty ColorProperty = DependencyProperty.Register(
     public static readonly DependencyProperty ColorProperty = DependencyProperty.Register(
         "Color", typeof(SKColor), typeof(PaletteColor), new PropertyMetadata(default(SKColor)));
         "Color", typeof(SKColor), typeof(PaletteColor), new PropertyMetadata(default(SKColor)));
 
 
@@ -42,4 +45,16 @@ public partial class PaletteColor : UserControl
     {
     {
         InitializeComponent();
         InitializeComponent();
     }
     }
+
+    private void PaletteColor_OnMouseMove(object sender, MouseEventArgs e)
+    {
+        PaletteColor color = sender as PaletteColor;
+        if (color != null && e.LeftButton == MouseButtonState.Pressed)
+        {
+            DataObject data = new DataObject();
+            data.SetData(PaletteColor.PaletteColorDaoFormat, color.Color.ToString());
+            DragDrop.DoDragDrop(color, data, DragDropEffects.Move);
+            e.Handled = true;
+        }
+    }
 }
 }

+ 5 - 2
PixiEditor/Views/UserControls/Palettes/PaletteViewer.xaml

@@ -69,7 +69,7 @@
                <ItemsControl.ItemTemplate>
                <ItemsControl.ItemTemplate>
                     <DataTemplate>
                     <DataTemplate>
                         <palettes:PaletteColor Cursor="Hand" ToolTip="Click to select as main color. Drag and drop onto another palette color to swap them." AllowDrop="True" Color="{Binding}" 
                         <palettes:PaletteColor Cursor="Hand" ToolTip="Click to select as main color. Drag and drop onto another palette color to swap them." AllowDrop="True" Color="{Binding}" 
-                                               Margin="2.5" MouseMove="PaletteColor_MouseMove"
+                                               Margin="2.5"
                                             Drop="PaletteColor_Drop"
                                             Drop="PaletteColor_Drop"
                                             AssociatedKey="{Binding Path=(ItemsControl.AlternationIndex), 
                                             AssociatedKey="{Binding Path=(ItemsControl.AlternationIndex), 
                 RelativeSource={RelativeSource TemplatedParent}, Converter={converters:IndexToAssociatedKeyConverter}}">
                 RelativeSource={RelativeSource TemplatedParent}, Converter={converters:IndexToAssociatedKeyConverter}}">
@@ -85,6 +85,9 @@
                                             <MenuItem Header="Remove" Foreground="White"
                                             <MenuItem Header="Remove" Foreground="White"
                                               Click="RemoveColorMenuItem_OnClick"
                                               Click="RemoveColorMenuItem_OnClick"
                                               CommandParameter="{Binding}" />
                                               CommandParameter="{Binding}" />
+                                            <MenuItem Header="Replace" Foreground="White"
+                                                      CommandParameter="{Binding}"
+                                                      Click="ReplaceColor_OnClick"/>
                                         </ContextMenu>
                                         </ContextMenu>
                                     </palettes:PaletteColor.ContextMenu>
                                     </palettes:PaletteColor.ContextMenu>
                                 </palettes:PaletteColor>
                                 </palettes:PaletteColor>
@@ -92,7 +95,7 @@
                </ItemsControl.ItemTemplate>
                </ItemsControl.ItemTemplate>
             </ItemsControl>
             </ItemsControl>
         </ScrollViewer>
         </ScrollViewer>
-        <palettes:ColorReplacer Grid.Row="3" VerticalAlignment="Bottom" 
+        <palettes:ColorReplacer Grid.Row="3" VerticalAlignment="Bottom" x:Name="Replacer"
                                 ReplaceColorsCommand="{Binding ElementName=paletteControl, Path=ReplaceColorsCommand}"
                                 ReplaceColorsCommand="{Binding ElementName=paletteControl, Path=ReplaceColorsCommand}"
                                 HintColor="{Binding ElementName=paletteControl, Path=HintColor}"/>
                                 HintColor="{Binding ElementName=paletteControl, Path=HintColor}"/>
     </Grid>
     </Grid>

+ 10 - 16
PixiEditor/Views/UserControls/Palettes/PaletteViewer.xaml.cs

@@ -21,8 +21,6 @@ namespace PixiEditor.Views.UserControls.Palettes
     /// </summary>
     /// </summary>
     public partial class PaletteViewer : UserControl
     public partial class PaletteViewer : UserControl
     {
     {
-        public const string PaletteColorDaoFormat = "PixiEditor.PaletteColor";
-
         public static readonly DependencyProperty ColorsProperty = DependencyProperty.Register(
         public static readonly DependencyProperty ColorsProperty = DependencyProperty.Register(
             "Colors", typeof(WpfObservableRangeCollection<SKColor>), typeof(PaletteViewer));
             "Colors", typeof(WpfObservableRangeCollection<SKColor>), typeof(PaletteViewer));
 
 
@@ -206,23 +204,11 @@ namespace PixiEditor.Views.UserControls.Palettes
             return false;
             return false;
         }
         }
 
 
-        private void PaletteColor_MouseMove(object sender, MouseEventArgs e)
-        {
-            PaletteColor color = sender as PaletteColor;
-            if (color != null && e.LeftButton == MouseButtonState.Pressed) 
-            {
-                DataObject data = new DataObject();
-                data.SetData(PaletteColorDaoFormat, color.Color.ToString());
-                DragDrop.DoDragDrop(color, data, DragDropEffects.Move);
-                e.Handled = true;
-            }
-        }
-
         private void PaletteColor_Drop(object sender, DragEventArgs e)
         private void PaletteColor_Drop(object sender, DragEventArgs e)
         {
         {
-            if(e.Data.GetDataPresent(PaletteColorDaoFormat))
+            if(e.Data.GetDataPresent(PaletteColor.PaletteColorDaoFormat))
             {
             {
-                string data = (string)e.Data.GetData(PaletteColorDaoFormat);
+                string data = (string)e.Data.GetData(PaletteColor.PaletteColorDaoFormat);
                 SKColor color = SKColor.Parse(data);
                 SKColor color = SKColor.Parse(data);
                 if(Colors.Contains(color))
                 if(Colors.Contains(color))
                 {
                 {
@@ -240,5 +226,13 @@ namespace PixiEditor.Views.UserControls.Palettes
             var browser = PalettesBrowser.Open(DataSources, ImportPaletteCommand, Colors);
             var browser = PalettesBrowser.Open(DataSources, ImportPaletteCommand, Colors);
             await browser.UpdatePaletteList();
             await browser.UpdatePaletteList();
         }
         }
+
+        private void ReplaceColor_OnClick(object sender, RoutedEventArgs e)
+        {
+            MenuItem menuItem = (MenuItem)sender;
+            SKColor color = (SKColor)menuItem.CommandParameter;
+            Replacer.ColorToReplace = color;
+            Replacer.VisibilityCheckbox.IsChecked = false;
+        }
     }
     }
 }
 }