See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_test_engine) for Automation & Testing.
See: [Dear ImGui Test Engine + Test Suite](https://github.com/ocornut/imgui_test_engine) for Automation & Testing.
For the purposes of getting search engines to crawl the wiki, here's a link to the [Crawable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki) (not for humans, [here's why](https://github-wiki-see.page/)).
For the purposes of getting search engines to crawl the wiki, here's a link to the [Crawlable Wiki](https://github-wiki-see.page/m/ocornut/imgui/wiki) (not for humans, [here's why](https://github-wiki-see.page/)).
Getting started? For first-time users having issues compiling/linking/running or issues loading fonts, please use [GitHub Discussions](https://github.com/ocornut/imgui/discussions). For ANY other questions, bug reports, requests, feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/issues). Please read and fill the New Issue template carefully.
Getting started? For first-time users having issues compiling/linking/running or issues loading fonts, please use [GitHub Discussions](https://github.com/ocornut/imgui/discussions). For ANY other questions, bug reports, requests, feedback, please post on [GitHub Issues](https://github.com/ocornut/imgui/issues). Please read and fill the New Issue template carefully.
ImGuiIDColumnUserID;// User id of the column (if specified by a TableSetupColumn() call)
ImGuiIDColumnUserID;// User id of the column (if specified by a TableSetupColumn() call)
ImS16ColumnIndex;// Index of the column
ImS16ColumnIndex;// Index of the column
ImS16SortOrder;// Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here)
ImS16SortOrder;// Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here)
ImGuiSortDirectionSortDirection:8;// ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending
ImGuiSortDirectionSortDirection;// ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending
ImGuiIDDebugHookIdInfo;// Will call core hooks: DebugHookIdInfo() from GetID functions, used by ID Stack Tool [next HoveredId/ActiveId to not pull in an extra cache-line]
ImGuiIDDebugHookIdInfo;// Will call core hooks: DebugHookIdInfo() from GetID functions, used by ID Stack Tool [next HoveredId/ActiveId to not pull in an extra cache-line]
ImGuiIDHoveredId;// Hovered widget, filled during the frame
ImGuiIDHoveredId;// Hovered widget, filled during the frame
ImGuiIDHoveredIdPreviousFrame;
ImGuiIDHoveredIdPreviousFrame;
boolHoveredIdAllowOverlap;
boolHoveredIdDisabled;// At least one widget passed the rect test, but has been discarded by disabled flag or popup inhibit. May be true even if HoveredId == 0.
floatHoveredIdTimer;// Measure contiguous hovering time
floatHoveredIdTimer;// Measure contiguous hovering time
floatHoveredIdNotActiveTimer;// Measure contiguous hovering time where the item has not been active
floatHoveredIdNotActiveTimer;// Measure contiguous hovering time where the item has not been active
boolHoveredIdAllowOverlap;
boolHoveredIdDisabled;// At least one widget passed the rect test, but has been discarded by disabled flag or popup inhibit. May be true even if HoveredId == 0.
boolItemUnclipByLog;// Disable ItemAdd() clipping, essentially a memory-locality friendly copy of LogEnabled
ImGuiIDActiveId;// Active widget
ImGuiIDActiveId;// Active widget
ImGuiIDActiveIdIsAlive;// Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
ImGuiIDActiveIdIsAlive;// Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
floatActiveIdTimer;
floatActiveIdTimer;
@ -2236,11 +2240,11 @@ struct ImGuiContext
ImGuiWindow*NavWindow;// Focused window for navigation. Could be called 'FocusedWindow'
ImGuiWindow*NavWindow;// Focused window for navigation. Could be called 'FocusedWindow'
ImGuiIDNavId;// Focused item for navigation
ImGuiIDNavId;// Focused item for navigation
ImGuiIDNavFocusScopeId;// Focused focus scope (e.g. selection code often wants to "clear other items" when landing on an item of the same scope)
ImGuiIDNavFocusScopeId;// Focused focus scope (e.g. selection code often wants to "clear other items" when landing on an item of the same scope)
ImVector<ImGuiFocusScopeData>NavFocusRoute;// Reversed copy focus scope stack for NavId (should contains NavFocusScopeId). This essentially follow the window->ParentWindowForFocusRoute chain.
ImGuiIDNavActivateId;// ~~ (g.ActiveId == 0) && (IsKeyPressed(ImGuiKey_Space) || IsKeyDown(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_NavGamepadActivate)) ? NavId : 0, also set when calling ActivateItem()
ImGuiIDNavActivateId;// ~~ (g.ActiveId == 0) && (IsKeyPressed(ImGuiKey_Space) || IsKeyDown(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_NavGamepadActivate)) ? NavId : 0, also set when calling ActivateItem()
ImVector<ImGuiFocusScopeData>NavFocusRoute;// Reversed copy focus scope stack for NavId (should contains NavFocusScopeId). This essentially follow the window->ParentWindowForFocusRoute chain.
ImGuiIDNavHighlightActivatedId;
ImGuiIDNavHighlightActivatedId;
floatNavHighlightActivatedTimer;
floatNavHighlightActivatedTimer;
ImGuiIDNavJustMovedToId;// Just navigated to this id (result of a successfully MoveRequest).
ImGuiIDNavJustMovedToId;// Just navigated to this id (result of a successfully MoveRequest).
@ -2485,6 +2489,7 @@ struct ImGuiContext
HoveredIdAllowOverlap=false;
HoveredIdAllowOverlap=false;
HoveredIdDisabled=false;
HoveredIdDisabled=false;
HoveredIdTimer=HoveredIdNotActiveTimer=0.0f;
HoveredIdTimer=HoveredIdNotActiveTimer=0.0f;
ItemUnclipByLog=false;
ActiveId=0;
ActiveId=0;
ActiveIdIsAlive=0;
ActiveIdIsAlive=0;
ActiveIdTimer=0.0f;
ActiveIdTimer=0.0f;
@ -2742,6 +2747,7 @@ struct IMGUI_API ImGuiWindow
ImGuiIDMoveId;// == window->GetID("#MOVE")
ImGuiIDMoveId;// == window->GetID("#MOVE")
ImGuiIDTabId;// == window->GetID("#TAB")
ImGuiIDTabId;// == window->GetID("#TAB")
ImGuiIDChildId;// ID of corresponding item in parent window (for navigation to return from child window to parent window)
ImGuiIDChildId;// ID of corresponding item in parent window (for navigation to return from child window to parent window)
ImGuiIDPopupId;// ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
ImVec2Scroll;
ImVec2Scroll;
ImVec2ScrollMax;
ImVec2ScrollMax;
ImVec2ScrollTarget;// target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
ImVec2ScrollTarget;// target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
@ -2769,7 +2775,6 @@ struct IMGUI_API ImGuiWindow
shortBeginOrderWithinParent;// Begin() order within immediate parent window, if we are a child window. Otherwise 0.
shortBeginOrderWithinParent;// Begin() order within immediate parent window, if we are a child window. Otherwise 0.
shortBeginOrderWithinContext;// Begin() order within entire imgui context. This is mostly used for debugging submission order related issues.
shortBeginOrderWithinContext;// Begin() order within entire imgui context. This is mostly used for debugging submission order related issues.
shortFocusOrder;// Order within WindowsFocusOrder[], altered when windows are focused.
shortFocusOrder;// Order within WindowsFocusOrder[], altered when windows are focused.
ImGuiIDPopupId;// ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
ImS8AutoFitFramesX,AutoFitFramesY;
ImS8AutoFitFramesX,AutoFitFramesY;
boolAutoFitOnlyGrows;
boolAutoFitOnlyGrows;
ImGuiDirAutoPosLastDirection;
ImGuiDirAutoPosLastDirection;
@ -3239,7 +3244,7 @@ namespace ImGui
{
{
// Windows
// Windows
// We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
// We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
// If this ever crash because g.CurrentWindow is NULL it means that either
// If this ever crashes because g.CurrentWindow is NULL, it means that either:
// - ImGui::NewFrame() has never been called, which is illegal.
// - ImGui::NewFrame() has never been called, which is illegal.
// - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
// - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
IMGUI_APIvoidLogBegin(ImGuiLogTypetype,intauto_open_depth);// -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
IMGUI_APIvoidLogBegin(ImGuiLogTypetype,intauto_open_depth);// -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
// - FIXME-TABLE: Would make sense to pre-compute expected scrollbar visibility/sizes to generally save a frame of feedback.
constfloatinner_content_max_x=table->OuterRect.Min.x+table->ColumnsAutoFitWidth;// Slightly misleading name but used for code symmetry with inner_content_max_y
clipper.Begin(items_count,GetTextLineHeightWithSpacing());// We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to.
clipper.Begin(items_count,GetTextLineHeightWithSpacing());// We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to.