mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	Backends: SDL2: Extend global mouse pos availability check (#3950)
This commit is contained in:
		| @@ -17,6 +17,7 @@ | |||||||
|  |  | ||||||
| // CHANGELOG | // CHANGELOG | ||||||
| // (minor and older changes stripped away, please see git history for details) | // (minor and older changes stripped away, please see git history for details) | ||||||
|  | //  2021-03-22: Rework global mouse pos availability check listing supported platforms explicitly, effectively fixing mouse access on Raspberry Pi. (#2837, #3950) | ||||||
| //  2020-05-25: Misc: Report a zero display-size when window is minimized, to be consistent with other backends. | //  2020-05-25: Misc: Report a zero display-size when window is minimized, to be consistent with other backends. | ||||||
| //  2020-02-20: Inputs: Fixed mapping for ImGuiKey_KeyPadEnter (using SDL_SCANCODE_KP_ENTER instead of SDL_SCANCODE_RETURN2). | //  2020-02-20: Inputs: Fixed mapping for ImGuiKey_KeyPadEnter (using SDL_SCANCODE_KP_ENTER instead of SDL_SCANCODE_RETURN2). | ||||||
| //  2019-12-17: Inputs: On Wayland, use SDL_GetMouseState (because there is no global mouse state). | //  2019-12-17: Inputs: On Wayland, use SDL_GetMouseState (because there is no global mouse state). | ||||||
| @@ -177,8 +178,14 @@ static bool ImGui_ImplSDL2_Init(SDL_Window* window) | |||||||
|     g_MouseCursors[ImGuiMouseCursor_Hand] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); |     g_MouseCursors[ImGuiMouseCursor_Hand] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); | ||||||
|     g_MouseCursors[ImGuiMouseCursor_NotAllowed] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO); |     g_MouseCursors[ImGuiMouseCursor_NotAllowed] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO); | ||||||
|  |  | ||||||
|     // Check and store if we are on Wayland |     // Check and store if we are on a SDL backend that supports global mouse position | ||||||
|     g_MouseCanUseGlobalState = strncmp(SDL_GetCurrentVideoDriver(), "wayland", 7) != 0; |     // ("wayland" and "rpi" don't support it, but we chose to use a white-list instead of a black-list) | ||||||
|  |     const char* sdl_backend = SDL_GetCurrentVideoDriver(); | ||||||
|  |     const char* global_mouse_whitelist[] = { "windows", "cocoa", "x11", "DIVE", "VMAN" }; | ||||||
|  |     g_MouseCanUseGlobalState = false; | ||||||
|  |     for (int n = 0; n < IM_ARRAYSIZE(global_mouse_whitelist); n++) | ||||||
|  |         if (strncmp(sdl_backend, global_mouse_whitelist[n], strlen(global_mouse_whitelist[n])) == 0) | ||||||
|  |             g_MouseCanUseGlobalState = true; | ||||||
|  |  | ||||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||||
|     SDL_SysWMinfo wmInfo; |     SDL_SysWMinfo wmInfo; | ||||||
| @@ -259,7 +266,7 @@ static void ImGui_ImplSDL2_UpdateMousePosAndButtons() | |||||||
|         { |         { | ||||||
|             // SDL_GetMouseState() gives mouse position seemingly based on the last window entered/focused(?) |             // SDL_GetMouseState() gives mouse position seemingly based on the last window entered/focused(?) | ||||||
|             // The creation of a new windows at runtime and SDL_CaptureMouse both seems to severely mess up with that, so we retrieve that position globally. |             // The creation of a new windows at runtime and SDL_CaptureMouse both seems to severely mess up with that, so we retrieve that position globally. | ||||||
|             // Won't use this workaround when on Wayland, as there is no global mouse position. |             // Won't use this workaround on SDL backends that have no global mouse position, like Wayland or RPI | ||||||
|             int wx, wy; |             int wx, wy; | ||||||
|             SDL_GetWindowPosition(focused_window, &wx, &wy); |             SDL_GetWindowPosition(focused_window, &wx, &wy); | ||||||
|             SDL_GetGlobalMouseState(&mx, &my); |             SDL_GetGlobalMouseState(&mx, &my); | ||||||
|   | |||||||
| @@ -44,6 +44,8 @@ Other Changes: | |||||||
| - Drags, Sliders, Inputs: Specifying a NULL format to Float functions default them to "%.3f" to be | - Drags, Sliders, Inputs: Specifying a NULL format to Float functions default them to "%.3f" to be | ||||||
|   consistent with the compile-time default. (#3922) |   consistent with the compile-time default. (#3922) | ||||||
| - DragScalar: Add default value for v_speed argument to match higher-level functions. (#3922) [@eliasdaler] | - DragScalar: Add default value for v_speed argument to match higher-level functions. (#3922) [@eliasdaler] | ||||||
|  | - Backends: SDL: Rework global mouse pos availability check listing supported platforms explicitly, | ||||||
|  |   effectively fixing mouse access on Raspberry Pi. (#2837, #3950) [@lethal-guitar, @hinxx] | ||||||
| - Backends: DirectX9: calling IDirect3DStateBlock9::Capture() after CreateStateBlock() which appears to | - Backends: DirectX9: calling IDirect3DStateBlock9::Capture() after CreateStateBlock() which appears to | ||||||
|   workaround/fix state restoring issues. Unknown exactly why so, but bit of a cargo-cult fix. (#3857) |   workaround/fix state restoring issues. Unknown exactly why so, but bit of a cargo-cult fix. (#3857) | ||||||
| - Backends: Vulkan: Fix mapped memory Vulkan validation error when buffer sizes are not multiple of | - Backends: Vulkan: Fix mapped memory Vulkan validation error when buffer sizes are not multiple of | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user