linear gradient is now working.

This commit is contained in:
Creeper Lv
2026-01-24 01:14:58 +11:00
parent 14de38a329
commit 48e7e54db3
18 changed files with 58 additions and 58 deletions

View File

@@ -7,7 +7,7 @@
<!-- Avalonia packages --> <!-- Avalonia packages -->
<!-- Important: keep version in sync! --> <!-- Important: keep version in sync! -->
<PackageVersion Include="Avalonia" Version="11.3.11" /> <PackageVersion Include="Avalonia" Version="11.3.11" />
<PackageVersion Include="Avalonia.AvaloniaEdit" Version="11.3.0" /> <PackageVersion Include="Avalonia.AvaloniaEdit" Version="11.4.0-rc1" />
<PackageVersion Include="Avalonia.Themes.Fluent" Version="11.3.11" /> <PackageVersion Include="Avalonia.Themes.Fluent" Version="11.3.11" />
<PackageVersion Include="Avalonia.Fonts.Inter" Version="11.3.11" /> <PackageVersion Include="Avalonia.Fonts.Inter" Version="11.3.11" />
<PackageVersion Include="Avalonia.Diagnostics" Version="11.3.11" /> <PackageVersion Include="Avalonia.Diagnostics" Version="11.3.11" />
@@ -15,7 +15,7 @@
<PackageVersion Include="Avalonia.iOS" Version="11.3.11" /> <PackageVersion Include="Avalonia.iOS" Version="11.3.11" />
<PackageVersion Include="Avalonia.Browser" Version="11.3.11" /> <PackageVersion Include="Avalonia.Browser" Version="11.3.11" />
<PackageVersion Include="Avalonia.Android" Version="11.3.11" /> <PackageVersion Include="Avalonia.Android" Version="11.3.11" />
<PackageVersion Include="AvaloniaEdit.TextMate" Version="11.3.0" /> <PackageVersion Include="AvaloniaEdit.TextMate" Version="11.4.0-rc1" />
<PackageVersion Include="Deadpikle.AvaloniaProgressRing" Version="0.10.11-preview20251127001" /> <PackageVersion Include="Deadpikle.AvaloniaProgressRing" Version="0.10.11-preview20251127001" />
<PackageVersion Include="DialogHost.Avalonia" Version="0.10.4" /> <PackageVersion Include="DialogHost.Avalonia" Version="0.10.4" />
<PackageVersion Include="Jint" Version="4.5.0" /> <PackageVersion Include="Jint" Version="4.5.0" />

View File

@@ -18,7 +18,7 @@ namespace Progrart.Core.Graphics
public virtual void Render(RenderContext context) public virtual void Render(RenderContext context)
{ {
} }
public virtual void LoadProperties() { } public virtual void LoadProperties(RenderContext context) { }
public virtual void SetupProperties(Engine engine) { } public virtual void SetupProperties(Engine engine) { }
} }
} }

View File

