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 .With(new Win32PlatformOptions
{ {
EnableMultitouch = true EnableMultitouch = true,
UseCompositor = true
}) })
.UseSkia() .UseSkia()
.AfterSetup(builder => .AfterSetup(builder =>

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

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

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

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

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

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

Loading…
Cancel
Save