From 8071c8c8c044ee56bc7578a4ba3178d2d03733db Mon Sep 17 00:00:00 2001 From: Ac_K Date: Sun, 15 Jan 2023 01:05:44 +0100 Subject: Ava UI: Fixes "Hide Cursor on Idle" for Windows (#4266) * Ava: Fixes "Hide Cursor on Idle" for Windows * Add check in MouseDriver and reduce the time of idling * Fix linux error * Change idle time everywhere for consistencies --- Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs | 7 +++++-- Ryujinx.Ava/UI/Helpers/Win32NativeInterop.cs | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'Ryujinx.Ava/UI') diff --git a/Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs b/Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs index 8247a89b..67ab80aa 100644 --- a/Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs +++ b/Ryujinx.Ava/UI/Helpers/EmbeddedWindow.cs @@ -34,6 +34,8 @@ namespace Ryujinx.Ava.UI.Helpers { WindowHandle = IntPtr.Zero; X11Display = IntPtr.Zero; + NsView = IntPtr.Zero; + MetalLayer = IntPtr.Zero; } public EmbeddedWindow() @@ -42,7 +44,7 @@ namespace Ryujinx.Ava.UI.Helpers stateObserverable.Subscribe(StateChanged); - this.Initialized += NativeEmbeddedWindow_Initialized; + Initialized += NativeEmbeddedWindow_Initialized; } public virtual void OnWindowCreated() { } @@ -127,7 +129,7 @@ namespace Ryujinx.Ava.UI.Helpers lpfnWndProc = Marshal.GetFunctionPointerForDelegate(_wndProcDelegate), style = ClassStyles.CS_OWNDC, lpszClassName = Marshal.StringToHGlobalUni(_className), - hCursor = LoadCursor(IntPtr.Zero, (IntPtr)Cursors.IDC_ARROW) + hCursor = CreateArrowCursor() }; var atom = RegisterClassEx(ref wndClassEx); @@ -198,6 +200,7 @@ namespace Ryujinx.Ava.UI.Helpers KeyModifiers.None)); break; } + return DefWindowProc(hWnd, msg, wParam, lParam); } diff --git a/Ryujinx.Ava/UI/Helpers/Win32NativeInterop.cs b/Ryujinx.Ava/UI/Helpers/Win32NativeInterop.cs index 1e6e3c3b..03d3a49f 100644 --- a/Ryujinx.Ava/UI/Helpers/Win32NativeInterop.cs +++ b/Ryujinx.Ava/UI/Helpers/Win32NativeInterop.cs @@ -70,6 +70,22 @@ namespace Ryujinx.Ava.UI.Helpers } } + public static IntPtr CreateEmptyCursor() + { + return CreateCursor(IntPtr.Zero, 0, 0, 1, 1, new byte[] { 0xFF }, new byte[] { 0x00 }); + } + + public static IntPtr CreateArrowCursor() + { + return LoadCursor(IntPtr.Zero, (IntPtr)Cursors.IDC_ARROW); + } + + [LibraryImport("user32.dll")] + public static partial IntPtr SetCursor(IntPtr handle); + + [LibraryImport("user32.dll")] + public static partial IntPtr CreateCursor(IntPtr hInst, int xHotSpot, int yHotSpot, int nWidth, int nHeight, byte[] pvANDPlane, byte[] pvXORPlane); + [LibraryImport("user32.dll", SetLastError = true, EntryPoint = "RegisterClassExW")] public static partial ushort RegisterClassEx(ref WNDCLASSEX param); -- cgit v1.2.3