|
|
|
@ -6,122 +6,122 @@ using Perspex; |
|
|
|
|
|
|
|
namespace ControlCatalog |
|
|
|
{ |
|
|
|
internal class Program |
|
|
|
{ |
|
|
|
static void Main(string[] args) |
|
|
|
{ |
|
|
|
InitializeLogging(); |
|
|
|
|
|
|
|
new App() |
|
|
|
.ConfigureRenderSystem(args) |
|
|
|
.LoadFromXaml() |
|
|
|
.RunWithMainWindow<MainWindow>(); |
|
|
|
} |
|
|
|
|
|
|
|
// This will be made into a runtime configuration extension soon!
|
|
|
|
private static void InitializeLogging() |
|
|
|
{ |
|
|
|
internal class Program |
|
|
|
{ |
|
|
|
static void Main(string[] args) |
|
|
|
{ |
|
|
|
InitializeLogging(); |
|
|
|
|
|
|
|
new App() |
|
|
|
.ConfigureRenderSystem(args) |
|
|
|
.LoadFromXaml() |
|
|
|
.RunWithMainWindow<MainWindow>(); |
|
|
|
} |
|
|
|
|
|
|
|
// This will be made into a runtime configuration extension soon!
|
|
|
|
private static void InitializeLogging() |
|
|
|
{ |
|
|
|
#if DEBUG
|
|
|
|
SerilogLogger.Initialize(new LoggerConfiguration() |
|
|
|
.MinimumLevel.Warning() |
|
|
|
.WriteTo.Trace(outputTemplate: "{Area}: {Message}") |
|
|
|
.CreateLogger()); |
|
|
|
SerilogLogger.Initialize(new LoggerConfiguration() |
|
|
|
.MinimumLevel.Warning() |
|
|
|
.WriteTo.Trace(outputTemplate: "{Area}: {Message}") |
|
|
|
.CreateLogger()); |
|
|
|
#endif
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Experimental: Would like to move this into a shared location once I figure out the best place for it
|
|
|
|
// considering all common libraries are PCL and do not have access to Environment.OSVersion.Platform
|
|
|
|
// nor do they have access to the platform specific render/subsystem extensions.
|
|
|
|
//
|
|
|
|
// Perhaps via DI we register each system with a priority/rank
|
|
|
|
//
|
|
|
|
public static class RenderSystemExtensions |
|
|
|
{ |
|
|
|
[Flags] |
|
|
|
enum RenderSystem |
|
|
|
{ |
|
|
|
None = 0, |
|
|
|
GTK = 1, |
|
|
|
Skia = 2, |
|
|
|
Direct2D = 4 |
|
|
|
}; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Default (Optimal) render system for a particular platform
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
private static RenderSystem DefaultRenderSystem() |
|
|
|
{ |
|
|
|
switch (Environment.OSVersion.Platform) |
|
|
|
{ |
|
|
|
case PlatformID.MacOSX: |
|
|
|
return RenderSystem.GTK; |
|
|
|
|
|
|
|
case PlatformID.Unix: |
|
|
|
return RenderSystem.GTK; |
|
|
|
|
|
|
|
case PlatformID.Win32Windows: |
|
|
|
return RenderSystem.Direct2D; |
|
|
|
} |
|
|
|
|
|
|
|
return RenderSystem.None; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns an array of avalidable rendering systems in priority order
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
private static RenderSystem[] AvailableRenderSystems() |
|
|
|
{ |
|
|
|
switch (Environment.OSVersion.Platform) |
|
|
|
{ |
|
|
|
case PlatformID.MacOSX: |
|
|
|
return new RenderSystem[] { RenderSystem.GTK, RenderSystem.Skia }; |
|
|
|
|
|
|
|
case PlatformID.Unix: |
|
|
|
return new RenderSystem[] { RenderSystem.GTK, RenderSystem.Skia }; |
|
|
|
|
|
|
|
case PlatformID.Win32Windows: |
|
|
|
return new RenderSystem[] { RenderSystem.Direct2D, RenderSystem.Skia, RenderSystem.GTK }; |
|
|
|
} |
|
|
|
|
|
|
|
return new RenderSystem[0]; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Selects the optimal render system for desktop platforms. Supports cmd line overrides
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="app"></param>
|
|
|
|
/// <param name="args"></param>
|
|
|
|
public static AppT ConfigureRenderSystem<AppT>(this AppT app, string[] args) where AppT : Application |
|
|
|
{ |
|
|
|
// So this all works great under Windows where it can support
|
|
|
|
// ALL configurations. But on OSX/Unix we cannot use Direct2D
|
|
|
|
//
|
|
|
|
if (args.Contains("--gtk") || DefaultRenderSystem() == RenderSystem.GTK) |
|
|
|
{ |
|
|
|
app.UseGtkSubsystem(); |
|
|
|
app.UseCairo(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
app.UseWin32Subsystem(); |
|
|
|
|
|
|
|
// not available until we do the SkiaSharp merge
|
|
|
|
//if (args.Contains("--skia") || DefaultRenderSystem() == RenderSystem.Skia)
|
|
|
|
//{
|
|
|
|
// app.UseSkia();
|
|
|
|
//}
|
|
|
|
//else
|
|
|
|
{ |
|
|
|
app.UseDirect2D(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return app; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Experimental: Would like to move this into a shared location once I figure out the best place for it
|
|
|
|
// considering all common libraries are PCL and do not have access to Environment.OSVersion.Platform
|
|
|
|
// nor do they have access to the platform specific render/subsystem extensions.
|
|
|
|
//
|
|
|
|
// Perhaps via DI we register each system with a priority/rank
|
|
|
|
//
|
|
|
|
public static class RenderSystemExtensions |
|
|
|
{ |
|
|
|
[Flags] |
|
|
|
enum RenderSystem |
|
|
|
{ |
|
|
|
None = 0, |
|
|
|
GTK = 1, |
|
|
|
Skia = 2, |
|
|
|
Direct2D = 4 |
|
|
|
}; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Default (Optimal) render system for a particular platform
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
private static RenderSystem DefaultRenderSystem() |
|
|
|
{ |
|
|
|
switch (Environment.OSVersion.Platform) |
|
|
|
{ |
|
|
|
case PlatformID.MacOSX: |
|
|
|
return RenderSystem.GTK; |
|
|
|
|
|
|
|
case PlatformID.Unix: |
|
|
|
return RenderSystem.GTK; |
|
|
|
|
|
|
|
case PlatformID.Win32Windows: |
|
|
|
return RenderSystem.Direct2D; |
|
|
|
} |
|
|
|
|
|
|
|
return RenderSystem.None; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns an array of avalidable rendering systems in priority order
|
|
|
|
/// </summary>
|
|
|
|
/// <returns></returns>
|
|
|
|
private static RenderSystem[] AvailableRenderSystems() |
|
|
|
{ |
|
|
|
switch (Environment.OSVersion.Platform) |
|
|
|
{ |
|
|
|
case PlatformID.MacOSX: |
|
|
|
return new RenderSystem[] { RenderSystem.GTK, RenderSystem.Skia }; |
|
|
|
|
|
|
|
case PlatformID.Unix: |
|
|
|
return new RenderSystem[] { RenderSystem.GTK, RenderSystem.Skia }; |
|
|
|
|
|
|
|
case PlatformID.Win32Windows: |
|
|
|
return new RenderSystem[] { RenderSystem.Direct2D, RenderSystem.Skia, RenderSystem.GTK }; |
|
|
|
} |
|
|
|
|
|
|
|
return new RenderSystem[0]; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Selects the optimal render system for desktop platforms. Supports cmd line overrides
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="app"></param>
|
|
|
|
/// <param name="args"></param>
|
|
|
|
public static TApp ConfigureRenderSystem<TApp>(this TApp app, string[] args) where TApp : Application |
|
|
|
{ |
|
|
|
// So this all works great under Windows where it can support
|
|
|
|
// ALL configurations. But on OSX/Unix we cannot use Direct2D
|
|
|
|
//
|
|
|
|
if (args.Contains("--gtk") || DefaultRenderSystem() == RenderSystem.GTK) |
|
|
|
{ |
|
|
|
app.UseGtk(); |
|
|
|
app.UseCairo(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
app.UseWin32(); |
|
|
|
|
|
|
|
// not available until we do the SkiaSharp merge
|
|
|
|
//if (args.Contains("--skia") || DefaultRenderSystem() == RenderSystem.Skia)
|
|
|
|
//{
|
|
|
|
// app.UseSkia();
|
|
|
|
//}
|
|
|
|
//else
|
|
|
|
{ |
|
|
|
app.UseDirect2D(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return app; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|