diff --git a/src/imgui_ui.cpp b/src/imgui_ui.cpp index 7c781ec7..665ade54 100644 --- a/src/imgui_ui.cpp +++ b/src/imgui_ui.cpp @@ -177,6 +177,8 @@ static std::vector menuentries; static std::mutex menuentrieslock; static std::vector> activeWindows; static std::mutex activeWindowsLock; +static std::vector> onDrawCallbacks; +static std::mutex onDrawCallbacksLock; static void convertEntries(std::vector& menuentries, size_t length, MenuEntryABI* entries) { for(size_t i = 0; i < length; i++) { @@ -280,6 +282,16 @@ void mcpelauncher_close_window(const char *title) { activeWindowsLock.unlock(); } +void mcpelauncher_add_draw_callback(void* user, void(*onDraw)(void* user)) { + onDrawCallbacksLock.lock(); + onDrawCallbacks.push_back(std::bind(onDraw, user)); + onDrawCallbacksLock.unlock(); +} + +struct ImGuiContext* mcpelauncher_get_imgui_context() { + return ImGui::GetCurrentContext(); +} + void ImGuiUIInit(GameWindow* window) { if(!glGetString) { return; @@ -928,6 +940,12 @@ void ImGuiUIDrawFrame(GameWindow* window) { activeWindowsLock.unlock(); } + onDrawCallbacksLock.lock(); + for(size_t i = 0; i < onDrawCallbacks.size(); i++) { + onDrawCallbacks[i](); + } + onDrawCallbacksLock.unlock(); + // Rendering ImGui::Render(); ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); diff --git a/src/imgui_ui.h b/src/imgui_ui.h index 58395c02..f38e6ffc 100644 --- a/src/imgui_ui.h +++ b/src/imgui_ui.h @@ -55,4 +55,8 @@ struct control }; void mcpelauncher_show_window(const char* title, int isModal, void* user, void(*onClose)(void* user), int count, control* controls); -void mcpelauncher_close_window(const char *title); \ No newline at end of file +void mcpelauncher_close_window(const char *title); + +void mcpelauncher_add_draw_callback(void* user, void(*onDraw)(void* user)); + +struct ImGuiContext* mcpelauncher_get_imgui_context(); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index ac49ac06..827a25b2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -378,6 +378,8 @@ Hardware : Qualcomm Technologies, Inc MSM8998 { "mcpelauncher_addmenu", (void*)mcpelauncher_addmenu }, { "mcpelauncher_show_window", (void*)mcpelauncher_show_window }, { "mcpelauncher_close_window", (void*)mcpelauncher_close_window }, + { "mcpelauncher_add_draw_callback", (void*)mcpelauncher_add_draw_callback }, + { "mcpelauncher_get_imgui_context", (void*)mcpelauncher_get_imgui_context }, }); ModLoader modLoader;