Browse Source

Slight refactoring to Combine and Separate color nodes

CPKreuz 11 months ago
parent
commit
94e1c9f4f7

+ 28 - 20
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/CombineSeparate/CombineColorNode.cs

@@ -32,35 +32,43 @@ public class CombineColorNode : Node
         A = CreateFuncInput<Float1>("A", "A", 0d);
         A = CreateFuncInput<Float1>("A", "A", 0d);
     }
     }
 
 
-    private Half4 GetColor(FuncContext ctx)
-    {
-        var a = ctx.GetValue(A);
-        
-        if (Mode.Value == CombineSeparateColorMode.HSV)
-        {
-            var h = ctx.GetValue(R);
-            var s = ctx.GetValue(G);
-            var v = ctx.GetValue(B);
-
-            return ctx.HsvaToRgba(h, s, v, a);
-        }
-
-        if (Mode.Value == CombineSeparateColorMode.HSL)
+    private Half4 GetColor(FuncContext ctx) =>
+        Mode.Value switch
         {
         {
-            var h = ctx.GetValue(R);
-            var s = ctx.GetValue(G);
-            var l = ctx.GetValue(B);
-
-            return ctx.HslaToRgba(h, s, l, a);
-        }
+            CombineSeparateColorMode.RGB => GetRgb(ctx),
+            CombineSeparateColorMode.HSV => GetHsv(ctx),
+            CombineSeparateColorMode.HSL => GetHsl(ctx)
+        };
 
 
+    private Half4 GetRgb(FuncContext ctx)
+    {
         var r = ctx.GetValue(R);
         var r = ctx.GetValue(R);
         var g = ctx.GetValue(G);
         var g = ctx.GetValue(G);
         var b = ctx.GetValue(B);
         var b = ctx.GetValue(B);
+        var a = ctx.GetValue(A);
 
 
         return ctx.NewHalf4(r, g, b, a); 
         return ctx.NewHalf4(r, g, b, a); 
     }
     }
 
 
