mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Backends: SDL2: Extend global mouse pos availability check (#3950)
This commit is contained in:
		| @@ -17,6 +17,7 @@ | ||||
|  | ||||
| // CHANGELOG | ||||
| // (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-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). | ||||
| @@ -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_NotAllowed] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO); | ||||
|  | ||||
|     // Check and store if we are on Wayland | ||||
|     g_MouseCanUseGlobalState = strncmp(SDL_GetCurrentVideoDriver(), "wayland", 7) != 0; | ||||
|     // Check and store if we are on a SDL backend that supports global mouse position | ||||
|     // ("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 | ||||
|     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(?) | ||||
|             // 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; | ||||
|             SDL_GetWindowPosition(focused_window, &wx, &wy); | ||||
|             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 | ||||
|   consistent with the compile-time default. (#3922) | ||||
| - 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 | ||||
|   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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user