Working on some basic data conversions.
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using Jint.Native;
|
||||
using Jint;
|
||||
using Jint.Native;
|
||||
using Progrart.Core.Graphics;
|
||||
using SkiaSharp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -8,8 +10,102 @@ namespace Progrart.Core.JSExecution
|
||||
{
|
||||
public static class ProgrartConversion
|
||||
{
|
||||
public static SKColorF ObtainSKColorFFromJsObject(JsObject jsObject)
|
||||
{
|
||||
var r = (float)jsObject.Get("r").AsNumber();
|
||||
var g = (float)jsObject.Get("g").AsNumber();
|
||||
var b = (float)jsObject.Get("b").AsNumber();
|
||||
float a = 1;
|
||||
if (jsObject.TryGetValue("a", out var a_str))
|
||||
{
|
||||
a = (float)a_str.AsNumber();
|
||||
}
|
||||
return new SKColorF(r, g, b, a);
|
||||
}
|
||||
public static SKShader? ObtainFromJsObject(JsObject jsObject)
|
||||
{
|
||||
var type_str = jsObject.Get("Type").AsString();
|
||||
if (Enum.TryParse<ShaderType>(type_str, out var type))
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case ShaderType.LinearGradient:
|
||||
{
|
||||
var sx = (float)jsObject.Get("Start").Get("x").AsNumber();
|
||||
var sy = (float)jsObject.Get("Start").Get("y").AsNumber();
|
||||
var ex = (float)jsObject.Get("End").Get("x").AsNumber();
|
||||
var ey = (float)jsObject.Get("End").Get("y").AsNumber();
|
||||
SKColor C0 = SKColors.Black;
|
||||
SKColor C1 = SKColors.White;
|
||||
float p0 = 0;
|
||||
float p1 = 1;
|
||||
if (jsObject.Get("Colors") is JsArray color_array)
|
||||
{
|
||||
if (color_array[0] is JsObject c0)
|
||||
if (color_array[1] is JsObject c1)
|
||||
{
|
||||
|
||||
C0 = (SKColor)ObtainSKColorFFromJsObject(c0);
|
||||
C1 = (SKColor)ObtainSKColorFFromJsObject(c1);
|
||||
|
||||
}
|
||||
}
|
||||
if (jsObject.Get("Positions") is JsArray pos_array)
|
||||
{
|
||||
if (pos_array[0] is JsNumber P0)
|
||||
if (pos_array[1] is JsNumber P1)
|
||||
{
|
||||
p0 = (float)P0.AsNumber();
|
||||
p1 = (float)P1.AsNumber();
|
||||
}
|
||||
}
|
||||
var TileMode_str = jsObject.Get("TileMode").AsString();
|
||||
if (Enum.TryParse<SKShaderTileMode>(TileMode_str, out var SKShaderTileMode))
|
||||
return SKShader.CreateLinearGradient(new SKPoint(sx, sy), new SKPoint(ex, ey),
|
||||
[C0, C1], [p0, p1], SKShaderTileMode);
|
||||
}
|
||||
break;
|
||||
case ShaderType.RadialGradient:
|
||||
{
|
||||
var sx = (float)jsObject.Get("Center").Get("x").AsNumber();
|
||||
var sy = (float)jsObject.Get("Center").Get("y").AsNumber();
|
||||
var radius = (float)jsObject.Get("Radius").AsNumber();
|
||||
SKColor C0 = SKColors.Black;
|
||||
SKColor C1 = SKColors.White;
|
||||
float p0 = 0;
|
||||
float p1 = 1;
|
||||
if (jsObject.Get("Colors") is JsArray color_array)
|
||||
{
|
||||
if (color_array[0] is JsObject c0)
|
||||
if (color_array[1] is JsObject c1)
|
||||
{
|
||||
|
||||
C0 = (SKColor)ObtainSKColorFFromJsObject(c0);
|
||||
C1 = (SKColor)ObtainSKColorFFromJsObject(c1);
|
||||
|
||||
}
|
||||
}
|
||||
if (jsObject.Get("Positions") is JsArray pos_array)
|
||||
{
|
||||
if (pos_array[0] is JsNumber P0)
|
||||
if (pos_array[1] is JsNumber P1)
|
||||
{
|
||||
p0 = (float)P0.AsNumber();
|
||||
p1 = (float)P1.AsNumber();
|
||||
}
|
||||
}
|
||||
var TileMode_str = jsObject.Get("TileMode").AsString();
|
||||
if (Enum.TryParse<SKShaderTileMode>(TileMode_str, out var SKShaderTileMode))
|
||||
return SKShader.CreateRadialGradient(new SKPoint(sx, sy), radius,
|
||||
[C0, C1], [p0, p1], SKShaderTileMode);
|
||||
}
|
||||
break;
|
||||
case ShaderType.Picture:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user