+    private Half4 GetHsv(FuncContext ctx)
+    {
+        var h = ctx.GetValue(R);
+        var s = ctx.GetValue(G);
+        var v = ctx.GetValue(B);
+        var a = ctx.GetValue(A);
+
+        return ctx.HsvaToRgba(h, s, v, a);
+    }
+    
+    private Half4 GetHsl(FuncContext ctx)
+    {
+        var h = ctx.GetValue(R);
+        var s = ctx.GetValue(G);
+        var l = ctx.GetValue(B);
+        var a = ctx.GetValue(A);
+
+        return ctx.HslaToRgba(h, s, l, a);
+    }
 
 
     protected override Texture? OnExecute(RenderingContext context)
     protected override Texture? OnExecute(RenderingContext context)
     {
     {

+ 16 - 36
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/CombineSeparate/SeparateColorNode.cs

@@ -1,4 +1,5 @@
 using PixiEditor.ChangeableDocument.Changeables.Graph.Context;
 using PixiEditor.ChangeableDocument.Changeables.Graph.Context;
+using PixiEditor.ChangeableDocument.Enums;
 using PixiEditor.ChangeableDocument.Rendering;
 using PixiEditor.ChangeableDocument.Rendering;
 using PixiEditor.DrawingApi.Core;
 using PixiEditor.DrawingApi.Core;
 using PixiEditor.DrawingApi.Core.ColorsImpl;
 using PixiEditor.DrawingApi.Core.ColorsImpl;
@@ -21,10 +22,6 @@ public class SeparateColorNode : Node
     
     
     public FuncOutputProperty<Float1> A { get; }
     public FuncOutputProperty<Float1> A { get; }
     
     
-    
-    private FuncContext lastContext;
-    private Half4 lastColor;
-
     public SeparateColorNode()
     public SeparateColorNode()
     {
     {
         R = CreateFuncOutput<Float1>(nameof(R), "R", ctx => GetColor(ctx).R);
         R = CreateFuncOutput<Float1>(nameof(R), "R", ctx => GetColor(ctx).R);
@@ -40,63 +37,46 @@ public class SeparateColorNode : Node
         return null;
         return null;
     }
     }
     
     
-    private Half4 GetColor(FuncContext ctx)
-    {
-        if (Mode.Value == CombineSeparateColorMode.HSV)
+    private Half4 GetColor(FuncContext ctx) =>
+        Mode.Value switch
         {
         {
-            return GetHsva(ctx);
-        }
-
-        if (Mode.Value == CombineSeparateColorMode.HSL)
-        {
-            return GetHsla(ctx);
-        }
+            CombineSeparateColorMode.RGB => GetRgba(ctx),
+            CombineSeparateColorMode.HSV => GetHsva(ctx),
+            CombineSeparateColorMode.HSL => GetHsla(ctx)
+        };
 
 
-        Half4 target = null;
-        if (lastContext == ctx)
-        {
-            target = lastColor;
-        }
-        else
-        {
-            target = Color.Value(ctx);
-        }
-        
-        lastColor = target;
-        lastContext = ctx;
-        return lastColor;
-    }
+    private Half4 GetRgba(FuncContext ctx) => ctx.Builder.GetOrNewAttachedHalf4(this.GetHashCode(), Color.GetHashCode(), () => Color.Value(ctx));
 
 
-    private Half4 GetHsla(FuncContext ctx)
+    private Half4 GetHsva(FuncContext ctx)
     {
     {
         if (!ctx.HasContext && ctx.GetValue(Color) is Half4 constantColor)
         if (!ctx.HasContext && ctx.GetValue(Color) is Half4 constantColor)
         {
         {
             var variable = new Half4(string.Empty);
             var variable = new Half4(string.Empty);
-            constantColor.ConstantValue.ToHsl(out float h, out float s, out float l);
+            constantColor.ConstantValue.ToHsv(out float h, out float s, out float l);
             variable.ConstantValue = new Color((byte)(h * 255), (byte)(s * 255), (byte)(l * 255), constantColor.ConstantValue.A);
             variable.ConstantValue = new Color((byte)(h * 255), (byte)(s * 255), (byte)(l * 255), constantColor.ConstantValue.A);
             
             
             return variable;
             return variable;
         }
         }
 
 
-        return ctx.Builder.GetOrNewAttachedHalf4(this.GetHashCode(), Color.GetHashCode(), RgbToHslGetter);
+        return ctx.Builder.GetOrNewAttachedHalf4(this.GetHashCode(), Color.GetHashCode(), RgbToHsvGetter);
 
 
-        Expression RgbToHslGetter() => ctx.Builder.Functions.GetRgbToHsl(ctx.GetValue(Color));
+        Expression RgbToHsvGetter() => ctx.Builder.Functions.GetRgbToHsv(ctx.GetValue(Color));
     }
     }
 
 
-    private Half4 GetHsva(FuncContext ctx)
+    private Half4 GetHsla(FuncContext ctx)
     {
     {
         if (!ctx.HasContext && ctx.GetValue(Color) is Half4 constantColor)
         if (!ctx.HasContext && ctx.GetValue(Color) is Half4 constantColor)
         {
         {
             var variable = new Half4(string.Empty);
             var variable = new Half4(string.Empty);
-            constantColor.ConstantValue.ToHsv(out float h, out float s, out float l);
+            constantColor.ConstantValue.ToHsl(out float h, out float s, out float l);
             variable.ConstantValue = new Color((byte)(h * 255), (byte)(s * 255), (byte)(l * 255), constantColor.ConstantValue.A);
             variable.ConstantValue = new Color((byte)(h * 255), (byte)(s * 255), (byte)(l * 255), constantColor.ConstantValue.A);
             
             
             return variable;
             return variable;
         }
         }
 
 
-        return ctx.Builder.GetOrNewAttachedHalf4(this.GetHashCode(), Color.GetHashCode(), RgbToHsvGetter);
+        return ctx.Builder.GetOrNewAttachedHalf4(this.GetHashCode(), Color.GetHashCode(), RgbToHslGetter);
 
 
-        Expression RgbToHsvGetter() => ctx.Builder.Functions.GetRgbToHsv(ctx.GetValue(Color));
+        Expression RgbToHslGetter() => ctx.Builder.Functions.GetRgbToHsl(ctx.GetValue(Color));
     }
     }
 
 
     public override Node CreateCopy() => new SeparateColorNode();
     public override Node CreateCopy() => new SeparateColorNode();