diff --git a/README.md b/README.md index 48b1999..5e69fd6 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ History: Initially cimgui was developed by Stephan Dilly as hand-written code but lately turned into an auto-generated version by sonoro1234 in order to keep up with imgui more easily (letting the user select the desired branch and commit) Notes: -* currently this wrapper is based on version [1.92.4 of Dear ImGui with internal api] +* currently this wrapper is based on version [1.92.7 of Dear ImGui with internal api] * only functions, structs and enums from imgui.h (an optionally imgui_internal.h) are wrapped. * if you are interested in imgui backends you should look [LuaJIT-ImGui](https://github.com/sonoro1234/LuaJIT-ImGui) project. * All naming is algorithmic except for those names that were coded in cimgui_overloads table (https://github.com/cimgui/cimgui/blob/master/generator/generator.lua#L60). In the official version this table is empty. diff --git a/backend_test/example_sdl_renderer3/CMakeLists.txt b/backend_test/example_sdl_renderer3/CMakeLists.txt new file mode 100644 index 0000000..f1e83e1 --- /dev/null +++ b/backend_test/example_sdl_renderer3/CMakeLists.txt @@ -0,0 +1,36 @@ +cmake_minimum_required(VERSION 3.30) +project(cimgui_sdlrenderer3 LANGUAGES C CXX) + +set(CMAKE_C_STANDARD 11) + +include(FetchContent) + +FetchContent_Declare( + sdl3 + GIT_REPOSITORY https://github.com/libsdl-org/SDL.git + GIT_TAG release-3.4.0 + #GIT_SHALLOW TRUE + GIT_PROGRESS TRUE +) + +set(SDL_TEST_LIBRARY OFF CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(sdl3) + +include(../cmake/GenerateCimguiBindings.cmake) + +set(inclulist ${sdl3_SOURCE_DIR}/include) +GenerateCimguiBindings(cimgui_with_backend sdl3 sdlrenderer3 inclulist) +target_link_libraries(cimgui_with_backend PRIVATE SDL3::SDL3) + +add_executable(${PROJECT_NAME} + main.c +) + +target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3 cimgui_with_backend) +target_compile_definitions( + ${PROJECT_NAME} + PRIVATE + CIMGUI_DEFINE_ENUMS_AND_STRUCTS=1 + CIMGUI_USE_SDL3=1 + CIMGUI_USE_SDLRENDERER3=1 +) diff --git a/backend_test/example_sdl_renderer3/README.md b/backend_test/example_sdl_renderer3/README.md new file mode 100644 index 0000000..17e1567 --- /dev/null +++ b/backend_test/example_sdl_renderer3/README.md @@ -0,0 +1,16 @@ +# SDLRenderer3 + +This example takes from `example_sdlgpu3`. We need to generate bindings for SDLRenderer3 backend because they are not native to `cimgui`. Then you can add the compiled library for linking in your application. + +For the generation phase from cmake you need LuaJIT to be present. + +## Building + +From the build directory of your choice: + +`cmake path_to_example_sdlgpu3` + +Then simply run: + +`make` + diff --git a/backend_test/example_sdl_renderer3/main.c b/backend_test/example_sdl_renderer3/main.c new file mode 100644 index 0000000..4d7fcf1 --- /dev/null +++ b/backend_test/example_sdl_renderer3/main.c @@ -0,0 +1,158 @@ +#include +#include +#include +#include + +#include + +#include +#include + +#define igGetIO igGetIO_Nil + +int main() { + // Setup SDL library + if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMEPAD)) { + fprintf(stderr, "Failed to init video! %s", SDL_GetError()); + return 1; + }; + + // Setup window and renderer + float main_scale = SDL_GetDisplayContentScale(SDL_GetPrimaryDisplay()); + SDL_WindowFlags window_flags = SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIDDEN | SDL_WINDOW_HIGH_PIXEL_DENSITY; + SDL_Window* window = NULL; + SDL_Renderer* renderer = NULL; + if (!SDL_CreateWindowAndRenderer("Dear ImGui SDL3 Renderer example", (int)(1280 * main_scale), (int)(720 * main_scale), window_flags, &window, &renderer)) + { + printf("Error: SDL_CreateWindow(): %s\n", SDL_GetError()); + return -1; + } + SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + SDL_ShowWindow(window); + + // Setup Dear ImGui context + igCreateContext(NULL); + ImGuiIO* io = igGetIO(); (void)io; + io->ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; + io->ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; + + // Setup Dear ImGui style + igStyleColorsDark(NULL); + //igStyleColorsLight(NULL); + + // Setup scaling + ImGuiStyle* style = igGetStyle(); + ImGuiStyle_ScaleAllSizes(style, main_scale); + style->FontScaleDpi = main_scale; // Set initial font scale. (using io.ConfigDpiScaleFonts=true makes this unnecessary. We leave both here for documentation purpose) + io->ConfigDpiScaleFonts = true; // [Experimental] Automatically overwrite style.FontScaleDpi in Begin() when Monitor DPI changes. This will scale fonts but _NOT_ scale sizes/padding for now. + io->ConfigDpiScaleViewports = true; // [Experimental] Scale Dear ImGui and Platform Windows when Monitor DPI changes. + + // Setup Platform/Renderer backends + ImGui_ImplSDL3_InitForSDLRenderer(window, renderer); + ImGui_ImplSDLRenderer3_Init(renderer); + + // Our state + bool show_demo_window = true; + bool show_another_window = false; + ImVec4 clear_color; + clear_color.x = 0.45f; + clear_color.y = 0.55f; + clear_color.z = 0.60f; + clear_color.w = 1.00f; + + // Main loop + bool done = false; + while (!done) + { + // Poll and handle events (inputs, window resize, etc.) + // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. + // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data. + // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data. + // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. + // [If using SDL_MAIN_USE_CALLBACKS: call ImGui_ImplSDL3_ProcessEvent() from your SDL_AppEvent() function] + SDL_Event event; + while (SDL_PollEvent(&event)) + { + ImGui_ImplSDL3_ProcessEvent(&event); + if (event.type == SDL_EVENT_QUIT) + done = true; + if (event.type == SDL_EVENT_WINDOW_CLOSE_REQUESTED && event.window.windowID == SDL_GetWindowID(window)) + done = true; + } + + // [If using SDL_MAIN_USE_CALLBACKS: all code below would likely be your SDL_AppIterate() function] + if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) + { + SDL_Delay(10); + continue; + } + + // Setup Dear ImGui frame + SDL_SetRenderDrawColorFloat(renderer, clear_color.x, clear_color.y, clear_color.z, clear_color.w); + SDL_RenderClear(renderer); + ImGui_ImplSDLRenderer3_NewFrame(); + ImGui_ImplSDL3_NewFrame(); + igNewFrame(); + + // 1. Show the big demo window (Most of the sample code is in igShowDemoWindow()! You can browse its code to learn more about Dear ImGui!). + if (show_demo_window) + igShowDemoWindow(&show_demo_window); + + // 2. Show a simple window that we create ourselves. We use a Begin/End pair to create a named window. + { + static float f = 0.0f; + static int counter = 0; + + igBegin("Hello, world!", NULL, 0); // Create a window called "Hello, world!" and append into it. + + igText("This is some useful text."); // Display some text (you can use a format strings too) + igCheckbox("Demo Window", &show_demo_window); // Edit bools storing our window open/close state + igCheckbox("Another Window", &show_another_window); + + igSliderFloat("float", &f, 0.0f, 1.0f, "%.3f", 0); // Edit 1 float using a slider from 0.0f to 1.0f + igColorEdit4("clear color", (float*)&clear_color, 0); // Edit 3 floats representing a color + + ImVec2 buttonSize; + buttonSize.x = 0; + buttonSize.y = 0; + if (igButton("Button", buttonSize)) // Buttons return true when clicked (most widgets return true when edited/activated) + counter++; + igSameLine(0.0f, -1.0f); + igText("counter = %d", counter); + + igText("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io->Framerate, io->Framerate); + igEnd(); + } + + // 3. Show another simple window. + if (show_another_window) + { + igBegin("Another Window", &show_another_window, 0); // Pass a pointer to our bool variable (the window will have a closing button that will clear the bool when clicked) + igText("Hello from another window!"); + ImVec2 buttonSize; + buttonSize.x = 0; buttonSize.y = 0; + if (igButton("Close Me", buttonSize)) + show_another_window = false; + igEnd(); + } + + // Rendering + igRender(); + ImDrawData* draw_data = igGetDrawData(); + const bool is_minimized = (draw_data->DisplaySize.x <= 0.0f || draw_data->DisplaySize.y <= 0.0f); + ImGui_ImplSDLRenderer3_RenderDrawData(draw_data, renderer); + SDL_RenderPresent(renderer); + } + + // Cleanup + // [If using SDL_MAIN_USE_CALLBACKS: all code below would likely be your SDL_AppQuit() function] + ImGui_ImplSDL3_Shutdown(); + ImGui_ImplSDLRenderer3_Shutdown(); + igDestroyContext(NULL); + + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + SDL_Quit(); + + return 0; +} diff --git a/cimgui.cpp b/cimgui.cpp index 59c0ff0..28f6a0a 100644 --- a/cimgui.cpp +++ b/cimgui.cpp @@ -1,5 +1,5 @@ //This file is automatically generated by generator.lua from https://github.com/cimgui/cimgui -//based on imgui.h file version "1.92.6" 19261 from Dear ImGui https://github.com/ocornut/imgui +//based on imgui.h file version "1.92.7" 19270 from Dear ImGui https://github.com/ocornut/imgui //with imgui_internal.h api //with imgui_freetype.h api @@ -1126,6 +1126,10 @@ CIMGUI_API void igSetNextItemStorageID(ImGuiID storage_id) { return ImGui::SetNextItemStorageID(storage_id); } +CIMGUI_API bool igTreeNodeGetOpen(ImGuiID storage_id) +{ + return ImGui::TreeNodeGetOpen(storage_id); +} CIMGUI_API bool igSelectable_Bool(const char* label,bool selected,ImGuiSelectableFlags flags,const ImVec2_c size) { return ImGui::Selectable(label,selected,flags,ConvertToCPP_ImVec2(size)); @@ -3741,6 +3745,10 @@ CIMGUI_API float ImGuiInputTextState_GetPreferredOffsetX(ImGuiInputTextState* se { return self->GetPreferredOffsetX(); } +CIMGUI_API const char* ImGuiInputTextState_GetText(ImGuiInputTextState* self) +{ + return self->GetText(); +} CIMGUI_API void ImGuiInputTextState_CursorAnimReset(ImGuiInputTextState* self) { return self->CursorAnimReset(); @@ -4717,6 +4725,14 @@ CIMGUI_API ImGuiMouseButton igGetMouseButtonFromPopupFlags(ImGuiPopupFlags flags { return ImGui::GetMouseButtonFromPopupFlags(flags); } +CIMGUI_API bool igIsPopupOpenRequestForItem(ImGuiPopupFlags flags,ImGuiID id) +{ + return ImGui::IsPopupOpenRequestForItem(flags,id); +} +CIMGUI_API bool igIsPopupOpenRequestForWindow(ImGuiPopupFlags flags) +{ + return ImGui::IsPopupOpenRequestForWindow(flags); +} CIMGUI_API bool igBeginTooltipEx(ImGuiTooltipFlags tooltip_flags,ImGuiWindowFlags extra_window_flags) { return ImGui::BeginTooltipEx(tooltip_flags,extra_window_flags); @@ -5285,6 +5301,10 @@ CIMGUI_API void igTableSetColumnDisplayOrder(ImGuiTable* table,int column_n,int { return ImGui::TableSetColumnDisplayOrder(table,column_n,dst_order); } +CIMGUI_API void igTableQueueSetColumnDisplayOrder(ImGuiTable* table,int column_n,int dst_order) +{ + return ImGui::TableQueueSetColumnDisplayOrder(table,column_n,dst_order); +} CIMGUI_API void igTableRemove(ImGuiTable* table) { return ImGui::TableRemove(table); @@ -5574,6 +5594,10 @@ CIMGUI_API ImGuiID igGetWindowResizeBorderID(ImGuiWindow* window,ImGuiDir dir) { return ImGui::GetWindowResizeBorderID(window,dir); } +CIMGUI_API void igExtendHitBoxWhenNearViewportEdge(ImGuiWindow* window,ImRect* bb,float threshold,ImGuiAxis axis) +{ + return ImGui::ExtendHitBoxWhenNearViewportEdge(window,bb,threshold,axis); +} CIMGUI_API bool igButtonBehavior(const ImRect_c bb,ImGuiID id,bool* out_hovered,bool* out_held,ImGuiButtonFlags flags) { return ImGui::ButtonBehavior(ConvertToCPP_ImRect(bb),id,out_hovered,out_held,flags); @@ -5606,10 +5630,6 @@ CIMGUI_API void igTreePushOverrideID(ImGuiID id) { return ImGui::TreePushOverrideID(id); } -CIMGUI_API bool igTreeNodeGetOpen(ImGuiID storage_id) -{ - return ImGui::TreeNodeGetOpen(storage_id); -} CIMGUI_API void igTreeNodeSetOpen(ImGuiID storage_id,bool open) { return ImGui::TreeNodeSetOpen(storage_id,open); @@ -5654,9 +5674,9 @@ CIMGUI_API void igInputTextDeactivateHook(ImGuiID id) { return ImGui::InputTextDeactivateHook(id); } -CIMGUI_API bool igTempInputText(const ImRect_c bb,ImGuiID id,const char* label,char* buf,int buf_size,ImGuiInputTextFlags flags) +CIMGUI_API bool igTempInputText(const ImRect_c bb,ImGuiID id,const char* label,char* buf,size_t buf_size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data) { - return ImGui::TempInputText(ConvertToCPP_ImRect(bb),id,label,buf,buf_size,flags); + return ImGui::TempInputText(ConvertToCPP_ImRect(bb),id,label,buf,buf_size,flags,callback,user_data); } CIMGUI_API bool igTempInputScalar(const ImRect_c bb,ImGuiID id,const char* label,ImGuiDataType data_type,void* p_data,const char* format,const void* p_clamp_min,const void* p_clamp_max) { @@ -5754,6 +5774,10 @@ CIMGUI_API void igEndErrorTooltip() { return ImGui::EndErrorTooltip(); } +CIMGUI_API void igDemoMarker(const char* file,int line,const char* section) +{ + return ImGui::DemoMarker(file,line,section); +} CIMGUI_API void igDebugAllocHook(ImGuiDebugAllocInfo* info,int frame_count,void* ptr,size_t size) { return ImGui::DebugAllocHook(info,frame_count,ptr,size); @@ -5826,9 +5850,9 @@ CIMGUI_API void igDebugNodeFont(ImFont* font) { return ImGui::DebugNodeFont(font); } -CIMGUI_API void igDebugNodeFontGlyphesForSrcMask(ImFont* font,ImFontBaked* baked,int src_mask) +CIMGUI_API void igDebugNodeFontGlyphsForSrcMask(ImFont* font,ImFontBaked* baked,int src_mask) { - return ImGui::DebugNodeFontGlyphesForSrcMask(font,baked,src_mask); + return ImGui::DebugNodeFontGlyphsForSrcMask(font,baked,src_mask); } CIMGUI_API void igDebugNodeFontGlyph(ImFont* font,const ImFontGlyph* glyph) { diff --git a/cimgui.h b/cimgui.h index e51b4a0..6aa449d 100644 --- a/cimgui.h +++ b/cimgui.h @@ -1,5 +1,5 @@ //This file is automatically generated by generator.lua from https://github.com/cimgui/cimgui -//based on imgui.h file version "1.92.6" 19261 from Dear ImGui https://github.com/ocornut/imgui +//based on imgui.h file version "1.92.7" 19270 from Dear ImGui https://github.com/ocornut/imgui //with imgui_internal.h api //with imgui_freetype.h api #ifndef CIMGUI_INCLUDED @@ -800,6 +800,7 @@ typedef enum { ImGuiStyleVar_TreeLinesRounding, ImGuiStyleVar_ButtonTextAlign, ImGuiStyleVar_SelectableTextAlign, + ImGuiStyleVar_SeparatorSize, ImGuiStyleVar_SeparatorTextBorderSize, ImGuiStyleVar_SeparatorTextAlign, ImGuiStyleVar_SeparatorTextPadding, @@ -812,6 +813,7 @@ typedef enum { ImGuiButtonFlags_MouseButtonMiddle = 1 << 2, ImGuiButtonFlags_MouseButtonMask_ = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle, ImGuiButtonFlags_EnableNav = 1 << 3, + ImGuiButtonFlags_AllowOverlap = 1 << 12, }ImGuiButtonFlags_; typedef enum { ImGuiColorEditFlags_None = 0, @@ -1041,6 +1043,7 @@ struct ImGuiStyle ImGuiDir ColorButtonPosition; ImVec2_c ButtonTextAlign; ImVec2_c SelectableTextAlign; + float SeparatorSize; float SeparatorTextBorderSize; ImVec2_c SeparatorTextAlign; ImVec2_c SeparatorTextPadding; @@ -1250,15 +1253,16 @@ typedef enum { }ImGuiListClipperFlags_; struct ImGuiListClipper { - ImGuiContext* Ctx; int DisplayStart; int DisplayEnd; + int UserIndex; int ItemsCount; float ItemsHeight; + ImGuiListClipperFlags Flags; double StartPosY; double StartSeekOffsetY; + ImGuiContext* Ctx; void* TempData; - ImGuiListClipperFlags Flags; }; struct ImColor_c { @@ -1279,10 +1283,12 @@ typedef enum { ImGuiMultiSelectFlags_ClearOnClickVoid = 1 << 10, ImGuiMultiSelectFlags_ScopeWindow = 1 << 11, ImGuiMultiSelectFlags_ScopeRect = 1 << 12, - ImGuiMultiSelectFlags_SelectOnClick = 1 << 13, - ImGuiMultiSelectFlags_SelectOnClickRelease = 1 << 14, + ImGuiMultiSelectFlags_SelectOnAuto = 1 << 13, + ImGuiMultiSelectFlags_SelectOnClickAlways = 1 << 14, + ImGuiMultiSelectFlags_SelectOnClickRelease = 1 << 15, ImGuiMultiSelectFlags_NavWrapX = 1 << 16, ImGuiMultiSelectFlags_NoSelectOnRightClick = 1 << 17, + ImGuiMultiSelectFlags_SelectOnMask_ = ImGuiMultiSelectFlags_SelectOnAuto | ImGuiMultiSelectFlags_SelectOnClickAlways | ImGuiMultiSelectFlags_SelectOnClickRelease, }ImGuiMultiSelectFlags_; typedef struct ImVector_ImGuiSelectionRequest {int Size;int Capacity;ImGuiSelectionRequest* Data;} ImVector_ImGuiSelectionRequest; @@ -1727,7 +1733,6 @@ typedef int ImGuiWindowBgClickFlags; typedef int ImGuiWindowRefreshFlags; typedef ImS16 ImGuiTableColumnIdx; typedef ImU16 ImGuiTableDrawChannelIdx; -extern ImGuiContext* GImGui; typedef enum { ImDrawTextFlags_None = 0, ImDrawTextFlags_CpuFineClip = 1 << 0, @@ -1869,7 +1874,7 @@ typedef enum { }ImGuiHoveredFlagsPrivate_; typedef enum { ImGuiInputTextFlags_Multiline = 1 << 26, - ImGuiInputTextFlags_MergedItem = 1 << 27, + ImGuiInputTextFlags_TempInput = 1 << 27, ImGuiInputTextFlags_LocalizeDecimalPoint= 1 << 28, }ImGuiInputTextFlagsPrivate_; typedef enum { @@ -1880,7 +1885,6 @@ typedef enum { ImGuiButtonFlags_PressedOnDoubleClick = 1 << 8, ImGuiButtonFlags_PressedOnDragDropHold = 1 << 9, ImGuiButtonFlags_FlattenChildren = 1 << 11, - ImGuiButtonFlags_AllowOverlap = 1 << 12, ImGuiButtonFlags_AlignTextBaseLine = 1 << 15, ImGuiButtonFlags_NoKeyModsAllowed = 1 << 16, ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, @@ -2019,7 +2023,8 @@ struct ImGuiInputTextState bool CursorFollow; bool CursorCenterY; bool SelectedAllMouseLock; - bool Edited; + bool EditedBefore; + bool EditedThisFrame; bool WantReloadUserBuf; ImS8 LastMoveDirectionLR; int ReloadSelectionStart; @@ -2489,7 +2494,7 @@ typedef struct ImGuiViewportP ImGuiViewportP; struct ImGuiViewportP { ImGuiViewport _ImGuiViewport; - int BgFgDrawListsLastFrame[2]; + float BgFgDrawListsLastTimeActive[2]; ImDrawList* BgFgDrawLists[2]; ImDrawData DrawDataP; ImDrawDataBuilder DrawDataBuilder; @@ -2630,6 +2635,7 @@ struct ImGuiContextHook ImGuiContextHookCallback Callback; void* UserData; }; +typedef void (*ImGuiDemoMarkerCallback)(const char* file, int line, const char* section); typedef struct ImVector_ImFontAtlasPtr {int Size;int Capacity;ImFontAtlas** Data;} ImVector_ImFontAtlasPtr; typedef struct ImVector_ImGuiInputEvent {int Size;int Capacity;ImGuiInputEvent* Data;} ImVector_ImGuiInputEvent; @@ -2805,6 +2811,7 @@ struct ImGuiContext ImGuiWindow* NavWindow; ImGuiID NavFocusScopeId; ImGuiNavLayer NavLayer; + ImGuiItemFlags NavIdItemFlags; ImGuiID NavActivateId; ImGuiID NavActivateDownId; ImGuiID NavActivatePressedId; @@ -2812,6 +2819,8 @@ struct ImGuiContext ImVector_ImGuiFocusScopeData NavFocusRoute; ImGuiID NavHighlightActivatedId; float NavHighlightActivatedTimer; + ImGuiID NavOpenContextMenuItemId; + ImGuiID NavOpenContextMenuWindowId; ImGuiID NavNextActivateId; ImGuiActivateFlags NavNextActivateFlags; ImGuiInputSource NavInputSource; @@ -2912,6 +2921,7 @@ struct ImGuiContext ImGuiInputTextDeactivatedState InputTextDeactivatedState; ImFontBaked InputTextPasswordFontBackupBaked; ImFontFlags InputTextPasswordFontBackupFlags; + ImGuiID InputTextReactivateId; ImGuiID TempInputId; ImGuiDataTypeStorage DataTypeZeroValue; int BeginMenuDepth; @@ -2952,6 +2962,7 @@ struct ImGuiContext ImChunkStream_ImGuiTableSettings SettingsTables; ImVector_ImGuiContextHook Hooks; ImGuiID HookIdNext; + ImGuiDemoMarkerCallback DemoMarkerCallback; const char* LocalizationTable[ImGuiLocKey_COUNT]; bool LogEnabled; bool LogLineFirstItem; @@ -3375,8 +3386,9 @@ struct ImGuiTable ImGuiTableColumnIdx ResizedColumn; ImGuiTableColumnIdx LastResizedColumn; ImGuiTableColumnIdx HeldHeaderColumn; + ImGuiTableColumnIdx LastHeldHeaderColumn; ImGuiTableColumnIdx ReorderColumn; - ImGuiTableColumnIdx ReorderColumnDir; + ImGuiTableColumnIdx ReorderColumnDstOrder; ImGuiTableColumnIdx LeftMostEnabledColumn; ImGuiTableColumnIdx RightMostEnabledColumn; ImGuiTableColumnIdx LeftMostStretchedColumn; @@ -3925,6 +3937,7 @@ CIMGUI_API bool igCollapsingHeader_TreeNodeFlags(const char* label,ImGuiTreeNode CIMGUI_API bool igCollapsingHeader_BoolPtr(const char* label,bool* p_visible,ImGuiTreeNodeFlags flags); CIMGUI_API void igSetNextItemOpen(bool is_open,ImGuiCond cond); CIMGUI_API void igSetNextItemStorageID(ImGuiID storage_id); +CIMGUI_API bool igTreeNodeGetOpen(ImGuiID storage_id); CIMGUI_API bool igSelectable_Bool(const char* label,bool selected,ImGuiSelectableFlags flags,const ImVec2_c size); CIMGUI_API bool igSelectable_BoolPtr(const char* label,bool* p_selected,ImGuiSelectableFlags flags,const ImVec2_c size); CIMGUI_API ImGuiMultiSelectIO* igBeginMultiSelect(ImGuiMultiSelectFlags flags,int selection_size,int items_count); @@ -4583,6 +4596,7 @@ CIMGUI_API void ImGuiInputTextState_ClearFreeMemory(ImGuiInputTextState* self); CIMGUI_API void ImGuiInputTextState_OnKeyPressed(ImGuiInputTextState* self,int key); CIMGUI_API void ImGuiInputTextState_OnCharPressed(ImGuiInputTextState* self,unsigned int c); CIMGUI_API float ImGuiInputTextState_GetPreferredOffsetX(ImGuiInputTextState* self); +CIMGUI_API const char* ImGuiInputTextState_GetText(ImGuiInputTextState* self); CIMGUI_API void ImGuiInputTextState_CursorAnimReset(ImGuiInputTextState* self); CIMGUI_API void ImGuiInputTextState_CursorClamp(ImGuiInputTextState* self); CIMGUI_API bool ImGuiInputTextState_HasSelection(ImGuiInputTextState* self); @@ -4827,6 +4841,8 @@ CIMGUI_API ImGuiWindow* igFindBlockingModal(ImGuiWindow* window); CIMGUI_API ImVec2_c igFindBestWindowPosForPopup(ImGuiWindow* window); CIMGUI_API ImVec2_c igFindBestWindowPosForPopupEx(const ImVec2_c ref_pos,const ImVec2_c size,ImGuiDir* last_dir,const ImRect_c r_outer,const ImRect_c r_avoid,ImGuiPopupPositionPolicy policy); CIMGUI_API ImGuiMouseButton igGetMouseButtonFromPopupFlags(ImGuiPopupFlags flags); +CIMGUI_API bool igIsPopupOpenRequestForItem(ImGuiPopupFlags flags,ImGuiID id); +CIMGUI_API bool igIsPopupOpenRequestForWindow(ImGuiPopupFlags flags); CIMGUI_API bool igBeginTooltipEx(ImGuiTooltipFlags tooltip_flags,ImGuiWindowFlags extra_window_flags); CIMGUI_API bool igBeginTooltipHidden(void); CIMGUI_API bool igBeginViewportSideBar(const char* name,ImGuiViewport* viewport,ImGuiDir dir,float size,ImGuiWindowFlags window_flags); @@ -4969,6 +4985,7 @@ CIMGUI_API float igTableCalcMaxColumnWidth(const ImGuiTable* table,int column_n) CIMGUI_API void igTableSetColumnWidthAutoSingle(ImGuiTable* table,int column_n); CIMGUI_API void igTableSetColumnWidthAutoAll(ImGuiTable* table); CIMGUI_API void igTableSetColumnDisplayOrder(ImGuiTable* table,int column_n,int dst_order); +CIMGUI_API void igTableQueueSetColumnDisplayOrder(ImGuiTable* table,int column_n,int dst_order); CIMGUI_API void igTableRemove(ImGuiTable* table); CIMGUI_API void igTableGcCompactTransientBuffers_TablePtr(ImGuiTable* table); CIMGUI_API void igTableGcCompactTransientBuffers_TableTempDataPtr(ImGuiTableTempData* table); @@ -5042,6 +5059,7 @@ CIMGUI_API ImRect_c igGetWindowScrollbarRect(ImGuiWindow* window,ImGuiAxis axis) CIMGUI_API ImGuiID igGetWindowScrollbarID(ImGuiWindow* window,ImGuiAxis axis); CIMGUI_API ImGuiID igGetWindowResizeCornerID(ImGuiWindow* window,int n); CIMGUI_API ImGuiID igGetWindowResizeBorderID(ImGuiWindow* window,ImGuiDir dir); +CIMGUI_API void igExtendHitBoxWhenNearViewportEdge(ImGuiWindow* window,ImRect* bb,float threshold,ImGuiAxis axis); CIMGUI_API bool igButtonBehavior(const ImRect_c bb,ImGuiID id,bool* out_hovered,bool* out_held,ImGuiButtonFlags flags); CIMGUI_API bool igDragBehavior(ImGuiID id,ImGuiDataType data_type,void* p_v,float v_speed,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags); CIMGUI_API bool igSliderBehavior(const ImRect_c bb,ImGuiID id,ImGuiDataType data_type,void* p_v,const void* p_min,const void* p_max,const char* format,ImGuiSliderFlags flags,ImRect* out_grab_bb); @@ -5050,7 +5068,6 @@ CIMGUI_API bool igTreeNodeBehavior(ImGuiID id,ImGuiTreeNodeFlags flags,const cha CIMGUI_API void igTreeNodeDrawLineToChildNode(const ImVec2_c target_pos); CIMGUI_API void igTreeNodeDrawLineToTreePop(const ImGuiTreeNodeStackData* data); CIMGUI_API void igTreePushOverrideID(ImGuiID id); -CIMGUI_API bool igTreeNodeGetOpen(ImGuiID storage_id); CIMGUI_API void igTreeNodeSetOpen(ImGuiID storage_id,bool open); CIMGUI_API bool igTreeNodeUpdateNextOpen(ImGuiID storage_id,ImGuiTreeNodeFlags flags); CIMGUI_API const ImGuiDataTypeInfo* igDataTypeGetInfo(ImGuiDataType data_type); @@ -5062,7 +5079,7 @@ CIMGUI_API bool igDataTypeClamp(ImGuiDataType data_type,void* p_data,const void* CIMGUI_API bool igDataTypeIsZero(ImGuiDataType data_type,const void* p_data); CIMGUI_API bool igInputTextEx(const char* label,const char* hint,char* buf,int buf_size,const ImVec2_c size_arg,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data); CIMGUI_API void igInputTextDeactivateHook(ImGuiID id); -CIMGUI_API bool igTempInputText(const ImRect_c bb,ImGuiID id,const char* label,char* buf,int buf_size,ImGuiInputTextFlags flags); +CIMGUI_API bool igTempInputText(const ImRect_c bb,ImGuiID id,const char* label,char* buf,size_t buf_size,ImGuiInputTextFlags flags,ImGuiInputTextCallback callback,void* user_data); CIMGUI_API bool igTempInputScalar(const ImRect_c bb,ImGuiID id,const char* label,ImGuiDataType data_type,void* p_data,const char* format,const void* p_clamp_min,const void* p_clamp_max); CIMGUI_API bool igTempInputIsActive(ImGuiID id); CIMGUI_API ImGuiInputTextState* igGetInputTextState(ImGuiID id); @@ -5087,6 +5104,7 @@ CIMGUI_API void igErrorCheckUsingSetCursorPosToExtendParentBoundaries(void); CIMGUI_API void igErrorCheckEndFrameFinalizeErrorTooltip(void); CIMGUI_API bool igBeginErrorTooltip(void); CIMGUI_API void igEndErrorTooltip(void); +CIMGUI_API void igDemoMarker(const char* file,int line,const char* section); CIMGUI_API void igDebugAllocHook(ImGuiDebugAllocInfo* info,int frame_count,void* ptr,size_t size); CIMGUI_API void igDebugDrawCursorPos(ImU32 col); CIMGUI_API void igDebugDrawLineExtents(ImU32 col); @@ -5105,7 +5123,7 @@ CIMGUI_API void igDebugNodeColumns(ImGuiOldColumns* columns); CIMGUI_API void igDebugNodeDrawList(ImGuiWindow* window,ImGuiViewportP* viewport,const ImDrawList* draw_list,const char* label); CIMGUI_API void igDebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list,const ImDrawList* draw_list,const ImDrawCmd* draw_cmd,bool show_mesh,bool show_aabb); CIMGUI_API void igDebugNodeFont(ImFont* font); -CIMGUI_API void igDebugNodeFontGlyphesForSrcMask(ImFont* font,ImFontBaked* baked,int src_mask); +CIMGUI_API void igDebugNodeFontGlyphsForSrcMask(ImFont* font,ImFontBaked* baked,int src_mask); CIMGUI_API void igDebugNodeFontGlyph(ImFont* font,const ImFontGlyph* glyph); CIMGUI_API void igDebugNodeTexture(ImTextureData* tex,int int_id,const ImFontAtlasRect* highlight_rect); CIMGUI_API void igDebugNodeStorage(ImGuiStorage* storage,const char* label); diff --git a/cimgui_impl.h b/cimgui_impl.h index f3b7dd3..ccc38e1 100644 --- a/cimgui_impl.h +++ b/cimgui_impl.h @@ -110,11 +110,14 @@ CIMGUI_API void ImGui_ImplSDL3_Shutdown(void); typedef struct ImGui_ImplVulkanH_Frame ImGui_ImplVulkanH_Frame; typedef struct ImGui_ImplVulkanH_Window ImGui_ImplVulkanH_Window; typedef struct ImGui_ImplVulkan_PipelineInfo ImGui_ImplVulkan_PipelineInfo; +typedef struct ImVector_VkDynamicState {int Size;int Capacity;VkDynamicState* Data;} ImVector_VkDynamicState; + struct ImGui_ImplVulkan_PipelineInfo { VkRenderPass RenderPass; uint32_t Subpass; VkSampleCountFlagBits MSAASamples; + ImVector_VkDynamicState ExtraDynamicStates; VkPipelineRenderingCreateInfoKHR PipelineRenderingCreateInfo; }; typedef struct ImGui_ImplVulkan_InitInfo ImGui_ImplVulkan_InitInfo; @@ -191,6 +194,7 @@ struct ImGui_ImplVulkanH_Window #ifndef CIMGUI_DEFINE_ENUMS_AND_STRUCTS typedef ImVector ImVector_ImGui_ImplVulkanH_Frame; typedef ImVector ImVector_ImGui_ImplVulkanH_FrameSemaphores; +typedef ImVector ImVector_VkDynamicState; #endif //CIMGUI_DEFINE_ENUMS_AND_STRUCTS CIMGUI_API void ImGui_ImplVulkanH_CreateOrResizeWindow(VkInstance instance,VkPhysicalDevice physical_device,VkDevice device,ImGui_ImplVulkanH_Window* wd,uint32_t queue_family,const VkAllocationCallbacks* allocator,int w,int h,uint32_t min_image_count,VkImageUsageFlags image_usage); CIMGUI_API void ImGui_ImplVulkanH_DestroyWindow(VkInstance instance,VkDevice device,ImGui_ImplVulkanH_Window* wd,const VkAllocationCallbacks* allocator); diff --git a/generator/cpp2ffi.lua b/generator/cpp2ffi.lua index 03b4f58..b8f83f0 100644 --- a/generator/cpp2ffi.lua +++ b/generator/cpp2ffi.lua @@ -1553,6 +1553,36 @@ local function printItems(items) printItemsKind(items,v) end end + +-------------------------------json saving +--avoid mixed tables (with string and integer keys) +local function json_prepare(defs) + --delete signatures in function + for k,def in pairs(defs) do + for k2,v in pairs(def) do + if type(k2)=="string" then + def[k2] = nil + end + end + end + return defs +end + + +local function save_output(self) + save_data("./output/overloads.txt",self.overloadstxt) + save_data("./output/definitions.lua",M.serializeTableF(self.defsT)) + save_data("./output/structs_and_enums.lua",M.serializeTableF(self.structs_and_enums_table)) + save_data("./output/typedefs_dict.lua",M.serializeTableF(self.typedefs_dict)) + save_data("./output/constants.lua",M.serializeTableF(self.constants)) + + local json = require"json" + local json_opts = {dict_on_empty={defaults=true}} + save_data("./output/definitions.json",json.encode(json_prepare(self.defsT),json_opts)) + save_data("./output/structs_and_enums.json",json.encode(self.structs_and_enums_table)) + save_data("./output/typedefs_dict.json",json.encode(self.typedefs_dict)) + save_data("./output/constants.json",json.encode(self.constants)) +end ------------- local numerr = 0 --for popen error file function M.Parser() @@ -1573,6 +1603,7 @@ function M.Parser() par.skipped = {} par.UDTs = {} + par.save_output = save_output par.genConversors = genConversions par.gen_structs_c = gen_structs_c function par:insert(line,loca) @@ -1624,6 +1655,7 @@ function M.Parser() --try to guess a compiler error assert(not errstr:match" error") os.remove(errfile) + self.constants = defines return defines end function par:do_parse() @@ -2072,6 +2104,10 @@ function M.Parser() print("--skip = vardef declaration:",it2) it2 = "" end + if it2:match("%s*extern") then + print("--skip extern vardef declaration:",it2) + it2 = "" + end end --table.insert(outtabpre,it2) --table.insert(outtab,it2) @@ -2358,6 +2394,15 @@ function M.Parser() print(it.item) end end + elseif it.re_name == "vardef_re" then + local it2 = it.item:gsub("constexpr","static const") + if it2:match"static const" then + local name, assig = it2:match("static const %s*.+%s+([%w_]+)%s*=%s*([^;]*);") + --print(it2,name,assig) + if name and assig then + self.constants[name] = assig + end + end end elseif it.re_name == "enum_re" then enums_for_table(it, outtab, enumsordered) @@ -2913,7 +2958,8 @@ local function location(file,locpathT,defines,COMPILER,keepemptylines) if name and val then --while defines[val] do val = defines[val] end --if val:match(number_re) or val:match(hex_re) then - table.insert(defines,{name , val}) + --table.insert(defines,{name , val}) + defines[name] = val --end end end diff --git a/generator/generator.lua b/generator/generator.lua index ea43028..b786dfa 100644 --- a/generator/generator.lua +++ b/generator/generator.lua @@ -39,10 +39,10 @@ if FREETYPE_GENERATION then end if COMPILER == "gcc" or COMPILER == "clang" or COMPILER == "zig cc" then - CPRE = COMPILER..[[ -E -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS -DIMGUI_API="" -DIMGUI_IMPL_API="" ]] .. CFLAGS + CPRE = COMPILER..[[ -E -dD -DIMGUI_DISABLE_OBSOLETE_FUNCTIONS -DIMGUI_API="" -DIMGUI_IMPL_API="" ]] .. CFLAGS CTEST = COMPILER.." --version" elseif COMPILER == "cl" then - CPRE = COMPILER..[[ /E /DIMGUI_DISABLE_OBSOLETE_FUNCTIONS /DIMGUI_DEBUG_PARANOID /DIMGUI_API="" /DIMGUI_IMPL_API="" ]] .. CFLAGS + CPRE = COMPILER..[[ /E /d1PP /DIMGUI_DISABLE_OBSOLETE_FUNCTIONS /DIMGUI_DEBUG_PARANOID /DIMGUI_API="" /DIMGUI_IMPL_API="" ]] .. CFLAGS CTEST = COMPILER else print("Working without compiler ") @@ -398,7 +398,7 @@ local function parseImGuiHeader(header,names) parser.custom_function_post = custom_function_post parser.header_text_insert = header_text_insert local defines = parser:take_lines(CPRE..header,names,COMPILER) - + --cpp2ffi.prtable("defines",defines) return parser end --generation @@ -438,14 +438,8 @@ structs_and_enums_table.templated_structs = parser1.templated_structs structs_and_enums_table.typenames = parser1.typenames structs_and_enums_table.templates_done = parser1.templates_done --structs_and_enums_table.nonPOD_used = parser1.nP_used - -save_data("./output/structs_and_enums.lua",serializeTableF(structs_and_enums_table)) -save_data("./output/typedefs_dict.lua",serializeTableF(parser1.typedefs_dict)) - -----------save fundefs in definitions.lua for using in bindings ---DefsByStruct(pFP) set_defines(parser1.defsT) -save_data("./output/definitions.lua",serializeTableF(parser1.defsT)) +parser1:save_output() --check every function has ov_cimguiname -- for k,v in pairs(parser1.defsT) do @@ -549,13 +543,6 @@ local function json_prepare(defs) end ---[[ local json = require"json" -save_data("./output/definitions.json",json.encode(json_prepare(parser1.defsT),{dict_on_empty={defaults=true}})) ---delete extra info for json ---structs_and_enums_table.templated_structs = nil ---structs_and_enums_table.typenames = nil ---structs_and_enums_table.templates_done = nil -save_data("./output/structs_and_enums.json",json.encode(structs_and_enums_table)) -save_data("./output/typedefs_dict.json",json.encode(parser1.typedefs_dict)) if parser2 then save_data("./output/impl_definitions.json",json.encode(json_prepare(parser2.defsT),{dict_on_empty={defaults=true}})) end diff --git a/generator/output/constants.json b/generator/output/constants.json new file mode 100644 index 0000000..90af53e --- /dev/null +++ b/generator/output/constants.json @@ -0,0 +1,119 @@ +{ + "IMGUI_CHECKVERSION()": "ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))", + "IMGUI_DEBUG_LOG(...)": "ImGui::DebugLog(__VA_ARGS__)", + "IMGUI_DEBUG_LOG_ACTIVEID(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_CLIPPER(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventClipper) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_ERROR(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventError) IMGUI_DEBUG_LOG(__VA_ARGS__); else g.DebugLogSkippedErrors++; } while (0)", + "IMGUI_DEBUG_LOG_FOCUS(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_FONT(...)": "do { ImGuiContext* g2 = GImGui; if (g2 && g2->DebugLogFlags & ImGuiDebugLogFlags_EventFont) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_INPUTROUTING(...)": "do{if (g.DebugLogFlags & ImGuiDebugLogFlags_EventInputRouting)IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_IO(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_NAV(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_POPUP(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_LOG_SELECTION(...)": "do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + "IMGUI_DEBUG_PRINTF(_FMT,...)": "printf(_FMT, __VA_ARGS__)", + "IMGUI_FONT_SIZE_MAX": "(512.0f)", + "IMGUI_FONT_SIZE_THRESHOLD_FOR_LOADADVANCEXONLYMODE": "(128.0f)", + "IMGUI_PAYLOAD_TYPE_COLOR_3F": "\"_COL3F\"", + "IMGUI_PAYLOAD_TYPE_COLOR_4F": "\"_COL4F\"", + "IMGUI_TABLE_MAX_COLUMNS": "512", + "IMGUI_TEST_ENGINE_ITEM_ADD(_ID,_BB,_ITEM_DATA)": "((void)0)", + "IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS)": "((void)g)", + "IMGUI_VERSION": "\"1.92.7\"", + "IMGUI_VERSION_NUM": "19270", + "IMGUI_WINDOW_HARD_MIN_SIZE": "4.0f", + "IMSTB_TEXTEDIT_CHARTYPE": "char", + "IMSTB_TEXTEDIT_GETWIDTH_NEWLINE": "(-1.0f)", + "IMSTB_TEXTEDIT_STRING": "ImGuiInputTextState", + "IMSTB_TEXTEDIT_UNDOCHARCOUNT": "999", + "IMSTB_TEXTEDIT_UNDOSTATECOUNT": "99", + "IM_ALLOC(_SIZE)": "ImGui::MemAlloc(_SIZE)", + "IM_ARRAYSIZE": "IM_COUNTOF", + "IM_ASSERT(_EXPR)": "assert(_EXPR)", + "IM_ASSERT_USER_ERROR(_EXPR,_MSG)": "do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } } } while (0)", + "IM_ASSERT_USER_ERROR_RET(_EXPR,_MSG)": "do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return; } } while (0)", + "IM_ASSERT_USER_ERROR_RETV(_EXPR,_RETV,_MSG)": "do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return _RETV; } } while (0)", + "IM_BITARRAY_CLEARBIT(_ARRAY,_N)": "((_ARRAY[(_N) >> 5] &= ~((ImU32)1 << ((_N) & 31))))", + "IM_BITARRAY_TESTBIT(_ARRAY,_N)": "((_ARRAY[(_N) >> 5] & ((ImU32)1 << ((_N) & 31))) != 0)", + "IM_COL32(R,G,B,A)": "(((ImU32)(A)<=0 ? 0.5f : -0.5f)))", + "IM_FMTARGS(FMT)": "__attribute__((format(gnu_printf, FMT, FMT+1)))", + "IM_FMTLIST(FMT)": "__attribute__((format(gnu_printf, FMT, 0)))", + "IM_FREE(_PTR)": "ImGui::MemFree(_PTR)", + "IM_MEMALIGN(_OFF,_ALIGN)": "(((_OFF) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1))", + "IM_NEW(_TYPE)": "new(ImNewWrapper(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE", + "IM_NEWLINE": "\"\\r\\n\"", + "IM_PI": "3.14159265358979323846f", + "IM_PLACEMENT_NEW(_PTR)": "new(ImNewWrapper(), _PTR)", + "IM_PRIX64": "\"llX\"", + "IM_PRId64": "\"lld\"", + "IM_PRIu64": "\"llu\"", + "IM_ROUND(_VAL)": "((float)(int)((_VAL) + 0.5f))", + "IM_ROUNDUP_TO_EVEN(_V)": "((((_V) + 1) / 2) * 2)", + "IM_STATIC_ASSERT(_COND)": "static_assert(_COND, \"\")", + "IM_STRINGIFY(_EXPR)": "IM_STRINGIFY_HELPER(_EXPR)", + "IM_STRINGIFY_HELPER(_EXPR)": "#_EXPR", + "IM_TABSIZE": "(4)", + "IM_TRUNC(_VAL)": "((float)(int)(_VAL))", + "IM_UNICODE_CODEPOINT_INVALID": "0xFFFD", + "IM_UNICODE_CODEPOINT_MAX": "0xFFFF", + "IM_UNUSED(_VAR)": "((void)(_VAR))", + "ImAcos(X)": "acosf(X)", + "ImAtan2(Y,X)": "atan2f((Y), (X))", + "ImAtof(STR)": "atof(STR)", + "ImCeil(X)": "ceilf(X)", + "ImCos(X)": "cosf(X)", + "ImDrawCallback_ResetRenderState": "(ImDrawCallback)(-8)", + "ImFabs(X)": "fabsf(X)", + "ImFmod(X,Y)": "fmodf((X), (Y))", + "ImFontAtlasRectId_GenerationMask_": "(0x3FF00000)", + "ImFontAtlasRectId_GenerationShift_": "(20)", + "ImFontAtlasRectId_IndexMask_": "(0x0007FFFF)", + "ImFontAtlasRectId_Invalid": "-1", + "ImGuiKeyOwner_Any": "((ImGuiID)0)", + "ImGuiKeyOwner_NoOwner": "((ImGuiID)-1)", + "ImGuiKey_Aliases_BEGIN": "(ImGuiKey_Mouse_BEGIN)", + "ImGuiKey_Aliases_END": "(ImGuiKey_Mouse_END)", + "ImGuiKey_Gamepad_BEGIN": "(ImGuiKey_GamepadStart)", + "ImGuiKey_Gamepad_END": "(ImGuiKey_GamepadRStickDown + 1)", + "ImGuiKey_Keyboard_BEGIN": "(ImGuiKey_NamedKey_BEGIN)", + "ImGuiKey_Keyboard_END": "(ImGuiKey_GamepadStart)", + "ImGuiKey_LegacyNativeKey_BEGIN": "0", + "ImGuiKey_LegacyNativeKey_END": "512", + "ImGuiKey_Mouse_BEGIN": "(ImGuiKey_MouseLeft)", + "ImGuiKey_Mouse_END": "(ImGuiKey_MouseWheelY + 1)", + "ImGuiKey_NavGamepadActivate": "(g.IO.ConfigNavSwapGamepadButtons ? ImGuiKey_GamepadFaceRight : ImGuiKey_GamepadFaceDown)", + "ImGuiKey_NavGamepadCancel": "(g.IO.ConfigNavSwapGamepadButtons ? ImGuiKey_GamepadFaceDown : ImGuiKey_GamepadFaceRight)", + "ImGuiKey_NavGamepadContextMenu": "ImGuiKey_GamepadFaceUp", + "ImGuiKey_NavGamepadMenu": "ImGuiKey_GamepadFaceLeft", + "ImGuiKey_NavGamepadTweakFast": "ImGuiKey_GamepadR1", + "ImGuiKey_NavGamepadTweakSlow": "ImGuiKey_GamepadL1", + "ImGuiKey_NavKeyboardTweakFast": "ImGuiMod_Shift", + "ImGuiKey_NavKeyboardTweakSlow": "ImGuiMod_Ctrl", + "ImGuiSelectionUserData_Invalid": "((ImGuiSelectionUserData)-1)", + "ImMemchr": "memchr", + "ImSin(X)": "sinf(X)", + "ImSqrt(X)": "sqrtf(X)", + "ImStrlen": "strlen", + "ImTextureID_Invalid": "((ImTextureID)0)" +} \ No newline at end of file diff --git a/generator/output/constants.lua b/generator/output/constants.lua new file mode 100644 index 0000000..721c7ec --- /dev/null +++ b/generator/output/constants.lua @@ -0,0 +1,119 @@ +local t={ + ["IMGUI_CHECKVERSION()"]="ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))", + ["IMGUI_DEBUG_LOG(...)"]="ImGui::DebugLog(__VA_ARGS__)", + ["IMGUI_DEBUG_LOG_ACTIVEID(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_CLIPPER(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventClipper) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_ERROR(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventError) IMGUI_DEBUG_LOG(__VA_ARGS__); else g.DebugLogSkippedErrors++; } while (0)", + ["IMGUI_DEBUG_LOG_FOCUS(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_FONT(...)"]="do { ImGuiContext* g2 = GImGui; if (g2 && g2->DebugLogFlags & ImGuiDebugLogFlags_EventFont) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_INPUTROUTING(...)"]="do{if (g.DebugLogFlags & ImGuiDebugLogFlags_EventInputRouting)IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_IO(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_NAV(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_POPUP(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_LOG_SELECTION(...)"]="do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventSelection) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)", + ["IMGUI_DEBUG_PRINTF(_FMT,...)"]="printf(_FMT, __VA_ARGS__)", + IMGUI_FONT_SIZE_MAX="(512.0f)", + IMGUI_FONT_SIZE_THRESHOLD_FOR_LOADADVANCEXONLYMODE="(128.0f)", + IMGUI_PAYLOAD_TYPE_COLOR_3F="\"_COL3F\"", + IMGUI_PAYLOAD_TYPE_COLOR_4F="\"_COL4F\"", + IMGUI_TABLE_MAX_COLUMNS="512", + ["IMGUI_TEST_ENGINE_ITEM_ADD(_ID,_BB,_ITEM_DATA)"]="((void)0)", + ["IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS)"]="((void)g)", + IMGUI_VERSION="\"1.92.7\"", + IMGUI_VERSION_NUM="19270", + IMGUI_WINDOW_HARD_MIN_SIZE="4.0f", + IMSTB_TEXTEDIT_CHARTYPE="char", + IMSTB_TEXTEDIT_GETWIDTH_NEWLINE="(-1.0f)", + IMSTB_TEXTEDIT_STRING="ImGuiInputTextState", + IMSTB_TEXTEDIT_UNDOCHARCOUNT="999", + IMSTB_TEXTEDIT_UNDOSTATECOUNT="99", + ["IM_ALLOC(_SIZE)"]="ImGui::MemAlloc(_SIZE)", + IM_ARRAYSIZE="IM_COUNTOF", + ["IM_ASSERT(_EXPR)"]="assert(_EXPR)", + ["IM_ASSERT_USER_ERROR(_EXPR,_MSG)"]="do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } } } while (0)", + ["IM_ASSERT_USER_ERROR_RET(_EXPR,_MSG)"]="do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return; } } while (0)", + ["IM_ASSERT_USER_ERROR_RETV(_EXPR,_RETV,_MSG)"]="do { if (!(_EXPR)) { if (ImGui::ErrorLog(_MSG)) { IM_ASSERT((_EXPR) && _MSG); } return _RETV; } } while (0)", + ["IM_BITARRAY_CLEARBIT(_ARRAY,_N)"]="((_ARRAY[(_N) >> 5] &= ~((ImU32)1 << ((_N) & 31))))", + ["IM_BITARRAY_TESTBIT(_ARRAY,_N)"]="((_ARRAY[(_N) >> 5] & ((ImU32)1 << ((_N) & 31))) != 0)", + ["IM_COL32(R,G,B,A)"]="(((ImU32)(A)<