@@ -33,7 +33,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -54,13 +54,13 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context,shaderObj);
} }
} }
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
SKPoint pos = context.TranslatePoint(Position); SKPoint pos = context.TranslatePoint(Position);
float Size = context.TranslateSize(this.Size); float Size = context.TranslateSize(this.Size);
context.DrawingCore.canvas.DrawCircle( context.DrawingCore.canvas.DrawCircle(

View File

@@ -36,7 +36,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -61,13 +61,13 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context, shaderObj);
} }
} }
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
SKPoint FinalStartPos = context.TranslatePoint(Start); SKPoint FinalStartPos = context.TranslatePoint(Start);
SKPoint FinalEndPos = context.TranslatePoint(End); SKPoint FinalEndPos = context.TranslatePoint(End);
context.canvas.DrawLine( context.canvas.DrawLine(

View File

@@ -38,7 +38,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -64,13 +64,13 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context,shaderObj);
} }
} }
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
SKPoint FinalStartPos = context.TranslatePoint(Position); SKPoint FinalStartPos = context.TranslatePoint(Position);
SKPoint FinalEndPos = context.TranslatePoint(Size); SKPoint FinalEndPos = context.TranslatePoint(Size);
context.canvas.DrawOval( context.canvas.DrawOval(

View File

@@ -20,7 +20,7 @@ namespace Progrart.Core.Graphics
__object.Set("Color", ProgrartFunctions.color(engine, 1, 1, 1, 1)); __object.Set("Color", ProgrartFunctions.color(engine, 1, 1, 1, 1));
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -33,13 +33,13 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context, shaderObj);
} }
} }
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
foreach (var item in this.Children) foreach (var item in this.Children)
{ {
if (item is Path p) if (item is Path p)

View File

@@ -51,7 +51,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -84,7 +84,7 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context, shaderObj);
if (__object.Get("Source") is JsString source) if (__object.Get("Source") is JsString source)
this.imgFile = source.AsString(); this.imgFile = source.AsString();
@@ -93,7 +93,7 @@ namespace Progrart.Core.Graphics
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
SKPoint FinalStartPos = context.TranslatePoint(Start); SKPoint FinalStartPos = context.TranslatePoint(Start);
SKPoint Size = context.TranslatePoint(this.Size); SKPoint Size = context.TranslatePoint(this.Size);
if (imgFile == null) return; if (imgFile == null) return;

View File

@@ -39,7 +39,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -65,13 +65,13 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context, shaderObj);
} }
} }
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
SKPoint FinalStartPos = context.TranslatePoint(Start); SKPoint FinalStartPos = context.TranslatePoint(Start);
SKPoint FinalEndPos = context.TranslatePoint(Size); SKPoint FinalEndPos = context.TranslatePoint(Size);
context.canvas.DrawRect( context.canvas.DrawRect(

View File

@@ -43,7 +43,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -71,13 +71,13 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context, shaderObj);
} }
} }
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
SKPoint Position = context.TranslatePoint(Start); SKPoint Position = context.TranslatePoint(Start);
SKPoint Size = context.TranslatePoint(this.Size); SKPoint Size = context.TranslatePoint(this.Size);
float rx = context.TranslateSize(this.rx); float rx = context.TranslateSize(this.rx);

View File

@@ -38,7 +38,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -61,7 +61,7 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context, shaderObj);
if (__object.Get("Font") is JsString fontObj) if (__object.Get("Font") is JsString fontObj)
fontFamily = fontObj.AsString(); fontFamily = fontObj.AsString();
} }
@@ -69,7 +69,7 @@ namespace Progrart.Core.Graphics
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
SKPoint pos = context.TranslatePoint(Position); SKPoint pos = context.TranslatePoint(Position);
float Size = context.TranslateSize(this.Size); float Size = context.TranslateSize(this.Size);
SKTextAlign align = alignment.ToLower() switch SKTextAlign align = alignment.ToLower() switch

View File

@@ -45,7 +45,7 @@ namespace Progrart.Core.Graphics
} }
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
if (__object is not null) if (__object is not null)
{ {
@@ -77,13 +77,13 @@ namespace Progrart.Core.Graphics
} }
if (__object.Get("Shader") is JsObject shaderObj) if (__object.Get("Shader") is JsObject shaderObj)
shader = ProgrartConversion.ObtainFromJsObject(shaderObj); shader = ProgrartConversion.ObtainFromJsObject(context, shaderObj);
} }
} }
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
LoadProperties(); LoadProperties(context);
var v0 = context.TranslatePoint(Vertex0); var v0 = context.TranslatePoint(Vertex0);
var v1 = context.TranslatePoint(Vertex1); var v1 = context.TranslatePoint(Vertex1);
var v2 = context.TranslatePoint(Vertex2); var v2 = context.TranslatePoint(Vertex2);

View File

