diff --git a/.gitignore b/.gitignore
index ddbe436d3a..32ada6ca2b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -218,3 +218,4 @@ src/Browser/Avalonia.Browser.Blazor/webapp/package-lock.json
src/Browser/Avalonia.Browser.Blazor/wwwroot
src/Browser/Avalonia.Browser/wwwroot
api/diff
+src/Browser/Avalonia.Browser/staticwebassets
diff --git a/samples/ControlCatalog.Browser.Blazor/ControlCatalog.Browser.Blazor.csproj b/samples/ControlCatalog.Browser.Blazor/ControlCatalog.Browser.Blazor.csproj
index 733a4b7194..363c6a8b27 100644
--- a/samples/ControlCatalog.Browser.Blazor/ControlCatalog.Browser.Blazor.csproj
+++ b/samples/ControlCatalog.Browser.Blazor/ControlCatalog.Browser.Blazor.csproj
@@ -22,8 +22,8 @@
-
-
+
+
diff --git a/samples/ControlCatalog.Browser/ControlCatalog.Browser.csproj b/samples/ControlCatalog.Browser/ControlCatalog.Browser.csproj
index 12338d615e..d1cec4e017 100644
--- a/samples/ControlCatalog.Browser/ControlCatalog.Browser.csproj
+++ b/samples/ControlCatalog.Browser/ControlCatalog.Browser.csproj
@@ -1,6 +1,4 @@
-
-
net7.0
browser-wasm
@@ -8,6 +6,7 @@
Exe
true
true
+ ./
@@ -20,5 +19,6 @@
-
+
+
diff --git a/samples/MobileSandbox.Browser/MobileSandbox.Browser.csproj b/samples/MobileSandbox.Browser/MobileSandbox.Browser.csproj
index 001fe94c7f..6174b4f135 100644
--- a/samples/MobileSandbox.Browser/MobileSandbox.Browser.csproj
+++ b/samples/MobileSandbox.Browser/MobileSandbox.Browser.csproj
@@ -7,25 +7,10 @@
true
true
true
- -sVERBOSE -sERROR_ON_UNDEFINED_SYMBOLS=0
+ ./
-
- true
- true
- full
- true
- true
- -O2
- -O2
-
-
-
-
-
-
-
@@ -38,6 +23,6 @@
-
-
+
+
diff --git a/samples/MobileSandbox.Browser/Roots.xml b/samples/MobileSandbox.Browser/Roots.xml
deleted file mode 100644
index 5255ae3ef8..0000000000
--- a/samples/MobileSandbox.Browser/Roots.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/Browser/Avalonia.Browser.Blazor/Avalonia.Browser.Blazor.csproj b/src/Browser/Avalonia.Browser.Blazor/Avalonia.Browser.Blazor.csproj
index 19d18e2e29..66cb6f7780 100644
--- a/src/Browser/Avalonia.Browser.Blazor/Avalonia.Browser.Blazor.csproj
+++ b/src/Browser/Avalonia.Browser.Blazor/Avalonia.Browser.Blazor.csproj
@@ -1,8 +1,7 @@
-
+
net7.0
- _IncludeGeneratedAvaloniaStaticFiles;$(ResolveStaticWebAssetsInputsDependsOn)
@@ -20,22 +19,4 @@
-
-
-
- <_AvaloniaWebAssets Include="$(MSBuildThisFileDirectory)../Avalonia.Browser/wwwroot/**/*.*" />
-
-
-
-
-
diff --git a/src/Browser/Avalonia.Browser.Blazor/BlazorSingleViewLifetime.cs b/src/Browser/Avalonia.Browser.Blazor/BlazorSingleViewLifetime.cs
index 7c5ee27c66..cf3c034b00 100644
--- a/src/Browser/Avalonia.Browser.Blazor/BlazorSingleViewLifetime.cs
+++ b/src/Browser/Avalonia.Browser.Blazor/BlazorSingleViewLifetime.cs
@@ -17,9 +17,6 @@ public static class BlazorAppBuilder
/// Browser backend specific options.
public static async Task StartBlazorAppAsync(this AppBuilder builder, BrowserPlatformOptions? options = null)
{
- options ??= new BrowserPlatformOptions();
- options.FrameworkAssetPathResolver ??= filePath => $"/_content/Avalonia.Browser.Blazor/{filePath}";
-
builder = await BrowserAppBuilder.PreSetupBrowser(builder, options);
builder.SetupWithLifetime(new BlazorSingleViewLifetime());
diff --git a/src/Browser/Avalonia.Browser/Avalonia.Browser.csproj b/src/Browser/Avalonia.Browser/Avalonia.Browser.csproj
index ec65717cbb..83f4b8c75f 100644
--- a/src/Browser/Avalonia.Browser/Avalonia.Browser.csproj
+++ b/src/Browser/Avalonia.Browser/Avalonia.Browser.csproj
@@ -1,7 +1,6 @@
net7.0
- enable
true
@@ -22,21 +21,26 @@
-
+
+
true
build/
-
+
+ true
+ build/;buildTransitive/;buildMultiTargeting/
+
+
true
build/;buildTransitive/
-
+
true
build/interop.js;buildTransitive/interop.js
-
+
true
- build/wwwroot;buildTransitive/wwwroot
+ staticwebassets/
diff --git a/src/Browser/Avalonia.Browser/Avalonia.Browser.props b/src/Browser/Avalonia.Browser/Avalonia.Browser.props
deleted file mode 100644
index 2c3942de1f..0000000000
--- a/src/Browser/Avalonia.Browser/Avalonia.Browser.props
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- True
- True
- True
-
-
- ./
-
-
diff --git a/src/Browser/Avalonia.Browser/AvaloniaView.cs b/src/Browser/Avalonia.Browser/AvaloniaView.cs
index 1abcd8689b..bba1c8bb0d 100644
--- a/src/Browser/Avalonia.Browser/AvaloniaView.cs
+++ b/src/Browser/Avalonia.Browser/AvaloniaView.cs
@@ -71,26 +71,18 @@ namespace Avalonia.Browser
_splash = DomHelper.GetElementById("avalonia-splash");
_topLevelImpl = new BrowserTopLevelImpl(this, _containerElement);
-
- _topLevel = new WebEmbeddableControlRoot(_topLevelImpl, () =>
- {
- Dispatcher.UIThread.Post(() =>
- {
- if (_splash != null)
- {
- DomHelper.AddCssClass(_splash, "splash-close");
- }
- });
- });
-
_topLevelImpl.SetCssCursor = (cursor) =>
{
InputHelper.SetCursor(_containerElement, cursor);
};
+ _topLevel = new EmbeddableControlRoot(_topLevelImpl);
_topLevel.Prepare();
-
_topLevel.Renderer.Start();
+ if (_splash != null)
+ {
+ _topLevel.RequestAnimationFrame(_ => DomHelper.AddCssClass(_splash, "splash-close"));
+ }
InputHelper.InitializeBackgroundHandlers();
diff --git a/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs b/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs
index f534c3f27b..e568067b74 100644
--- a/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs
+++ b/src/Browser/Avalonia.Browser/BrowserSingleViewLifetime.cs
@@ -49,5 +49,5 @@ internal class BrowserSingleViewLifetime : ISingleViewApplicationLifetime, IActi
public event EventHandler? Deactivated;
public bool TryLeaveBackground() => false;
- public bool TryEnterBackground() => true;
+ public bool TryEnterBackground() => false;
}
diff --git a/src/Browser/Avalonia.Browser/WebEmbeddableControlRoot.cs b/src/Browser/Avalonia.Browser/WebEmbeddableControlRoot.cs
deleted file mode 100644
index 993414f17f..0000000000
--- a/src/Browser/Avalonia.Browser/WebEmbeddableControlRoot.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using Avalonia.Controls.Embedding;
-using Avalonia.Media;
-using Avalonia.Platform;
-using Avalonia.Rendering.SceneGraph;
-
-namespace Avalonia.Browser
-{
- internal class WebEmbeddableControlRoot : EmbeddableControlRoot
- {
- class SplashScreenCloseCustomDrawingOperation : ICustomDrawOperation
- {
- private bool _hasRendered;
- private Action _onFirstRender;
-
- public SplashScreenCloseCustomDrawingOperation(Action onFirstRender)
- {
- _onFirstRender = onFirstRender;
- }
-
- public Rect Bounds => default;
-
- public bool HasRendered => _hasRendered;
-
- public void Dispose()
- {
-
- }
-
- public bool Equals(ICustomDrawOperation? other)
- {
- return false;
- }
-
- public bool HitTest(Point p)
- {
- return false;
- }
-
- public void Render(ImmediateDrawingContext context)
- {
- _hasRendered = true;
- _onFirstRender();
- }
- }
-
- public WebEmbeddableControlRoot(ITopLevelImpl impl, Action onFirstRender) : base(impl)
- {
- _splashCloseOp = new SplashScreenCloseCustomDrawingOperation(() =>
- {
- _splashCloseOp = null;
- onFirstRender();
- });
- }
-
- private SplashScreenCloseCustomDrawingOperation? _splashCloseOp;
-
- public override void Render(DrawingContext context)
- {
- base.Render(context);
-
- if (_splashCloseOp != null)
- {
- context.Custom(_splashCloseOp);
- }
- }
- }
-}
diff --git a/src/Browser/Avalonia.Browser/build/Avalonia.Browser.props b/src/Browser/Avalonia.Browser/build/Avalonia.Browser.props
new file mode 100644
index 0000000000..6e0884c2c7
--- /dev/null
+++ b/src/Browser/Avalonia.Browser/build/Avalonia.Browser.props
@@ -0,0 +1,13 @@
+
+
+ true
+ True
+ True
+ True
+
+ True
+ True
+
+
+
+
diff --git a/src/Browser/Avalonia.Browser/Avalonia.Browser.targets b/src/Browser/Avalonia.Browser/build/Avalonia.Browser.targets
similarity index 81%
rename from src/Browser/Avalonia.Browser/Avalonia.Browser.targets
rename to src/Browser/Avalonia.Browser/build/Avalonia.Browser.targets
index 8740564ea9..47a22336b3 100644
--- a/src/Browser/Avalonia.Browser/Avalonia.Browser.targets
+++ b/src/Browser/Avalonia.Browser/build/Avalonia.Browser.targets
@@ -1,12 +1,14 @@
$(EmccExtraLDFlags) --js-library="$(MSBuildThisFileDirectory)/interop.js"
- $(EmccExtraLDFlags) -sERROR_ON_UNDEFINED_SYMBOLS=0
+ $(EmccFlags) -sERROR_ON_UNDEFINED_SYMBOLS=0
+ $(EmccFlags) -sUSE_WEBGL2=1 -sMAX_WEBGL_VERSION=2 -lGL
-
-
-
+
+
+
+
diff --git a/src/Browser/Avalonia.Browser/build/Microsoft.AspNetCore.StaticWebAssets.props b/src/Browser/Avalonia.Browser/build/Microsoft.AspNetCore.StaticWebAssets.props
new file mode 100644
index 0000000000..79d0385074
--- /dev/null
+++ b/src/Browser/Avalonia.Browser/build/Microsoft.AspNetCore.StaticWebAssets.props
@@ -0,0 +1,22 @@
+
+
+ <_AvaloniaWebAssetsFolder>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)../staticwebassets/))
+
+
+
+ <_AvaloniaWebAssets Include="$(_AvaloniaWebAssetsFolder)**/*.*" />
+
+ Package
+ Avalonia.Browser
+ $(_AvaloniaWebAssetsFolder)
+ /
+ $(WasmRuntimeAssetsLocation)/%(FileName)%(Extension)
+ All
+ All
+ Primary
+ PreserveNewest
+ PreserveNewest
+ $(_AvaloniaWebAssetsFolder)%(FileName)%(Extension)
+
+
+
diff --git a/src/Browser/Avalonia.Browser/interop.js b/src/Browser/Avalonia.Browser/build/interop.js
similarity index 100%
rename from src/Browser/Avalonia.Browser/interop.js
rename to src/Browser/Avalonia.Browser/build/interop.js
diff --git a/src/Browser/Avalonia.Browser/webapp/build.js b/src/Browser/Avalonia.Browser/webapp/build.js
index e8e49554cd..3b278e7dcb 100644
--- a/src/Browser/Avalonia.Browser/webapp/build.js
+++ b/src/Browser/Avalonia.Browser/webapp/build.js
@@ -4,7 +4,7 @@ require("esbuild").build({
"./modules/storage.ts",
"./modules/sw.ts"
],
- outdir: "../wwwroot",
+ outdir: "../staticwebassets",
bundle: true,
minify: true,
format: "esm",