mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Examples: Mouse cursor handling comments/tweaks to homogenize. (#1495)
This commit is contained in:
		| @@ -337,7 +337,7 @@ void ImGui_ImplGlfwGL2_NewFrame() | |||||||
|         g_MouseJustPressed[i] = false; |         g_MouseJustPressed[i] = false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Update mouse cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -345,8 +345,8 @@ void ImGui_ImplGlfwGL2_NewFrame() | |||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); |  | ||||||
|         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. |     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. | ||||||
|   | |||||||
| @@ -452,7 +452,7 @@ void ImGui_ImplGlfwGL3_NewFrame() | |||||||
|         g_MouseJustPressed[i] = false; |         g_MouseJustPressed[i] = false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Update mouse cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -460,8 +460,8 @@ void ImGui_ImplGlfwGL3_NewFrame() | |||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); |  | ||||||
|         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Gamepad navigation mapping [BETA] |     // Gamepad navigation mapping [BETA] | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ | |||||||
| static Uint64       g_Time = 0; | static Uint64       g_Time = 0; | ||||||
| static bool         g_MousePressed[3] = { false, false, false }; | static bool         g_MousePressed[3] = { false, false, false }; | ||||||
| static GLuint       g_FontTexture = 0; | static GLuint       g_FontTexture = 0; | ||||||
| static SDL_Cursor*  g_SdlCursors[ImGuiMouseCursor_Count_] = { 0 }; | static SDL_Cursor*  g_MouseCursors[ImGuiMouseCursor_Count_] = { 0 }; | ||||||
|  |  | ||||||
| // OpenGL2 Render function. | // OpenGL2 Render function. | ||||||
| // (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) | // (this used to be set in io.RenderDrawListsFn and called by ImGui::Render(), but you can now call this directly from your main loop) | ||||||
| @@ -252,13 +252,13 @@ bool    ImGui_ImplSdlGL2_Init(SDL_Window* window) | |||||||
|     io.GetClipboardTextFn = ImGui_ImplSdlGL2_GetClipboardText; |     io.GetClipboardTextFn = ImGui_ImplSdlGL2_GetClipboardText; | ||||||
|     io.ClipboardUserData = NULL; |     io.ClipboardUserData = NULL; | ||||||
|  |  | ||||||
|     g_SdlCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); |     g_MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM); |     g_MouseCursors[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL); |     g_MouseCursors[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS); |     g_MouseCursors[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); |     g_MouseCursors[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW); |     g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE); |     g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE); | ||||||
|  |  | ||||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||||
|     SDL_SysWMinfo wmInfo; |     SDL_SysWMinfo wmInfo; | ||||||
| @@ -274,10 +274,13 @@ bool    ImGui_ImplSdlGL2_Init(SDL_Window* window) | |||||||
|  |  | ||||||
| void ImGui_ImplSdlGL2_Shutdown() | void ImGui_ImplSdlGL2_Shutdown() | ||||||
| { | { | ||||||
|     ImGui_ImplSdlGL2_InvalidateDeviceObjects(); |     // Destroy SDL mouse cursors | ||||||
|  |  | ||||||
|     for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++) |     for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++) | ||||||
|         SDL_FreeCursor(g_SdlCursors[cursor_n]); |         SDL_FreeCursor(g_MouseCursors[cursor_n]); | ||||||
|  |     memset(g_MouseCursors, 0, sizeof(g_MouseCursors)); | ||||||
|  |  | ||||||
|  |     // Destroy OpenGL objects | ||||||
|  |     ImGui_ImplSdlGL2_InvalidateDeviceObjects(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window) | void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window) | ||||||
| @@ -326,7 +329,7 @@ void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window) | |||||||
|         io.MousePos = ImVec2((float)mx, (float)my); |         io.MousePos = ImVec2((float)mx, (float)my); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     // Hide OS mouse cursor if ImGui is drawing it |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -334,7 +337,7 @@ void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window) | |||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         SDL_SetCursor(g_SdlCursors[cursor]); |         SDL_SetCursor(g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|         SDL_ShowCursor(1); |         SDL_ShowCursor(1); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -46,7 +46,7 @@ static int          g_ShaderHandle = 0, g_VertHandle = 0, g_FragHandle = 0; | |||||||
| static int          g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; | static int          g_AttribLocationTex = 0, g_AttribLocationProjMtx = 0; | ||||||
| static int          g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0; | static int          g_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0; | ||||||
| static unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0; | static unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0; | ||||||
| static SDL_Cursor*  g_SdlCursors[ImGuiMouseCursor_Count_] = { 0 }; | static SDL_Cursor*  g_MouseCursors[ImGuiMouseCursor_Count_] = { 0 }; | ||||||
|  |  | ||||||
| // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) | // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) | ||||||
| // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so.  | // Note that this implementation is little overcomplicated because we are saving/setting up/restoring every OpenGL state explicitly, in order to be able to run within any OpenGL engine that doesn't do so.  | ||||||
| @@ -366,13 +366,13 @@ bool    ImGui_ImplSdlGL3_Init(SDL_Window* window) | |||||||
|     io.GetClipboardTextFn = ImGui_ImplSdlGL3_GetClipboardText; |     io.GetClipboardTextFn = ImGui_ImplSdlGL3_GetClipboardText; | ||||||
|     io.ClipboardUserData = NULL; |     io.ClipboardUserData = NULL; | ||||||
|  |  | ||||||
|     g_SdlCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); |     g_MouseCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM); |     g_MouseCursors[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL); |     g_MouseCursors[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS); |     g_MouseCursors[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); |     g_MouseCursors[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW); |     g_MouseCursors[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW); | ||||||
|     g_SdlCursors[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE); |     g_MouseCursors[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE); | ||||||
|  |  | ||||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||||
|     SDL_SysWMinfo wmInfo; |     SDL_SysWMinfo wmInfo; | ||||||
| @@ -388,10 +388,13 @@ bool    ImGui_ImplSdlGL3_Init(SDL_Window* window) | |||||||
|  |  | ||||||
| void ImGui_ImplSdlGL3_Shutdown() | void ImGui_ImplSdlGL3_Shutdown() | ||||||
| { | { | ||||||
|     ImGui_ImplSdlGL3_InvalidateDeviceObjects(); |     // Destroy SDL mouse cursors | ||||||
|  |  | ||||||
|     for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++) |     for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++) | ||||||
|         SDL_FreeCursor(g_SdlCursors[cursor_n]); |         SDL_FreeCursor(g_MouseCursors[cursor_n]); | ||||||
|  |     memset(g_MouseCursors, 0, sizeof(g_MouseCursors)); | ||||||
|  |  | ||||||
|  |     // Destroy OpenGL objects | ||||||
|  |     ImGui_ImplSdlGL3_InvalidateDeviceObjects(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window) | void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window) | ||||||
| @@ -440,7 +443,7 @@ void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window) | |||||||
|         io.MousePos = ImVec2((float)mx, (float)my); |         io.MousePos = ImVec2((float)mx, (float)my); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|     // Hide OS mouse cursor if ImGui is drawing it |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -448,7 +451,7 @@ void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window) | |||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         SDL_SetCursor(g_SdlCursors[cursor]); |         SDL_SetCursor(g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|         SDL_ShowCursor(1); |         SDL_ShowCursor(1); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -864,7 +864,7 @@ void ImGui_ImplGlfwVulkan_NewFrame() | |||||||
|         g_MouseJustPressed[i] = false; |         g_MouseJustPressed[i] = false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Update mouse cursor |     // Update OS/hardware mouse cursor if imgui isn't drawing a software cursor | ||||||
|     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); |     ImGuiMouseCursor cursor = ImGui::GetMouseCursor(); | ||||||
|     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) |     if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None) | ||||||
|     { |     { | ||||||
| @@ -872,8 +872,8 @@ void ImGui_ImplGlfwVulkan_NewFrame() | |||||||
|     } |     } | ||||||
|     else |     else | ||||||
|     { |     { | ||||||
|         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); |  | ||||||
|         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); |         glfwSetCursor(g_Window, g_MouseCursors[cursor] ? g_MouseCursors[cursor] : g_MouseCursors[ImGuiMouseCursor_Arrow]); | ||||||
|  |         glfwSetInputMode(g_Window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. |     // Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user