|
|
|
@ -39,96 +39,4 @@ namespace ControlCatalog |
|
|
|
.SetDefaultAssembly(typeof(App).Assembly); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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="builder"></param>
|
|
|
|
/// <param name="args"></param>
|
|
|
|
public static AppBuilder ConfigureRenderSystem(this AppBuilder builder, string[] args) |
|
|
|
{ |
|
|
|
// 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) |
|
|
|
{ |
|
|
|
builder.UseGtk(); |
|
|
|
builder.UseCairo(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
builder.UseWin32(); |
|
|
|
|
|
|
|
if (args.Contains("--skia") || DefaultRenderSystem() == RenderSystem.Skia) |
|
|
|
{ |
|
|
|
builder.UseSkia(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
builder.UseDirect2D1(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return builder; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|