mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Viewport, Platform: Cleaned up xxx_UpdateMouseCursor() functions to make them more consistent. (#1542)
This commit is contained in:
		@@ -196,7 +196,7 @@ void ImGui_ImplGlfw_Shutdown()
 | 
			
		||||
    g_ClientApi = GlfwClientApi_Unknown;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void ImGui_ImplGlfw_UpdateMouse()
 | 
			
		||||
static void ImGui_ImplGlfw_UpdateMousePosAndButtons()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO();
 | 
			
		||||
    const ImVec2 mouse_pos_backup = io.MousePos;
 | 
			
		||||
@@ -241,24 +241,30 @@ static void ImGui_ImplGlfw_UpdateMouse()
 | 
			
		||||
            io.MouseHoveredViewport = viewport->ID;
 | 
			
		||||
#endif
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor
 | 
			
		||||
    // FIXME-PLATFORM: Unfocused windows seems to fail changing the mouse cursor with GLFW 3.2, but 3.3 works here.
 | 
			
		||||
    if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) == 0 && glfwGetInputMode(g_Window, GLFW_CURSOR) != GLFW_CURSOR_DISABLED)
 | 
			
		||||
static void ImGui_ImplGlfw_UpdateMouseCursor()
 | 
			
		||||
{
 | 
			
		||||
    ImGuiIO& io = ImGui::GetIO();
 | 
			
		||||
    if ((io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) || glfwGetInputMode(g_Window, GLFW_CURSOR) == GLFW_CURSOR_DISABLED)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    ImGuiMouseCursor imgui_cursor = ImGui::GetMouseCursor();
 | 
			
		||||
    ImGuiPlatformIO& platform_io = ImGui::GetPlatformIO();
 | 
			
		||||
    for (int n = 0; n < platform_io.Viewports.Size; n++)
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiMouseCursor cursor = ImGui::GetMouseCursor();
 | 
			
		||||
        for (int n = 0; n < platform_io.Viewports.Size; n++)
 | 
			
		||||
        GLFWwindow* window = (GLFWwindow*)platform_io.Viewports[n]->PlatformHandle;
 | 
			
		||||
        if (imgui_cursor == ImGuiMouseCursor_None || io.MouseDrawCursor)
 | 
			
		||||
        {
 | 
			
		||||
            GLFWwindow* window = (GLFWwindow*)platform_io.Viewports[n]->PlatformHandle;
 | 
			
		||||
            if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None)
 | 
			
		||||
            {
 | 
			
		||||
                glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                glfwSetCursor(window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]);
 | 
			
		||||
                glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
 | 
			
		||||
            }
 | 
			
		||||
            // Hide OS mouse cursor if imgui is drawing it or if it wants no cursor
 | 
			
		||||
            glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_HIDDEN);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            // Show OS mouse cursor
 | 
			
		||||
            // FIXME-PLATFORM: Unfocused windows seems to fail changing the mouse cursor with GLFW 3.2, but 3.3 works here.
 | 
			
		||||
            glfwSetCursor(window, g_MouseCursors[imgui_cursor] ? g_MouseCursors[imgui_cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]);
 | 
			
		||||
            glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -283,7 +289,8 @@ void ImGui_ImplGlfw_NewFrame()
 | 
			
		||||
    io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f);
 | 
			
		||||
    g_Time = current_time;
 | 
			
		||||
 | 
			
		||||
    ImGui_ImplGlfw_UpdateMouse();
 | 
			
		||||
    ImGui_ImplGlfw_UpdateMousePosAndButtons();
 | 
			
		||||
    ImGui_ImplGlfw_UpdateMouseCursor();
 | 
			
		||||
 | 
			
		||||
    // Gamepad navigation mapping [BETA]
 | 
			
		||||
    memset(io.NavInputs, 0, sizeof(io.NavInputs));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user