From d9f2df361d13b6b880cc26ed8ba1ddcd2115993c Mon Sep 17 00:00:00 2001 From: Geoffrey McRae Date: Wed, 5 Mar 2025 15:16:31 +1100 Subject: [PATCH] [client] cimgui: update to 1.91.8 --- client/CMakeLists.txt | 2 + client/src/app.c | 13 ++-- client/src/core.c | 6 +- client/src/kb.c | 120 ++++++++++++++++++++++++++++-------- client/src/kb.h | 3 +- client/src/main.c | 2 - client/src/overlay/graphs.c | 2 +- client/src/overlay/splash.c | 2 +- client/src/overlay/status.c | 2 +- repos/cimgui | 2 +- 10 files changed, 115 insertions(+), 39 deletions(-) diff --git a/client/CMakeLists.txt b/client/CMakeLists.txt index a5c20921..42805fbc 100644 --- a/client/CMakeLists.txt +++ b/client/CMakeLists.txt @@ -137,6 +137,8 @@ set(SOURCES # Force cimgui to build as a static library. set(IMGUI_STATIC "yes" CACHE STRING "Build as a static library") +add_definitions("-DCIMGUI_USE_OPENGL2=1") +add_definitions("-DCIMGUI_USE_OPENGL3=1") add_subdirectory("${PROJECT_TOP}/resources" "${CMAKE_BINARY_DIR}/resources") add_subdirectory("${PROJECT_TOP}/common" "${CMAKE_BINARY_DIR}/common" ) diff --git a/client/src/app.c b/client/src/app.c index 4010daff..9dd47afe 100644 --- a/client/src/app.c +++ b/client/src/app.c @@ -346,8 +346,8 @@ void app_handleKeyPress(int sc, int charcode) app_setOverlay(false); else { - if (sc < sizeof(g_state.io->KeysDown)) - g_state.io->KeysDown[sc] = true; + if (linux_to_imgui[sc]) + ImGuiIO_AddKeyEvent(g_state.io, linux_to_imgui[sc], true); } return; } @@ -365,7 +365,10 @@ void app_handleKeyPress(int sc, int charcode) return; if (purespice_keyDown(ps2)) - g_state.keyDown[sc] = true; + { + if (linux_to_imgui[sc]) + ImGuiIO_AddKeyEvent(g_state.io, linux_to_imgui[sc], true); + } else { DEBUG_ERROR("app_handleKeyPress: failed to send message"); @@ -391,8 +394,8 @@ void app_handleKeyRelease(int sc, int charcode) if (app_isOverlayMode()) { - if (sc < sizeof(g_state.io->KeysDown)) - g_state.io->KeysDown[sc] = false; + if (linux_to_imgui[sc]) + ImGuiIO_AddKeyEvent(g_state.io, linux_to_imgui[sc], false); return; } diff --git a/client/src/core.c b/client/src/core.c index 9c311665..3319f4ff 100644 --- a/client/src/core.c +++ b/client/src/core.c @@ -22,6 +22,7 @@ #include "main.h" #include "app.h" #include "util.h" +#include "kb.h" #include "common/time.h" #include "common/debug.h" @@ -662,8 +663,9 @@ void core_resetOverlayInputState(void) g_state.io->MouseDown[ImGuiMouseButton_Left ] = false; g_state.io->MouseDown[ImGuiMouseButton_Right ] = false; g_state.io->MouseDown[ImGuiMouseButton_Middle] = false; - for(int key = 0; key < ARRAY_LENGTH(g_state.io->KeysDown); key++) - g_state.io->KeysDown[key] = false; + for(int key = ImGuiKey_NamedKey_BEGIN; key < ImGuiKey_NamedKey_END; key++) + if (linux_to_imgui[key]) + ImGuiIO_AddKeyEvent(g_state.io, linux_to_imgui[key], false); } void core_updateOverlayState(void) diff --git a/client/src/kb.c b/client/src/kb.c index c7f6d118..28fcf1ca 100644 --- a/client/src/kb.c +++ b/client/src/kb.c @@ -411,28 +411,100 @@ const char * linux_to_display[KEY_MAX] = [KEY_STOPCD] = "StopMedia", }; -void initImGuiKeyMap(int * keymap) +const int linux_to_imgui[KEY_MAX] = { - keymap[ImGuiKey_Tab ] = KEY_TAB; - keymap[ImGuiKey_LeftArrow ] = KEY_LEFT; - keymap[ImGuiKey_RightArrow ] = KEY_RIGHT; - keymap[ImGuiKey_UpArrow ] = KEY_UP; - keymap[ImGuiKey_DownArrow ] = KEY_DOWN; - keymap[ImGuiKey_PageUp ] = KEY_PAGEUP; - keymap[ImGuiKey_PageDown ] = KEY_PAGEDOWN; - keymap[ImGuiKey_Home ] = KEY_HOME; - keymap[ImGuiKey_End ] = KEY_END; - keymap[ImGuiKey_Insert ] = KEY_INSERT; - keymap[ImGuiKey_Delete ] = KEY_DELETE; - keymap[ImGuiKey_Backspace ] = KEY_BACKSPACE; - keymap[ImGuiKey_Space ] = KEY_SPACE; - keymap[ImGuiKey_Enter ] = KEY_ENTER; - keymap[ImGuiKey_Escape ] = KEY_SPACE; - keymap[ImGuiKey_KeypadEnter] = KEY_KPENTER; - keymap[ImGuiKey_A ] = KEY_A; - keymap[ImGuiKey_C ] = KEY_C; - keymap[ImGuiKey_V ] = KEY_V; - keymap[ImGuiKey_X ] = KEY_X; - keymap[ImGuiKey_Y ] = KEY_Y; - keymap[ImGuiKey_Z ] = KEY_Z; -} + [KEY_TAB ] = ImGuiKey_Tab, + [KEY_LEFT ] = ImGuiKey_LeftArrow, + [KEY_RIGHT ] = ImGuiKey_RightArrow, + [KEY_UP ] = ImGuiKey_UpArrow, + [KEY_DOWN ] = ImGuiKey_DownArrow, + [KEY_PAGEUP ] = ImGuiKey_PageUp, + [KEY_PAGEDOWN ] = ImGuiKey_PageDown, + [KEY_HOME ] = ImGuiKey_Home, + [KEY_END ] = ImGuiKey_End, + [KEY_INSERT ] = ImGuiKey_Insert, + [KEY_DELETE ] = ImGuiKey_Delete, + [KEY_BACKSPACE ] = ImGuiKey_Backspace, + [KEY_SPACE ] = ImGuiKey_Space, + [KEY_ENTER ] = ImGuiKey_Enter, + [KEY_0 ] = ImGuiKey_0, + [KEY_1 ] = ImGuiKey_1, + [KEY_2 ] = ImGuiKey_2, + [KEY_3 ] = ImGuiKey_3, + [KEY_4 ] = ImGuiKey_4, + [KEY_5 ] = ImGuiKey_5, + [KEY_6 ] = ImGuiKey_6, + [KEY_7 ] = ImGuiKey_7, + [KEY_8 ] = ImGuiKey_8, + [KEY_9 ] = ImGuiKey_9, + [KEY_A ] = ImGuiKey_A, + [KEY_B ] = ImGuiKey_B, + [KEY_C ] = ImGuiKey_C, + [KEY_D ] = ImGuiKey_D, + [KEY_E ] = ImGuiKey_E, + [KEY_F ] = ImGuiKey_F, + [KEY_G ] = ImGuiKey_G, + [KEY_H ] = ImGuiKey_H, + [KEY_I ] = ImGuiKey_I, + [KEY_J ] = ImGuiKey_J, + [KEY_K ] = ImGuiKey_K, + [KEY_L ] = ImGuiKey_L, + [KEY_M ] = ImGuiKey_M, + [KEY_N ] = ImGuiKey_N, + [KEY_O ] = ImGuiKey_O, + [KEY_P ] = ImGuiKey_P, + [KEY_Q ] = ImGuiKey_Q, + [KEY_R ] = ImGuiKey_R, + [KEY_S ] = ImGuiKey_S, + [KEY_T ] = ImGuiKey_T, + [KEY_U ] = ImGuiKey_U, + [KEY_V ] = ImGuiKey_V, + [KEY_W ] = ImGuiKey_W, + [KEY_X ] = ImGuiKey_X, + [KEY_Y ] = ImGuiKey_Y, + [KEY_Z ] = ImGuiKey_Z, + [KEY_F1 ] = ImGuiKey_F1, + [KEY_F2 ] = ImGuiKey_F2, + [KEY_F3 ] = ImGuiKey_F3, + [KEY_F4 ] = ImGuiKey_F4, + [KEY_F5 ] = ImGuiKey_F5, + [KEY_F6 ] = ImGuiKey_F6, + [KEY_F7 ] = ImGuiKey_F7, + [KEY_F8 ] = ImGuiKey_F8, + [KEY_F9 ] = ImGuiKey_F9, + [KEY_F10 ] = ImGuiKey_F10, + [KEY_F11 ] = ImGuiKey_F11, + [KEY_F12 ] = ImGuiKey_F12, + [KEY_APOSTROPHE] = ImGuiKey_Apostrophe, + [KEY_COMMA ] = ImGuiKey_Comma, + [KEY_MINUS ] = ImGuiKey_Minus, + [KEY_DOT ] = ImGuiKey_Period, + [KEY_SLASH ] = ImGuiKey_Slash, + [KEY_SEMICOLON ] = ImGuiKey_Semicolon, + [KEY_EQUAL ] = ImGuiKey_Equal, + [KEY_LEFTBRACE ] = ImGuiKey_LeftBracket, + [KEY_RIGHTBRACE] = ImGuiKey_RightBracket, + [KEY_GRAVE ] = ImGuiKey_GraveAccent, + [KEY_CAPSLOCK ] = ImGuiKey_CapsLock, + [KEY_SCROLLLOCK] = ImGuiKey_ScrollLock, + [KEY_NUMLOCK ] = ImGuiKey_NumLock, + [KEY_PRINT ] = ImGuiKey_PrintScreen, + [KEY_PAUSE ] = ImGuiKey_Pause, + [KEY_KP0 ] = ImGuiKey_Keypad0, + [KEY_KP1 ] = ImGuiKey_Keypad1, + [KEY_KP2 ] = ImGuiKey_Keypad2, + [KEY_KP3 ] = ImGuiKey_Keypad3, + [KEY_KP4 ] = ImGuiKey_Keypad4, + [KEY_KP5 ] = ImGuiKey_Keypad5, + [KEY_KP6 ] = ImGuiKey_Keypad6, + [KEY_KP7 ] = ImGuiKey_Keypad7, + [KEY_KP8 ] = ImGuiKey_Keypad8, + [KEY_KP9 ] = ImGuiKey_Keypad9, + [KEY_KPDOT ] = ImGuiKey_KeypadDecimal, + [KEY_KPSLASH ] = ImGuiKey_KeypadDivide, + [KEY_KPASTERISK] = ImGuiKey_KeypadMultiply, + [KEY_KPMINUS ] = ImGuiKey_KeypadSubtract, + [KEY_KPPLUS ] = ImGuiKey_KeypadAdd, + [KEY_KPENTER ] = ImGuiKey_KeypadEnter, + [KEY_KPEQUAL ] = ImGuiKey_KeypadEqual +}; diff --git a/client/src/kb.h b/client/src/kb.h index 6c0d4f9e..c1276edd 100644 --- a/client/src/kb.h +++ b/client/src/kb.h @@ -31,7 +31,6 @@ extern const uint32_t linux_to_ps2[KEY_MAX]; extern const char * linux_to_str[KEY_MAX]; extern const char * linux_to_display[KEY_MAX]; - -void initImGuiKeyMap(int * keymap); +extern const int linux_to_imgui[KEY_MAX]; #endif diff --git a/client/src/main.c b/client/src/main.c index 9863ac8a..14c4623b 100644 --- a/client/src/main.c +++ b/client/src/main.c @@ -1204,8 +1204,6 @@ static int lg_run(void) overlayGraph_register("UPLOAD", g_state.uploadTimings , 0.0f, 50.0f, NULL); overlayGraph_register("RENDER", g_state.renderDuration, 0.0f, 10.0f, NULL); - initImGuiKeyMap(g_state.io->KeyMap); - // unknown guest OS at this time g_state.guestOS = KVMFR_OS_OTHER; diff --git a/client/src/overlay/graphs.c b/client/src/overlay/graphs.c index 2e538492..b61f2c98 100644 --- a/client/src/overlay/graphs.c +++ b/client/src/overlay/graphs.c @@ -198,7 +198,7 @@ static int graphs_render(void * udata, bool interactive, } igPlotLines_FloatPtr( - "", + "##", (float *)ringbuffer_getValues(graph->buffer), ringbuffer_getLength(graph->buffer), ringbuffer_getStart (graph->buffer), diff --git a/client/src/overlay/splash.c b/client/src/overlay/splash.c index bf19beac..48c28e74 100644 --- a/client/src/overlay/splash.c +++ b/client/src/overlay/splash.c @@ -195,7 +195,7 @@ static int splash_render(void * udata, bool interactive, struct Rect * windowRec ImDrawList_AddImage( list, - l_logo.tex, + (ImTextureID)l_logo.tex, (ImVec2){ logoRect.x, logoRect.y diff --git a/client/src/overlay/status.c b/client/src/overlay/status.c index 1e6732af..486cb21f 100644 --- a/client/src/overlay/status.c +++ b/client/src/overlay/status.c @@ -104,7 +104,7 @@ static int status_render(void * udata, bool interactive, struct Rect * windowRec ImDrawList_AddImage( igGetBackgroundDrawList_Nil(), - img->tex, + (ImTextureID)img->tex, (ImVec2){ xPos, marginY diff --git a/repos/cimgui b/repos/cimgui index 261250f8..d6b4ecda 160000 --- a/repos/cimgui +++ b/repos/cimgui @@ -1 +1 @@ -Subproject commit 261250f88f374e751b2de1501ba5c0c11e420b5a +Subproject commit d6b4ecda718352bb4adcd30ec25784fd16538b73