2025-12-25 23:00:26 +11:00
|
|
|
|
using Jint;
|
|
|
|
|
|
using Jint.Native;
|
2026-01-05 03:57:09 +11:00
|
|
|
|
using System.Diagnostics;
|
2025-12-24 22:08:37 +11:00
|
|
|
|
|
|
|
|
|
|
namespace Progrart.Core.Graphics
|
|
|
|
|
|
{
|
|
|
|
|
|
public class ImageRoot : BaseElement
|
|
|
|
|
|
{
|
2025-12-28 23:03:33 +11:00
|
|
|
|
public override void Render(RenderContext context)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.Render(context);
|
|
|
|
|
|
foreach (var item in Children)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Render(context);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-24 22:08:37 +11:00
|
|
|
|
}
|
|
|
|
|
|
public class VisualRoot : BaseElement
|
|
|
|
|
|
{
|
2025-12-26 03:06:15 +11:00
|
|
|
|
float w;
|
|
|
|
|
|
float h;
|
|
|
|
|
|
float tx;
|
|
|
|
|
|
float ty;
|
|
|
|
|
|
float scale;
|
|
|
|
|
|
float rotate;
|
|
|
|
|
|
void Transform(RenderContext context)
|
|
|
|
|
|
{
|
2026-01-12 02:37:22 +11:00
|
|
|
|
//Trace.WriteLine($"Visual Root: Rotation:{rotate}");
|
2025-12-26 03:06:15 +11:00
|
|
|
|
context.canvas.Translate(tx, ty);
|
|
|
|
|
|
context.canvas.RotateDegrees(rotate, context.DrawingCore.Width / 2, context.DrawingCore.Height / 2);
|
2025-12-28 23:03:33 +11:00
|
|
|
|
if (scale != 1)
|
|
|
|
|
|
context.canvas.Scale(scale, scale, context.DrawingCore.Width / 2, context.DrawingCore.Height / 2);
|
2025-12-26 03:06:15 +11:00
|
|
|
|
}
|
|
|
|
|
|
void Untransform(RenderContext context)
|
|
|
|
|
|
{
|
2025-12-28 23:03:33 +11:00
|
|
|
|
if (scale != 1)
|
|
|
|
|
|
context.canvas.Scale(1 / scale, 1 / scale, context.DrawingCore.Width / 2, context.DrawingCore.Height / 2);
|
2026-01-05 03:57:09 +11:00
|
|
|
|
context.canvas.RotateDegrees(-rotate, context.DrawingCore.Width / 2, context.DrawingCore.Height / 2);
|
2025-12-26 03:06:15 +11:00
|
|
|
|
context.canvas.Translate(-tx, -ty);
|
|
|
|
|
|
}
|
2026-01-24 01:14:58 +11:00
|
|
|
|
public override void LoadProperties(RenderContext context)
|
2025-12-26 03:06:15 +11:00
|
|
|
|
{
|
2026-01-24 01:14:58 +11:00
|
|
|
|
base.LoadProperties(context);
|
2025-12-26 03:06:15 +11:00
|
|
|
|
if (__object is null) return;
|
|
|
|
|
|
{
|
2026-01-05 03:57:09 +11:00
|
|
|
|
if (__object.Get("Translate") is JsObject translate)
|
2025-12-26 03:06:15 +11:00
|
|
|
|
{
|
|
|
|
|
|
tx = (float)translate.Get("x").AsNumber();
|
|
|
|
|
|
ty = (float)translate.Get("y").AsNumber();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
{
|
2026-01-05 03:57:09 +11:00
|
|
|
|
scale = (float)__object.Get("Scale").AsNumber();
|
2025-12-26 03:06:15 +11:00
|
|
|
|
}
|
|
|
|
|
|
{
|
2026-01-05 03:57:09 +11:00
|
|
|
|
rotate = (float)__object.Get("Rotation").AsNumber();
|
2025-12-26 03:06:15 +11:00
|
|
|
|
}
|
2026-01-05 03:57:09 +11:00
|
|
|
|
w = (float)__object.Get("Width").AsNumber();
|
|
|
|
|
|
h = (float)__object.Get("Height").AsNumber();
|
2025-12-26 03:06:15 +11:00
|
|
|
|
}
|
2025-12-25 23:00:26 +11:00
|
|
|
|
public override void Render(RenderContext context)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.Render(context);
|
2026-01-24 01:14:58 +11:00
|
|
|
|
this.LoadProperties(context);
|
2025-12-26 03:06:15 +11:00
|
|
|
|
Transform(context);
|
2025-12-25 23:00:26 +11:00
|
|
|
|
foreach (var item in Children)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Render(context);
|
|
|
|
|
|
}
|
2025-12-26 03:06:15 +11:00
|
|
|
|
Untransform(context);
|
2025-12-25 23:00:26 +11:00
|
|
|
|
}
|
|
|
|
|
|
public override void SetupProperties(Engine engine)
|
|
|
|
|
|
{
|
|
|
|
|
|
base.SetupProperties(engine);
|
|
|
|
|
|
if (__object != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
{
|
|
|
|
|
|
JsObject point = new JsObject(engine);
|
|
|
|
|
|
point.Set("x", 0);
|
|
|
|
|
|
point.Set("y", 0);
|
2026-01-05 03:57:09 +11:00
|
|
|
|
__object.Set("Translate", point);
|
2025-12-25 23:00:26 +11:00
|
|
|
|
}
|
|
|
|
|
|
{
|
2026-01-05 03:57:09 +11:00
|
|
|
|
__object.Set("Scale", 1);
|
2025-12-25 23:00:26 +11:00
|
|
|
|
}
|
|
|
|
|
|
{
|
2026-01-05 03:57:09 +11:00
|
|
|
|
__object.Set("Rotation", 0);
|
2025-12-25 23:00:26 +11:00
|
|
|
|
}
|
2026-01-05 03:57:09 +11:00
|
|
|
|
__object.Set("Width", 1);
|
|
|
|
|
|
__object.Set("Height", 1);
|
2025-12-25 23:00:26 +11:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-24 22:08:37 +11:00
|
|
|
|
}
|
|
|
|
|
|
}
|