7 changed files with 85 additions and 28 deletions
@ -0,0 +1,50 @@ |
|||
using System; |
|||
using Avalonia.Controls; |
|||
using Avalonia.Input; |
|||
using Avalonia.Input.Raw; |
|||
using Avalonia.Media.Imaging; |
|||
using Avalonia.Threading; |
|||
|
|||
namespace Avalonia.Headless; |
|||
|
|||
public static class HeadlessWindowExtensions |
|||
{ |
|||
public static Bitmap? CaptureRenderedFrame(this TopLevel topLevel) |
|||
{ |
|||
var impl = GetImpl(topLevel); |
|||
AvaloniaHeadlessPlatform.ForceRenderTimerTick(); |
|||
return impl.GetLastRenderedFrame(); |
|||
} |
|||
|
|||
public static Bitmap? GetLastRenderedFrame(this TopLevel topLevel) => |
|||
GetImpl(topLevel).GetLastRenderedFrame(); |
|||
|
|||
public static void KeyPress(this TopLevel topLevel, Key key, RawInputModifiers modifiers) => |
|||
GetImpl(topLevel).KeyPress(key, modifiers); |
|||
|
|||
public static void KeyRelease(this TopLevel topLevel, Key key, RawInputModifiers modifiers) => |
|||
GetImpl(topLevel).KeyRelease(key, modifiers); |
|||
|
|||
public static void MouseDown(this TopLevel topLevel, Point point, MouseButton button, |
|||
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseDown(point, button, modifiers); |
|||
|
|||
public static void MouseMove(this TopLevel topLevel, Point point, |
|||
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseMove(point, modifiers); |
|||
|
|||
public static void MouseUp(this TopLevel topLevel, Point point, MouseButton button, |
|||
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseUp(point, button, modifiers); |
|||
|
|||
public static void MouseWheel(this TopLevel topLevel, Point point, Vector delta, |
|||
RawInputModifiers modifiers = RawInputModifiers.None) => GetImpl(topLevel).MouseWheel(point, delta, modifiers); |
|||
|
|||
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); |
|||
|
|||
private static IHeadlessWindow GetImpl(this TopLevel topLevel) |
|||
{ |
|||
Dispatcher.UIThread.RunJobs(); |
|||
return topLevel.PlatformImpl as IHeadlessWindow ?? |
|||
throw new InvalidOperationException("TopLevel must be a headless window."); |
|||
} |
|||
} |
|||
Loading…
Reference in new issue