Browse Source

Fixes after VNC check

pull/10473/head
Max Katz 3 years ago
parent
commit
46c5db3725
  1. 6
      samples/ControlCatalog.NetCore/Properties/launchSettings.json
  2. 2
      src/Headless/Avalonia.Headless.Vnc/HeadlessVncFramebufferSource.cs
  3. 35
      src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs

6
samples/ControlCatalog.NetCore/Properties/launchSettings.json

@ -6,6 +6,10 @@
"Dxgi": {
"commandName": "Project",
"commandLineArgs": "--dxgi"
},
"VNC": {
"commandName": "Project",
"commandLineArgs": "--vnc"
}
}
}
}

2
src/Headless/Avalonia.Headless.Vnc/HeadlessVncFramebufferSource.cs

@ -69,7 +69,7 @@ namespace Avalonia.Headless.Vnc
{
lock (_lock)
{
using (var bmpRef = Window.CaptureRenderedFrame())
using (var bmpRef = Window.GetLastRenderedFrame())
{
if (bmpRef == null)
return _framebuffer;

35
src/Headless/Avalonia.Headless/HeadlessWindowExtensions.cs

@ -8,6 +8,9 @@ using Avalonia.Threading;
namespace Avalonia.Headless;
/// <summary>
/// Set of extension methods to simplify usage of Avalonia.Headless platform.
/// </summary>
public static class HeadlessWindowExtensions
{
/// <summary>
@ -20,7 +23,7 @@ public static class HeadlessWindowExtensions
AvaloniaHeadlessPlatform.ForceRenderTimerTick();
return topLevel.GetLastRenderedFrame();
}
/// <summary>
/// Reads last rendered frame.
/// Note, in order to trigger rendering timer, call <see cref="AvaloniaHeadlessPlatform.ForceRenderTimerTick"/> method.
@ -30,7 +33,8 @@ public static class HeadlessWindowExtensions
{
if (AvaloniaLocator.Current.GetService<IPlatformRenderInterface>() is HeadlessPlatformRenderInterface)
{
throw new NotSupportedException("To capture a rendered frame, make sure that headless application was initialized with '.UseSkia()' and disabled 'UseHeadlessDrawing' in the 'AvaloniaHeadlessPlatformOptions'.");
throw new NotSupportedException(
"To capture a rendered frame, make sure that headless application was initialized with '.UseSkia()' and disabled 'UseHeadlessDrawing' in the 'AvaloniaHeadlessPlatformOptions'.");
}
return GetImpl(topLevel).GetLastRenderedFrame();
@ -40,49 +44,58 @@ public static class HeadlessWindowExtensions
/// Simulates keyboard press on the headless window/toplevel.
/// </summary>
public static void KeyPress(this TopLevel topLevel, Key key, RawInputModifiers modifiers) =>
GetImpl(topLevel).KeyPress(key, modifiers);
RunJobsAndGetImpl(topLevel).KeyPress(key, modifiers);
/// <summary>
/// Simulates keyboard release on the headless window/toplevel.
/// </summary>
public static void KeyRelease(this TopLevel topLevel, Key key, RawInputModifiers modifiers) =>
GetImpl(topLevel).KeyRelease(key, modifiers);
RunJobsAndGetImpl(topLevel).KeyRelease(key, modifiers);
/// <summary>
/// Simulates mouse down on the headless window/toplevel.
/// </summary>
public static void MouseDown(this TopLevel topLevel, Point point, MouseButton button,
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseDown(point, button, modifiers);
RawInputModifiers modifiers = RawInputModifiers.None) =>
RunJobsAndGetImpl(topLevel).MouseDown(point, button, modifiers);
/// <summary>
/// Simulates mouse move on the headless window/toplevel.
/// </summary>
public static void MouseMove(this TopLevel topLevel, Point point,
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseMove(point, modifiers);
RawInputModifiers modifiers = RawInputModifiers.None) =>
RunJobsAndGetImpl(topLevel).MouseMove(point, modifiers);
/// <summary>
/// Simulates mouse up on the headless window/toplevel.
/// </summary>
public static void MouseUp(this TopLevel topLevel, Point point, MouseButton button,
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseUp(point, button, modifiers);
RawInputModifiers modifiers = RawInputModifiers.None) =>
RunJobsAndGetImpl(topLevel).MouseUp(point, button, modifiers);
/// <summary>
/// Simulates mouse wheel on the headless window/toplevel.
/// </summary>
public static void MouseWheel(this TopLevel topLevel, Point point, Vector delta,
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseWheel(point, delta, modifiers);
RawInputModifiers modifiers = RawInputModifiers.None) =>
RunJobsAndGetImpl(topLevel).MouseWheel(point, delta, modifiers);
/// <summary>
/// Simulates drag'n'drop target on the headless window/toplevel.
/// </summary>
public static void DragDrop(this TopLevel topLevel, Point point, RawDragEventType type, IDataObject data,
DragDropEffects effects, RawInputModifiers modifiers = RawInputModifiers.None) =>
GetImpl(topLevel).DragDrop(point, type, data, effects, modifiers);
RunJobsAndGetImpl(topLevel).DragDrop(point, type, data, effects, modifiers);
private static IHeadlessWindow GetImpl(this TopLevel topLevel)
private static IHeadlessWindow RunJobsAndGetImpl(this TopLevel topLevel)
{
Dispatcher.UIThread.RunJobs();
return GetImpl(topLevel);
}
private static IHeadlessWindow GetImpl(this TopLevel topLevel)
{
return topLevel.PlatformImpl as IHeadlessWindow ??
throw new InvalidOperationException("TopLevel must be a headless window.");
throw new InvalidOperationException("TopLevel must be a headless window.");
}
}

Loading…
Cancel
Save