Skip to content

Commit

Permalink
Some progress has been made
Browse files Browse the repository at this point in the history
  • Loading branch information
flabbet committed Dec 16, 2021
1 parent 7828c07 commit 6639709
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 8 deletions.
2 changes: 1 addition & 1 deletion PixiEditor/Models/Layers/Layer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public bool IsRenaming
public Surface LayerBitmap
{
get => layerBitmap;
private set
set
{
Int32Rect prevRect = new Int32Rect(OffsetX, OffsetY, Width, Height);
layerBitmap = value;
Expand Down
47 changes: 40 additions & 7 deletions PixiEditor/Models/Undo/StorageBasedChange.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using PixiEditor.Models.Layers;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
Expand Down Expand Up @@ -94,12 +95,13 @@ public void SaveLayersOnDevice()
storedLayer.SerializedRect.Width,
storedLayer.SerializedRect.Height);

Random rand = new Random();
using var image = layer.LayerBitmap.SkiaSurface.Snapshot();
Surface targetSizeSurface = new Surface(finalRect.Width, finalRect.Height);

layer.LayerBitmap.SkiaSurface.Canvas.DrawPoint(storedLayer.SerializedRect.Left - layer.OffsetX, storedLayer.SerializedRect.Top - layer.OffsetY,
new SKColor((byte)rand.Next(0, 255), (byte)rand.Next(0, 255), (byte)rand.Next(0, 255)));
targetSizeSurface.SkiaSurface.Canvas.DrawImage(image, finalRect, SKRect.Create(0, 0, finalRect.Width, finalRect.Height), Surface.ReplacingPaint);
DebugSavePng(targetSizeSurface, storedLayer);

Exporter.SaveAsGZippedBytes(storedLayer.StoredPngLayerName, layer.LayerBitmap, finalRect);
Exporter.SaveAsGZippedBytes(storedLayer.StoredPngLayerName, targetSizeSurface);
}

i++;
Expand All @@ -108,6 +110,19 @@ public void SaveLayersOnDevice()
layersToStore = new List<Guid>();
}

[Conditional("DEBUG")]
private static void DebugSavePng(Surface surface, UndoLayer storedLayer)
{
//Debug png visualization
using var targetSizeImage = surface.SkiaSurface.Snapshot();
using (var data = targetSizeImage.Encode(SKEncodedImageFormat.Png, 80))
using (var stream = File.OpenWrite(storedLayer.StoredPngLayerName + ".png"))
{
// save the data to a stream
data.SaveTo(stream);
}
}

/// <summary>
/// Loads saved layers from disk.
/// </summary>
Expand All @@ -122,16 +137,30 @@ public Layer[] LoadLayersFromDevice()
var foundLayer = Document.Layers.FirstOrDefault(x => x.LayerGuid == storedLayer.LayerGuid);
if (foundLayer != null)
{
using var snapshot = bitmap.SkiaSurface.Snapshot();
Surface targetSizeSurface = new Surface(storedLayer.Width, storedLayer.Height);
using var foundLayerSnapshot = foundLayer.LayerBitmap.SkiaSurface.Snapshot();
targetSizeSurface.SkiaSurface.Canvas.DrawImage(
foundLayerSnapshot,
SKRect.Create(storedLayer.OffsetX - foundLayer.OffsetX, storedLayer.OffsetY - foundLayer.OffsetY, storedLayer.Width, storedLayer.Height),
SKRect.Create(0, 0, storedLayer.Width, storedLayer.Height),
Surface.ReplacingPaint);

foundLayer.Offset = new Thickness(storedLayer.OffsetX, storedLayer.OffsetY, 0, 0);

SKRect finalRect = SKRect.Create(
storedLayer.SerializedRect.Left - foundLayer.OffsetX,
storedLayer.SerializedRect.Top - foundLayer.OffsetY,
storedLayer.SerializedRect.Width,
storedLayer.SerializedRect.Height);

foundLayer.LayerBitmap.SkiaSurface.Canvas.DrawImage(snapshot, finalRect,
new SKPaint { BlendMode = SKBlendMode.Src });
using var snapshot = bitmap.SkiaSurface.Snapshot();

targetSizeSurface.SkiaSurface.Canvas.DrawImage(
snapshot,
finalRect,
Surface.ReplacingPaint);

foundLayer.LayerBitmap = targetSizeSurface;

layers[i] = foundLayer;
}
Expand All @@ -153,6 +182,10 @@ public Layer[] LoadLayersFromDevice()
layers[i].ChangeGuid(storedLayer.LayerGuid);
}

#if DEBUG
File.Delete(StoredLayers[i].StoredPngLayerName + ".png");
#endif

File.Delete(StoredLayers[i].StoredPngLayerName);
}

Expand Down

0 comments on commit 6639709

Please sign in to comment.