Browse Source

Use SDL system cursors in SDL examples. (#1626)

(Squashed 4 commits)
pull/1628/head
Oliver Faircliff 7 years ago
committed by omar
parent
commit
ffb6e89f30
  1. 21
      examples/sdl_opengl2_example/imgui_impl_sdl_gl2.cpp
  2. 21
      examples/sdl_opengl3_example/imgui_impl_sdl_gl3.cpp

21
examples/sdl_opengl2_example/imgui_impl_sdl_gl2.cpp

@ -43,6 +43,7 @@
static Uint64 g_Time = 0;
static bool g_MousePressed[3] = { false, false, false };
static GLuint g_FontTexture = 0;
static SDL_Cursor *g_SdlCursorMap[ImGuiMouseCursor_Count_];
// 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)
@ -250,6 +251,14 @@ bool ImGui_ImplSdlGL2_Init(SDL_Window* window)
io.GetClipboardTextFn = ImGui_ImplSdlGL2_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_Move] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
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);
#ifdef _WIN32
SDL_SysWMinfo wmInfo;
SDL_VERSION(&wmInfo.version);
@ -265,6 +274,9 @@ bool ImGui_ImplSdlGL2_Init(SDL_Window* window)
void ImGui_ImplSdlGL2_Shutdown()
{
ImGui_ImplSdlGL2_InvalidateDeviceObjects();
for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++)
SDL_FreeCursor(g_SdlCursorMap[cursor_n]);
}
void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window)
@ -314,7 +326,14 @@ void ImGui_ImplSdlGL2_NewFrame(SDL_Window *window)
#endif
// Hide OS mouse cursor if ImGui is drawing it
SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1);
if (io.MouseDrawCursor)
SDL_ShowCursor(0);
else
{
SDL_Cursor *cursor = g_SdlCursorMap[ImGui::GetMouseCursor()];
SDL_SetCursor(cursor);
SDL_ShowCursor(1);
}
// 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.
ImGui::NewFrame();

21
examples/sdl_opengl3_example/imgui_impl_sdl_gl3.cpp

@ -45,6 +45,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_];
// 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.
@ -364,6 +365,14 @@ 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_Move] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
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);
#ifdef _WIN32
SDL_SysWMinfo wmInfo;
SDL_VERSION(&wmInfo.version);
@ -379,6 +388,9 @@ bool ImGui_ImplSdlGL3_Init(SDL_Window* window)
void ImGui_ImplSdlGL3_Shutdown()
{
ImGui_ImplSdlGL3_InvalidateDeviceObjects();
for (ImGuiMouseCursor cursor_n = 0; cursor_n < ImGuiMouseCursor_Count_; cursor_n++)
SDL_FreeCursor(g_SdlCursorMap[cursor_n]);
}
void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window)
@ -428,7 +440,14 @@ void ImGui_ImplSdlGL3_NewFrame(SDL_Window* window)
#endif
// Hide OS mouse cursor if ImGui is drawing it
SDL_ShowCursor(io.MouseDrawCursor ? 0 : 1);
if (io.MouseDrawCursor)
SDL_ShowCursor(0);
else
{
SDL_Cursor *cursor = g_SdlCursorMap[ImGui::GetMouseCursor()];
SDL_SetCursor(cursor);
SDL_ShowCursor(1);
}
// 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.
ImGui::NewFrame();

Loading…
Cancel
Save