Browse Source

Fix "open empty file" crash in a different way cause I absolutely couldn't deal with the fact that it was creating a single transparent chunk for every empty layer

Equbuxu 2 years ago
parent
commit
08c77fad7f

+ 3 - 3
src/PixiEditor/Helpers/DocumentViewModelBuilder.cs

@@ -122,7 +122,7 @@ internal class DocumentViewModelBuilder : ChildrenBuilder
         private int? width;
         private int? height;
         
-        public SurfaceBuilder Surface { get; set; }
+        public SurfaceBuilder? Surface { get; set; }
 
         public int Width
         {
@@ -180,8 +180,8 @@ internal class DocumentViewModelBuilder : ChildrenBuilder
             {
                 throw new InvalidOperationException("You must first set the width and height of the layer. You can do this by calling WithRect() or setting the Width and Height properties.");
             }
-            
-            var surfaceBuilder = new SurfaceBuilder(new Surface(new VecI(Math.Max(Width, 1), Math.Max(Height, 1))));
+
+            var surfaceBuilder = new SurfaceBuilder(new Surface(new VecI(Width, Height)));
             surface(surfaceBuilder);
             Surface = surfaceBuilder;
             return this;

+ 4 - 5
src/PixiEditor/Helpers/Extensions/PixiParserDocumentEx.cs

@@ -28,10 +28,7 @@ internal static class PixiParserDocumentEx
                 }
                 else if (member is ImageLayer layer)
                 {
-                    /*if (layer.Height > 0 && layer.Width > 0)
-                    {*/
-                        builder.WithLayer(x => BuildLayer(x, layer));
-                    //}
+                    builder.WithLayer(x => BuildLayer(x, layer));
                 }
                 else
                 {
@@ -56,10 +53,12 @@ internal static class PixiParserDocumentEx
                 .WithOpacity(layer.Opacity)
                 .WithBlendMode((PixiEditor.ChangeableDocument.Enums.BlendMode)(int)layer.BlendMode)
                 .WithSize(layer.Width, layer.Height)
-                .WithSurface(x => x.WithImage(layer.ImageBytes, layer.OffsetX, layer.OffsetY))
                 .WithMask(layer.Mask,
                     (x, m) => x.WithVisibility(m.Enabled).WithSurface(m.Width, m.Height,
                         x => x.WithImage(m.ImageBytes, m.OffsetX, m.OffsetY)));
+
+            if (layer.Width > 0 && layer.Height > 0)
+                builder.WithSurface(x => x.WithImage(layer.ImageBytes, layer.OffsetX, layer.OffsetY));
         }
     }
 }

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Document/DocumentViewModel.cs

@@ -216,7 +216,7 @@ internal partial class DocumentViewModel : NotifyableObject
             if (!member.IsVisible)
                 acc.AddActions(new StructureMemberIsVisible_Action(member.IsVisible, member.GuidValue));
 
-            if (member is DocumentViewModelBuilder.LayerBuilder layer)
+            if (member is DocumentViewModelBuilder.LayerBuilder layer && layer.Surface is not null)
             {
                 PasteImage(member.GuidValue, layer.Surface, layer.Width, layer.Height, layer.OffsetX, layer.OffsetY, false);
             }