Browse Source

Fixed removed and restored layer bug

flabbet 3 years ago
parent
commit
f8bb5d0dd4
1 changed files with 15 additions and 4 deletions
  1. 15 4
      PixiEditor/Models/Undo/StorageBasedChange.cs

+ 15 - 4
PixiEditor/Models/Undo/StorageBasedChange.cs

@@ -330,15 +330,26 @@ namespace PixiEditor.Models.Undo
 
         private static void ApplyChunkToLayer(Layer layer, UndoLayer layerData, Surface chunk)
         {
-            Surface targetSizeSurface = new Surface(layerData.Width, layerData.Height);
+            bool widthBigger = layer.Width < chunk.Width;
+            bool heightBigger = layer.Height < chunk.Height;
+            int targetWidth = widthBigger ? chunk.Width : layer.Width;
+            int targetHeight = heightBigger ? chunk.Height : layer.Height;
+
+            int offsetDiffX = layerData.OffsetX - layer.OffsetX;
+            int offsetDiffY = layerData.OffsetY - layer.OffsetY;
+
+            int targetOffsetX = layerData.OffsetX == 0 && widthBigger ? layerData.SerializedRect.Left : layerData.OffsetX;
+            int targetOffsetY = layerData.OffsetY == 0 && heightBigger ? layerData.SerializedRect.Top : layerData.OffsetY;
+
+            Surface targetSizeSurface = new Surface(targetWidth, targetHeight);
             using var foundLayerSnapshot = layer.LayerBitmap.SkiaSurface.Snapshot();
             targetSizeSurface.SkiaSurface.Canvas.DrawImage(
                 foundLayerSnapshot,
-                SKRect.Create(layerData.OffsetX - layer.OffsetX, layerData.OffsetY - layer.OffsetY, layerData.Width, layerData.Height),
-                SKRect.Create(0, 0, layerData.Width, layerData.Height),
+                SKRect.Create(offsetDiffX, offsetDiffY, layer.Width, layer.Height),
+                SKRect.Create(0, 0, targetWidth, targetHeight),
                 Surface.ReplacingPaint);
 
-            layer.Offset = new Thickness(layerData.OffsetX, layerData.OffsetY, 0, 0);
+            layer.Offset = new Thickness(targetOffsetX, targetOffsetY, 0, 0);
 
             SKRect finalRect = SKRect.Create(
                 layerData.SerializedRect.Left - layer.OffsetX,