|
@@ -12,6 +12,7 @@
|
|
|
|
|
|
// CHANGELOG
|
|
|
// (minor and older changes stripped away, please see git history for details)
|
|
|
+// 2018-02-16: Inputs: Added support for mouse cursors, honoring ImGui::GetMouseCursor() value.
|
|
|
// 2018-02-16: Misc: Obsoleted the io.RenderDrawListsFn callback and exposed ImGui_ImplSdlGL3_RenderDrawData() in the .h file so you can call it yourself.
|
|
|
// 2018-02-06: Misc: Removed call to ImGui::Shutdown() which is not available from 1.60 WIP, user needs to call CreateContext/DestroyContext themselves.
|
|
|
// 2018-02-06: Inputs: Added mapping for ImGuiKey_Space.
|
|
@@ -45,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_AttribLocationPosition = 0, g_AttribLocationUV = 0, g_AttribLocationColor = 0;
|
|
|
static unsigned int g_VboHandle = 0, g_VaoHandle = 0, g_ElementsHandle = 0;
|
|
|
-static SDL_Cursor *g_SdlCursorMap[ImGuiMouseCursor_Count_];
|
|
|
+static SDL_Cursor* g_SdlCursors[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)
|
|
|
// 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.
|
|
@@ -365,13 +366,13 @@ bool ImGui_ImplSdlGL3_Init(SDL_Window* window)
|
|
|
io.GetClipboardTextFn = ImGui_ImplSdlGL3_GetClipboardText;
|
|
|
io.ClipboardUserData = NULL;
|
|
|
|
|
|
- g_SdlCursorMap[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
|
|
- g_SdlCursorMap[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
|
|
|
- g_SdlCursorMap[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
|
|
|
- g_SdlCursorMap[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS);
|
|
|
- g_SdlCursorMap[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE);
|
|
|
- g_SdlCursorMap[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW);
|
|
|
- g_SdlCursorMap[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE);
|
|
|
+ g_SdlCursors[ImGuiMouseCursor_Arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
|
|
+ g_SdlCursors[ImGuiMouseCursor_TextInput] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
|
|
|
+ g_SdlCursors[ImGuiMouseCursor_ResizeAll] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
|
|
|
+ g_SdlCursors[ImGuiMouseCursor_ResizeNS] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS);
|
|
|
+ g_SdlCursors[ImGuiMouseCursor_ResizeEW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE);
|
|
|
+ g_SdlCursors[ImGuiMouseCursor_ResizeNESW] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW);
|
|
|
+ g_SdlCursors[ImGuiMouseCursor_ResizeNWSE] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE);
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
SDL_SysWMinfo wmInfo;
|
|
@@ -390,7 +391,7 @@ void ImGui_ImplSdlGL3_Shutdown()
|
|
|
ImGui_ImplSdlGL3_InvalidateDeviceObjects();
|
|
|
|
|
|
for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++)
|
|
|
- SDL_FreeCursor(g_SdlCursorMap[cursor_n]);
|
|
|
+ SDL_FreeCursor(g_SdlCursors[cursor_n]);
|
|
|
}
|
|
|
|
|
|
void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window)
|
|
@@ -440,12 +441,14 @@ void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window)
|
|
|
#endif
|
|
|
|
|
|
// Hide OS mouse cursor if ImGui is drawing it
|
|
|
- if (io.MouseDrawCursor)
|
|
|
+ ImGuiMouseCursor cursor = ImGui::GetMouseCursor();
|
|
|
+ if (io.MouseDrawCursor || cursor == ImGuiMouseCursor_None)
|
|
|
+ {
|
|
|
SDL_ShowCursor(0);
|
|
|
+ }
|
|
|
else
|
|
|
{
|
|
|
- SDL_Cursor *cursor = g_SdlCursorMap[ImGui::GetMouseCursor()];
|
|
|
- SDL_SetCursor(cursor);
|
|
|
+ SDL_SetCursor(g_SdlCursors[cursor]);
|
|
|
SDL_ShowCursor(1);
|
|
|
}
|
|
|
|