Browse Source

Win32

pull/8105/head
Nikita Tsukanov 4 years ago
parent
commit
4274e78a32
  1. 3
      samples/ControlCatalog.NetCore/Program.cs
  2. 4
      src/Avalonia.Base/Rendering/Composition/CompositingRenderer.cs
  3. 8
      src/Windows/Avalonia.Win32/Win32Platform.cs
  4. 4
      src/Windows/Avalonia.Win32/WindowImpl.cs

3
samples/ControlCatalog.NetCore/Program.cs

@ -115,7 +115,8 @@ namespace ControlCatalog.NetCore
})
.With(new Win32PlatformOptions
{
EnableMultitouch = true
EnableMultitouch = true,
UseCompositor = true
})
.UseSkia()
.AfterSetup(builder =>

4
src/Avalonia.Base/Rendering/Composition/CompositingRenderer.cs

@ -177,7 +177,7 @@ public class CompositingRenderer : RendererBase, IRendererWithCompositor
public void Stop()
{
_target.IsEnabled = true;
_target.IsEnabled = false;
}
public void Dispose()
@ -191,4 +191,4 @@ public class CompositingRenderer : RendererBase, IRendererWithCompositor
public Compositor Compositor => _compositor;
}
}

8
src/Windows/Avalonia.Win32/Win32Platform.cs

@ -14,6 +14,7 @@ using Avalonia.Input.Platform;
using Avalonia.OpenGL;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Rendering.Composition;
using Avalonia.Threading;
using Avalonia.Utilities;
using Avalonia.Win32.Input;
@ -48,6 +49,8 @@ namespace Avalonia
/// Immediate re-renders the whole scene when some element is changed on the scene. Deferred re-renders only changed elements.
/// </remarks>
public bool UseDeferredRendering { get; set; } = true;
public bool UseCompositor { get; set; }
/// <summary>
/// Enables ANGLE for Windows. For every Windows version that is above Windows 7, the default is true otherwise it's false.
@ -132,6 +135,8 @@ namespace Avalonia.Win32
public static bool UseDeferredRendering => Options.UseDeferredRendering;
internal static bool UseOverlayPopups => Options.OverlayPopups;
public static Win32PlatformOptions Options { get; private set; }
internal static Compositor Compositor { get; private set; }
public Size DoubleClickSize => new Size(
UnmanagedMethods.GetSystemMetrics(UnmanagedMethods.SystemMetric.SM_CXDOUBLECLK),
@ -181,6 +186,9 @@ namespace Avalonia.Win32
if (OleContext.Current != null)
AvaloniaLocator.CurrentMutable.Bind<IPlatformDragSource>().ToSingleton<DragSource>();
if (Options.UseCompositor)
Compositor = Compositor.Create(AvaloniaLocator.Current.GetRequiredService<IRenderLoop>());
}
public bool HasMessages()

4
src/Windows/Avalonia.Win32/WindowImpl.cs

@ -14,6 +14,7 @@ using Avalonia.OpenGL.Egl;
using Avalonia.OpenGL.Surfaces;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Rendering.Composition;
using Avalonia.Win32.Automation;
using Avalonia.Win32.Input;
using Avalonia.Win32.Interop;
@ -500,6 +501,9 @@ namespace Avalonia.Win32
if (customRendererFactory != null)
return customRendererFactory.Create(root, loop);
if (Win32Platform.Compositor != null)
return new CompositingRenderer(root, Win32Platform.Compositor);
return Win32Platform.UseDeferredRendering
? _isUsingComposition
? new DeferredRenderer(root, loop)

Loading…
Cancel
Save