Browse Source

Painter masks

flabbet 10 months ago
parent
commit
b87ae5205b

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changeables/Graph/Interfaces/IReadOnlyStructureNode.cs

@@ -12,7 +12,7 @@ public interface IReadOnlyStructureNode : IReadOnlyNode, ISceneObject, IChunkRen
     public InputProperty<bool> IsVisible { get; }
     public InputProperty<bool> IsVisible { get; }
     public bool ClipToPreviousMember { get; }
     public bool ClipToPreviousMember { get; }
     public InputProperty<BlendMode> BlendMode { get; }
     public InputProperty<BlendMode> BlendMode { get; }
-    public InputProperty<Texture?> CustomMask { get; }
+    public RenderInputProperty CustomMask { get; }
     public InputProperty<bool> MaskIsVisible { get; }
     public InputProperty<bool> MaskIsVisible { get; }
     public string MemberName { get; set; }
     public string MemberName { get; set; }
     public RectD? GetTightBounds(KeyFrameTime frameTime);
     public RectD? GetTightBounds(KeyFrameTime frameTime);

+ 6 - 3
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/StructureNode.cs

@@ -20,7 +20,7 @@ public abstract class StructureNode : RenderNode, IReadOnlyStructureNode, IRende
     public InputProperty<bool> IsVisible { get; }
     public InputProperty<bool> IsVisible { get; }
     public bool ClipToPreviousMember { get; set; }
     public bool ClipToPreviousMember { get; set; }
     public InputProperty<BlendMode> BlendMode { get; }
     public InputProperty<BlendMode> BlendMode { get; }
-    public InputProperty<Texture?> CustomMask { get; }
+    public RenderInputProperty CustomMask { get; }
     public InputProperty<bool> MaskIsVisible { get; }
     public InputProperty<bool> MaskIsVisible { get; }
     public InputProperty<Filter> Filters { get; }
     public InputProperty<Filter> Filters { get; }
 
 
@@ -67,7 +67,7 @@ public abstract class StructureNode : RenderNode, IReadOnlyStructureNode, IRende
         Opacity = CreateInput<float>("Opacity", "OPACITY", 1);
         Opacity = CreateInput<float>("Opacity", "OPACITY", 1);
         IsVisible = CreateInput<bool>("IsVisible", "IS_VISIBLE", true);
         IsVisible = CreateInput<bool>("IsVisible", "IS_VISIBLE", true);
         BlendMode = CreateInput("BlendMode", "BLEND_MODE", Enums.BlendMode.Normal);
         BlendMode = CreateInput("BlendMode", "BLEND_MODE", Enums.BlendMode.Normal);
-        CustomMask = CreateInput<Texture?>("Mask", "MASK", null);
+        CustomMask = CreateRenderInput("Mask", "MASK");
         MaskIsVisible = CreateInput<bool>("MaskIsVisible", "MASK_IS_VISIBLE", true);
         MaskIsVisible = CreateInput<bool>("MaskIsVisible", "MASK_IS_VISIBLE", true);
         Filters = CreateInput<Filter>(nameof(Filters), "FILTERS", null);
         Filters = CreateInput<Filter>(nameof(Filters), "FILTERS", null);
 
 
@@ -135,7 +135,10 @@ public abstract class StructureNode : RenderNode, IReadOnlyStructureNode, IRende
         {
         {
             if (CustomMask.Value != null)
             if (CustomMask.Value != null)
             {
             {
-                surface.Canvas.DrawSurface(CustomMask.Value.DrawingSurface, 0, 0, maskPaint);
+                int layer = surface.Canvas.SaveLayer(maskPaint);
+                CustomMask.Value.Paint(context, surface);
+                
+                surface.Canvas.RestoreToCount(layer);
             }
             }
             else if (EmbeddedMask != null)
             else if (EmbeddedMask != null)
             {
             {