Browse Source
Merge branch 'master' into maxkatz6-patch-1
pull/8685/head
Benedikt Stebner
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
27 additions and
7 deletions
-
src/Android/Avalonia.Android/AndroidPlatform.cs
-
src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs
-
src/Avalonia.Controls/TransitioningContentControl.cs
|
|
|
@ -8,7 +8,8 @@ using Avalonia.Input.Platform; |
|
|
|
using Avalonia.OpenGL.Egl; |
|
|
|
using Avalonia.Platform; |
|
|
|
using Avalonia.Rendering; |
|
|
|
using Avalonia.Skia; |
|
|
|
using Avalonia.Rendering.Composition; |
|
|
|
using Avalonia.OpenGL; |
|
|
|
|
|
|
|
namespace Avalonia |
|
|
|
{ |
|
|
|
@ -42,6 +43,8 @@ namespace Avalonia.Android |
|
|
|
|
|
|
|
public TimeSpan DoubleClickTime => TimeSpan.FromMilliseconds(500); |
|
|
|
|
|
|
|
internal static Compositor Compositor { get; private set; } |
|
|
|
|
|
|
|
public static void Initialize(AndroidPlatformOptions options) |
|
|
|
{ |
|
|
|
Options = options; |
|
|
|
@ -62,12 +65,20 @@ namespace Avalonia.Android |
|
|
|
{ |
|
|
|
EglPlatformOpenGlInterface.TryInitialize(); |
|
|
|
} |
|
|
|
|
|
|
|
if (options.UseCompositor) |
|
|
|
{ |
|
|
|
Compositor = new Compositor( |
|
|
|
AvaloniaLocator.Current.GetRequiredService<IRenderLoop>(), |
|
|
|
AvaloniaLocator.Current.GetService<IPlatformOpenGlInterface>()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public sealed class AndroidPlatformOptions |
|
|
|
{ |
|
|
|
public bool UseDeferredRendering { get; set; } = true; |
|
|
|
public bool UseDeferredRendering { get; set; } = false; |
|
|
|
public bool UseGpu { get; set; } = true; |
|
|
|
public bool UseCompositor { get; set; } = true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -19,6 +19,7 @@ using Avalonia.OpenGL.Surfaces; |
|
|
|
using Avalonia.Platform; |
|
|
|
using Avalonia.Platform.Storage; |
|
|
|
using Avalonia.Rendering; |
|
|
|
using Avalonia.Rendering.Composition; |
|
|
|
|
|
|
|
namespace Avalonia.Android.Platform.SkiaPlatform |
|
|
|
{ |
|
|
|
@ -84,9 +85,11 @@ namespace Avalonia.Android.Platform.SkiaPlatform |
|
|
|
public IEnumerable<object> Surfaces => new object[] { _gl, _framebuffer, Handle }; |
|
|
|
|
|
|
|
public IRenderer CreateRenderer(IRenderRoot root) => |
|
|
|
AndroidPlatform.Options.UseDeferredRendering |
|
|
|
? new DeferredRenderer(root, AvaloniaLocator.Current.GetService<IRenderLoop>()) { RenderOnlyOnRenderThread = true } |
|
|
|
: new ImmediateRenderer(root); |
|
|
|
AndroidPlatform.Options.UseCompositor |
|
|
|
? new CompositingRenderer(root, AndroidPlatform.Compositor) { DrawFps = true } |
|
|
|
: AndroidPlatform.Options.UseDeferredRendering |
|
|
|
? new DeferredRenderer(root, AvaloniaLocator.Current.GetRequiredService<IRenderLoop>()) { RenderOnlyOnRenderThread = true } |
|
|
|
: new ImmediateRenderer(root); |
|
|
|
|
|
|
|
public virtual void Hide() |
|
|
|
{ |
|
|
|
|
|
|
|
@ -84,13 +84,19 @@ public class TransitioningContentControl : ContentControl |
|
|
|
|
|
|
|
_lastTransitionCts?.Cancel(); |
|
|
|
_lastTransitionCts = new CancellationTokenSource(); |
|
|
|
var localToken = _lastTransitionCts.Token; |
|
|
|
|
|
|
|
if (PageTransition != null) |
|
|
|
await PageTransition.Start(this, null, true, _lastTransitionCts.Token); |
|
|
|
await PageTransition.Start(this, null, true, localToken); |
|
|
|
|
|
|
|
if (localToken.IsCancellationRequested) |
|
|
|
{ |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
CurrentContent = content; |
|
|
|
|
|
|
|
if (PageTransition != null) |
|
|
|
await PageTransition.Start(null, this, true, _lastTransitionCts.Token); |
|
|
|
await PageTransition.Start(null, this, true, localToken); |
|
|
|
} |
|
|
|
} |
|
|
|
|