From 95fa0c626e4be69d5a3f80fba2a65b8815b4c9eb Mon Sep 17 00:00:00 2001 From: MysterD Date: Tue, 3 Aug 2021 00:12:16 -0700 Subject: [PATCH] Show normal mouse cursor when DJUI panels are closed --- src/pc/djui/djui_cursor.c | 8 ++++++++ src/pc/gfx/gfx_dxgi.cpp | 7 ++++++- src/pc/gfx/gfx_sdl1.c | 17 +++++++++++++++-- src/pc/gfx/gfx_sdl2.c | 6 +++++- src/pc/gfx/gfx_window_manager_api.h | 1 + 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/pc/djui/djui_cursor.c b/src/pc/djui/djui_cursor.c index cc7d2ca29..3465414a9 100644 --- a/src/pc/djui/djui_cursor.c +++ b/src/pc/djui/djui_cursor.c @@ -1,6 +1,8 @@ #include "djui.h" #include "pc/controller/controller_mouse.h" #include "pc/controller/controller_sdl.h" +#include "pc/gfx/gfx_window_manager_api.h" +#include "pc/pc_main.h" extern ALIGNED8 u8 gd_texture_hand_open[]; extern ALIGNED8 u8 gd_texture_hand_closed[]; @@ -19,6 +21,12 @@ void djui_cursor_set_visible(bool visible) { if (sMouseCursor) { djui_base_set_visible(&sMouseCursor->base, visible); } + + if (configWindow.fullscreen) { + wm_api->set_cursor_visible(false); + } else { + wm_api->set_cursor_visible(!visible); + } sSavedMouseX = mouse_window_x; sSavedMouseY = mouse_window_y; } diff --git a/src/pc/gfx/gfx_dxgi.cpp b/src/pc/gfx/gfx_dxgi.cpp index fec6f3a7e..5bdb73401 100644 --- a/src/pc/gfx/gfx_dxgi.cpp +++ b/src/pc/gfx/gfx_dxgi.cpp @@ -353,7 +353,9 @@ static void gfx_dxgi_init(const char *window_title) { ShowWindow(dxgi.h_wnd, SW_SHOW); UpdateWindow(dxgi.h_wnd); - ShowCursor(FALSE); + if (configWindow.fullscreen) { + ShowCursor(FALSE); + } update_screen_settings(); } @@ -648,6 +650,8 @@ void gfx_dxgi_set_clipboard_text(char* text) { } } +void gfx_dxgi_set_cursor_visible(bool visible) { ShowCursor(visible); } + void ThrowIfFailed(HRESULT res) { if (FAILED(res)) { fprintf(stderr, "Error: 0x%08X\n", res); @@ -680,6 +684,7 @@ struct GfxWindowManagerAPI gfx_dxgi = { gfx_dxgi_stop_text_input, gfx_dxgi_get_clipboard_text, gfx_dxgi_set_clipboard_text, + gfx_dxgi_set_cursor_visible, }; #endif diff --git a/src/pc/gfx/gfx_sdl1.c b/src/pc/gfx/gfx_sdl1.c index e8c6fa4e9..d4dbded5a 100644 --- a/src/pc/gfx/gfx_sdl1.c +++ b/src/pc/gfx/gfx_sdl1.c @@ -156,7 +156,9 @@ static void gfx_sdl_init(const char *window_title) { gfx_sdl_set_mode(); - SDL_ShowCursor(0); + if (configWindow.fullscreen) { + SDL_ShowCursor(0); + } for (size_t i = 0; i < sizeof(windows_scancode_table) / sizeof(SDLKey); i++) { inverted_scancode_table[windows_scancode_table[i]] = i; @@ -264,6 +266,12 @@ static void gfx_sdl_shutdown(void) { SDL_Quit(); } +static void gfx_sdl_start_text_input(void) { SDL_StartTextInput(); } +static void gfx_sdl_stop_text_input(void) { SDL_StopTextInput(); } +static char* gfx_sdl_get_clipboard_text(void) { return SDL_GetClipboardText(); } +static void gfx_sdl_set_clipboard_text(char* text) { SDL_SetClipboardText(text); } +static void gfx_sdl_set_cursor_visible(bool visible) { SDL_ShowCursor(visible ? SDL_ENABLE : SDL_DISABLE); } + struct GfxWindowManagerAPI gfx_sdl = { gfx_sdl_init, gfx_sdl_set_keyboard_callbacks, @@ -274,7 +282,12 @@ struct GfxWindowManagerAPI gfx_sdl = { gfx_sdl_swap_buffers_begin, gfx_sdl_swap_buffers_end, gfx_sdl_get_time, - gfx_sdl_shutdown + gfx_sdl_shutdown, + gfx_sdl_start_text_input, + gfx_sdl_stop_text_input, + gfx_sdl_get_clipboard_text, + gfx_sdl_set_clipboard_text, + gfx_sdl_set_cursor_visible, }; #endif // BACKEND_WM diff --git a/src/pc/gfx/gfx_sdl2.c b/src/pc/gfx/gfx_sdl2.c index 375526161..7208bb2d1 100644 --- a/src/pc/gfx/gfx_sdl2.c +++ b/src/pc/gfx/gfx_sdl2.c @@ -226,7 +226,9 @@ static void gfx_sdl_init(const char *window_title) { gfx_sdl_set_vsync(configWindow.vsync); gfx_sdl_set_fullscreen(); - SDL_ShowCursor(SDL_DISABLE); + if (configWindow.fullscreen) { + SDL_ShowCursor(SDL_DISABLE); + } for (size_t i = 0; i < sizeof(windows_scancode_table) / sizeof(SDL_Scancode); i++) { inverted_scancode_table[windows_scancode_table[i]] = i; @@ -370,6 +372,7 @@ static void gfx_sdl_start_text_input(void) { SDL_StartTextInput(); } static void gfx_sdl_stop_text_input(void) { SDL_StopTextInput(); } static char* gfx_sdl_get_clipboard_text(void) { return SDL_GetClipboardText(); } static void gfx_sdl_set_clipboard_text(char* text) { SDL_SetClipboardText(text); } +static void gfx_sdl_set_cursor_visible(bool visible) { SDL_ShowCursor(visible ? SDL_ENABLE : SDL_DISABLE); } struct GfxWindowManagerAPI gfx_sdl = { gfx_sdl_init, @@ -386,6 +389,7 @@ struct GfxWindowManagerAPI gfx_sdl = { gfx_sdl_stop_text_input, gfx_sdl_get_clipboard_text, gfx_sdl_set_clipboard_text, + gfx_sdl_set_cursor_visible, }; #endif // BACKEND_WM diff --git a/src/pc/gfx/gfx_window_manager_api.h b/src/pc/gfx/gfx_window_manager_api.h index 5439373be..dff33f33e 100644 --- a/src/pc/gfx/gfx_window_manager_api.h +++ b/src/pc/gfx/gfx_window_manager_api.h @@ -24,6 +24,7 @@ struct GfxWindowManagerAPI { void (*stop_text_input)(void); char* (*get_clipboard_text)(void); void (*set_clipboard_text)(char*); + void (*set_cursor_visible)(bool); }; #endif