Browse Source

Merge branch 'master' into maxkatz6-patch-1

pull/8685/head
Benedikt Stebner 4 years ago
committed by GitHub
parent
commit
62089ec475
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      src/Android/Avalonia.Android/AndroidPlatform.cs
  2. 9
      src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs
  3. 10
      src/Avalonia.Controls/TransitioningContentControl.cs

15
src/Android/Avalonia.Android/AndroidPlatform.cs

@ -8,7 +8,8 @@ using Avalonia.Input.Platform;
using Avalonia.OpenGL.Egl; using Avalonia.OpenGL.Egl;
using Avalonia.Platform; using Avalonia.Platform;
using Avalonia.Rendering; using Avalonia.Rendering;
using Avalonia.Skia; using Avalonia.Rendering.Composition;
using Avalonia.OpenGL;
namespace Avalonia namespace Avalonia
{ {
@ -42,6 +43,8 @@ namespace Avalonia.Android
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500);
internal static Compositor Compositor { get; private set; }
public static void Initialize(AndroidPlatformOptions options) public static void Initialize(AndroidPlatformOptions options)
{ {
Options = options; Options = options;
@ -62,12 +65,20 @@ namespace Avalonia.Android
{ {
EglPlatformOpenGlInterface.TryInitialize(); EglPlatformOpenGlInterface.TryInitialize();
} }
if (options.UseCompositor)
{
Compositor = new Compositor(
AvaloniaLocator.Current.GetRequiredService<IRenderLoop>(),
AvaloniaLocator.Current.GetService<IPlatformOpenGlInterface>());
}
} }
} }
public sealed class AndroidPlatformOptions public sealed class AndroidPlatformOptions
{ {
public bool UseDeferredRendering { get; set; } = true; public bool UseDeferredRendering { get; set; } = false;
public bool UseGpu { get; set; } = true; public bool UseGpu { get; set; } = true;
public bool UseCompositor { get; set; } = true;
} }
} }

9
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs

@ -19,6 +19,7 @@ using Avalonia.OpenGL.Surfaces;
using Avalonia.Platform; using Avalonia.Platform;
using Avalonia.Platform.Storage; using Avalonia.Platform.Storage;
using Avalonia.Rendering; using Avalonia.Rendering;
using Avalonia.Rendering.Composition;
namespace Avalonia.Android.Platform.SkiaPlatform namespace Avalonia.Android.Platform.SkiaPlatform
{ {
@ -84,9 +85,11 @@ namespace Avalonia.Android.Platform.SkiaPlatform
public IEnumerable<object> Surfaces => new object[] { _gl, _framebuffer, Handle }; public IEnumerable<object> Surfaces => new object[] { _gl, _framebuffer, Handle };
public IRenderer CreateRenderer(IRenderRoot root) => public IRenderer CreateRenderer(IRenderRoot root) =>
AndroidPlatform.Options.UseDeferredRendering AndroidPlatform.Options.UseCompositor
? new DeferredRenderer(root, AvaloniaLocator.Current.GetService<IRenderLoop>()) { RenderOnlyOnRenderThread = true } ? new CompositingRenderer(root, AndroidPlatform.Compositor) { DrawFps = true }
: new ImmediateRenderer(root); : AndroidPlatform.Options.UseDeferredRendering
? new DeferredRenderer(root, AvaloniaLocator.Current.GetRequiredService<IRenderLoop>()) { RenderOnlyOnRenderThread = true }
: new ImmediateRenderer(root);
public virtual void Hide() public virtual void Hide()
{ {

10
src/Avalonia.Controls/TransitioningContentControl.cs

@ -84,13 +84,19 @@ public class TransitioningContentControl : ContentControl
_lastTransitionCts?.Cancel(); _lastTransitionCts?.Cancel();
_lastTransitionCts = new CancellationTokenSource(); _lastTransitionCts = new CancellationTokenSource();
var localToken = _lastTransitionCts.Token;
if (PageTransition != null) if (PageTransition != null)
await PageTransition.Start(this, null, true, _lastTransitionCts.Token); await PageTransition.Start(this, null, true, localToken);
if (localToken.IsCancellationRequested)
{
return;
}
CurrentContent = content; CurrentContent = content;
if (PageTransition != null) if (PageTransition != null)
await PageTransition.Start(null, this, true, _lastTransitionCts.Token); await PageTransition.Start(null, this, true, localToken);
} }
} }

Loading…
Cancel
Save