Refactor code structure for improved readability and maintainability
This commit is contained in:
69
DaireApplication/ViewModels/X11CursorHider.cs
Normal file
69
DaireApplication/ViewModels/X11CursorHider.cs
Normal file
@@ -0,0 +1,69 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public class X11CursorHider
|
||||
{
|
||||
const string X11Lib = "libX11.so";
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern IntPtr XOpenDisplay(IntPtr display);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern int XCloseDisplay(IntPtr display);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern IntPtr XCreatePixmap(IntPtr display, IntPtr drawable, uint width, uint height, uint depth);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern IntPtr XCreateBitmapFromData(IntPtr display, IntPtr drawable, byte[] data, uint width, uint height);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern IntPtr XCreatePixmapCursor(IntPtr display, IntPtr source, IntPtr mask, ref XColor foreground, ref XColor background, uint x, uint y);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern int XDefineCursor(IntPtr display, IntPtr window, IntPtr cursor);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern int XFreeCursor(IntPtr display, IntPtr cursor);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern int XFlush(IntPtr display);
|
||||
|
||||
[DllImport(X11Lib)]
|
||||
static extern IntPtr XDefaultRootWindow(IntPtr display);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
struct XColor
|
||||
{
|
||||
public ulong pixel;
|
||||
public ushort red, green, blue;
|
||||
public byte flags;
|
||||
public byte pad;
|
||||
}
|
||||
|
||||
public static void HideCursor()
|
||||
{
|
||||
IntPtr display = XOpenDisplay(IntPtr.Zero);
|
||||
if (display == IntPtr.Zero)
|
||||
{
|
||||
Console.WriteLine("Cannot open X display");
|
||||
return;
|
||||
}
|
||||
|
||||
IntPtr root = XDefaultRootWindow(display);
|
||||
|
||||
byte[] emptyData = new byte[1] { 0 }; // 1x1 empty bitmap
|
||||
IntPtr pixmap = XCreateBitmapFromData(display, root, emptyData, 1, 1);
|
||||
|
||||
XColor dummy = new XColor();
|
||||
|
||||
IntPtr invisibleCursor = XCreatePixmapCursor(display, pixmap, pixmap, ref dummy, ref dummy, 0, 0);
|
||||
|
||||
XDefineCursor(display, root, invisibleCursor);
|
||||
XFlush(display);
|
||||
|
||||
// Keep the cursor hidden until app closes, remember to call:
|
||||
// XFreeCursor(display, invisibleCursor);
|
||||
// XCloseDisplay(display);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user