mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 05:01:05 +01:00 
			
		
		
		
	IO: Added AddMousePosEvent(), AddMouseButtonEvent(), AddMouseWheelEvent() api + updated all Backends. (#4858) (input queue code will be next commit)
Details: note that SDL, OSX and GLFW backends removed recording of MouseJustPressed[] which will be unnecessary with input queue (which is the NEXT commit). (#2787, #1992, #3383, #2525, #1320)
This commit is contained in:
		| @@ -16,6 +16,7 @@ | ||||
|  | ||||
| // CHANGELOG | ||||
| // (minor and older changes stripped away, please see git history for details) | ||||
| //  2022-01-17: Inputs: calling new io.AddMousePosEvent(), io.AddMouseButtonEvent(), io.AddMouseWheelEvent() API (1.87+). | ||||
| //  2022-01-17: Inputs: always calling io.AddKeyModsEvent() next and before key event (not in NewFrame) to fix input queue with very low framerates. | ||||
| //  2022-01-12: *BREAKING CHANGE*: Now using glfwSetCursorPosCallback(). If you called ImGui_ImplGlfw_InitXXX() with install_callbacks = false, you MUST install glfwSetCursorPosCallback() and forward it to the backend via ImGui_ImplGlfw_CursorPosCallback(). | ||||
| //  2022-01-10: Inputs: calling new io.AddKeyEvent(), io.AddKeyModsEvent() + io.SetKeyEventNativeData() API (1.87+). Support for full ImGuiKey range. | ||||
| @@ -86,7 +87,6 @@ struct ImGui_ImplGlfw_Data | ||||
|     GlfwClientApi           ClientApi; | ||||
|     double                  Time; | ||||
|     GLFWwindow*             MouseWindow; | ||||
|     bool                    MouseJustPressed[ImGuiMouseButton_COUNT]; | ||||
|     GLFWcursor*             MouseCursors[ImGuiMouseCursor_COUNT]; | ||||
|     bool                    InstalledCallbacks; | ||||
|  | ||||
| @@ -257,8 +257,10 @@ void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int acti | ||||
|         bd->PrevUserCallbackMousebutton(window, button, action, mods); | ||||
|  | ||||
|     ImGui_ImplGlfw_UpdateKeyModifiers(mods); | ||||
|     if (action == GLFW_PRESS && button >= 0 && button < IM_ARRAYSIZE(bd->MouseJustPressed)) | ||||
|         bd->MouseJustPressed[button] = true; | ||||
|  | ||||
|     ImGuiIO& io = ImGui::GetIO(); | ||||
|     if (button >= 0 && button < ImGuiMouseButton_COUNT) | ||||
|         io.AddMouseButtonEvent(button, action == GLFW_PRESS); | ||||
| } | ||||
|  | ||||
| void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset) | ||||
| @@ -268,8 +270,7 @@ void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yo | ||||
|         bd->PrevUserCallbackScroll(window, xoffset, yoffset); | ||||
|  | ||||
|     ImGuiIO& io = ImGui::GetIO(); | ||||
|     io.MouseWheelH += (float)xoffset; | ||||
|     io.MouseWheel += (float)yoffset; | ||||
|     io.AddMouseWheelEvent((float)xoffset, (float)yoffset); | ||||
| } | ||||
|  | ||||
| static int ImGui_ImplGlfw_TranslateUntranslatedKey(int key, int scancode) | ||||
| @@ -333,7 +334,7 @@ void ImGui_ImplGlfw_CursorPosCallback(GLFWwindow* window, double x, double y) | ||||
|         bd->PrevUserCallbackCursorPos(window, x, y); | ||||
|  | ||||
|     ImGuiIO& io = ImGui::GetIO(); | ||||
|     io.MousePos = ImVec2((float)x, (float)y); | ||||
|     io.AddMousePosEvent((float)x, (float)y); | ||||
| } | ||||
|  | ||||
| void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered) | ||||
| @@ -348,7 +349,7 @@ void ImGui_ImplGlfw_CursorEnterCallback(GLFWwindow* window, int entered) | ||||
|     if (!entered && bd->MouseWindow == window) | ||||
|     { | ||||
|         bd->MouseWindow = NULL; | ||||
|         io.MousePos = ImVec2(-FLT_MAX, -FLT_MAX); | ||||
|         io.AddMousePosEvent(-FLT_MAX, -FLT_MAX); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -501,16 +502,9 @@ static void ImGui_ImplGlfw_UpdateMouseData() | ||||
|         { | ||||
|             double mouse_x, mouse_y; | ||||
|             glfwGetCursorPos(bd->Window, &mouse_x, &mouse_y); | ||||
|             io.MousePos = ImVec2((float)mouse_x, (float)mouse_y); | ||||
|             io.AddMousePosEvent((float)mouse_x, (float)mouse_y); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // Update buttons | ||||
|     for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++) | ||||
|     { | ||||
|         io.MouseDown[i] = bd->MouseJustPressed[i] || glfwGetMouseButton(bd->Window, i) != 0; | ||||
|         bd->MouseJustPressed[i] = false; | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void ImGui_ImplGlfw_UpdateMouseCursor() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user