@@ -38,9 +38,9 @@ namespace Progrart.Core.Graphics
context.canvas.RotateDegrees(-rotate, context.DrawingCore.Width / 2, context.DrawingCore.Height / 2); context.canvas.RotateDegrees(-rotate, context.DrawingCore.Width / 2, context.DrawingCore.Height / 2);
context.canvas.Translate(-tx, -ty); context.canvas.Translate(-tx, -ty);
} }
public override void LoadProperties() public override void LoadProperties(RenderContext context)
{ {
base.LoadProperties(); base.LoadProperties(context);
if (__object is null) return; if (__object is null) return;
{ {
if (__object.Get("Translate") is JsObject translate) if (__object.Get("Translate") is JsObject translate)
@@ -61,7 +61,7 @@ namespace Progrart.Core.Graphics
public override void Render(RenderContext context) public override void Render(RenderContext context)
{ {
base.Render(context); base.Render(context);
this.LoadProperties(); this.LoadProperties(context);
Transform(context); Transform(context);
foreach (var item in Children) foreach (var item in Children)
{ {

View File

@@ -42,7 +42,7 @@ namespace Progrart.Core.JSExecution
} }
return new SKColorF(r, g, b, a); return new SKColorF(r, g, b, a);
} }
public static SKShader? ObtainFromJsObject(JsObject jsObject) public static SKShader? ObtainFromJsObject(RenderContext context, JsObject jsObject)
{ {
var type_str = jsObject.Get("Type").AsString(); var type_str = jsObject.Get("Type").AsString();
if (Enum.TryParse<ShaderType>(type_str, out var type)) if (Enum.TryParse<ShaderType>(type_str, out var type))
@@ -55,21 +55,16 @@ namespace Progrart.Core.JSExecution
var sy = (float)jsObject.Get("Start").Get("y").AsNumber(); var sy = (float)jsObject.Get("Start").Get("y").AsNumber();
var ex = (float)jsObject.Get("End").Get("x").AsNumber(); var ex = (float)jsObject.Get("End").Get("x").AsNumber();
var ey = (float)jsObject.Get("End").Get("y").AsNumber(); var ey = (float)jsObject.Get("End").Get("y").AsNumber();
var s = context.TranslatePoint(sx, sy);
var e = context.TranslatePoint(ex, ey);
SKColor C0 = SKColors.Black; SKColor C0 = SKColors.Black;
SKColor C1 = SKColors.White; SKColor C1 = SKColors.White;
float p0 = 0; float p0 = 0;
float p1 = 1; float p1 = 1;
if (jsObject.Get("Colors") is JsArray color_array) if (jsObject.Get("ColorStart") is JsObject colorStart)
{ C0 = (SKColor)ObtainSKColorFFromJsObject(colorStart);
if (color_array[0] is JsObject c0) if (jsObject.Get("ColorEnd") is JsObject colorEnd)
if (color_array[1] is JsObject c1) C1 = (SKColor)ObtainSKColorFFromJsObject(colorEnd);
{
C0 = (SKColor)ObtainSKColorFFromJsObject(c0);
C1 = (SKColor)ObtainSKColorFFromJsObject(c1);
}
}
if (jsObject.Get("Positions") is JsArray pos_array) if (jsObject.Get("Positions") is JsArray pos_array)
{ {
if (pos_array[0] is JsNumber P0) if (pos_array[0] is JsNumber P0)
@@ -81,7 +76,7 @@ namespace Progrart.Core.JSExecution
} }
var TileMode_str = jsObject.Get("TileMode").AsString(); var TileMode_str = jsObject.Get("TileMode").AsString();
if (Enum.TryParse<SKShaderTileMode>(TileMode_str, out var SKShaderTileMode)) if (Enum.TryParse<SKShaderTileMode>(TileMode_str, out var SKShaderTileMode))
return SKShader.CreateLinearGradient(new SKPoint(sx, sy), new SKPoint(ex, ey), return SKShader.CreateLinearGradient(s, e,
[C0, C1], [p0, p1], SKShaderTileMode); [C0, C1], [p0, p1], SKShaderTileMode);
} }
break; break;
@@ -89,6 +84,7 @@ namespace Progrart.Core.JSExecution
{ {
var sx = (float)jsObject.Get("Center").Get("x").AsNumber(); var sx = (float)jsObject.Get("Center").Get("x").AsNumber();
var sy = (float)jsObject.Get("Center").Get("y").AsNumber(); var sy = (float)jsObject.Get("Center").Get("y").AsNumber();
var s = context.TranslatePoint(sx, sy);
var radius = (float)jsObject.Get("Radius").AsNumber(); var radius = (float)jsObject.Get("Radius").AsNumber();
SKColor C0 = SKColors.Black; SKColor C0 = SKColors.Black;
SKColor C1 = SKColors.White; SKColor C1 = SKColors.White;
@@ -116,7 +112,7 @@ namespace Progrart.Core.JSExecution
} }
var TileMode_str = jsObject.Get("TileMode").AsString(); var TileMode_str = jsObject.Get("TileMode").AsString();
if (Enum.TryParse<SKShaderTileMode>(TileMode_str, out var SKShaderTileMode)) if (Enum.TryParse<SKShaderTileMode>(TileMode_str, out var SKShaderTileMode))
return SKShader.CreateRadialGradient(new SKPoint(sx, sy), radius, return SKShader.CreateRadialGradient(s, radius,
[C0, C1], [p0, p1], SKShaderTileMode); [C0, C1], [p0, p1], SKShaderTileMode);
} }
break; break;

View File

@@ -65,6 +65,7 @@ namespace Progrart.Core.JSExecution
engine.Engine.SetValue("piximage", piximage); engine.Engine.SetValue("piximage", piximage);
engine.Engine.SetValue("piximg", piximage); engine.Engine.SetValue("piximg", piximage);
engine.Engine.SetValue("color3", color3); engine.Engine.SetValue("color3", color3);
engine.Engine.SetValue("color4", color4);
engine.Engine.SetValue("text", text); engine.Engine.SetValue("text", text);
engine.Engine.SetValue("color_hex", color_hex); engine.Engine.SetValue("color_hex", color_hex);
engine.Engine.SetValue("linear_gradient", linear_gradient); engine.Engine.SetValue("linear_gradient", linear_gradient);

View File

@@ -47,11 +47,10 @@ namespace Progrart.Core.JSExecution
obj.Set("End", point); obj.Set("End", point);
} }
{ {
obj.Set("Colors", new JsArray(engine, [ obj.Set("ColorStart", color(engine, 1, 1, 1, 1));
color(engine, 1, 1, 1, 1) , }
color(engine, 1, 1, 1, 1) {
] obj.Set("ColorEnd", color(engine, 1, 1, 1, 1));
));
} }
{ {
obj.Set("Positions", new JsArray(engine, new[] { new JsNumber(0), new JsNumber(1) })); obj.Set("Positions", new JsArray(engine, new[] { new JsNumber(0), new JsNumber(1) }));

View File

@@ -165,7 +165,6 @@ public partial class FileItem : UserControl
private async void MoveToMenuItem_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) private async void MoveToMenuItem_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{ {
var content = new BrowserDialog(); var content = new BrowserDialog();
content.Title = "";
content.onOK = async (si) => content.onOK = async (si) =>
{ {
if (si is IStorageFolder destFolder) if (si is IStorageFolder destFolder)
@@ -176,7 +175,7 @@ public partial class FileItem : UserControl
await currentItem.MoveAsync(destFolder); await currentItem.MoveAsync(destFolder);
} }
} }
return true; return false;
}; };
if ((root ?? this).CurrentItem is IStorageItem item) if ((root ?? this).CurrentItem is IStorageItem item)
content.SetFileITem(new FileItem(item, null, true)); content.SetFileITem(new FileItem(item, null, true));
@@ -194,7 +193,7 @@ public partial class FileItem : UserControl
else if (currentItem is IStorageFile file) else if (currentItem is IStorageFile file)
{ {
} }
return true; return false;
}; };
if ((root ?? this).CurrentItem is IStorageItem item) if ((root ?? this).CurrentItem is IStorageItem item)
content.SetFileITem(new FileItem(item, null, true)); content.SetFileITem(new FileItem(item, null, true));

View File

@@ -55,7 +55,8 @@
<MenuItem Header="_Help"> <MenuItem Header="_Help">
<MenuItem Header="_About" Name="AboutItem"/> <MenuItem Header="_About" Name="AboutItem"/>
</MenuItem> </MenuItem>
<MenuItem Header="_Exit"/> <Separator/>
<MenuItem Header="_Exit" Name="ExitItem" Click="ExitItem_Click"/>
</MenuFlyout> </MenuFlyout>
</Button.Flyout> </Button.Flyout>
<TextBlock Margin="8,2">Progart</TextBlock> <TextBlock Margin="8,2">Progart</TextBlock>

View File

@@ -279,4 +279,8 @@ public partial class MainView : UserControl
{ {
MainTabHost.AddPage(new SettingsPage()); MainTabHost.AddPage(new SettingsPage());
} }
private void ExitItem_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
}
} }