diff options
| author | Andre Weissflog <floooh@gmail.com> | 2025-05-24 13:30:04 +0200 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2025-05-24 13:30:04 +0200 |
| commit | 85ec51b13f72d211be3fcf5604623a539041987a (patch) | |
| tree | f415c0b7ef6c6f36e17af14f46aef2e26b963efa /util/sokol_imgui.h | |
| parent | afc74bd88eab597665f5e4f10962c73524d7cbc1 (diff) | |
| parent | fc0457c1c1e47b1fc019213d1d767c7311ab177f (diff) | |
Merge branch 'master' into issue1244/compute-ms2
Diffstat (limited to 'util/sokol_imgui.h')
| -rw-r--r-- | util/sokol_imgui.h | 95 |
1 files changed, 46 insertions, 49 deletions
diff --git a/util/sokol_imgui.h b/util/sokol_imgui.h index 894c1e9b..995bd53f 100644 --- a/util/sokol_imgui.h +++ b/util/sokol_imgui.h @@ -2328,6 +2328,36 @@ static simgui_desc_t _simgui_desc_defaults(const simgui_desc_t* desc) { return res; } +#if !defined(SOKOL_IMGUI_NO_SOKOL_APP) +static ImGuiPlatformIO* _simgui_get_platform_io(void) { + #if defined(__cplusplus) + return &ImGui::GetPlatformIO(); + #else + #if defined(CIMGUI_INCLUDED) + // 'original' cimgui + return _SIMGUI_CFUNC(GetPlatformIO_Nil)(); + #else + // dear bindings cimgui + return _SIMGUI_CFUNC(GetPlatformIO)(); + #endif + #endif +} +#endif + +static ImGuiIO* _simgui_get_io(void) { + #if defined(__cplusplus) + return &ImGui::GetIO(); + #else + #if defined(CIMGUI_INCLUDED) + // 'original' cimgui + return _SIMGUI_CFUNC(GetIO_Nil)(); + #else + // dear bindings cimgui + return _SIMGUI_CFUNC(GetIO)(); + #endif + #endif +} + // ██████ ██ ██ ██████ ██ ██ ██████ // ██ ██ ██ ██ ██ ██ ██ ██ ██ // ██████ ██ ██ ██████ ██ ██ ██ @@ -2358,14 +2388,14 @@ SOKOL_API_IMPL void simgui_setup(const simgui_desc_t* desc) { #if defined(__cplusplus) ImGui::CreateContext(); ImGui::StyleColorsDark(); - ImGuiIO* io = &ImGui::GetIO(); + ImGuiIO* io = _simgui_get_io(); if (!_simgui.desc.no_default_font) { io->Fonts->AddFontDefault(); } #else _SIMGUI_CFUNC(CreateContext)(NULL); _SIMGUI_CFUNC(StyleColorsDark)(_SIMGUI_CFUNC(GetStyle)()); - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); + ImGuiIO* io = _simgui_get_io(); if (!_simgui.desc.no_default_font) { ImFontAtlas_AddFontDefault(io->Fonts, NULL); } @@ -2377,17 +2407,7 @@ SOKOL_API_IMPL void simgui_setup(const simgui_desc_t* desc) { if (!_simgui.desc.disable_set_mouse_cursor) { io->BackendFlags |= ImGuiBackendFlags_HasMouseCursors; } - #if defined(__cplusplus) - ImGuiPlatformIO* pio = &ImGui::GetPlatformIO(); - #else - #if defined(CIMGUI_INCLUDED) - // 'original' cimgui - ImGuiPlatformIO* pio = _SIMGUI_CFUNC(GetPlatformIO_Nil)(); - #else - // dear bindings cimgui - ImGuiPlatformIO* pio = _SIMGUI_CFUNC(GetPlatformIO)(); - #endif - #endif + ImGuiPlatformIO* pio = _simgui_get_platform_io(); pio->Platform_SetClipboardTextFn = _simgui_set_clipboard; pio->Platform_GetClipboardTextFn = _simgui_get_clipboard; #endif @@ -2564,12 +2584,7 @@ SOKOL_API_IMPL void simgui_create_fonts_texture(const simgui_font_tex_desc_t* de SOKOL_ASSERT(desc); SOKOL_ASSERT(SG_INVALID_ID == _simgui.font_smp.id); SOKOL_ASSERT(SG_INVALID_ID == _simgui.font_img.id); - - #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); - #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); - #endif + ImGuiIO* io = _simgui_get_io(); // a default font sampler sg_sampler_desc font_smp_desc; @@ -2663,11 +2678,7 @@ SOKOL_API_IMPL void simgui_new_frame(const simgui_frame_desc_t* desc) { SOKOL_ASSERT(desc->width > 0); SOKOL_ASSERT(desc->height > 0); _simgui.cur_dpi_scale = _simgui_def(desc->dpi_scale, 1.0f); - #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); - #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); - #endif + ImGuiIO* io = _simgui_get_io(); if (!io->Fonts->TexReady) { simgui_destroy_fonts_texture(); simgui_font_tex_desc_t simgui_font_smp_desc; @@ -2733,14 +2744,13 @@ static ImDrawList* _simgui_imdrawlist_at(ImDrawData* draw_data, int cl_index) { SOKOL_API_IMPL void simgui_render(void) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) ImGui::Render(); ImDrawData* draw_data = ImGui::GetDrawData(); - ImGuiIO* io = &ImGui::GetIO(); #else _SIMGUI_CFUNC(Render)(); ImDrawData* draw_data = _SIMGUI_CFUNC(GetDrawData)(); - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); #endif if (0 == draw_data) { return; @@ -2883,23 +2893,21 @@ SOKOL_API_IMPL void simgui_render(void) { SOKOL_API_IMPL void simgui_add_focus_event(bool focus) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddFocusEvent(focus); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddFocusEvent(io, focus); #endif } SOKOL_API_IMPL void simgui_add_mouse_pos_event(float x, float y) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddMouseSourceEvent(ImGuiMouseSource_Mouse); io->AddMousePosEvent(x, y); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_Mouse); ImGuiIO_AddMousePosEvent(io, x, y); #endif @@ -2907,12 +2915,11 @@ SOKOL_API_IMPL void simgui_add_mouse_pos_event(float x, float y) { SOKOL_API_IMPL void simgui_add_touch_pos_event(float x, float y) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddMouseSourceEvent(ImGuiMouseSource_TouchScreen); io->AddMousePosEvent(x, y); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_TouchScreen); ImGuiIO_AddMousePosEvent(io, x, y); #endif @@ -2920,12 +2927,11 @@ SOKOL_API_IMPL void simgui_add_touch_pos_event(float x, float y) { SOKOL_API_IMPL void simgui_add_mouse_button_event(int mouse_button, bool down) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddMouseSourceEvent(ImGuiMouseSource_Mouse); io->AddMouseButtonEvent(mouse_button, down); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_Mouse); ImGuiIO_AddMouseButtonEvent(io, mouse_button, down); #endif @@ -2933,12 +2939,11 @@ SOKOL_API_IMPL void simgui_add_mouse_button_event(int mouse_button, bool down) { SOKOL_API_IMPL void simgui_add_touch_button_event(int mouse_button, bool down) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddMouseSourceEvent(ImGuiMouseSource_TouchScreen); io->AddMouseButtonEvent(mouse_button, down); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_TouchScreen); ImGuiIO_AddMouseButtonEvent(io, mouse_button, down); #endif @@ -2946,12 +2951,11 @@ SOKOL_API_IMPL void simgui_add_touch_button_event(int mouse_button, bool down) { SOKOL_API_IMPL void simgui_add_mouse_wheel_event(float wheel_x, float wheel_y) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddMouseSourceEvent(ImGuiMouseSource_Mouse); io->AddMouseWheelEvent(wheel_x, wheel_y); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddMouseSourceEvent(io, ImGuiMouseSource_Mouse); ImGuiIO_AddMouseWheelEvent(io, wheel_x, wheel_y); #endif @@ -2959,33 +2963,30 @@ SOKOL_API_IMPL void simgui_add_mouse_wheel_event(float wheel_x, float wheel_y) { SOKOL_API_IMPL void simgui_add_key_event(int imgui_key, bool down) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddKeyEvent((ImGuiKey)imgui_key, down); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddKeyEvent(io, (ImGuiKey)imgui_key, down); #endif } SOKOL_API_IMPL void simgui_add_input_character(uint32_t c) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddInputCharacter(c); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddInputCharacter(io, c); #endif } SOKOL_API_IMPL void simgui_add_input_characters_utf8(const char* c) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); + ImGuiIO* io = _simgui_get_io(); #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); io->AddInputCharactersUTF8(c); #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); ImGuiIO_AddInputCharactersUTF8(io, c); #endif } @@ -3147,11 +3148,7 @@ SOKOL_API_IMPL int simgui_map_keycode(sapp_keycode keycode) { SOKOL_API_IMPL bool simgui_handle_event(const sapp_event* ev) { SOKOL_ASSERT(_SIMGUI_INIT_COOKIE == _simgui.init_cookie); const float dpi_scale = _simgui.cur_dpi_scale; - #if defined(__cplusplus) - ImGuiIO* io = &ImGui::GetIO(); - #else - ImGuiIO* io = _SIMGUI_CFUNC(GetIO)(); - #endif + ImGuiIO* io = _simgui_get_io(); switch (ev->type) { case SAPP_EVENTTYPE_FOCUSED: simgui_add_focus_event(true); |