// (minor and older changes stripped away, please see git history for details)
// 2023-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
// 2023-10-05: Inputs: Added support for extra ImGuiKey values: F13 to F24 function keys.
// 2023-07-18: Inputs: Revert ignoring mouse data on GLFW_CURSOR_DISABLED as it can be used differently. User may set ImGuiConfigFLags_NoMouse if desired. (#5625, #6609)
// 2023-06-12: Accept glfwGetTime() not returning a monotonically increasing value. This seems to happens on some Windows setup when peripherals disconnect, and is likely to also happen on browser + Emscripten. (#6491)
// 2023-04-04: Inputs: Added support for io.AddMouseSourceEvent() to discriminate ImGuiMouseSource_Mouse/ImGuiMouseSource_TouchScreen/ImGuiMouseSource_Pen on Windows ONLY, using a custom WndProc hook. (#2702)
// (minor and older changes stripped away, please see git history for details)
// 2023-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
// 2023-10-05: Inputs: Added support for extra ImGuiKey values: F13 to F24 function keys, app back/forward keys.
// 2023-04-06: Inputs: Avoid calling SDL_StartTextInput()/SDL_StopTextInput() as they don't only pertain to IME. It's unclear exactly what their relation is to IME. (#6306)
// 2023-04-04: Inputs: Added support for io.AddMouseSourceEvent() to discriminate ImGuiMouseSource_Mouse/ImGuiMouseSource_TouchScreen. (#2702)
// 2023-02-23: Accept SDL_GetPerformanceCounter() not returning a monotonically increasing value. (#6189, #6114, #3644)
// (minor and older changes stripped away, please see git history for details)
// 2023-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
// 2023-10-05: Inputs: Added support for extra ImGuiKey values: F13 to F24 function keys, app back/forward keys.
// 2023-05-04: Fixed build on Emscripten/iOS/Android. (#6391)
// 2023-04-06: Inputs: Avoid calling SDL_StartTextInput()/SDL_StopTextInput() as they don't only pertain to IME. It's unclear exactly what their relation is to IME. (#6306)
// 2023-04-04: Inputs: Added support for io.AddMouseSourceEvent() to discriminate ImGuiMouseSource_Mouse/ImGuiMouseSource_TouchScreen. (#2702)
// (minor and older changes stripped away, please see git history for details)
// 2023-XX-XX: Platform: Added support for multiple windows via the ImGuiPlatformIO interface.
// 2023-10-05: Inputs: Added support for extra ImGuiKey values: F13 to F24 function keys, app back/forward keys.
// 2023-09-25: Inputs: Synthesize key-down event on key-up for VK_SNAPSHOT / ImGuiKey_PrintScreen as Windows doesn't emit it (same behavior as GLFW/SDL).
// 2023-09-07: Inputs: Added support for keyboard codepage conversion for when application is compiled in MBCS mode and using a non-Unicode window.
// 2023-04-19: Added ImGui_ImplWin32_InitForOpenGL() to facilitate combining raw Win32/Winapi with OpenGL. (#3218)
TabBorderSize=0.0f;// Thickness of border around tabs.
TabMinWidthForCloseButton=0.0f;// Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected.
TabBarBorderSize=1.0f;// Thickness of tab-bar separator, which takes on the tab active color to denote focus.
TableAngledHeadersAngle=35.0f*(IM_PI/180.0f);// Angle of angled headers (supported values range from -50 degrees to +50 degrees).
ColorButtonPosition=ImGuiDir_Right;// Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
ButtonTextAlign=ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
SelectableTextAlign=ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
// We may later decide to test for different NoXXXInputs based on the active navigation input (mouse vs nav) but that may feel more confusing to the user.
elseif(rect_type==TRT_ColumnsContentHeadersUsed){ImGuiTableColumn*c=&table->Columns[n];returnImRect(c->WorkMinX,table->InnerClipRect.Min.y,c->ContentMaxXHeadersUsed,table->InnerClipRect.Min.y+table_instance->LastFirstRowHeight);}// Note: y1/y2 not always accurate
elseif(rect_type==TRT_ColumnsContentHeadersUsed){ImGuiTableColumn*c=&table->Columns[n];returnImRect(c->WorkMinX,table->InnerClipRect.Min.y,c->ContentMaxXHeadersUsed,table->InnerClipRect.Min.y+table_instance->LastTopHeadersRowHeight);}// Note: y1/y2 not always accurate
IMGUI_APIboolSmallButton(constchar*label);// button with FramePadding=(0,0) to easily embed within text
IMGUI_APIboolSmallButton(constchar*label);// button with (FramePadding.y == 0) to easily embed within text
IMGUI_APIboolInvisibleButton(constchar*str_id,constImVec2&size,ImGuiButtonFlagsflags=0);// flexible button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
IMGUI_APIboolArrowButton(constchar*str_id,ImGuiDirdir);// square button with an arrow shape
IMGUI_APIboolCheckbox(constchar*label,bool*v);
@ -529,8 +529,9 @@ namespace ImGui
// Widgets: Images
// - Read about ImTextureID here: https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
// - Note that ImageButton() adds style.FramePadding*2.0f to provided size. This is in order to facilitate fitting an image in a button.
IMGUI_APIvoidTableSetupScrollFreeze(intcols,introws);// lock columns/rows so they stay visible when scrolled.
IMGUI_APIvoidTableHeadersRow();// submit all headers cells based on data provided to TableSetupColumn() + submit context menu
IMGUI_APIvoidTableHeader(constchar*label);// submit one header cell manually (rarely used)
IMGUI_APIvoidTableHeadersRow();// submit a row with headers cells based on data provided to TableSetupColumn() + submit context menu
IMGUI_APIvoidTableAngledHeadersRow();// submit a row with angled headers for every column with the ImGuiTableColumnFlags_AngledHeader flag. MUST BE FIRST ROW.
// Tables: Sorting & Miscellaneous functions
// - Sorting: call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting.
@ -1158,6 +1160,7 @@ enum ImGuiComboFlags_
ImGuiComboFlags_HeightLargest=1<<4,// As many fitting items as possible
ImGuiComboFlags_NoArrowButton=1<<5,// Display on the preview box without the square arrow button
ImGuiComboFlags_NoPreview=1<<6,// Display only a square arrow button
ImGuiComboFlags_WidthFitPreview=1<<7,// Width dynamically calculated from preview contents
ImGuiTableFlags_SortMulti=1<<26,// Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).
ImGuiTableFlags_SortTristate=1<<27,// Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).
// Miscellaneous
ImGuiTableFlags_HighlightHoveredColumn=1<<28,// Highlight column headers when hovered (may evolve into a fuller highlight)
ImGuiTableColumnFlags_NoSort=1<<9,// Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table).
ImGuiTableColumnFlags_NoSortAscending=1<<10,// Disable ability to sort in the ascending direction.
ImGuiTableColumnFlags_NoSortDescending=1<<11,// Disable ability to sort in the descending direction.
ImGuiTableColumnFlags_NoHeaderLabel=1<<12,// TableHeadersRow() will not submit label for this column. Convenient for some small columns. Name will still appear in context menu.
ImGuiTableColumnFlags_NoHeaderLabel=1<<12,// TableHeadersRow() will not submit horizontal label for this column. Convenient for some small columns. Name will still appear in context menu or in angled headers.
ImGuiTableColumnFlags_NoHeaderWidth=1<<13,// Disable header text width contribution to automatic column width.
ImGuiTableColumnFlags_PreferSortAscending=1<<14,// Make the initial sort direction Ascending when first sorting on this column (default).
ImGuiTableColumnFlags_PreferSortDescending=1<<15,// Make the initial sort direction Descending when first sorting on this column.
ImGuiTableColumnFlags_IndentEnable=1<<16,// Use current Indent value when entering cell (default for column 0).
ImGuiTableColumnFlags_IndentDisable=1<<17,// Ignore current Indent value when entering cell (default for columns > 0). Indentation changes _within_ the cell will still be honored.
ImGuiTableColumnFlags_AngledHeader=1<<18,// TableHeadersRow() will submit an angled header row for this column. Note this will add an extra row.
// Output status flags, read-only via TableGetColumnFlags()
ImGuiTableColumnFlags_IsEnabled=1<<24,// Status: is enabled == not hidden by user/api (referred to as "Hide" in _DefaultHide and _NoHide) flags.
ImGuiKey_AppBack,// Available on some keyboard/mouses. Often referred as "Browser Back"
ImGuiKey_AppForward,
// Gamepad (some of those are analog values, 0.0f to 1.0f) // NAVIGATION ACTION
// (download controller mapping PNG/PSD at http://dearimgui.com/controls_sheets)
@ -2000,6 +2010,7 @@ struct ImGuiStyle
floatTabBorderSize;// Thickness of border around tabs.
floatTabMinWidthForCloseButton;// Minimum width for close button to appear on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected.
floatTabBarBorderSize;// Thickness of tab-bar separator, which takes on the tab active color to denote focus.
floatTableAngledHeadersAngle;// Angle of angled headers (supported values range from -50.0f degrees to +50.0f degrees).
ImGuiDirColorButtonPosition;// Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
ImVec2ButtonTextAlign;// Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
ImVec2SelectableTextAlign;// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
ImGui::CheckboxFlags("ImGuiTableFlags_NoBordersInBodyUntilResize",&flags,ImGuiTableFlags_NoBordersInBodyUntilResize);ImGui::SameLine();HelpMarker("Disable vertical borders in columns Body until hovered for resize (borders will always appear in Headers)");
ImGui::SameLine();HelpMarker("Enable AngledHeader on all columns. Best enabled on selected narrow columns (see \"Angled headers\" section of the demo).");
// You may use this file to debug, understand or extend Dear ImGui features but we don't provide any guarantee of forward compatibility.
// To implement maths operators for ImVec2 (disabled by default to not conflict with using IM_VEC2_CLASS_EXTRA with your own math types+operators), use:
/*
#define IMGUI_DEFINE_MATH_OPERATORS
#include"imgui_internal.h"
*/
/*
@ -2916,16 +2911,17 @@ struct ImGuiTableCellData
};
// Per-instance data that needs preserving across frames (seemingly most others do not need to be preserved aside from debug needs. Does that means they could be moved to ImGuiTableTempData?)
// sizeof() ~ 24 bytes
structImGuiTableInstanceData
{
ImGuiIDTableInstanceID;
floatLastOuterHeight;// Outer height from last frame
floatLastFirstRowHeight;// Height of first row from last frame (FIXME: this is used as "header height" and may be reworked)
floatLastTopHeadersRowHeight;// Height of first consecutive header rows from last frame (FIXME: this is used assuming consecutive headers are in same frozen set)
floatLastFrozenHeight;// Height of frozen section from last frame
intHoveredRowLast;// Index of row which was hovered last frame.
intHoveredRowNext;// Index of row hovered this frame, set after encountering it.
// FIXME-TABLE: more transient data could be stored in a stacked ImGuiTableTempData: e.g. SortSpecs, incoming RowData
@ -2977,6 +2973,8 @@ struct IMGUI_API ImGuiTable
floatResizedColumnNextWidth;
floatResizeLockMinContentsX2;// Lock minimum contents width while resizing down in order to not create feedback loops. But we allow growing the table.
floatRefScale;// Reference scale to be able to rescale columns on font/dpi changes.
floatAngledHeadersHeight;// Set by TableAngledHeadersRow(), used in TableUpdateLayout()
floatAngledHeadersSlope;// Set by TableAngledHeadersRow(), used in TableUpdateLayout()
ImRectOuterRect;// Note: for non-scrolling table, OuterRect.Max.y is often FLT_MAX until EndTable(), unless a height has been specified in BeginTable().
ImRectInnerRect;// InnerRect but without decoration. As with OuterRect, for non-scrolling tables, InnerRect.Max.y is
ImRectWorkRect;
@ -2999,8 +2997,10 @@ struct IMGUI_API ImGuiTable
ImGuiTableColumnIdxColumnsEnabledCount;// Number of enabled columns (<= ColumnsCount)
ImGuiTableColumnIdxColumnsEnabledFixedCount;// Number of enabled columns (<= ColumnsCount)
ImGuiTableColumnIdxDeclColumnsCount;// Count calls to TableSetupColumn()
ImGuiTableColumnIdxAngledHeadersCount;// Count columns with angled headers
ImGuiTableColumnIdxHoveredColumnBody;// Index of column whose visible region is being hovered. Important: == ColumnsCount when hovering empty region after the right-most column!
ImGuiTableColumnIdxHoveredColumnBorder;// Index of column whose right-border is being hovered (for resizing).
ImGuiTableColumnIdxHighlightColumnHeader;// Index of column which should be highlighted.
ImGuiTableColumnIdxAutoFitSingleColumn;// Index of single column requesting auto-fit.
ImGuiTableColumnIdxResizedColumn;// Index of column being resized. Reset when InstanceCurrent==0.
ImGuiTableColumnIdxLastResizedColumn;// Index of column being resized from previous frame.
@ -3033,6 +3033,8 @@ struct IMGUI_API ImGuiTable
boolIsResetDisplayOrderRequest;
boolIsUnfrozenRows;// Set when we got past the frozen row.
boolIsDefaultSizingPolicy;// Set if user didn't explicitly set a sizing policy in BeginTable()
boolIsActiveIdAliveBeforeTable;
boolIsActiveIdInTable;
boolHasScrollbarYCurr;// Whether ANY instance of this table had a vertical scrollbar during the current frame.
boolHasScrollbarYPrev;// Whether ANY instance of this table had a vertical scrollbar during the previous.
// Transient data that are only needed between BeginTable() and EndTable(), those buffers are shared (1 per level of stacked table).
// - Accessing those requires chasing an extra pointer so for very frequently used data we leave them in the main table structure.
// - We also leave out of this structure data that tend to be particularly useful for debugging/metrics.
// sizeof() ~ 112 bytes.
// sizeof() ~ 120 bytes.
structIMGUI_APIImGuiTableTempData
{
intTableIndex;// Index in g.Tables.Buf[] pool
floatLastTimeActive;// Last timestamp this structure was used
floatAngledheadersExtraWidth;// Used in EndTable()
ImVec2UserOuterSize;// outer_size.x passed to BeginTable()
ImDrawListSplitterDrawSplitter;
@ -3480,8 +3483,10 @@ namespace ImGui
IMGUI_APIintTableGetHoveredColumn();// May use (TableGetColumnFlags() & ImGuiTableColumnFlags_IsHovered) instead. Return hovered column. return -1 when table is not hovered. return columns_count if the unused space at the right of visible columns is hovered.
IMGUI_APIintTableGetHoveredRow();// Retrieve *PREVIOUS FRAME* hovered row. This difference with TableGetHoveredColumn() is the reason why this is not public yet.
draw_list->AddRectFilled(table->BgClipRect.Min,table->BgClipRect.Max,GetColorU32(ImGuiCol_TableHeaderBg,0.25f));// FIXME-STYLE: Change row background with an arbitrary color.
IM_ASSERT((flags&(ImGuiComboFlags_NoArrowButton|ImGuiComboFlags_NoPreview))!=(ImGuiComboFlags_NoArrowButton|ImGuiComboFlags_NoPreview));// Can't use both flags together