using System.Numerics; namespace ImGuiNET { // Transient per-window data, reset at the beginning of the frame public unsafe struct NativeDrawContext { public Vector2 CursorPos; public Vector2 CursorPosPrevLine; public Vector2 CursorStartPos; public Vector2 CursorMaxPos; // Implicitly calculate the size of our contents, always extending. Saved into window->SizeContents at the end of the frame public float CurrentLineHeight; public float CurrentLineTextBaseOffset; public float PrevLineHeight; public float PrevLineTextBaseOffset; public float LogLinePosY; public int TreeDepth; public uint LastItemId; public ImRect LastItemRect; public byte LastItemHoveredAndUsable; // Item rectangle is hovered, and its window is currently interactable with (not blocked by a popup preventing access to the window) public byte LastItemHoveredRect; // Item rectangle is hovered, but its window may or not be currently interactable with (might be blocked by a popup preventing access to the window) public byte MenuBarAppending; public float MenuBarOffsetX; public ImVector ChildWindows; public Storage StateStorage; public int LayoutType; // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings. public float ItemWidth; // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window public float TextWrapPos; // == TextWrapPosStack.back() [empty == -1.0f] public byte AllowKeyboardFocus; // == AllowKeyboardFocusStack.back() [empty == true] public byte ButtonRepeat; // == ButtonRepeatStack.back() [empty == false] public ImVector ItemWidthStack; public ImVector TextWrapPosStack; public ImVector AllowKeyboardFocusStack; public ImVector ButtonRepeatStack; public ImVector GroupStack; public ColorEditFlags ColorEditMode; public fixed int StackSizesBackup[6]; // Store size of various stacks for asserting public float IndentX; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.) public float GroupOffsetX; public float ColumnsOffsetX; // Offset to the current column (if ColumnsCurrent > 0). public int ColumnsCurrent; public int ColumnsCount; public float ColumnsMinX; public float ColumnsMaxX; public float ColumnsStartPosY; public float ColumnsCellMinY; public float ColumnsCellMaxY; public byte ColumnsShowBorders; public uint ColumnsSetId; public ImVector ColumnsData; } }