From 027ffc557ce7509ac3a3efa1bbd60d99df2545df Mon Sep 17 00:00:00 2001 From: AllMelody <869168+AllMelody@users.noreply.github.com> Date: Mon, 31 Aug 2026 21:59:25 -0400 Subject: [PATCH] Fix menu mouse position on high pixel density displays SDL_GetMouseState returns points, M_PixelToMenuCanvasCoord expects pixels. IN_GetMousePos scales between the two; the console already uses it. No change when pixel density is 1. --- Quake/menu.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Quake/menu.c b/Quake/menu.c index 70e996570..739eb7f91 100644 --- a/Quake/menu.c +++ b/Quake/menu.c @@ -4938,20 +4938,15 @@ void M_NewGame (void) void M_UpdateMouse (void) { -#ifdef USE_SDL3 - float new_mouse_x; - float new_mouse_y; - SDL_GetMouseState (&new_mouse_x, &new_mouse_y); -#else - int new_mouse_x_int; - int new_mouse_y_int; - SDL_GetMouseState (&new_mouse_x_int, &new_mouse_y_int); - float new_mouse_x = (float)new_mouse_x_int; - float new_mouse_y = (float)new_mouse_y_int; -#endif - m_mouse_moved = !menu_changed && ((m_mouse_x_pixels != (int)new_mouse_x) || (m_mouse_y_pixels != (int)new_mouse_y)); - m_mouse_x_pixels = (int)new_mouse_x; - m_mouse_y_pixels = (int)new_mouse_y; + // IN_GetMousePos scales window coordinates to drawable pixels, which is what + // M_PixelToMenuCanvasCoord expects; the two differ on high pixel density displays + int new_mouse_x; + int new_mouse_y; + IN_GetMousePos (&new_mouse_x, &new_mouse_y); + + m_mouse_moved = !menu_changed && ((m_mouse_x_pixels != new_mouse_x) || (m_mouse_y_pixels != new_mouse_y)); + m_mouse_x_pixels = new_mouse_x; + m_mouse_y_pixels = new_mouse_y; menu_changed = false; m_mouse_x = new_mouse_x;