diff --git a/src/Avalonia.Controls/AppBuilderBase.cs b/src/Avalonia.Controls/AppBuilderBase.cs
index 5afbb444ee..e7ef6dcbaa 100644
--- a/src/Avalonia.Controls/AppBuilderBase.cs
+++ b/src/Avalonia.Controls/AppBuilderBase.cs
@@ -21,7 +21,7 @@ namespace Avalonia.Controls
///
/// Gets or sets a method to call the initialize the runtime platform services (e. g. AssetLoader)
///
- public Action RuntimePlatformServices { get; set; }
+ public Action RuntimePlatformServicesInitializer { get; set; }
///
/// Gets or sets the instance being initialized.
@@ -31,12 +31,22 @@ namespace Avalonia.Controls
///
/// Gets or sets a method to call the initialize the windowing subsystem.
///
- public Action WindowingSubsystem { get; set; }
+ public Action WindowingSubsystemInitializer { get; set; }
+
+ ///
+ /// Gets or sets the name of the windowing subsystem to use.
+ ///
+ public string WindowingSubsystemName { get; set; }
///
/// Gets or sets a method to call the initialize the windowing subsystem.
///
- public Action RenderingSubsystem { get; set; }
+ public Action RenderingSubsystemInitializer { get; set; }
+
+ ///
+ /// Gets or sets the name of the rendering subsystem to use.
+ ///
+ public string RenderingSubsystemName { get; set; }
///
/// Gets or sets a method to call before is called on the
@@ -47,7 +57,7 @@ namespace Avalonia.Controls
protected AppBuilderBase(IRuntimePlatform platform, Action platformSevices)
{
RuntimePlatform = platform;
- RuntimePlatformServices = platformSevices;
+ RuntimePlatformServicesInitializer = platformSevices;
}
///
@@ -85,7 +95,12 @@ namespace Avalonia.Controls
/// An instance.
public TAppBuilder BeforeStarting(Action callback)
{
- BeforeStartCallback = callback;
+ var oldCallback = BeforeStartCallback;
+ BeforeStartCallback = builder =>
+ {
+ oldCallback?.Invoke(builder);
+ callback(builder);
+ };
return Self;
}
@@ -121,7 +136,7 @@ namespace Avalonia.Controls
/// An instance.
public TAppBuilder UseWindowingSubsystem(Action initializer)
{
- WindowingSubsystem = initializer;
+ WindowingSubsystemInitializer = initializer;
return Self;
}
@@ -139,7 +154,7 @@ namespace Avalonia.Controls
/// An instance.
public TAppBuilder UseRenderingSubsystem(Action initializer)
{
- RenderingSubsystem = initializer;
+ RenderingSubsystemInitializer = initializer;
return Self;
}
@@ -170,25 +185,25 @@ namespace Avalonia.Controls
throw new InvalidOperationException("No App instance configured.");
}
- if (RuntimePlatformServices == null)
+ if (RuntimePlatformServicesInitializer == null)
{
throw new InvalidOperationException("No runtime platform services configured.");
}
- if (WindowingSubsystem == null)
+ if (WindowingSubsystemInitializer == null)
{
throw new InvalidOperationException("No windowing system configured.");
}
- if (RenderingSubsystem == null)
+ if (RenderingSubsystemInitializer == null)
{
throw new InvalidOperationException("No rendering system configured.");
}
Instance.RegisterServices();
- RuntimePlatformServices();
- WindowingSubsystem();
- RenderingSubsystem();
+ RuntimePlatformServicesInitializer();
+ WindowingSubsystemInitializer();
+ RenderingSubsystemInitializer();
Instance.Initialize();
}
}
diff --git a/src/Avalonia.DotNetFrameworkRuntime/AppBuilder.cs b/src/Avalonia.DotNetFrameworkRuntime/AppBuilder.cs
index 5dc36865ee..508a23866c 100644
--- a/src/Avalonia.DotNetFrameworkRuntime/AppBuilder.cs
+++ b/src/Avalonia.DotNetFrameworkRuntime/AppBuilder.cs
@@ -28,11 +28,15 @@ namespace Avalonia
{
UseRenderingSubsystem("Avalonia.Cairo");
UseWindowingSubsystem("Avalonia.Gtk");
+ WindowingSubsystemName = "Gtk";
+ RenderingSubsystemName = "Cairo";
}
else
{
UseRenderingSubsystem("Avalonia.Direct2D1");
UseWindowingSubsystem("Avalonia.Win32");
+ WindowingSubsystemName = "Win32";
+ RenderingSubsystemName = "Direct2D1";
}
return this;
}
diff --git a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs
index 6606ed4aef..493416d15f 100644
--- a/src/Gtk/Avalonia.Cairo/CairoPlatform.cs
+++ b/src/Gtk/Avalonia.Cairo/CairoPlatform.cs
@@ -14,7 +14,8 @@ namespace Avalonia
{
public static T UseCairo(this T builder) where T : AppBuilderBase, new()
{
- builder.RenderingSubsystem = Avalonia.Cairo.CairoPlatform.Initialize;
+ builder.RenderingSubsystemInitializer = Cairo.CairoPlatform.Initialize;
+ builder.RenderingSubsystemName = "Cairo";
return builder;
}
}
diff --git a/src/Gtk/Avalonia.Gtk/GtkPlatform.cs b/src/Gtk/Avalonia.Gtk/GtkPlatform.cs
index 455aa67405..b54b6d3e71 100644
--- a/src/Gtk/Avalonia.Gtk/GtkPlatform.cs
+++ b/src/Gtk/Avalonia.Gtk/GtkPlatform.cs
@@ -16,7 +16,8 @@ namespace Avalonia
{
public static T UseGtk(this T builder) where T : AppBuilderBase, new()
{
- builder.WindowingSubsystem = Avalonia.Gtk.GtkPlatform.Initialize;
+ builder.WindowingSubsystemInitializer = Gtk.GtkPlatform.Initialize;
+ builder.WindowingSubsystemName = "Gtk";
return builder;
}
}
diff --git a/src/Skia/Avalonia.Skia/SkiaPlatform.cs b/src/Skia/Avalonia.Skia/SkiaPlatform.cs
index 3f9e49d3c3..3523af0b35 100644
--- a/src/Skia/Avalonia.Skia/SkiaPlatform.cs
+++ b/src/Skia/Avalonia.Skia/SkiaPlatform.cs
@@ -10,7 +10,8 @@ namespace Avalonia
{
public static T UseSkia(this T builder) where T : AppBuilderBase, new()
{
- builder.RenderingSubsystem = Avalonia.Skia.SkiaPlatform.Initialize;
+ builder.RenderingSubsystemInitializer = Avalonia.Skia.SkiaPlatform.Initialize;
+ builder.RenderingSubsystemName = "Skia";
return builder;
}
}
diff --git a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs
index 10f32861e8..8d94ebd1e9 100644
--- a/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs
+++ b/src/Windows/Avalonia.Direct2D1/Direct2D1Platform.cs
@@ -14,7 +14,8 @@ namespace Avalonia
{
public static T UseDirect2D1(this T builder) where T : AppBuilderBase, new()
{
- builder.RenderingSubsystem = Avalonia.Direct2D1.Direct2D1Platform.Initialize;
+ builder.RenderingSubsystemInitializer = Avalonia.Direct2D1.Direct2D1Platform.Initialize;
+ builder.RenderingSubsystemName = "Direct2D1";
return builder;
}
}
diff --git a/src/Windows/Avalonia.Win32/Win32Platform.cs b/src/Windows/Avalonia.Win32/Win32Platform.cs
index a7597ffb86..5c6309b17a 100644
--- a/src/Windows/Avalonia.Win32/Win32Platform.cs
+++ b/src/Windows/Avalonia.Win32/Win32Platform.cs
@@ -23,7 +23,8 @@ namespace Avalonia
{
public static T UseWin32(this T builder) where T : AppBuilderBase, new()
{
- builder.WindowingSubsystem = Avalonia.Win32.Win32Platform.Initialize;
+ builder.WindowingSubsystemInitializer = Win32.Win32Platform.Initialize;
+ builder.WindowingSubsystemName = "Win32";
return builder;
}
}
diff --git a/src/iOS/Avalonia.iOS/iOSPlatform.cs b/src/iOS/Avalonia.iOS/iOSPlatform.cs
index 26c7c4b913..6a14904b35 100644
--- a/src/iOS/Avalonia.iOS/iOSPlatform.cs
+++ b/src/iOS/Avalonia.iOS/iOSPlatform.cs
@@ -15,7 +15,8 @@ namespace Avalonia
{
public static T UseiOS(this T builder) where T : AppBuilderBase, new()
{
- builder.WindowingSubsystem = Avalonia.iOS.iOSPlatform.Initialize;
+ builder.WindowingSubsystemInitializer = iOSPlatform.Initialize;
+ builder.WindowingSubsystemName = "iOS";
return builder;
}