6 changed files with 69 additions and 19 deletions
@ -0,0 +1,57 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using Avalonia.Input; |
||||
|
using Avalonia.Platform; |
||||
|
|
||||
|
namespace Avalonia.X11 |
||||
|
{ |
||||
|
class X11CursorFactory : IStandardCursorFactory |
||||
|
{ |
||||
|
private readonly IntPtr _display; |
||||
|
private Dictionary<CursorFontShape, IntPtr> _cursors; |
||||
|
|
||||
|
private static readonly Dictionary<StandardCursorType, CursorFontShape> s_mapping = |
||||
|
new Dictionary<StandardCursorType, CursorFontShape> |
||||
|
{ |
||||
|
{StandardCursorType.Arrow, CursorFontShape.XC_arrow}, |
||||
|
{StandardCursorType.Cross, CursorFontShape.XC_cross}, |
||||
|
{StandardCursorType.Hand, CursorFontShape.XC_hand1}, |
||||
|
{StandardCursorType.Help, CursorFontShape.XC_question_arrow}, |
||||
|
{StandardCursorType.Ibeam, CursorFontShape.XC_xterm}, |
||||
|
{StandardCursorType.No, CursorFontShape.XC_X_cursor}, |
||||
|
{StandardCursorType.Wait, CursorFontShape.XC_watch}, |
||||
|
{StandardCursorType.AppStarting, CursorFontShape.XC_watch}, |
||||
|
{StandardCursorType.BottomSize, CursorFontShape.XC_bottom_side}, |
||||
|
{StandardCursorType.DragCopy, CursorFontShape.XC_center_ptr}, |
||||
|
{StandardCursorType.DragLink, CursorFontShape.XC_fleur}, |
||||
|
{StandardCursorType.DragMove, CursorFontShape.XC_diamond_cross}, |
||||
|
{StandardCursorType.LeftSide, CursorFontShape.XC_left_side}, |
||||
|
{StandardCursorType.RightSide, CursorFontShape.XC_right_side}, |
||||
|
{StandardCursorType.SizeAll, CursorFontShape.XC_sizing}, |
||||
|
{StandardCursorType.TopSide, CursorFontShape.XC_top_side}, |
||||
|
{StandardCursorType.UpArrow, CursorFontShape.XC_sb_up_arrow}, |
||||
|
{StandardCursorType.BottomLeftCorner, CursorFontShape.XC_bottom_left_corner}, |
||||
|
{StandardCursorType.BottomRightCorner, CursorFontShape.XC_bottom_right_corner}, |
||||
|
{StandardCursorType.SizeNorthSouth, CursorFontShape.XC_sb_v_double_arrow}, |
||||
|
{StandardCursorType.SizeWestEast, CursorFontShape.XC_sb_h_double_arrow}, |
||||
|
{StandardCursorType.TopLeftCorner, CursorFontShape.XC_top_left_corner}, |
||||
|
{StandardCursorType.TopRightCorner, CursorFontShape.XC_top_right_corner}, |
||||
|
}; |
||||
|
|
||||
|
public X11CursorFactory(IntPtr display) |
||||
|
{ |
||||
|
_display = display; |
||||
|
_cursors = Enum.GetValues(typeof(CursorFontShape)).Cast<CursorFontShape>() |
||||
|
.ToDictionary(id => id, id => XLib.XCreateFontCursor(_display, id)); |
||||
|
} |
||||
|
|
||||
|
public IPlatformHandle GetCursor(StandardCursorType cursorType) |
||||
|
{ |
||||
|
var handle = s_mapping.TryGetValue(cursorType, out var shape) |
||||
|
? _cursors[shape] |
||||
|
: _cursors[CursorFontShape.XC_arrow]; |
||||
|
return new PlatformHandle(handle, "XCURSOR"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue