|
@@ -75,7 +75,9 @@ namespace PixiEditor.Models.Controllers
|
|
{
|
|
{
|
|
if(SelectedTool.RequiresPreviewLayer)
|
|
if(SelectedTool.RequiresPreviewLayer)
|
|
{
|
|
{
|
|
|
|
+ BitmapPixelChanges oldValues = GetOldPixelsValues(_lastChangedPixels.ChangedPixels.Keys.ToArray());
|
|
Layers[ActiveLayerIndex].ApplyPixels(_lastChangedPixels);
|
|
Layers[ActiveLayerIndex].ApplyPixels(_lastChangedPixels);
|
|
|
|
+ BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(_lastChangedPixels, oldValues, ActiveLayerIndex));
|
|
_previewLayer.Clear();
|
|
_previewLayer.Clear();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -86,21 +88,35 @@ namespace PixiEditor.Models.Controllers
|
|
{
|
|
{
|
|
var mouseMove = MouseController.LastMouseMoveCoordinates.ToList();
|
|
var mouseMove = MouseController.LastMouseMoveCoordinates.ToList();
|
|
mouseMove.Reverse();
|
|
mouseMove.Reverse();
|
|
- BitmapPixelChanges changedPixels = new BitmapPixelChanges();
|
|
|
|
|
|
+
|
|
if (!SelectedTool.RequiresPreviewLayer)
|
|
if (!SelectedTool.RequiresPreviewLayer)
|
|
{
|
|
{
|
|
- changedPixels = SelectedTool.Use(Layers[ActiveLayerIndex], mouseMove.ToArray(), PrimaryColor, ToolSize);
|
|
|
|
|
|
+ BitmapPixelChanges changedPixels = SelectedTool.Use(Layers[ActiveLayerIndex], mouseMove.ToArray(), PrimaryColor, ToolSize);
|
|
|
|
+ BitmapPixelChanges oldPixelsValues = GetOldPixelsValues(changedPixels.ChangedPixels.Keys.ToArray());
|
|
ActiveLayer.ApplyPixels(changedPixels);
|
|
ActiveLayer.ApplyPixels(changedPixels);
|
|
|
|
+ BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(changedPixels, oldPixelsValues, ActiveLayerIndex));
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
UseToolOnPreviewLayer(mouseMove);
|
|
UseToolOnPreviewLayer(mouseMove);
|
|
}
|
|
}
|
|
- BitmapChanged?.Invoke(this, new BitmapChangedEventArgs(changedPixels, ActiveLayerIndex));
|
|
|
|
|
|
+
|
|
_lastMousePos = e.NewPosition;
|
|
_lastMousePos = e.NewPosition;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private BitmapPixelChanges GetOldPixelsValues(Coordinates[] coordinates)
|
|
|
|
+ {
|
|
|
|
+ Dictionary<Coordinates, Color> values = new Dictionary<Coordinates, Color>();
|
|
|
|
+ Layers[ActiveLayerIndex].LayerBitmap.Lock();
|
|
|
|
+ for (int i = 0; i < coordinates.Length; i++)
|
|
|
|
+ {
|
|
|
|
+ values.Add(coordinates[i], Layers[ActiveLayerIndex].LayerBitmap.GetPixel(coordinates[i].X, coordinates[i].Y));
|
|
|
|
+ }
|
|
|
|
+ Layers[ActiveLayerIndex].LayerBitmap.Unlock();
|
|
|
|
+ return new BitmapPixelChanges(values);
|
|
|
|
+ }
|
|
|
|
+
|
|
private void UseToolOnPreviewLayer(List<Coordinates> mouseMove)
|
|
private void UseToolOnPreviewLayer(List<Coordinates> mouseMove)
|
|
{
|
|
{
|
|
BitmapPixelChanges changedPixels;
|
|
BitmapPixelChanges changedPixels;
|
|
@@ -144,11 +160,13 @@ namespace PixiEditor.Models.Controllers
|
|
public class BitmapChangedEventArgs : EventArgs
|
|
public class BitmapChangedEventArgs : EventArgs
|
|
{
|
|
{
|
|
public BitmapPixelChanges PixelsChanged { get; set; }
|
|
public BitmapPixelChanges PixelsChanged { get; set; }
|
|
|
|
+ public BitmapPixelChanges OldPixelsValues { get; set; }
|
|
public int ChangedLayerIndex { get; set; }
|
|
public int ChangedLayerIndex { get; set; }
|
|
|
|
|
|
- public BitmapChangedEventArgs(BitmapPixelChanges pixelsChanged, int changedLayerIndex)
|
|
|
|
|
|
+ public BitmapChangedEventArgs(BitmapPixelChanges pixelsChanged, BitmapPixelChanges oldPixelsValues, int changedLayerIndex)
|
|
{
|
|
{
|
|
PixelsChanged = pixelsChanged;
|
|
PixelsChanged = pixelsChanged;
|
|
|
|
+ OldPixelsValues = oldPixelsValues;
|
|
ChangedLayerIndex = changedLayerIndex;
|
|
ChangedLayerIndex = changedLayerIndex;
|
|
}
|
|
}
|
|
}
|
|
}
|