|
@@ -261,16 +261,16 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
if (builderInstance.ReferenceLayer is { } refLayer)
|
|
|
{
|
|
|
acc.AddActions(new SetReferenceLayer_Action(refLayer.Shape, refLayer.ImageBgra8888Bytes.ToImmutableArray(),
|
|
|
- refLayer.ImageSize));
|
|
|
+ refLayer.ImageSize));
|
|
|
}
|
|
|
|
|
|
viewModel.Swatches = new ObservableCollection<PaletteColor>(builderInstance.Swatches);
|
|
|
viewModel.Palette = new ObservableRangeCollection<PaletteColor>(builderInstance.Palette);
|
|
|
-
|
|
|
+
|
|
|
Guid outputNodeGuid = Guid.NewGuid();
|
|
|
-
|
|
|
+
|
|
|
acc.AddActions(new CreateNode_Action(typeof(OutputNode), outputNodeGuid));
|
|
|
-
|
|
|
+
|
|
|
AddMembers(outputNodeGuid, builderInstance.Children);
|
|
|
AddAnimationData(builderInstance.AnimationData);
|
|
|
|
|
@@ -363,21 +363,24 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
{
|
|
|
rasterKeyFrameBuilder.Id = Guid.NewGuid();
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
acc.AddActions(
|
|
|
new CreateRasterKeyFrame_Action(
|
|
|
rasterKeyFrameBuilder.LayerGuid,
|
|
|
rasterKeyFrameBuilder.Id,
|
|
|
rasterKeyFrameBuilder.StartFrame, -1, default),
|
|
|
- new KeyFrameLength_Action(rasterKeyFrameBuilder.Id, rasterKeyFrameBuilder.StartFrame, rasterKeyFrameBuilder.Duration),
|
|
|
+ new KeyFrameLength_Action(rasterKeyFrameBuilder.Id, rasterKeyFrameBuilder.StartFrame,
|
|
|
+ rasterKeyFrameBuilder.Duration),
|
|
|
new EndKeyFrameLength_Action());
|
|
|
-
|
|
|
- PasteImage(rasterKeyFrameBuilder.LayerGuid, rasterKeyFrameBuilder.Surface, rasterKeyFrameBuilder.Surface.Surface.Size.X,
|
|
|
- rasterKeyFrameBuilder.Surface.Surface.Size.Y, 0, 0, false, rasterKeyFrameBuilder.StartFrame, rasterKeyFrameBuilder.Id);
|
|
|
-
|
|
|
+
|
|
|
+ PasteImage(rasterKeyFrameBuilder.LayerGuid, rasterKeyFrameBuilder.Surface,
|
|
|
+ rasterKeyFrameBuilder.Surface.Surface.Size.X,
|
|
|
+ rasterKeyFrameBuilder.Surface.Surface.Size.Y, 0, 0, false, rasterKeyFrameBuilder.StartFrame,
|
|
|
+ rasterKeyFrameBuilder.Id);
|
|
|
+
|
|
|
acc.AddFinishedActions();
|
|
|
}
|
|
|
- else if(keyFrame is GroupKeyFrameBuilder groupKeyFrameBuilder)
|
|
|
+ else if (keyFrame is GroupKeyFrameBuilder groupKeyFrameBuilder)
|
|
|
{
|
|
|
AddAnimationData(groupKeyFrameBuilder.Children);
|
|
|
}
|
|
@@ -454,7 +457,8 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
try
|
|
|
{
|
|
|
// TODO: Make sure it must be GetLayerImageAtFrame rather than Rasterize()
|
|
|
- memberImageBounds = layer.GetLayerImageAtFrame(AnimationDataViewModel.ActiveFrameBindable).FindChunkAlignedMostUpToDateBounds();
|
|
|
+ memberImageBounds = layer.GetLayerImageAtFrame(AnimationDataViewModel.ActiveFrameBindable)
|
|
|
+ .FindChunkAlignedMostUpToDateBounds();
|
|
|
}
|
|
|
catch (ObjectDisposedException)
|
|
|
{
|
|
@@ -476,7 +480,8 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
output.DrawingSurface.Canvas.ClipPath(clipPath);
|
|
|
try
|
|
|
{
|
|
|
- layer.GetLayerImageAtFrame(AnimationDataViewModel.ActiveFrameBindable).DrawMostUpToDateRegionOn(bounds, ChunkResolution.Full, output.DrawingSurface, VecI.Zero);
|
|
|
+ layer.GetLayerImageAtFrame(AnimationDataViewModel.ActiveFrameBindable)
|
|
|
+ .DrawMostUpToDateRegionOn(bounds, ChunkResolution.Full, output.DrawingSurface, VecI.Zero);
|
|
|
}
|
|
|
catch (ObjectDisposedException)
|
|
|
{
|
|
@@ -554,28 +559,26 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
|
|
|
if (scope == DocumentScope.AllLayers)
|
|
|
{
|
|
|
VecI chunkPos = OperationHelper.GetChunkPos(pos, ChunkyImage.FullChunkSize);
|
|
|
- /*return ChunkRenderer.MergeWholeStructure(chunkPos, ChunkResolution.Full,
|
|
|
- Internals.Tracker.Document.StructureRoot, frame, new RectI(pos, VecI.One))
|
|
|
- .Match<Color>(
|
|
|
- (Chunk chunk) =>
|
|
|
+ return DocumentEvaluator.RenderChunk(chunkPos, ChunkResolution.Full,
|
|
|
+ Internals.Tracker.Document.NodeGraph,
|
|
|
+ frame)
|
|
|
+ .Match(
|
|
|
+ chunk =>
|
|
|
{
|
|
|
VecI posOnChunk = pos - chunkPos * ChunkyImage.FullChunkSize;
|
|
|
var color = chunk.Surface.GetSRGBPixel(posOnChunk);
|
|
|
chunk.Dispose();
|
|
|
return color;
|
|
|
},
|
|
|
- _ => Colors.Transparent
|
|
|
- );*/
|
|
|
- // TODO: Implement this
|
|
|
- return Colors.Transparent;
|
|
|
+ _ => Colors.Transparent);
|
|
|
}
|
|
|
|
|
|
if (SelectedStructureMember is not LayerViewModel layerVm)
|
|
|
return Colors.Transparent;
|
|
|
IReadOnlyStructureNode? maybeMember = Internals.Tracker.Document.FindMember(layerVm.Id);
|
|
|
- if (maybeMember is not IReadOnlyLayerNode layer)
|
|
|
+ if (maybeMember is not IReadOnlyImageNode layer)
|
|
|
return Colors.Transparent;
|
|
|
- return layer.Execute(frame).GetMostUpToDatePixel(pos);
|
|
|
+ return layer.GetLayerImageAtFrame(frame).GetMostUpToDatePixel(pos);
|
|
|
}
|
|
|
catch (ObjectDisposedException)
|
|
|
{
|