|
|
|
@ -24,8 +24,33 @@ namespace Avalonia.Gtk3 |
|
|
|
internal static string DisplayClassName; |
|
|
|
public static bool UseDeferredRendering = true; |
|
|
|
private static bool s_gtkInitialized; |
|
|
|
public static void Initialize() |
|
|
|
|
|
|
|
static bool EnvOption(string option, bool def, bool? specified) |
|
|
|
{ |
|
|
|
bool? Parse(string env) |
|
|
|
{ |
|
|
|
var v = Environment.GetEnvironmentVariable("AVALONIA_GTK3_" + env); |
|
|
|
if (v == null) |
|
|
|
return null; |
|
|
|
if (v.ToLowerInvariant() == "false" || v == "0") |
|
|
|
return false; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
var overridden = Parse(option + "_OVERRIDE"); |
|
|
|
if (overridden.HasValue) |
|
|
|
return overridden.Value; |
|
|
|
if (specified.HasValue) |
|
|
|
return specified.Value; |
|
|
|
var envValue = Parse(option); |
|
|
|
return envValue ?? def; |
|
|
|
} |
|
|
|
|
|
|
|
public static void Initialize(Gtk3PlatformOptions options) |
|
|
|
{ |
|
|
|
Resolver.Custom = options.CustomResolver; |
|
|
|
UseDeferredRendering = EnvOption("USE_DEFERRED_RENDERING", true, options.UseDeferredRendering); |
|
|
|
var useGpu = EnvOption("USE_GPU", false, options.UseGpuAcceleration); |
|
|
|
if (!s_gtkInitialized) |
|
|
|
{ |
|
|
|
try |
|
|
|
@ -57,7 +82,8 @@ namespace Avalonia.Gtk3 |
|
|
|
.Bind<IRenderLoop>().ToConstant(new RenderLoop()) |
|
|
|
.Bind<IRenderTimer>().ToConstant(new DefaultRenderTimer(60)) |
|
|
|
.Bind<IPlatformIconLoader>().ToConstant(new PlatformIconLoader()); |
|
|
|
EglGlPlatformFeature.TryInitialize(); |
|
|
|
if (useGpu) |
|
|
|
EglGlPlatformFeature.TryInitialize(); |
|
|
|
} |
|
|
|
|
|
|
|
public IWindowImpl CreateWindow() => new WindowImpl(); |
|
|
|
@ -118,18 +144,24 @@ namespace Avalonia.Gtk3 |
|
|
|
|
|
|
|
public bool CurrentThreadIsLoopThread => s_tlsMarker; |
|
|
|
} |
|
|
|
|
|
|
|
public class Gtk3PlatformOptions |
|
|
|
{ |
|
|
|
public bool? UseDeferredRendering { get; set; } |
|
|
|
public bool? UseGpuAcceleration { get; set; } |
|
|
|
public ICustomGtk3NativeLibraryResolver CustomResolver { get; set; } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
namespace Avalonia |
|
|
|
{ |
|
|
|
public static class Gtk3AppBuilderExtensions |
|
|
|
{ |
|
|
|
public static T UseGtk3<T>(this AppBuilderBase<T> builder, bool deferredRendering = true, ICustomGtk3NativeLibraryResolver resolver = null) |
|
|
|
public static T UseGtk3<T>(this AppBuilderBase<T> builder, Gtk3PlatformOptions options = null) |
|
|
|
where T : AppBuilderBase<T>, new() |
|
|
|
{ |
|
|
|
Resolver.Custom = resolver; |
|
|
|
Gtk3Platform.UseDeferredRendering = deferredRendering; |
|
|
|
return builder.UseWindowingSubsystem(Gtk3Platform.Initialize, "GTK3"); |
|
|
|
return builder.UseWindowingSubsystem(() => Gtk3Platform.Initialize(options ?? new Gtk3PlatformOptions()), |
|
|
|
"GTK3"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|