From 39aa7f513c744809e5cf9930c76aa98ae1eee80a Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 23 Sep 2022 19:33:31 +0100 Subject: [PATCH] move initialisation to managed side. --- src/Web/Avalonia.Web.Sample/Program.cs | 16 +++++++++++++--- src/Web/Avalonia.Web.Sample/main.js | 10 +--------- src/Web/Avalonia.Web/AvaloniaRuntime.cs | 3 +++ .../webapp/modules/avalonia/canvas.ts | 8 ++++++++ .../webapp/modules/avalonia/runtime.ts | 6 +----- src/Web/Avalonia.Web/wwwroot/avalonia.js | 6 +++++- 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/Web/Avalonia.Web.Sample/Program.cs b/src/Web/Avalonia.Web.Sample/Program.cs index 18a593c9e8..e03a48ac5e 100644 --- a/src/Web/Avalonia.Web.Sample/Program.cs +++ b/src/Web/Avalonia.Web.Sample/Program.cs @@ -1,14 +1,18 @@ using System; +using System.Reflection.Metadata; using System.Runtime.InteropServices; using System.Runtime.InteropServices.JavaScript; using System.Threading.Tasks; +using System.Xml.Linq; using Avalonia.Web; //using SkiaSharp; -internal class Program +internal partial class Program { - + [JSImport("globalThis.document.getElementById")] + internal static partial JSObject GetElementById(string id); + private static void Main(string[] args) { Console.WriteLine("Hello, Browser!"); @@ -20,7 +24,13 @@ internal class Program Console.WriteLine(arg); } - AvaloniaRuntime.Init(); + var div = GetElementById("out"); + Console.WriteLine("got div"); + + var canvas = AvaloniaRuntime.CreateCanvas(div); + + Console.WriteLine("Created canvas"); + } } diff --git a/src/Web/Avalonia.Web.Sample/main.js b/src/Web/Avalonia.Web.Sample/main.js index 9973b469c7..9d90db8bd2 100644 --- a/src/Web/Avalonia.Web.Sample/main.js +++ b/src/Web/Avalonia.Web.Sample/main.js @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. import { dotnet } from './dotnet.js' -import { createAvaloniaRuntime } from './avalonia.js' const is_browser = typeof window != "undefined"; if (!is_browser) throw new Error(`Expected to be running in a browser`); @@ -12,13 +11,6 @@ const dotnetRuntime = await dotnet .withApplicationArgumentsFromQuery() .create(); -const avaloniaRuntime = await createAvaloniaRuntime(dotnetRuntime); - -const outDiv = document.getElementById("out"); -avaloniaRuntime.createAvaloniaView(outDiv); - const config = dotnetRuntime.getConfig(); -const exports = await dotnetRuntime.getAssemblyExports(config.mainAssemblyName); -await exports.MyClass.TestDynamicModule(); -await dotnetRuntime.runMainAndExit(config.mainAssemblyName, ["dotnet", "is", "great!"]); \ No newline at end of file +await dotnetRuntime.runMainAndExit(config.mainAssemblyName, ["dotnet", "is", "great!"]); diff --git a/src/Web/Avalonia.Web/AvaloniaRuntime.cs b/src/Web/Avalonia.Web/AvaloniaRuntime.cs index 0d21ae096d..d6f4b2dae1 100644 --- a/src/Web/Avalonia.Web/AvaloniaRuntime.cs +++ b/src/Web/Avalonia.Web/AvaloniaRuntime.cs @@ -29,6 +29,9 @@ public partial class AvaloniaRuntime Console.WriteLine($"{glInfo.ContextId}, {glInfo.FboId}"); } + [JSImport("Canvas.createCanvas", "avalonia.js")] + public static partial JSObject CreateCanvas(JSObject container); + [JSImport("Canvas.Foo", "avalonia.ts")] internal static partial void Foo(JSObject canvas); diff --git a/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts b/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts index 2e1443074d..ad39d58a8c 100644 --- a/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts +++ b/src/Web/Avalonia.Web/webapp/modules/avalonia/canvas.ts @@ -23,6 +23,14 @@ export class Canvas { newWidth?: number; newHeight?: number; + public static createCanvas(element: HTMLDivElement): HTMLCanvasElement { + var canvas = document.createElement("canvas"); + + element.appendChild(canvas); + + return canvas; + } + public static initGL(element: HTMLCanvasElement, elementId: string): SKGLViewInfo | null { console.log("inside initGL"); var view = Canvas.init(true, element, elementId); diff --git a/src/Web/Avalonia.Web/webapp/modules/avalonia/runtime.ts b/src/Web/Avalonia.Web/webapp/modules/avalonia/runtime.ts index bd1989e935..61e7b71797 100644 --- a/src/Web/Avalonia.Web/webapp/modules/avalonia/runtime.ts +++ b/src/Web/Avalonia.Web/webapp/modules/avalonia/runtime.ts @@ -15,9 +15,5 @@ export class AvaloniaRuntime { createAvaloniaView(element: HTMLDivElement): void { const canvas = document.createElement("canvas"); element.appendChild(canvas); - - - - this.dotnetAssembly.Avalonia.Web.AvaloniaRuntime.StartAvaloniaView(canvas); } -} \ No newline at end of file +} diff --git a/src/Web/Avalonia.Web/wwwroot/avalonia.js b/src/Web/Avalonia.Web/wwwroot/avalonia.js index 94c5e9d254..896ad807ff 100644 --- a/src/Web/Avalonia.Web/wwwroot/avalonia.js +++ b/src/Web/Avalonia.Web/wwwroot/avalonia.js @@ -43,6 +43,11 @@ var Canvas = class { }; } } + static createCanvas(element) { + var canvas = document.createElement("canvas"); + element.appendChild(canvas); + return canvas; + } static initGL(element, elementId) { console.log("inside initGL"); var view = Canvas.init(true, element, elementId); @@ -107,7 +112,6 @@ var AvaloniaRuntime = class { createAvaloniaView(element) { const canvas = document.createElement("canvas"); element.appendChild(canvas); - this.dotnetAssembly.Avalonia.Web.AvaloniaRuntime.StartAvaloniaView(canvas); } };