From 397f0ad38be5d4f3820662830e14aceb46851a06 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 29 Aug 2016 22:15:08 -0500 Subject: [PATCH] Updated AppBuilder to have a way to track names of the windowing and rendering subsystems. --- src/Avalonia.Controls/AppBuilderBase.cs | 41 +++++++++++++------ .../AppBuilder.cs | 4 ++ src/Gtk/Avalonia.Cairo/CairoPlatform.cs | 3 +- src/Gtk/Avalonia.Gtk/GtkPlatform.cs | 3 +- src/Skia/Avalonia.Skia/SkiaPlatform.cs | 3 +- .../Avalonia.Direct2D1/Direct2D1Platform.cs | 3 +- src/Windows/Avalonia.Win32/Win32Platform.cs | 3 +- src/iOS/Avalonia.iOS/iOSPlatform.cs | 3 +- 8 files changed, 44 insertions(+), 19 deletions(-) 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; }