diff --git a/cimgui/cimgui.h b/cimgui/cimgui.h index 53b64c7..e68f2c8 100644 --- a/cimgui/cimgui.h +++ b/cimgui/cimgui.h @@ -35,77 +35,77 @@ typedef unsigned long long ImU64; #ifdef CIMGUI_DEFINE_ENUMS_AND_STRUCTS /////////////// BEGIN AUTOGENERATED SEGMENT -struct ImDrawChannel; +struct ImDrawChannel; // Temporary storage for outputting drawing commands out of order, used by ImDrawList::ChannelsSplit() typedef struct ImDrawChannel ImDrawChannel; -struct ImDrawCmd; +struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call) typedef struct ImDrawCmd ImDrawCmd; -struct ImDrawData; +struct ImDrawData; // All draw command lists required to render the frame typedef struct ImDrawData ImDrawData; -struct ImDrawList; +struct ImDrawList; // A single draw command list (generally one per window) typedef struct ImDrawList ImDrawList; -struct ImDrawListSharedData; +struct ImDrawListSharedData; // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself) typedef struct ImDrawListSharedData ImDrawListSharedData; -struct ImDrawVert; +struct ImDrawVert; // A single vertex (20 bytes by default, override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT) typedef struct ImDrawVert ImDrawVert; -struct ImFont; +struct ImFont; // Runtime data for a single font within a parent ImFontAtlas typedef struct ImFont ImFont; -struct ImFontAtlas; +struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader typedef struct ImFontAtlas ImFontAtlas; -struct ImFontConfig; +struct ImFontConfig; // Configuration data when adding a font or merging fonts typedef struct ImFontConfig ImFontConfig; -struct ImColor; +struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 typedef struct ImColor ImColor; -struct ImGuiIO; +struct ImGuiIO; // Main configuration and I/O between your application and ImGui typedef struct ImGuiIO ImGuiIO; -struct ImGuiOnceUponAFrame; +struct ImGuiOnceUponAFrame; // Simple helper for running a block of code not more than once a frame, used by IMGUI_ONCE_UPON_A_FRAME macro typedef struct ImGuiOnceUponAFrame ImGuiOnceUponAFrame; -struct ImGuiStorage; +struct ImGuiStorage; // Simple custom key value storage typedef struct ImGuiStorage ImGuiStorage; -struct ImGuiStyle; +struct ImGuiStyle; // Runtime data for styling/colors typedef struct ImGuiStyle ImGuiStyle; -struct ImGuiTextFilter; +struct ImGuiTextFilter; // Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]" typedef struct ImGuiTextFilter ImGuiTextFilter; -struct ImGuiTextBuffer; +struct ImGuiTextBuffer; // Text buffer for logging/accumulating text typedef struct ImGuiTextBuffer ImGuiTextBuffer; -struct ImGuiTextEditCallbackData; +struct ImGuiTextEditCallbackData; // Shared state of ImGui::InputText() when using custom ImGuiTextEditCallback (rare/advanced use) typedef struct ImGuiTextEditCallbackData ImGuiTextEditCallbackData; -struct ImGuiSizeCallbackData; +struct ImGuiSizeCallbackData; // Structure used to constraint window size in custom ways when using custom ImGuiSizeCallback (rare/advanced use) typedef struct ImGuiSizeCallbackData ImGuiSizeCallbackData; -struct ImGuiListClipper; +struct ImGuiListClipper; // Helper to manually clip large list of items typedef struct ImGuiListClipper ImGuiListClipper; -struct ImGuiPayload; +struct ImGuiPayload; // User data payload for drag and drop operations typedef struct ImGuiPayload ImGuiPayload; -struct ImGuiContext; +struct ImGuiContext; // ImGui context (opaque) typedef struct ImGuiContext ImGuiContext; -typedef void* ImTextureID; -typedef unsigned int ImU32; -typedef unsigned int ImGuiID; -typedef unsigned short ImWchar; -typedef int ImGuiCol; -typedef int ImGuiDir; -typedef int ImGuiCond; -typedef int ImGuiKey; -typedef int ImGuiNavInput; -typedef int ImGuiMouseCursor; -typedef int ImGuiStyleVar; -typedef int ImDrawCornerFlags; -typedef int ImDrawListFlags; -typedef int ImFontAtlasFlags; -typedef int ImGuiBackendFlags; -typedef int ImGuiColorEditFlags; -typedef int ImGuiColumnsFlags; -typedef int ImGuiConfigFlags; -typedef int ImGuiDragDropFlags; -typedef int ImGuiComboFlags; -typedef int ImGuiFocusedFlags; -typedef int ImGuiHoveredFlags; -typedef int ImGuiInputTextFlags; -typedef int ImGuiSelectableFlags; -typedef int ImGuiTreeNodeFlags; -typedef int ImGuiWindowFlags; +typedef void* ImTextureID; // User data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) +typedef unsigned int ImU32; // 32-bit unsigned integer (typically used to store packed colors) +typedef unsigned int ImGuiID; // Unique ID used by widgets (typically hashed from a stack of string) +typedef unsigned short ImWchar; // Character for keyboard input/display +typedef int ImGuiCol; // enum: a color identifier for styling // enum ImGuiCol_ +typedef int ImGuiDir; // enum: a cardinal direction // enum ImGuiDir_ +typedef int ImGuiCond; // enum: a condition for Set*() // enum ImGuiCond_ +typedef int ImGuiKey; // enum: a key identifier (ImGui-side enum) // enum ImGuiKey_ +typedef int ImGuiNavInput; // enum: an input identifier for navigation // enum ImGuiNavInput_ +typedef int ImGuiMouseCursor; // enum: a mouse cursor identifier // enum ImGuiMouseCursor_ +typedef int ImGuiStyleVar; // enum: a variable identifier for styling // enum ImGuiStyleVar_ +typedef int ImDrawCornerFlags; // flags: for ImDrawList::AddRect*() etc. // enum ImDrawCornerFlags_ +typedef int ImDrawListFlags; // flags: for ImDrawList // enum ImDrawListFlags_ +typedef int ImFontAtlasFlags; // flags: for ImFontAtlas // enum ImFontAtlasFlags_ +typedef int ImGuiBackendFlags; // flags: for io.BackendFlags // enum ImGuiBackendFlags_ +typedef int ImGuiColorEditFlags; // flags: for ColorEdit*(), ColorPicker*() // enum ImGuiColorEditFlags_ +typedef int ImGuiColumnsFlags; // flags: for *Columns*() // enum ImGuiColumnsFlags_ +typedef int ImGuiConfigFlags; // flags: for io.ConfigFlags // enum ImGuiConfigFlags_ +typedef int ImGuiDragDropFlags; // flags: for *DragDrop*() // enum ImGuiDragDropFlags_ +typedef int ImGuiComboFlags; // flags: for BeginCombo() // enum ImGuiComboFlags_ +typedef int ImGuiFocusedFlags; // flags: for IsWindowFocused() // enum ImGuiFocusedFlags_ +typedef int ImGuiHoveredFlags; // flags: for IsItemHovered() etc. // enum ImGuiHoveredFlags_ +typedef int ImGuiInputTextFlags; // flags: for InputText*() // enum ImGuiInputTextFlags_ +typedef int ImGuiSelectableFlags; // flags: for Selectable() // enum ImGuiSelectableFlags_ +typedef int ImGuiTreeNodeFlags; // flags: for TreeNode*(),CollapsingHeader()// enum ImGuiTreeNodeFlags_ +typedef int ImGuiWindowFlags; // flags: for Begin*() // enum ImGuiWindowFlags_ typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data); typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data); -typedef unsigned long long ImU64; +typedef unsigned long long ImU64; // 64-bit unsigned integer struct ImVec2 { float x, y; @@ -118,117 +118,117 @@ struct ImVec4 typedef struct ImVec4 ImVec4; enum ImGuiWindowFlags_ { - ImGuiWindowFlags_NoTitleBar = 1 << 0, - ImGuiWindowFlags_NoResize = 1 << 1, - ImGuiWindowFlags_NoMove = 1 << 2, - ImGuiWindowFlags_NoScrollbar = 1 << 3, - ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, - ImGuiWindowFlags_NoCollapse = 1 << 5, - ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, - ImGuiWindowFlags_NoSavedSettings = 1 << 8, - ImGuiWindowFlags_NoInputs = 1 << 9, - ImGuiWindowFlags_MenuBar = 1 << 10, - ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, - ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, - ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, - ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, - ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, - ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, - ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, - ImGuiWindowFlags_NoNavInputs = 1 << 18, - ImGuiWindowFlags_NoNavFocus = 1 << 19, + ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar + ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip + ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window + ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programatically) + ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set. + ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it + ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame + ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file + ImGuiWindowFlags_NoInputs = 1 << 9, // Disable catching mouse or keyboard inputs, hovering test with pass through. + ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar + ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section. + ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state + ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programatically giving it focus) + ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y) + ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x) + ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) + ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // [BETA] Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. + ImGuiWindowFlags_NoNavInputs = 1 << 18, // No gamepad/keyboard navigation within the window + ImGuiWindowFlags_NoNavFocus = 1 << 19, // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB) ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus, - ImGuiWindowFlags_NavFlattened = 1 << 23, - ImGuiWindowFlags_ChildWindow = 1 << 24, - ImGuiWindowFlags_Tooltip = 1 << 25, - ImGuiWindowFlags_Popup = 1 << 26, - ImGuiWindowFlags_Modal = 1 << 27, - ImGuiWindowFlags_ChildMenu = 1 << 28 + ImGuiWindowFlags_NavFlattened = 1 << 23, // [BETA] Allow gamepad/keyboard navigation to cross over parent border to this child (only use on child that have no scrolling!) + ImGuiWindowFlags_ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild() + ImGuiWindowFlags_Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip() + ImGuiWindowFlags_Popup = 1 << 26, // Don't use! For internal use by BeginPopup() + ImGuiWindowFlags_Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal() + ImGuiWindowFlags_ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu() }; enum ImGuiInputTextFlags_ { - ImGuiInputTextFlags_CharsDecimal = 1 << 0, - ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, - ImGuiInputTextFlags_CharsUppercase = 1 << 2, - ImGuiInputTextFlags_CharsNoBlank = 1 << 3, - ImGuiInputTextFlags_AutoSelectAll = 1 << 4, - ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, - ImGuiInputTextFlags_CallbackCompletion = 1 << 6, - ImGuiInputTextFlags_CallbackHistory = 1 << 7, - ImGuiInputTextFlags_CallbackAlways = 1 << 8, - ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, - ImGuiInputTextFlags_AllowTabInput = 1 << 10, - ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, - ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, - ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, - ImGuiInputTextFlags_ReadOnly = 1 << 14, - ImGuiInputTextFlags_Password = 1 << 15, - ImGuiInputTextFlags_NoUndoRedo = 1 << 16, - ImGuiInputTextFlags_CharsScientific = 1 << 17, - ImGuiInputTextFlags_Multiline = 1 << 20 + ImGuiInputTextFlags_CharsDecimal = 1 << 0, // Allow 0123456789.+-*/ + ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef + ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z + ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs + ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus + ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to when the value was modified) + ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Call user function on pressing TAB (for completion handling) + ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Call user function on pressing Up/Down arrows (for history handling) + ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Call user function every time. User code may query cursor position, modify text buffer. + ImGuiInputTextFlags_CallbackCharFilter = 1 */EventChar to replace/filter input, or return 1 to discard character. + ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field + ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter). + ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally + ImGuiInputTextFlags_AlwaysInsertMode = 1 << 13, // Insert mode + ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode + ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*' + ImGuiInputTextFlags_NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID(). + ImGuiInputTextFlags_CharsScientific = 1 << 17, // Allow 0123456789.+-*/eE (Scientific notation input) + ImGuiInputTextFlags_Multiline = 1 << 20 // For internal use by InputTextMultiline() }; enum ImGuiTreeNodeFlags_ { - ImGuiTreeNodeFlags_Selected = 1 << 0, - ImGuiTreeNodeFlags_Framed = 1 << 1, - ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2, - ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, - ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, - ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, - ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, - ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, - ImGuiTreeNodeFlags_Leaf = 1 << 8, - ImGuiTreeNodeFlags_Bullet = 1 << 9, - ImGuiTreeNodeFlags_FramePadding = 1 << 10, - ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, + ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected + ImGuiTreeNodeFlags_Framed = 1 << 1, // Full colored frame (e.g. for CollapsingHeader) + ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one + ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack + ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes) + ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open + ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node + ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open. + ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes). + ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow + ImGuiTreeNodeFlags_FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding(). + ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop) ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoAutoOpenOnLog }; enum ImGuiSelectableFlags_ { - ImGuiSelectableFlags_DontClosePopups = 1 << 0, - ImGuiSelectableFlags_SpanAllColumns = 1 << 1, - ImGuiSelectableFlags_AllowDoubleClick = 1 << 2 + ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this don't close parent popup window + ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column) + ImGuiSelectableFlags_AllowDoubleClick = 1 << 2 // Generate press events on double clicks too }; enum ImGuiComboFlags_ { - ImGuiComboFlags_PopupAlignLeft = 1 << 0, - ImGuiComboFlags_HeightSmall = 1 << 1, - ImGuiComboFlags_HeightRegular = 1 << 2, - ImGuiComboFlags_HeightLarge = 1 << 3, - ImGuiComboFlags_HeightLargest = 1 << 4, - ImGuiComboFlags_NoArrowButton = 1 << 5, - ImGuiComboFlags_NoPreview = 1 << 6, + ImGuiComboFlags_PopupAlignLeft = 1 << 0, // Align the popup toward the left by default + ImGuiComboFlags_HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() + ImGuiComboFlags_HeightRegular = 1 << 2, // Max ~8 items visible (default) + ImGuiComboFlags_HeightLarge = 1 << 3, // Max ~20 items visible + 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_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest }; enum ImGuiFocusedFlags_ { - ImGuiFocusedFlags_ChildWindows = 1 << 0, - ImGuiFocusedFlags_RootWindow = 1 << 1, - ImGuiFocusedFlags_AnyWindow = 1 << 2, + ImGuiFocusedFlags_ChildWindows = 1 << 0, // IsWindowFocused(): Return true if any children of the window is focused + ImGuiFocusedFlags_RootWindow = 1 << 1, // IsWindowFocused(): Test from root window (top most parent of the current hierarchy) + ImGuiFocusedFlags_AnyWindow = 1 << 2, // IsWindowFocused(): Return true if any window is focused ImGuiFocusedFlags_RootAndChildWindows = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows }; enum ImGuiHoveredFlags_ { - ImGuiHoveredFlags_Default = 0, - ImGuiHoveredFlags_ChildWindows = 1 << 0, - ImGuiHoveredFlags_RootWindow = 1 << 1, - ImGuiHoveredFlags_AnyWindow = 1 << 2, - ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 3, - ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 5, - ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 6, + ImGuiHoveredFlags_Default = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them. + ImGuiHoveredFlags_ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered + ImGuiHoveredFlags_RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy) + ImGuiHoveredFlags_AnyWindow = 1 << 2, // IsWindowHovered() only: Return true if any window is hovered + ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 3, // Return true even if a popup window is normally blocking access to this item/window + ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 5, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns. + ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 6, // Return true even if the position is overlapped by another window ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped, ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows }; enum ImGuiDragDropFlags_ { - ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0, - ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, - ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, - ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, - ImGuiDragDropFlags_SourceExtern = 1 << 4, - ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, - ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, - ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect + ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior. + ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return true, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item. + ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item. + ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit. + ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously. + ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered. + ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target. + ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery. }; enum ImGuiDir_ { @@ -256,67 +256,67 @@ enum ImGuiKey_ ImGuiKey_Space, ImGuiKey_Enter, ImGuiKey_Escape, - ImGuiKey_A, - ImGuiKey_C, - ImGuiKey_V, - ImGuiKey_X, - ImGuiKey_Y, - ImGuiKey_Z, + ImGuiKey_A, // for text edit CTRL+A: select all + ImGuiKey_C, // for text edit CTRL+C: copy + ImGuiKey_V, // for text edit CTRL+V: paste + ImGuiKey_X, // for text edit CTRL+X: cut + ImGuiKey_Y, // for text edit CTRL+Y: redo + ImGuiKey_Z, // for text edit CTRL+Z: undo ImGuiKey_COUNT }; enum ImGuiNavInput_ { - ImGuiNavInput_Activate, - ImGuiNavInput_Cancel, - ImGuiNavInput_Input, - ImGuiNavInput_Menu, - ImGuiNavInput_DpadLeft, - ImGuiNavInput_DpadRight, - ImGuiNavInput_DpadUp, - ImGuiNavInput_DpadDown, - ImGuiNavInput_LStickLeft, - ImGuiNavInput_LStickRight, - ImGuiNavInput_LStickUp, - ImGuiNavInput_LStickDown, - ImGuiNavInput_FocusPrev, - ImGuiNavInput_FocusNext, - ImGuiNavInput_TweakSlow, - ImGuiNavInput_TweakFast, - ImGuiNavInput_KeyMenu_, - ImGuiNavInput_KeyLeft_, - ImGuiNavInput_KeyRight_, - ImGuiNavInput_KeyUp_, - ImGuiNavInput_KeyDown_, + ImGuiNavInput_Activate, // activate / open / toggle / tweak value // e.g. Cross (PS4), A (Xbox), A (Switch), Space (Keyboard) + ImGuiNavInput_Cancel, // cancel / close / exit // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard) + ImGuiNavInput_Input, // text input / on-screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard) + ImGuiNavInput_Menu, // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard) + ImGuiNavInput_DpadLeft, // move / tweak / resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard) + ImGuiNavInput_DpadRight, // + ImGuiNavInput_DpadUp, // + ImGuiNavInput_DpadDown, // + ImGuiNavInput_LStickLeft, // scroll / move window (w/ PadMenu) // e.g. Left Analog Stick Left/Right/Up/Down + ImGuiNavInput_LStickRight, // + ImGuiNavInput_LStickUp, // + ImGuiNavInput_LStickDown, // + ImGuiNavInput_FocusPrev, // next window (w/ PadMenu) // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) + ImGuiNavInput_FocusNext, // prev window (w/ PadMenu) // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) + ImGuiNavInput_TweakSlow, // slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch) + ImGuiNavInput_TweakFast, // faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch) + ImGuiNavInput_KeyMenu_, // toggle menu // = io.KeyAlt + ImGuiNavInput_KeyLeft_, // move left // = Arrow keys + ImGuiNavInput_KeyRight_, // move right + ImGuiNavInput_KeyUp_, // move up + ImGuiNavInput_KeyDown_, // move down ImGuiNavInput_COUNT, ImGuiNavInput_InternalStart_ = ImGuiNavInput_KeyMenu_ }; enum ImGuiConfigFlags_ { - ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, - ImGuiConfigFlags_NavEnableGamepad = 1 << 1, - ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, - ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, - ImGuiConfigFlags_NoMouse = 1 << 4, - ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, - ImGuiConfigFlags_IsSRGB = 1 << 20, - ImGuiConfigFlags_IsTouchScreen = 1 << 21 + ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.KeyDown[]. + ImGuiConfigFlags_NavEnableGamepad = 1 << 1, // Master gamepad navigation enable flag. This is mostly to instruct your imgui back-end to fill io.NavInputs[]. Back-end also needs to set ImGuiBackendFlags_HasGamepad. + ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your binding, otherwise ImGui will react as if the mouse is jumping around back and forth. + ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, // Instruct navigation to not set the io.WantCaptureKeyboard flag with io.NavActive is set. + ImGuiConfigFlags_NoMouse = 1 << 4, // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information back-end + ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct back-end to not alter mouse cursor shape and visibility. + ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware. + ImGuiConfigFlags_IsTouchScreen = 1 << 21 // Application is using a touch screen instead of a mouse. }; enum ImGuiBackendFlags_ { - ImGuiBackendFlags_HasGamepad = 1 << 0, - ImGuiBackendFlags_HasMouseCursors = 1 << 1, - ImGuiBackendFlags_HasSetMousePos = 1 << 2 + ImGuiBackendFlags_HasGamepad = 1 << 0, // Back-end has a connected gamepad. + ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Back-end can honor GetMouseCursor() values and change the OS cursor shape. + ImGuiBackendFlags_HasSetMousePos = 1 << 2 // Back-end can honor io.WantSetMousePos and reposition the mouse (only used if ImGuiConfigFlags_NavEnableSetMousePos is set). }; enum ImGuiCol_ { ImGuiCol_Text, ImGuiCol_TextDisabled, - ImGuiCol_WindowBg, - ImGuiCol_ChildBg, - ImGuiCol_PopupBg, + ImGuiCol_WindowBg, // Background of normal windows + ImGuiCol_ChildBg, // Background of child windows + ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows ImGuiCol_Border, ImGuiCol_BorderShadow, - ImGuiCol_FrameBg, + ImGuiCol_FrameBg, // Background of checkbox, radio button, plot, slider, text input ImGuiCol_FrameBgHovered, ImGuiCol_FrameBgActive, ImGuiCol_TitleBg, @@ -347,182 +347,182 @@ enum ImGuiCol_ ImGuiCol_PlotHistogram, ImGuiCol_PlotHistogramHovered, ImGuiCol_TextSelectedBg, - ImGuiCol_ModalWindowDarkening, + ImGuiCol_ModalWindowDarkening, // darken/colorize entire screen behind a modal window, when one is active ImGuiCol_DragDropTarget, - ImGuiCol_NavHighlight, - ImGuiCol_NavWindowingHighlight, + ImGuiCol_NavHighlight, // gamepad/keyboard: current highlighted item + ImGuiCol_NavWindowingHighlight, // gamepad/keyboard: when holding NavMenu to focus/move/resize windows ImGuiCol_COUNT }; enum ImGuiStyleVar_ { - ImGuiStyleVar_Alpha, - ImGuiStyleVar_WindowPadding, - ImGuiStyleVar_WindowRounding, - ImGuiStyleVar_WindowBorderSize, - ImGuiStyleVar_WindowMinSize, - ImGuiStyleVar_WindowTitleAlign, - ImGuiStyleVar_ChildRounding, - ImGuiStyleVar_ChildBorderSize, - ImGuiStyleVar_PopupRounding, - ImGuiStyleVar_PopupBorderSize, - ImGuiStyleVar_FramePadding, - ImGuiStyleVar_FrameRounding, - ImGuiStyleVar_FrameBorderSize, - ImGuiStyleVar_ItemSpacing, - ImGuiStyleVar_ItemInnerSpacing, - ImGuiStyleVar_IndentSpacing, - ImGuiStyleVar_ScrollbarSize, - ImGuiStyleVar_ScrollbarRounding, - ImGuiStyleVar_GrabMinSize, - ImGuiStyleVar_GrabRounding, - ImGuiStyleVar_ButtonTextAlign, + ImGuiStyleVar_Alpha, // float Alpha + ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding + ImGuiStyleVar_WindowRounding, // float WindowRounding + ImGuiStyleVar_WindowBorderSize, // float WindowBorderSize + ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize + ImGuiStyleVar_WindowTitleAlign, // ImVec2 WindowTitleAlign + ImGuiStyleVar_ChildRounding, // float ChildRounding + ImGuiStyleVar_ChildBorderSize, // float ChildBorderSize + ImGuiStyleVar_PopupRounding, // float PopupRounding + ImGuiStyleVar_PopupBorderSize, // float PopupBorderSize + ImGuiStyleVar_FramePadding, // ImVec2 FramePadding + ImGuiStyleVar_FrameRounding, // float FrameRounding + ImGuiStyleVar_FrameBorderSize, // float FrameBorderSize + ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing + ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing + ImGuiStyleVar_IndentSpacing, // float IndentSpacing + ImGuiStyleVar_ScrollbarSize, // float ScrollbarSize + ImGuiStyleVar_ScrollbarRounding, // float ScrollbarRounding + ImGuiStyleVar_GrabMinSize, // float GrabMinSize + ImGuiStyleVar_GrabRounding, // float GrabRounding + ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign ImGuiStyleVar_COUNT }; enum ImGuiColorEditFlags_ { - ImGuiColorEditFlags_NoAlpha = 1 << 1, - ImGuiColorEditFlags_NoPicker = 1 << 2, - ImGuiColorEditFlags_NoOptions = 1 << 3, - ImGuiColorEditFlags_NoSmallPreview = 1 << 4, - ImGuiColorEditFlags_NoInputs = 1 << 5, - ImGuiColorEditFlags_NoTooltip = 1 << 6, - ImGuiColorEditFlags_NoLabel = 1 << 7, - ImGuiColorEditFlags_NoSidePreview = 1 << 8, - ImGuiColorEditFlags_AlphaBar = 1 << 9, - ImGuiColorEditFlags_AlphaPreview = 1 << 10, - ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 11, - ImGuiColorEditFlags_HDR = 1 << 12, - ImGuiColorEditFlags_RGB = 1 << 13, - ImGuiColorEditFlags_HSV = 1 << 14, - ImGuiColorEditFlags_HEX = 1 << 15, - ImGuiColorEditFlags_Uint8 = 1 << 16, - ImGuiColorEditFlags_Float = 1 << 17, - ImGuiColorEditFlags_PickerHueBar = 1 << 18, - ImGuiColorEditFlags_PickerHueWheel = 1 << 19, + ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (read 3 components from the input pointer). + ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on colored square. + ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview. + ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable colored square preview next to the inputs. (e.g. to show only the inputs) + ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview colored square). + ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview. + ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker). + ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small colored square preview instead. + ImGuiColorEditFlags_AlphaBar = 1 << 9, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker. + ImGuiColorEditFlags_AlphaPreview = 1 << 10, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque. + ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 11, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque. + ImGuiColorEditFlags_HDR = 1 << 12, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well). + ImGuiColorEditFlags_RGB = 1 << 13, // [Inputs] // ColorEdit: choose one among RGB/HSV/HEX. ColorPicker: choose any combination using RGB/HSV/HEX. + ImGuiColorEditFlags_HSV = 1 << 14, // [Inputs] // " + ImGuiColorEditFlags_HEX = 1 << 15, // [Inputs] // " + ImGuiColorEditFlags_Uint8 = 1 << 16, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255. + ImGuiColorEditFlags_Float = 1 << 17, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers. + ImGuiColorEditFlags_PickerHueBar = 1 << 18, // [PickerMode] // ColorPicker: bar for Hue, rectangle for Sat/Value. + ImGuiColorEditFlags_PickerHueWheel = 1 << 19, // [PickerMode] // ColorPicker: wheel for Hue, triangle for Sat/Value. ImGuiColorEditFlags__InputsMask = ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_HSV|ImGuiColorEditFlags_HEX, ImGuiColorEditFlags__DataTypeMask = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_Float, ImGuiColorEditFlags__PickerMask = ImGuiColorEditFlags_PickerHueWheel|ImGuiColorEditFlags_PickerHueBar, - ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_PickerHueBar + ImGuiColorEditFlags__OptionsDefault = ImGuiColorEditFlags_Uint8|ImGuiColorEditFlags_RGB|ImGuiColorEditFlags_PickerHueBar // Change application default using SetColorEditOptions() }; enum ImGuiMouseCursor_ { ImGuiMouseCursor_None = -1, ImGuiMouseCursor_Arrow = 0, - ImGuiMouseCursor_TextInput, - ImGuiMouseCursor_ResizeAll, - ImGuiMouseCursor_ResizeNS, - ImGuiMouseCursor_ResizeEW, - ImGuiMouseCursor_ResizeNESW, - ImGuiMouseCursor_ResizeNWSE, + ImGuiMouseCursor_TextInput, // When hovering over InputText, etc. + ImGuiMouseCursor_ResizeAll, // Unused by imgui functions + ImGuiMouseCursor_ResizeNS, // When hovering over an horizontal border + ImGuiMouseCursor_ResizeEW, // When hovering over a vertical border or a column + ImGuiMouseCursor_ResizeNESW, // When hovering over the bottom-left corner of a window + ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window ImGuiMouseCursor_COUNT }; enum ImGuiCond_ { - ImGuiCond_Always = 1 << 0, - ImGuiCond_Once = 1 << 1, - ImGuiCond_FirstUseEver = 1 << 2, - ImGuiCond_Appearing = 1 << 3 + ImGuiCond_Always = 1 << 0, // Set the variable + ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call with succeed) + ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the object/window has no persistently saved data (no entry in .ini file) + ImGuiCond_Appearing = 1 << 3 // Set the variable if the object/window is appearing after being hidden/inactive (or the first time) }; struct ImGuiStyle { - float Alpha; - ImVec2 WindowPadding; - float WindowRounding; - float WindowBorderSize; - ImVec2 WindowMinSize; - ImVec2 WindowTitleAlign; - float ChildRounding; - float ChildBorderSize; - float PopupRounding; - float PopupBorderSize; - ImVec2 FramePadding; - float FrameRounding; - float FrameBorderSize; - ImVec2 ItemSpacing; - ImVec2 ItemInnerSpacing; - ImVec2 TouchExtraPadding; - float IndentSpacing; - float ColumnsMinSpacing; - float ScrollbarSize; - float ScrollbarRounding; - float GrabMinSize; - float GrabRounding; - ImVec2 ButtonTextAlign; - ImVec2 DisplayWindowPadding; - ImVec2 DisplaySafeAreaPadding; - float MouseCursorScale; - bool AntiAliasedLines; - bool AntiAliasedFill; - float CurveTessellationTol; + float Alpha; // Global alpha applies to everything in ImGui. + ImVec2 WindowPadding; // Padding within a window. + float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. + float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + ImVec2 WindowMinSize; // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints(). + ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered. + float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows. + float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + float PopupRounding; // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding) + float PopupBorderSize; // Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets). + float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets). + float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly). + ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines. + ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label). + ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much! + float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2). + float ColumnsMinSpacing; // Minimum horizontal spacing between two columns. + float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar. + float ScrollbarRounding; // Radius of grab corners for scrollbar. + float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar. + float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs. + ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f,0.5f) for horizontally+vertically centered. + ImVec2 DisplayWindowPadding; // Window positions are clamped to be visible within the display area by at least this amount. Only covers regular windows. + ImVec2 DisplaySafeAreaPadding; // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows. + float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later. + bool AntiAliasedLines; // Enable anti-aliasing on lines/borders. Disable if you are really tight on CPU/GPU. + bool AntiAliasedFill; // Enable anti-aliasing on filled shapes (rounded rectangles, circles, etc.) + float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality. ImVec4 Colors[ImGuiCol_COUNT]; }; typedef struct ImGuiStyle ImGuiStyle; struct ImGuiIO { - ImGuiConfigFlags ConfigFlags; - ImGuiBackendFlags BackendFlags; - ImVec2 DisplaySize; - float DeltaTime; - float IniSavingRate; - const char* IniFilename; - const char* LogFilename; - float MouseDoubleClickTime; - float MouseDoubleClickMaxDist; - float MouseDragThreshold; - int KeyMap[ImGuiKey_COUNT]; - float KeyRepeatDelay; - float KeyRepeatRate; - void* UserData; - ImFontAtlas* Fonts; - float FontGlobalScale; - bool FontAllowUserScaling; - ImFont* FontDefault; - ImVec2 DisplayFramebufferScale; - ImVec2 DisplayVisibleMin; - ImVec2 DisplayVisibleMax; - bool OptMacOSXBehaviors; - bool OptCursorBlink; + ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc. + ImGuiBackendFlags BackendFlags; // = 0 // Set ImGuiBackendFlags_ enum. Set by imgui_impl_xxx files or custom back-end. + ImVec2 DisplaySize; // /**/ // Display size, in pixels. For clamping windows positions. + float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. + float IniSavingRate; // = 5.0f // Maximum time between saving positions/sizes to .ini file, in seconds. + const char* IniFilename; // = "imgui.ini" // Path to .ini file. NULL to disable .ini saving. + const char* LogFilename; // = "imgui_log.txt" // Path to .log file (default parameter to ImGui::LogToFile when no file is specified). + float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds. + float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels. + float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging. + int KeyMap[ImGuiKey_COUNT]; // /**/ // Map of indices into the KeysDown[512] entries array which represent your "native" keyboard state. + float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.). + float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds. + void* UserData; // = NULL // Store your own data for retrieval by callbacks. + ImFontAtlas* Fonts; // /**/ // Load and assemble one or more fonts into a single tightly packed texture. Output to Fonts array. + float FontGlobalScale; // = 1.0f // Global scale all fonts + bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel. + ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0]. + ImVec2 DisplayFramebufferScale; // = (1.0f,1.0f) // For retina display or other situations where window coordinates are different from framebuffer coordinates. User storage only, presently not used by ImGui. + ImVec2 DisplayVisibleMin; // /**/ (0.0f,0.0f) // If you use DisplaySize as a virtual space larger than your screen, set DisplayVisibleMin/Max to the visible area. + ImVec2 DisplayVisibleMax; // /**/ (0.0f,0.0f) // If the values are the same, we defaults to Min=(0.0f) and Max=DisplaySize + bool OptMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl + bool OptCursorBlink; // = true // Enable blinking cursor, for users who consider it annoying. const char* (*GetClipboardTextFn)(void* user_data); void (*SetClipboardTextFn)(void* user_data, const char* text); void* ClipboardUserData; void (*ImeSetInputScreenPosFn)(int x, int y); - void* ImeWindowHandle; - ImVec2 MousePos; - bool MouseDown[5]; - float MouseWheel; - float MouseWheelH; - bool MouseDrawCursor; - bool KeyCtrl; - bool KeyShift; - bool KeyAlt; - bool KeySuper; - bool KeysDown[512]; - ImWchar InputCharacters[16+1]; - float NavInputs[ImGuiNavInput_COUNT]; - bool WantCaptureMouse; - bool WantCaptureKeyboard; - bool WantTextInput; - bool WantSetMousePos; - bool NavActive; - bool NavVisible; - float Framerate; - int MetricsRenderVertices; - int MetricsRenderIndices; - int MetricsActiveWindows; - ImVec2 MouseDelta; - ImVec2 MousePosPrev; - ImVec2 MouseClickedPos[5]; - float MouseClickedTime[5]; - bool MouseClicked[5]; - bool MouseDoubleClicked[5]; - bool MouseReleased[5]; - bool MouseDownOwned[5]; - float MouseDownDuration[5]; - float MouseDownDurationPrev[5]; - ImVec2 MouseDragMaxDistanceAbs[5]; - float MouseDragMaxDistanceSqr[5]; - float KeysDownDuration[512]; - float KeysDownDurationPrev[512]; + void* ImeWindowHandle; // (Windows) Set this to your HWND to get automatic IME cursor positioning. + ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX,-FLT_MAX) if mouse is unavailable (on another screen, etc.) + bool MouseDown[5]; // Mouse buttons: left, right, middle + extras. ImGui itself mostly only uses left button (BeginPopupContext** are using right button). Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API. + float MouseWheel; // Mouse wheel: 1 unit scrolls about 5 lines text. + float MouseWheelH; // Mouse wheel (Horizontal). Most users don't have a mouse with an horizontal wheel, may not be filled by all back-ends. + bool MouseDrawCursor; // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). + bool KeyCtrl; // Keyboard modifier pressed: Control + bool KeyShift; // Keyboard modifier pressed: Shift + bool KeyAlt; // Keyboard modifier pressed: Alt + bool KeySuper; // Keyboard modifier pressed: Cmd/Super/Windows + bool KeysDown[512]; // Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). + ImWchar InputCharacters[16+1]; // List of characters input (translated by user from keypress+keyboard state). Fill using AddInputCharacter() helper. + float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs (keyboard keys will be auto-mapped and be written here by ImGui::NewFrame, all values will be cleared back to zero in ImGui::EndFrame) + bool WantCaptureMouse; // When io.WantCaptureMouse is true, imgui will use the mouse inputs, do not dispatch them to your main game/application (in both cases, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.). + bool WantCaptureKeyboard; // When io.WantCaptureKeyboard is true, imgui will use the keyboard inputs, do not dispatch them to your main game/application (in both cases, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.). + bool WantTextInput; // Mobile/console: when io.WantTextInput is true, you may display an on-screen keyboard. This is set by ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active). + bool WantSetMousePos; // MousePos has been altered, back-end should reposition mouse on next frame. Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled. + bool NavActive; // Directional navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag. + bool NavVisible; // Directional navigation is visible and allowed (will handle ImGuiKey_NavXXX events). + float Framerate; // Application framerate estimation, in frame per second. Solely for convenience. Rolling average estimation based on IO.DeltaTime over 120 frames + int MetricsRenderVertices; // Vertices output during last call to Render() + int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3 + int MetricsActiveWindows; // Number of visible root windows (exclude child windows) + ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta. + ImVec2 MousePosPrev; // Previous mouse position temporary storage (nb: not for public use, set to MousePos in NewFrame()) + ImVec2 MouseClickedPos[5]; // Position at time of clicking + float MouseClickedTime[5]; // Time of last click (used to figure out double-click) + bool MouseClicked[5]; // Mouse button went from !Down to Down + bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? + bool MouseReleased[5]; // Mouse button went from Down to !Down + bool MouseDownOwned[5]; // Track if button was clicked inside a window. We don't request mouse capture from the application if click started outside ImGui bounds. + float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked) + float MouseDownDurationPrev[5]; // Previous time the mouse button has been down + ImVec2 MouseDragMaxDistanceAbs[5]; // Maximum distance, absolute, on each axis, of how much mouse has traveled from the clicking point + float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point + float KeysDownDuration[512]; // Duration the keyboard key has been down (0.0f == just pressed) + float KeysDownDurationPrev[512]; // Previous duration the key has been down float NavInputsDownDuration[ImGuiNavInput_COUNT]; float NavInputsDownDurationPrev[ImGuiNavInput_COUNT]; }; @@ -558,39 +558,39 @@ struct ImGuiStorage typedef struct ImGuiStorage ImGuiStorage; struct ImGuiTextEditCallbackData { - ImGuiInputTextFlags EventFlag; - ImGuiInputTextFlags Flags; - void* UserData; - bool ReadOnly; - ImWchar EventChar; - ImGuiKey EventKey; - char* Buf; - int BufTextLen; - int BufSize; - bool BufDirty; - int CursorPos; - int SelectionStart; - int SelectionEnd; + ImGuiInputTextFlags EventFlag; // One of ImGuiInputTextFlags_Callback* // Read-only + ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only + void* UserData; // What user passed to InputText() // Read-only + bool ReadOnly; // Read-only mode // Read-only + ImWchar EventChar; // Character input // Read-write (replace character or set to zero) + ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only + char* Buf; // Current text buffer // Read-write (pointed data only, can't replace the actual pointer) + int BufTextLen; // Current text length in bytes // Read-write + int BufSize; // Maximum text length in bytes // Read-only + bool BufDirty; // Set if you modify Buf/BufTextLen!! // Write + int CursorPos; // // Read-write + int SelectionStart; // // Read-write (== to SelectionEnd when no selection) + int SelectionEnd; // // Read-write }; typedef struct ImGuiTextEditCallbackData ImGuiTextEditCallbackData; struct ImGuiSizeCallbackData { - void* UserData; - ImVec2 Pos; - ImVec2 CurrentSize; - ImVec2 DesiredSize; + void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints() + ImVec2 Pos; // Read-only. Window position, for reference. + ImVec2 CurrentSize; // Read-only. Current window size. + ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing. }; typedef struct ImGuiSizeCallbackData ImGuiSizeCallbackData; struct ImGuiPayload { - const void* Data; - int DataSize; - ImGuiID SourceId; - ImGuiID SourceParentId; - int DataFrameCount; - char DataType[32+1]; - bool Preview; - bool Delivery; + const void* Data; // Data (copied and owned by dear imgui) + int DataSize; // Data size + ImGuiID SourceId; // Source item id + ImGuiID SourceParentId; // Source parent id (if available) + int DataFrameCount; // Data timestamp + char DataType[32+1]; // Data type tag (short user-supplied string, 32 characters max) + bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets) + bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item. }; typedef struct ImGuiPayload ImGuiPayload; struct ImColor @@ -608,11 +608,11 @@ typedef struct ImGuiListClipper ImGuiListClipper; typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd); struct ImDrawCmd { - unsigned int ElemCount; - ImVec4 ClipRect; - ImTextureID TextureId; - ImDrawCallback UserCallback; - void* UserCallbackData; + unsigned int ElemCount; // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[]. + ImVec4 ClipRect; // Clipping rectangle (x1, y1, x2, y2) + ImTextureID TextureId; // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas. + ImDrawCallback UserCallback; // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally. + void* UserCallbackData; // The draw callback code can access this. }; typedef struct ImDrawCmd ImDrawCmd; typedef unsigned short ImDrawIdx; @@ -631,15 +631,15 @@ struct ImDrawChannel typedef struct ImDrawChannel ImDrawChannel; enum ImDrawCornerFlags_ { - ImDrawCornerFlags_TopLeft = 1 << 0, - ImDrawCornerFlags_TopRight = 1 << 1, - ImDrawCornerFlags_BotLeft = 1 << 2, - ImDrawCornerFlags_BotRight = 1 << 3, - ImDrawCornerFlags_Top = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight, - ImDrawCornerFlags_Bot = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight, - ImDrawCornerFlags_Left = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft, - ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight, - ImDrawCornerFlags_All = 0xF + ImDrawCornerFlags_TopLeft = 1 << 0, // 0x1 + ImDrawCornerFlags_TopRight = 1 << 1, // 0x2 + ImDrawCornerFlags_BotLeft = 1 << 2, // 0x4 + ImDrawCornerFlags_BotRight = 1 << 3, // 0x8 + ImDrawCornerFlags_Top = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight, // 0x3 + ImDrawCornerFlags_Bot = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight, // 0xC + ImDrawCornerFlags_Left = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft, // 0x5 + ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight, // 0xA + ImDrawCornerFlags_All = 0xF // In your function calls you may use ~0 (= all bits sets) instead of ImDrawCornerFlags_All, as a convenience }; enum ImDrawListFlags_ { @@ -648,100 +648,100 @@ enum ImDrawListFlags_ }; struct ImDrawList { - ImVector/**/ CmdBuffer; - ImVector/**/ IdxBuffer; - ImVector/**/ VtxBuffer; - ImDrawListFlags Flags; - const ImDrawListSharedData* _Data; - const char* _OwnerName; - unsigned int _VtxCurrentIdx; - ImDrawVert* _VtxWritePtr; - ImDrawIdx* _IdxWritePtr; - ImVector/**/ _ClipRectStack; - ImVector/**/ _TextureIdStack; - ImVector/**/ _Path; - int _ChannelsCurrent; - int _ChannelsCount; - ImVector/**/ _Channels; + ImVector/**/ CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback. + ImVector/**/ IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those + ImVector/**/ VtxBuffer; // Vertex buffer. + ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive. + const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context) + const char* _OwnerName; // Pointer to owner window's name for debugging + unsigned int _VtxCurrentIdx; // [Internal] == VtxBuffer.Size + ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector/*<>*/ operators too much) + ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector/*<>*/ operators too much) + ImVector/**/ _ClipRectStack; // [Internal] + ImVector/**/ _TextureIdStack; // [Internal] + ImVector/**/ _Path; // [Internal] current path building + int _ChannelsCurrent; // [Internal] current channel number (0) + int _ChannelsCount; // [Internal] number of active channels (1+) + ImVector/**/ _Channels; // [Internal] draw channels for columns API (not resized down so _ChannelsCount may be smaller than _Channels.Size) }; typedef struct ImDrawList ImDrawList; struct ImDrawData { - bool Valid; - ImDrawList** CmdLists; - int CmdListsCount; - int TotalIdxCount; - int TotalVtxCount; + bool Valid; // Only valid after Render() is called and before the next NewFrame() is called. + ImDrawList** CmdLists; // Array of ImDrawList* to render. The ImDrawList are owned by ImGuiContext and only pointed to from here. + int CmdListsCount; // Number of ImDrawList* to render + int TotalIdxCount; // For convenience, sum of all ImDrawList's IdxBuffer.Size + int TotalVtxCount; // For convenience, sum of all ImDrawList's VtxBuffer.Size }; typedef struct ImDrawData ImDrawData; struct ImFontConfig { - void* FontData; - int FontDataSize; - bool FontDataOwnedByAtlas; - int FontNo; - float SizePixels; - int OversampleH; - int OversampleV; - bool PixelSnapH; - ImVec2 GlyphExtraSpacing; - ImVec2 GlyphOffset; - const ImWchar* GlyphRanges; - bool MergeMode; - unsigned int RasterizerFlags; - float RasterizerMultiply; - char Name[40]; + void* FontData; // // TTF/OTF data + int FontDataSize; // // TTF/OTF data size + bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself). + int FontNo; // 0 // Index of font within TTF/OTF file + float SizePixels; // // Size in pixels for rasterizer. + int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. We don't use sub-pixel positions on the Y axis. + bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1. + ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now. + ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input. + const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE. + bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights. + unsigned int RasterizerFlags; // 0x00 // Settings for custom font rasterizer (e.g. ImGuiFreeType). Leave as zero if you aren't using one. + float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable. + char Name[40]; // Name (strictly to ease debugging) ImFont* DstFont; }; typedef struct ImFontConfig ImFontConfig; struct ImFontGlyph { - ImWchar Codepoint; - float AdvanceX; - float X0, Y0, X1, Y1; - float U0, V0, U1, V1; + ImWchar Codepoint; // 0x0000..0xFFFF + float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in) + float X0, Y0, X1, Y1; // Glyph corners + float U0, V0, U1, V1; // Texture coordinates }; typedef struct ImFontGlyph ImFontGlyph; enum ImFontAtlasFlags_ { - ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, - ImFontAtlasFlags_NoMouseCursors = 1 << 1 + ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, // Don't round the height to next power of two + ImFontAtlasFlags_NoMouseCursors = 1 << 1 // Don't build software mouse cursors into the atlas }; struct ImFontAtlas { - ImFontAtlasFlags Flags; - ImTextureID TexID; - int TexDesiredWidth; - int TexGlyphPadding; - unsigned char* TexPixelsAlpha8; - unsigned int* TexPixelsRGBA32; - int TexWidth; - int TexHeight; - ImVec2 TexUvScale; - ImVec2 TexUvWhitePixel; - ImVector/**/ Fonts; - ImVector/**/ CustomRects; - ImVector/**/ ConfigData; - int CustomRectIds[1]; + ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_) + ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure. + int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height. + int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. + unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight + unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4 + int TexWidth; // Texture width calculated during Build(). + int TexHeight; // Texture height calculated during Build(). + ImVec2 TexUvScale; // = (1.0f/TexWidth, 1.0f/TexHeight) + ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel + ImVector/**/ Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font. + ImVector/**/ CustomRects; // Rectangles for packing custom texture data into the atlas. + ImVector/**/ ConfigData; // Internal data + int CustomRectIds[1]; // Identifiers of custom texture rectangle used by ImFontAtlas/ImDrawList }; typedef struct ImFontAtlas ImFontAtlas; struct ImFont { - float FontSize; - float Scale; - ImVec2 DisplayOffset; - ImVector/**/ Glyphs; - ImVector/**/ IndexAdvanceX; - ImVector/**/ IndexLookup; - const ImFontGlyph* FallbackGlyph; - float FallbackAdvanceX; - ImWchar FallbackChar; - short ConfigDataCount; - ImFontConfig* ConfigData; - ImFontAtlas* ContainerAtlas; - float Ascent, Descent; + float FontSize; // /**/ // Height of characters, set during loading (don't change after loading) + float Scale; // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetFontScale() + ImVec2 DisplayOffset; // = (0.f,0.f) // Offset font rendering by xx pixels + ImVector/**/ Glyphs; // // All glyphs. + ImVector/**/ IndexAdvanceX; // // Sparse. Glyphs->AdvanceX in a directly indexable way (more cache-friendly, for CalcTextSize functions which are often bottleneck in large UI). + ImVector/**/ IndexLookup; // // Sparse. Index glyphs by Unicode code-point. + const ImFontGlyph* FallbackGlyph; // == FindGlyph(FontFallbackChar) + float FallbackAdvanceX; // == FallbackGlyph->AdvanceX + ImWchar FallbackChar; // = '?' // Replacement glyph if one isn't found. Only set via SetFallbackChar() + short ConfigDataCount; // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont. + ImFontConfig* ConfigData; // // Pointer within ContainerAtlas->ConfigData + ImFontAtlas* ContainerAtlas; // // What we has been loaded into + float Ascent, Descent; // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize] bool DirtyLookupTables; - int MetricsTotalSurface; + int MetricsTotalSurface;// // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs) }; typedef struct ImFont ImFont; struct GlyphRangesBuilder @@ -791,70 +791,70 @@ typedef ImVector ImVector_TextRange; typedef ImVector ImVector_ImWchar; #endif //CIMGUI_DEFINE_ENUMS_AND_STRUCTS CIMGUI_API ImGuiContext* igCreateContext(ImFontAtlas* shared_font_atlas); -CIMGUI_API void igDestroyContext(ImGuiContext* ctx); +CIMGUI_API void igDestroyContext(ImGuiContext* ctx); // NULL = destroy current context CIMGUI_API ImGuiContext* igGetCurrentContext(); CIMGUI_API void igSetCurrentContext(ImGuiContext* ctx); CIMGUI_API ImGuiIO* igGetIO(); CIMGUI_API ImGuiStyle* igGetStyle(); -CIMGUI_API void igNewFrame(); -CIMGUI_API void igRender(); -CIMGUI_API ImDrawData* igGetDrawData(); -CIMGUI_API void igEndFrame(); -CIMGUI_API void igShowDemoWindow(bool* p_open); -CIMGUI_API void igShowMetricsWindow(bool* p_open); -CIMGUI_API void igShowStyleEditor(ImGuiStyle* ref); -CIMGUI_API bool igShowStyleSelector(const char* label); -CIMGUI_API void igShowFontSelector(const char* label); -CIMGUI_API void igShowUserGuide(); -CIMGUI_API const char* igGetVersion(); -CIMGUI_API void igStyleColorsDark(ImGuiStyle* dst); -CIMGUI_API void igStyleColorsClassic(ImGuiStyle* dst); -CIMGUI_API void igStyleColorsLight(ImGuiStyle* dst); +CIMGUI_API void igNewFrame(); // start a new ImGui frame, you can submit any command from this point until Render()/EndFrame(). +CIMGUI_API void igRender(); // ends the ImGui frame, finalize the draw data. (Obsolete: optionally call io.RenderDrawListsFn if set. Nowadays, prefer calling your render function yourself.) +CIMGUI_API ImDrawData* igGetDrawData(); // valid after Render() and until the next call to NewFrame(). this is what you have to render. (Obsolete: this used to be passed to your io.RenderDrawListsFn() function.) +CIMGUI_API void igEndFrame(); // ends the ImGui frame. automatically called by Render(), so most likely don't need to ever call that yourself directly. If you don't need to render you may call EndFrame() but you'll have wasted CPU already. If you don't need to render, better to not create any imgui windows instead! +CIMGUI_API void igShowDemoWindow(bool* p_open); // create demo/test window (previously called ShowTestWindow). demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application! +CIMGUI_API void igShowMetricsWindow(bool* p_open); // create metrics window. display ImGui internals: draw commands (with individual draw calls and vertices), window list, basic internal state, etc. +CIMGUI_API void igShowStyleEditor(ImGuiStyle* ref); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style) +CIMGUI_API bool igShowStyleSelector(const char* label); // add style selector block (not a window), essentially a combo listing the default styles. +CIMGUI_API void igShowFontSelector(const char* label); // add font selector block (not a window), essentially a combo listing the loaded fonts. +CIMGUI_API void igShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls). +CIMGUI_API const char* igGetVersion(); // get a version string e.g. "1.23" +CIMGUI_API void igStyleColorsDark(ImGuiStyle* dst); // new, recommended style (default) +CIMGUI_API void igStyleColorsClassic(ImGuiStyle* dst); // classic imgui style +CIMGUI_API void igStyleColorsLight(ImGuiStyle* dst); // best used with borders and a custom, thicker font CIMGUI_API bool igBegin(const char* name,bool* p_open,ImGuiWindowFlags flags); CIMGUI_API void igEnd(); -CIMGUI_API bool igBeginChildStr(const char* str_id,const ImVec2 size,bool border,ImGuiWindowFlags flags); +CIMGUI_API bool igBeginChildStr(const char* str_id,const ImVec2 size,bool border,ImGuiWindowFlags flags); // Begin a scrolling region. size==0.0f: use remaining window size, size<0.0f: use remaining window size minus abs(size). size>0.0f: fixed size. each axis can use a different mode, e.g. ImVec2(0,400). CIMGUI_API bool igBeginChildID(ImGuiID id,const ImVec2 size,bool border,ImGuiWindowFlags flags); CIMGUI_API void igEndChild(); CIMGUI_API bool igIsWindowAppearing(); CIMGUI_API bool igIsWindowCollapsed(); -CIMGUI_API bool igIsWindowFocused(ImGuiFocusedFlags flags); -CIMGUI_API bool igIsWindowHovered(ImGuiHoveredFlags flags); -CIMGUI_API ImDrawList* igGetWindowDrawList(); -CIMGUI_API ImVec2 igGetWindowPos(); -CIMGUI_API ImVec2 igGetWindowSize(); -CIMGUI_API float igGetWindowWidth(); -CIMGUI_API float igGetWindowHeight(); -CIMGUI_API ImVec2 igGetContentRegionMax(); -CIMGUI_API ImVec2 igGetContentRegionAvail(); -CIMGUI_API float igGetContentRegionAvailWidth(); -CIMGUI_API ImVec2 igGetWindowContentRegionMin(); -CIMGUI_API ImVec2 igGetWindowContentRegionMax(); -CIMGUI_API float igGetWindowContentRegionWidth(); -CIMGUI_API void igSetNextWindowPos(const ImVec2 pos,ImGuiCond cond,const ImVec2 pivot); -CIMGUI_API void igSetNextWindowSize(const ImVec2 size,ImGuiCond cond); -CIMGUI_API void igSetNextWindowSizeConstraints(const ImVec2 size_min,const ImVec2 size_max,ImGuiSizeCallback custom_callback,void* custom_callback_data); -CIMGUI_API void igSetNextWindowContentSize(const ImVec2 size); -CIMGUI_API void igSetNextWindowCollapsed(bool collapsed,ImGuiCond cond); -CIMGUI_API void igSetNextWindowFocus(); -CIMGUI_API void igSetNextWindowBgAlpha(float alpha); -CIMGUI_API void igSetWindowPosVec2(const ImVec2 pos,ImGuiCond cond); -CIMGUI_API void igSetWindowSizeVec2(const ImVec2 size,ImGuiCond cond); -CIMGUI_API void igSetWindowCollapsedBool(bool collapsed,ImGuiCond cond); -CIMGUI_API void igSetWindowFocus(); -CIMGUI_API void igSetWindowFontScale(float scale); -CIMGUI_API void igSetWindowPosStr(const char* name,const ImVec2 pos,ImGuiCond cond); -CIMGUI_API void igSetWindowSizeStr(const char* name,const ImVec2 size,ImGuiCond cond); -CIMGUI_API void igSetWindowCollapsedStr(const char* name,bool collapsed,ImGuiCond cond); -CIMGUI_API void igSetWindowFocusStr(const char* name); -CIMGUI_API float igGetScrollX(); -CIMGUI_API float igGetScrollY(); -CIMGUI_API float igGetScrollMaxX(); -CIMGUI_API float igGetScrollMaxY(); -CIMGUI_API void igSetScrollX(float scroll_x); -CIMGUI_API void igSetScrollY(float scroll_y); -CIMGUI_API void igSetScrollHere(float center_y_ratio); -CIMGUI_API void igSetScrollFromPosY(float pos_y,float center_y_ratio); -CIMGUI_API void igPushFont(ImFont* font); +CIMGUI_API bool igIsWindowFocused(ImGuiFocusedFlags flags); // is current window focused? or its root/child, depending on flags. see flags for options. +CIMGUI_API bool igIsWindowHovered(ImGuiHoveredFlags flags); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ! +CIMGUI_API ImDrawList* igGetWindowDrawList(); // get draw list associated to the window, to append your own drawing primitives +CIMGUI_API ImVec2 igGetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList API) +CIMGUI_API ImVec2 igGetWindowSize(); // get current window size +CIMGUI_API float igGetWindowWidth(); // get current window width (shortcut for GetWindowSize().x) +CIMGUI_API float igGetWindowHeight(); // get current window height (shortcut for GetWindowSize().y) +CIMGUI_API ImVec2 igGetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates +CIMGUI_API ImVec2 igGetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos() +CIMGUI_API float igGetContentRegionAvailWidth(); // +CIMGUI_API ImVec2 igGetWindowContentRegionMin(); // content boundaries min (roughly (0,0)-Scroll), in window coordinates +CIMGUI_API ImVec2 igGetWindowContentRegionMax(); // content boundaries max (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates +CIMGUI_API float igGetWindowContentRegionWidth(); // +CIMGUI_API void igSetNextWindowPos(const ImVec2 pos,ImGuiCond cond,const ImVec2 pivot); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. +CIMGUI_API void igSetNextWindowSize(const ImVec2 size,ImGuiCond cond); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() +CIMGUI_API void igSetNextWindowSizeConstraints(const ImVec2 size_min,const ImVec2 size_max,ImGuiSizeCallback custom_callback,void* custom_callback_data); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. +CIMGUI_API void igSetNextWindowContentSize(const ImVec2 size); // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() +CIMGUI_API void igSetNextWindowCollapsed(bool collapsed,ImGuiCond cond); // set next window collapsed state. call before Begin() +CIMGUI_API void igSetNextWindowFocus(); // set next window to be focused / front-most. call before Begin() +CIMGUI_API void igSetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily modify ImGuiCol_WindowBg/ChildBg/PopupBg. +CIMGUI_API void igSetWindowPosVec2(const ImVec2 pos,ImGuiCond cond); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. +CIMGUI_API void igSetWindowSizeVec2(const ImVec2 size,ImGuiCond cond); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0,0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects. +CIMGUI_API void igSetWindowCollapsedBool(bool collapsed,ImGuiCond cond); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed(). +CIMGUI_API void igSetWindowFocus(); // (not recommended) set current window to be focused / front-most. prefer using SetNextWindowFocus(). +CIMGUI_API void igSetWindowFontScale(float scale); // set font scale. Adjust IO.FontGlobalScale if you want to scale all windows +CIMGUI_API void igSetWindowPosStr(const char* name,const ImVec2 pos,ImGuiCond cond); // set named window position. +CIMGUI_API void igSetWindowSizeStr(const char* name,const ImVec2 size,ImGuiCond cond); // set named window size. set axis to 0.0f to force an auto-fit on this axis. +CIMGUI_API void igSetWindowCollapsedStr(const char* name,bool collapsed,ImGuiCond cond); // set named window collapsed state +CIMGUI_API void igSetWindowFocusStr(const char* name); // set named window to be focused / front-most. use NULL to remove focus. +CIMGUI_API float igGetScrollX(); // get scrolling amount [0..GetScrollMaxX()] +CIMGUI_API float igGetScrollY(); // get scrolling amount [0..GetScrollMaxY()] +CIMGUI_API float igGetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.X - WindowSize.X +CIMGUI_API float igGetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y +CIMGUI_API void igSetScrollX(float scroll_x); // set scrolling amount [0..GetScrollMaxX()] +CIMGUI_API void igSetScrollY(float scroll_y); // set scrolling amount [0..GetScrollMaxY()] +CIMGUI_API void igSetScrollHere(float center_y_ratio); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. +CIMGUI_API void igSetScrollFromPosY(float pos_y,float center_y_ratio); // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. +CIMGUI_API void igPushFont(ImFont* font); // use NULL as a shortcut to push default font CIMGUI_API void igPopFont(); CIMGUI_API void igPushStyleColorU32(ImGuiCol idx,ImU32 col); CIMGUI_API void igPushStyleColorVec4(ImGuiCol idx,const ImVec4 col); @@ -862,72 +862,72 @@ CIMGUI_API void igPopStyleColor(int count); CIMGUI_API void igPushStyleVarFloat(ImGuiStyleVar idx,float val); CIMGUI_API void igPushStyleVarVec2(ImGuiStyleVar idx,const ImVec2 val); CIMGUI_API void igPopStyleVar(int count); -CIMGUI_API const ImVec4* igGetStyleColorVec4(ImGuiCol idx); -CIMGUI_API ImFont* igGetFont(); -CIMGUI_API float igGetFontSize(); -CIMGUI_API ImVec2 igGetFontTexUvWhitePixel(); -CIMGUI_API ImU32 igGetColorU32(ImGuiCol idx,float alpha_mul); -CIMGUI_API ImU32 igGetColorU32Vec4(const ImVec4 col); -CIMGUI_API ImU32 igGetColorU32U32(ImU32 col); -CIMGUI_API void igPushItemWidth(float item_width); +CIMGUI_API const ImVec4* igGetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwhise use GetColorU32() to get style color with style alpha baked in. +CIMGUI_API ImFont* igGetFont(); // get current font +CIMGUI_API float igGetFontSize(); // get current font size (= height in pixels) of current font with current scale applied +CIMGUI_API ImVec2 igGetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API +CIMGUI_API ImU32 igGetColorU32(ImGuiCol idx,float alpha_mul); // retrieve given style color with style alpha applied and optional extra alpha multiplier +CIMGUI_API ImU32 igGetColorU32Vec4(const ImVec4 col); // retrieve given color with style alpha applied +CIMGUI_API ImU32 igGetColorU32U32(ImU32 col); // retrieve given color with style alpha applied +CIMGUI_API void igPushItemWidth(float item_width); // width of items for the common item+label case, pixels. 0.0f = default to ~2/3 of windows width, >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -1.0f always align width to the right side) CIMGUI_API void igPopItemWidth(); -CIMGUI_API float igCalcItemWidth(); -CIMGUI_API void igPushTextWrapPos(float wrap_pos_x); +CIMGUI_API float igCalcItemWidth(); // width of item given pushed settings and current cursor position +CIMGUI_API void igPushTextWrapPos(float wrap_pos_x); // word-wrapping for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space CIMGUI_API void igPopTextWrapPos(); -CIMGUI_API void igPushAllowKeyboardFocus(bool allow_keyboard_focus); +CIMGUI_API void igPushAllowKeyboardFocus(bool allow_keyboard_focus); // allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets CIMGUI_API void igPopAllowKeyboardFocus(); -CIMGUI_API void igPushButtonRepeat(bool repeat); +CIMGUI_API void igPushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame. CIMGUI_API void igPopButtonRepeat(); -CIMGUI_API void igSeparator(); -CIMGUI_API void igSameLine(float pos_x,float spacing_w); -CIMGUI_API void igNewLine(); -CIMGUI_API void igSpacing(); -CIMGUI_API void igDummy(const ImVec2 size); -CIMGUI_API void igIndent(float indent_w); -CIMGUI_API void igUnindent(float indent_w); -CIMGUI_API void igBeginGroup(); +CIMGUI_API void igSeparator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator. +CIMGUI_API void igSameLine(float pos_x,float spacing_w); // call between widgets or groups to layout them horizontally +CIMGUI_API void igNewLine(); // undo a SameLine() +CIMGUI_API void igSpacing(); // add vertical spacing +CIMGUI_API void igDummy(const ImVec2 size); // add a dummy item of given size +CIMGUI_API void igIndent(float indent_w); // move content position toward the right, by style.IndentSpacing or indent_w if != 0 +CIMGUI_API void igUnindent(float indent_w); // move content position back to the left, by style.IndentSpacing or indent_w if != 0 +CIMGUI_API void igBeginGroup(); // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) CIMGUI_API void igEndGroup(); -CIMGUI_API ImVec2 igGetCursorPos(); -CIMGUI_API float igGetCursorPosX(); -CIMGUI_API float igGetCursorPosY(); -CIMGUI_API void igSetCursorPos(const ImVec2 local_pos); -CIMGUI_API void igSetCursorPosX(float x); -CIMGUI_API void igSetCursorPosY(float y); -CIMGUI_API ImVec2 igGetCursorStartPos(); -CIMGUI_API ImVec2 igGetCursorScreenPos(); -CIMGUI_API void igSetCursorScreenPos(const ImVec2 screen_pos); -CIMGUI_API void igAlignTextToFramePadding(); -CIMGUI_API float igGetTextLineHeight(); -CIMGUI_API float igGetTextLineHeightWithSpacing(); -CIMGUI_API float igGetFrameHeight(); -CIMGUI_API float igGetFrameHeightWithSpacing(); -CIMGUI_API void igPushIDStr(const char* str_id); +CIMGUI_API ImVec2 igGetCursorPos(); // cursor position is relative to window position +CIMGUI_API float igGetCursorPosX(); // " +CIMGUI_API float igGetCursorPosY(); // " +CIMGUI_API void igSetCursorPos(const ImVec2 local_pos); // " +CIMGUI_API void igSetCursorPosX(float x); // " +CIMGUI_API void igSetCursorPosY(float y); // " +CIMGUI_API ImVec2 igGetCursorStartPos(); // initial cursor position +CIMGUI_API ImVec2 igGetCursorScreenPos(); // cursor position in absolute screen coordinates [0..io.DisplaySize] (useful to work with ImDrawList API) +CIMGUI_API void igSetCursorScreenPos(const ImVec2 screen_pos); // cursor position in absolute screen coordinates [0..io.DisplaySize] +CIMGUI_API void igAlignTextToFramePadding(); // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item) +CIMGUI_API float igGetTextLineHeight(); // ~ FontSize +CIMGUI_API float igGetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text) +CIMGUI_API float igGetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2 +CIMGUI_API float igGetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets) +CIMGUI_API void igPushIDStr(const char* str_id); // push identifier into the ID stack. IDs are hash of the entire stack! CIMGUI_API void igPushIDRange(const char* str_id_begin,const char* str_id_end); CIMGUI_API void igPushIDPtr(const void* ptr_id); CIMGUI_API void igPushIDInt(int int_id); CIMGUI_API void igPopID(); -CIMGUI_API ImGuiID igGetIDStr(const char* str_id); +CIMGUI_API ImGuiID igGetIDStr(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself CIMGUI_API ImGuiID igGetIDStrStr(const char* str_id_begin,const char* str_id_end); CIMGUI_API ImGuiID igGetIDPtr(const void* ptr_id); -CIMGUI_API void igTextUnformatted(const char* text,const char* text_end); -CIMGUI_API void igText(const char* fmt,...); +CIMGUI_API void igTextUnformatted(const char* text,const char* text_end); // raw text without formatting. Roughly equivalent to Text("s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text. +CIMGUI_API void igText(const char* fmt,...); // simple formatted text CIMGUI_API void igTextV(const char* fmt,va_list args); -CIMGUI_API void igTextColored(const ImVec4 col,const char* fmt,...); +CIMGUI_API void igTextColored(const ImVec4 col,const char* fmt,...); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor(); CIMGUI_API void igTextColoredV(const ImVec4 col,const char* fmt,va_list args); -CIMGUI_API void igTextDisabled(const char* fmt,...); +CIMGUI_API void igTextDisabled(const char* fmt,...); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor(); CIMGUI_API void igTextDisabledV(const char* fmt,va_list args); -CIMGUI_API void igTextWrapped(const char* fmt,...); +CIMGUI_API void igTextWrapped(const char* fmt,...); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize(). CIMGUI_API void igTextWrappedV(const char* fmt,va_list args); -CIMGUI_API void igLabelText(const char* label,const char* fmt,...); +CIMGUI_API void igLabelText(const char* label,const char* fmt,...); // display text+label aligned the same way as value+label widgets CIMGUI_API void igLabelTextV(const char* label,const char* fmt,va_list args); -CIMGUI_API void igBulletText(const char* fmt,...); +CIMGUI_API void igBulletText(const char* fmt,...); // shortcut for Bullet()+Text() CIMGUI_API void igBulletTextV(const char* fmt,va_list args); -CIMGUI_API bool igButton(const char* label,const ImVec2 size); -CIMGUI_API bool igSmallButton(const char* label); +CIMGUI_API bool igButton(const char* label,const ImVec2 size); // button +CIMGUI_API bool igSmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text CIMGUI_API bool igArrowButton(const char* str_id,ImGuiDir dir); -CIMGUI_API bool igInvisibleButton(const char* str_id,const ImVec2 size); +CIMGUI_API bool igInvisibleButton(const char* str_id,const ImVec2 size); // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) CIMGUI_API void igImage(ImTextureID user_texture_id,const ImVec2 size,const ImVec2 uv0,const ImVec2 uv1,const ImVec4 tint_col,const ImVec4 border_col); -CIMGUI_API bool igImageButton(ImTextureID user_texture_id,const ImVec2 size,const ImVec2 uv0,const ImVec2 uv1,int frame_padding,const ImVec4 bg_col,const ImVec4 tint_col); +CIMGUI_API bool igImageButton(ImTextureID user_texture_id,const ImVec2 size,const ImVec2 uv0,const ImVec2 uv1,int frame_padding,const ImVec4 bg_col,const ImVec4 tint_col); // <0 frame_padding uses default frame padding settings. 0 for no padding CIMGUI_API bool igCheckbox(const char* label,bool* v); CIMGUI_API bool igCheckboxFlags(const char* label,unsigned int* flags,unsigned int flags_value); CIMGUI_API bool igRadioButtonBool(const char* label,bool active); @@ -937,18 +937,18 @@ CIMGUI_API void igPlotLinesFnPtr(const char* label,float(*values_getter)(void* CIMGUI_API void igPlotHistogramFloatPtr(const char* label,const float* values,int values_count,int values_offset,const char* overlay_text,float scale_min,float scale_max,ImVec2 graph_size,int stride); CIMGUI_API void igPlotHistogramFnPtr(const char* label,float(*values_getter)(void* data,int idx),void* data,int values_count,int values_offset,const char* overlay_text,float scale_min,float scale_max,ImVec2 graph_size); CIMGUI_API void igProgressBar(float fraction,const ImVec2 size_arg,const char* overlay); -CIMGUI_API void igBullet(); +CIMGUI_API void igBullet(); // draw a small circle and keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses CIMGUI_API bool igBeginCombo(const char* label,const char* preview_value,ImGuiComboFlags flags); -CIMGUI_API void igEndCombo(); +CIMGUI_API void igEndCombo(); // only call EndCombo() if BeginCombo() returns true! CIMGUI_API bool igComboStr_arr(const char* label,int* current_item,const char* const items[],int items_count,int popup_max_height_in_items); -CIMGUI_API bool igComboStr(const char* label,int* current_item,const char* items_separated_by_zeros,int popup_max_height_in_items); +CIMGUI_API bool igComboStr(const char* label,int* current_item,const char* items_separated_by_zeros,int popup_max_height_in_items); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" CIMGUI_API bool igComboFnPtr(const char* label,int* current_item,bool(*items_getter)(void* data,int idx,const char** out_text),void* data,int items_count,int popup_max_height_in_items); -CIMGUI_API bool igDragFloat(const char* label,float* v,float v_speed,float v_min,float v_max,const char* display_format,float power); +CIMGUI_API bool igDragFloat(const char* label,float* v,float v_speed,float v_min,float v_max,const char* display_format,float power); // If v_min >= v_max we have no bound CIMGUI_API bool igDragFloat2(const char* label,float v[2],float v_speed,float v_min,float v_max,const char* display_format,float power); CIMGUI_API bool igDragFloat3(const char* label,float v[3],float v_speed,float v_min,float v_max,const char* display_format,float power); CIMGUI_API bool igDragFloat4(const char* label,float v[4],float v_speed,float v_min,float v_max,const char* display_format,float power); CIMGUI_API bool igDragFloatRange2(const char* label,float* v_current_min,float* v_current_max,float v_speed,float v_min,float v_max,const char* display_format,const char* display_format_max,float power); -CIMGUI_API bool igDragInt(const char* label,int* v,float v_speed,int v_min,int v_max,const char* display_format); +CIMGUI_API bool igDragInt(const char* label,int* v,float v_speed,int v_min,int v_max,const char* display_format); // If v_min >= v_max we have no bound CIMGUI_API bool igDragInt2(const char* label,int v[2],float v_speed,int v_min,int v_max,const char* display_format); CIMGUI_API bool igDragInt3(const char* label,int v[3],float v_speed,int v_min,int v_max,const char* display_format); CIMGUI_API bool igDragInt4(const char* label,int v[4],float v_speed,int v_min,int v_max,const char* display_format); @@ -964,7 +964,7 @@ CIMGUI_API bool igInputInt2(const char* label,int v[2],ImGuiInputTextFlags extr CIMGUI_API bool igInputInt3(const char* label,int v[3],ImGuiInputTextFlags extra_flags); CIMGUI_API bool igInputInt4(const char* label,int v[4],ImGuiInputTextFlags extra_flags); CIMGUI_API bool igInputDouble(const char* label,double* v,double step,double step_fast,const char* display_format,ImGuiInputTextFlags extra_flags); -CIMGUI_API bool igSliderFloat(const char* label,float* v,float v_min,float v_max,const char* display_format,float power); +CIMGUI_API bool igSliderFloat(const char* label,float* v,float v_min,float v_max,const char* display_format,float power); // adjust display_format to decorate the value with a prefix or a suffix for in-slider labels or unit display. Use power!=1.0 for logarithmic sliders CIMGUI_API bool igSliderFloat2(const char* label,float v[2],float v_min,float v_max,const char* display_format,float power); CIMGUI_API bool igSliderFloat3(const char* label,float v[3],float v_min,float v_max,const char* display_format,float power); CIMGUI_API bool igSliderFloat4(const char* label,float v[4],float v_min,float v_max,const char* display_format,float power); @@ -979,11 +979,11 @@ CIMGUI_API bool igColorEdit3(const char* label,float col[3],ImGuiColorEditFlags CIMGUI_API bool igColorEdit4(const char* label,float col[4],ImGuiColorEditFlags flags); CIMGUI_API bool igColorPicker3(const char* label,float col[3],ImGuiColorEditFlags flags); CIMGUI_API bool igColorPicker4(const char* label,float col[4],ImGuiColorEditFlags flags,const float* ref_col); -CIMGUI_API bool igColorButton(const char* desc_id,const ImVec4 col,ImGuiColorEditFlags flags,ImVec2 size); -CIMGUI_API void igSetColorEditOptions(ImGuiColorEditFlags flags); -CIMGUI_API bool igTreeNodeStr(const char* label); -CIMGUI_API bool igTreeNodeStrStr(const char* str_id,const char* fmt,...); -CIMGUI_API bool igTreeNodePtr(const void* ptr_id,const char* fmt,...); +CIMGUI_API bool igColorButton(const char* desc_id,const ImVec4 col,ImGuiColorEditFlags flags,ImVec2 size); // display a colored square/button, hover for details, return true when pressed. +CIMGUI_API void igSetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls. +CIMGUI_API bool igTreeNodeStr(const char* label); // if returning 'true' the node is open and the tree id is pushed into the id stack. user is responsible for calling TreePop(). +CIMGUI_API bool igTreeNodeStrStr(const char* str_id,const char* fmt,...); // read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet(). +CIMGUI_API bool igTreeNodePtr(const void* ptr_id,const char* fmt,...); // " CIMGUI_API bool igTreeNodeVStr(const char* str_id,const char* fmt,va_list args); CIMGUI_API bool igTreeNodeVPtr(const void* ptr_id,const char* fmt,va_list args); CIMGUI_API bool igTreeNodeExStr(const char* label,ImGuiTreeNodeFlags flags); @@ -991,129 +991,129 @@ CIMGUI_API bool igTreeNodeExStrStr(const char* str_id,ImGuiTreeNodeFlags flags, CIMGUI_API bool igTreeNodeExPtr(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,...); CIMGUI_API bool igTreeNodeExVStr(const char* str_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args); CIMGUI_API bool igTreeNodeExVPtr(const void* ptr_id,ImGuiTreeNodeFlags flags,const char* fmt,va_list args); -CIMGUI_API void igTreePushStr(const char* str_id); -CIMGUI_API void igTreePushPtr(const void* ptr_id); -CIMGUI_API void igTreePop(); -CIMGUI_API void igTreeAdvanceToLabelPos(); -CIMGUI_API float igGetTreeNodeToLabelSpacing(); -CIMGUI_API void igSetNextTreeNodeOpen(bool is_open,ImGuiCond cond); -CIMGUI_API bool igCollapsingHeader(const char* label,ImGuiTreeNodeFlags flags); -CIMGUI_API bool igCollapsingHeaderBoolPtr(const char* label,bool* p_open,ImGuiTreeNodeFlags flags); -CIMGUI_API bool igSelectableBool(const char* label,bool selected,ImGuiSelectableFlags flags,const ImVec2 size); -CIMGUI_API bool igSelectableBoolPtr(const char* label,bool* p_selected,ImGuiSelectableFlags flags,const ImVec2 size); +CIMGUI_API void igTreePushStr(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call Push/Pop yourself for layout purpose +CIMGUI_API void igTreePushPtr(const void* ptr_id); // " +CIMGUI_API void igTreePop(); // ~ Unindent()+PopId() +CIMGUI_API void igTreeAdvanceToLabelPos(); // advance cursor x position by GetTreeNodeToLabelSpacing() +CIMGUI_API float igGetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode +CIMGUI_API void igSetNextTreeNodeOpen(bool is_open,ImGuiCond cond); // set next TreeNode/CollapsingHeader open state. +CIMGUI_API bool igCollapsingHeader(const char* label,ImGuiTreeNodeFlags flags); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop(). +CIMGUI_API bool igCollapsingHeaderBoolPtr(const char* label,bool* p_open,ImGuiTreeNodeFlags flags); // when 'p_open' isn't NULL, display an additional small close button on upper right of the header +CIMGUI_API bool igSelectableBool(const char* label,bool selected,ImGuiSelectableFlags flags,const ImVec2 size); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height +CIMGUI_API bool igSelectableBoolPtr(const char* label,bool* p_selected,ImGuiSelectableFlags flags,const ImVec2 size); // "bool* p_selected" point to the selection state (read-write), as a convenient helper. CIMGUI_API bool igListBoxStr_arr(const char* label,int* current_item,const char* const items[],int items_count,int height_in_items); CIMGUI_API bool igListBoxFnPtr(const char* label,int* current_item,bool(*items_getter)(void* data,int idx,const char** out_text),void* data,int items_count,int height_in_items); -CIMGUI_API bool igListBoxHeaderVec2(const char* label,const ImVec2 size); -CIMGUI_API bool igListBoxHeaderInt(const char* label,int items_count,int height_in_items); -CIMGUI_API void igListBoxFooter(); +CIMGUI_API bool igListBoxHeaderVec2(const char* label,const ImVec2 size); // use if you want to reimplement ListBox() will custom data or interactions. make sure to call ListBoxFooter() afterwards. +CIMGUI_API bool igListBoxHeaderInt(const char* label,int items_count,int height_in_items); // " +CIMGUI_API void igListBoxFooter(); // terminate the scrolling region CIMGUI_API void igValueBool(const char* prefix,bool b); CIMGUI_API void igValueInt(const char* prefix,int v); CIMGUI_API void igValueUint(const char* prefix,unsigned int v); CIMGUI_API void igValueFloat(const char* prefix,float v,const char* float_format); -CIMGUI_API void igSetTooltip(const char* fmt,...); +CIMGUI_API void igSetTooltip(const char* fmt,...); // set text tooltip under mouse-cursor, typically use with ImGui::IsItemHovered(). overidde any previous call to SetTooltip(). CIMGUI_API void igSetTooltipV(const char* fmt,va_list args); -CIMGUI_API void igBeginTooltip(); +CIMGUI_API void igBeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of contents). CIMGUI_API void igEndTooltip(); -CIMGUI_API bool igBeginMainMenuBar(); -CIMGUI_API void igEndMainMenuBar(); -CIMGUI_API bool igBeginMenuBar(); -CIMGUI_API void igEndMenuBar(); -CIMGUI_API bool igBeginMenu(const char* label,bool enabled); -CIMGUI_API void igEndMenu(); -CIMGUI_API bool igMenuItemBool(const char* label,const char* shortcut,bool selected,bool enabled); -CIMGUI_API bool igMenuItemBoolPtr(const char* label,const char* shortcut,bool* p_selected,bool enabled); -CIMGUI_API void igOpenPopup(const char* str_id); -CIMGUI_API bool igBeginPopup(const char* str_id,ImGuiWindowFlags flags); -CIMGUI_API bool igBeginPopupContextItem(const char* str_id,int mouse_button); -CIMGUI_API bool igBeginPopupContextWindow(const char* str_id,int mouse_button,bool also_over_items); -CIMGUI_API bool igBeginPopupContextVoid(const char* str_id,int mouse_button); -CIMGUI_API bool igBeginPopupModal(const char* name,bool* p_open,ImGuiWindowFlags flags); -CIMGUI_API void igEndPopup(); -CIMGUI_API bool igOpenPopupOnItemClick(const char* str_id,int mouse_button); -CIMGUI_API bool igIsPopupOpen(const char* str_id); -CIMGUI_API void igCloseCurrentPopup(); +CIMGUI_API bool igBeginMainMenuBar(); // create and append to a full screen menu-bar. +CIMGUI_API void igEndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true! +CIMGUI_API bool igBeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window). +CIMGUI_API void igEndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true! +CIMGUI_API bool igBeginMenu(const char* label,bool enabled); // create a sub-menu entry. only call EndMenu() if this returns true! +CIMGUI_API void igEndMenu(); // only call EndMenu() if BeginMenu() returns true! +CIMGUI_API bool igMenuItemBool(const char* label,const char* shortcut,bool selected,bool enabled); // return true when activated. shortcuts are displayed for convenience but not processed by ImGui at the moment +CIMGUI_API bool igMenuItemBoolPtr(const char* label,const char* shortcut,bool* p_selected,bool enabled); // return true when activated + toggle (*p_selected) if p_selected != NULL +CIMGUI_API void igOpenPopup(const char* str_id); // call to mark popup as open (don't call every frame!). popups are closed when user click outside, or if CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block. By default, Selectable()/MenuItem() are calling CloseCurrentPopup(). Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level). +CIMGUI_API bool igBeginPopup(const char* str_id,ImGuiWindowFlags flags); // return true if the popup is open, and you can start outputting to it. only call EndPopup() if BeginPopup() returns true! +CIMGUI_API bool igBeginPopupContextItem(const char* str_id,int mouse_button); // helper to open and begin popup when clicked on last item. if you can pass a NULL str_id only if the previous item had an id. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp! +CIMGUI_API bool igBeginPopupContextWindow(const char* str_id,int mouse_button,bool also_over_items); // helper to open and begin popup when clicked on current window. +CIMGUI_API bool igBeginPopupContextVoid(const char* str_id,int mouse_button); // helper to open and begin popup when clicked in void (where there are no imgui windows). +CIMGUI_API bool igBeginPopupModal(const char* name,bool* p_open,ImGuiWindowFlags flags); // modal dialog (regular window with title bar, block interactions behind the modal window, can't close the modal window by clicking outside) +CIMGUI_API void igEndPopup(); // only call EndPopup() if BeginPopupXXX() returns true! +CIMGUI_API bool igOpenPopupOnItemClick(const char* str_id,int mouse_button); // helper to open popup when clicked on last item. return true when just opened. +CIMGUI_API bool igIsPopupOpen(const char* str_id); // return true if the popup is open +CIMGUI_API void igCloseCurrentPopup(); // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. CIMGUI_API void igColumns(int count,const char* id,bool border); -CIMGUI_API void igNextColumn(); -CIMGUI_API int igGetColumnIndex(); -CIMGUI_API float igGetColumnWidth(int column_index); -CIMGUI_API void igSetColumnWidth(int column_index,float width); -CIMGUI_API float igGetColumnOffset(int column_index); -CIMGUI_API void igSetColumnOffset(int column_index,float offset_x); +CIMGUI_API void igNextColumn(); // next column, defaults to current row or next row if the current row is finished +CIMGUI_API int igGetColumnIndex(); // get current column index +CIMGUI_API float igGetColumnWidth(int column_index); // get column width (in pixels). pass -1 to use current column +CIMGUI_API void igSetColumnWidth(int column_index,float width); // set column width (in pixels). pass -1 to use current column +CIMGUI_API float igGetColumnOffset(int column_index); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f +CIMGUI_API void igSetColumnOffset(int column_index,float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column CIMGUI_API int igGetColumnsCount(); -CIMGUI_API void igLogToTTY(int max_depth); -CIMGUI_API void igLogToFile(int max_depth,const char* filename); -CIMGUI_API void igLogToClipboard(int max_depth); -CIMGUI_API void igLogFinish(); -CIMGUI_API void igLogButtons(); -CIMGUI_API bool igBeginDragDropSource(ImGuiDragDropFlags flags); -CIMGUI_API bool igSetDragDropPayload(const char* type,const void* data,size_t size,ImGuiCond cond); -CIMGUI_API void igEndDragDropSource(); -CIMGUI_API bool igBeginDragDropTarget(); -CIMGUI_API const ImGuiPayload* igAcceptDragDropPayload(const char* type,ImGuiDragDropFlags flags); -CIMGUI_API void igEndDragDropTarget(); +CIMGUI_API void igLogToTTY(int max_depth); // start logging to tty +CIMGUI_API void igLogToFile(int max_depth,const char* filename); // start logging to file +CIMGUI_API void igLogToClipboard(int max_depth); // start logging to OS clipboard +CIMGUI_API void igLogFinish(); // stop logging (close file, etc.) +CIMGUI_API void igLogButtons(); // helper to display buttons for logging to tty/file/clipboard +CIMGUI_API bool igBeginDragDropSource(ImGuiDragDropFlags flags); // call when the current item is active. If this return true, you can call SetDragDropPayload() + EndDragDropSource() +CIMGUI_API bool igSetDragDropPayload(const char* type,const void* data,size_t size,ImGuiCond cond);// type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. +CIMGUI_API void igEndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true! +CIMGUI_API bool igBeginDragDropTarget(); // call after submitting an item that may receive an item. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget() +CIMGUI_API const ImGuiPayload* igAcceptDragDropPayload(const char* type,ImGuiDragDropFlags flags); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released. +CIMGUI_API void igEndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true! CIMGUI_API void igPushClipRect(const ImVec2 clip_rect_min,const ImVec2 clip_rect_max,bool intersect_with_current_clip_rect); CIMGUI_API void igPopClipRect(); -CIMGUI_API void igSetItemDefaultFocus(); -CIMGUI_API void igSetKeyboardFocusHere(int offset); -CIMGUI_API bool igIsItemHovered(ImGuiHoveredFlags flags); -CIMGUI_API bool igIsItemActive(); -CIMGUI_API bool igIsItemFocused(); -CIMGUI_API bool igIsItemClicked(int mouse_button); -CIMGUI_API bool igIsItemVisible(); +CIMGUI_API void igSetItemDefaultFocus(); // make last item the default focused item of a window. Please use instead of "if (IsWindowAppearing()) SetScrollHere()" to signify "default item". +CIMGUI_API void igSetKeyboardFocusHere(int offset); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. +CIMGUI_API bool igIsItemHovered(ImGuiHoveredFlags flags); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options. +CIMGUI_API bool igIsItemActive(); // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) +CIMGUI_API bool igIsItemFocused(); // is the last item focused for keyboard/gamepad navigation? +CIMGUI_API bool igIsItemClicked(int mouse_button); // is the last item clicked? (e.g. button/node just clicked on) +CIMGUI_API bool igIsItemVisible(); // is the last item visible? (aka not out of sight due to clipping/scrolling.) CIMGUI_API bool igIsAnyItemHovered(); CIMGUI_API bool igIsAnyItemActive(); CIMGUI_API bool igIsAnyItemFocused(); -CIMGUI_API ImVec2 igGetItemRectMin(); -CIMGUI_API ImVec2 igGetItemRectMax(); -CIMGUI_API ImVec2 igGetItemRectSize(); -CIMGUI_API void igSetItemAllowOverlap(); -CIMGUI_API bool igIsRectVisible(const ImVec2 size); -CIMGUI_API bool igIsRectVisibleVec2(const ImVec2 rect_min,const ImVec2 rect_max); +CIMGUI_API ImVec2 igGetItemRectMin(); // get bounding rectangle of last item, in screen space +CIMGUI_API ImVec2 igGetItemRectMax(); // " +CIMGUI_API ImVec2 igGetItemRectSize(); // get size of last item, in screen space +CIMGUI_API void igSetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area. +CIMGUI_API bool igIsRectVisible(const ImVec2 size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped. +CIMGUI_API bool igIsRectVisibleVec2(const ImVec2 rect_min,const ImVec2 rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. CIMGUI_API float igGetTime(); CIMGUI_API int igGetFrameCount(); -CIMGUI_API ImDrawList* igGetOverlayDrawList(); -CIMGUI_API ImDrawListSharedData* igGetDrawListSharedData(); +CIMGUI_API ImDrawList* igGetOverlayDrawList(); // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text +CIMGUI_API ImDrawListSharedData* igGetDrawListSharedData(); // you may use this when creating your own ImDrawList instances CIMGUI_API const char* igGetStyleColorName(ImGuiCol idx); -CIMGUI_API void igSetStateStorage(ImGuiStorage* storage); +CIMGUI_API void igSetStateStorage(ImGuiStorage* storage); // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it) CIMGUI_API ImGuiStorage* igGetStateStorage(); CIMGUI_API ImVec2 igCalcTextSize(const char* text,const char* text_end,bool hide_text_after_double_hash,float wrap_width); -CIMGUI_API void igCalcListClipping(int items_count,float items_height,int* out_items_display_start,int* out_items_display_end); -CIMGUI_API bool igBeginChildFrame(ImGuiID id,const ImVec2 size,ImGuiWindowFlags flags); -CIMGUI_API void igEndChildFrame(); +CIMGUI_API void igCalcListClipping(int items_count,float items_height,int* out_items_display_start,int* out_items_display_end); // calculate coarse clipping for large list of evenly sized items. Prefer using the ImGuiListClipper higher-level helper if you can. +CIMGUI_API bool igBeginChildFrame(ImGuiID id,const ImVec2 size,ImGuiWindowFlags flags); // helper to create a child window / scrolling region that looks like a normal widget frame +CIMGUI_API void igEndChildFrame(); // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window) CIMGUI_API ImVec4 igColorConvertU32ToFloat4(ImU32 in); CIMGUI_API ImU32 igColorConvertFloat4ToU32(const ImVec4 in); CIMGUI_API void igColorConvertRGBtoHSV(float r,float g,float b,float out_h,float out_s,float out_v); CIMGUI_API void igColorConvertHSVtoRGB(float h,float s,float v,float out_r,float out_g,float out_b); -CIMGUI_API int igGetKeyIndex(ImGuiKey imgui_key); -CIMGUI_API bool igIsKeyDown(int user_key_index); -CIMGUI_API bool igIsKeyPressed(int user_key_index,bool repeat); -CIMGUI_API bool igIsKeyReleased(int user_key_index); -CIMGUI_API int igGetKeyPressedAmount(int key_index,float repeat_delay,float rate); -CIMGUI_API bool igIsMouseDown(int button); -CIMGUI_API bool igIsAnyMouseDown(); -CIMGUI_API bool igIsMouseClicked(int button,bool repeat); -CIMGUI_API bool igIsMouseDoubleClicked(int button); -CIMGUI_API bool igIsMouseReleased(int button); -CIMGUI_API bool igIsMouseDragging(int button,float lock_threshold); -CIMGUI_API bool igIsMouseHoveringRect(const ImVec2 r_min,const ImVec2 r_max,bool clip); -CIMGUI_API bool igIsMousePosValid(const ImVec2* mouse_pos); -CIMGUI_API ImVec2 igGetMousePos(); -CIMGUI_API ImVec2 igGetMousePosOnOpeningCurrentPopup(); -CIMGUI_API ImVec2 igGetMouseDragDelta(int button,float lock_threshold); -CIMGUI_API void igResetMouseDragDelta(int button); -CIMGUI_API ImGuiMouseCursor igGetMouseCursor(); -CIMGUI_API void igSetMouseCursor(ImGuiMouseCursor type); -CIMGUI_API void igCaptureKeyboardFromApp(bool capture); -CIMGUI_API void igCaptureMouseFromApp(bool capture); +CIMGUI_API int igGetKeyIndex(ImGuiKey imgui_key); // map ImGuiKey_* values into user's key index. == io.KeyMap[key] +CIMGUI_API bool igIsKeyDown(int user_key_index); // is key being held. == io.KeysDown[user_key_index]. note that imgui doesn't know the semantic of each entry of io.KeyDown[]. Use your own indices/enums according to how your backend/engine stored them into KeyDown[]! +CIMGUI_API bool igIsKeyPressed(int user_key_index,bool repeat); // was key pressed (went from !Down to Down). if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate +CIMGUI_API bool igIsKeyReleased(int user_key_index); // was key released (went from Down to !Down).. +CIMGUI_API int igGetKeyPressedAmount(int key_index,float repeat_delay,float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate +CIMGUI_API bool igIsMouseDown(int button); // is mouse button held +CIMGUI_API bool igIsAnyMouseDown(); // is any mouse button held +CIMGUI_API bool igIsMouseClicked(int button,bool repeat); // did mouse button clicked (went from !Down to Down) +CIMGUI_API bool igIsMouseDoubleClicked(int button); // did mouse button double-clicked. a double-click returns false in IsMouseClicked(). uses io.MouseDoubleClickTime. +CIMGUI_API bool igIsMouseReleased(int button); // did mouse button released (went from Down to !Down) +CIMGUI_API bool igIsMouseDragging(int button,float lock_threshold); // is mouse dragging. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +CIMGUI_API bool igIsMouseHoveringRect(const ImVec2 r_min,const ImVec2 r_max,bool clip); // is mouse hovering given bounding rect (in screen space). clipped by current clipping settings. disregarding of consideration of focus/window ordering/blocked by a popup. +CIMGUI_API bool igIsMousePosValid(const ImVec2* mouse_pos); // +CIMGUI_API ImVec2 igGetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls +CIMGUI_API ImVec2 igGetMousePosOnOpeningCurrentPopup(); // retrieve backup of mouse position at the time of opening popup we have BeginPopup() into +CIMGUI_API ImVec2 igGetMouseDragDelta(int button,float lock_threshold); // dragging amount since clicking. if lock_threshold < -1.0f uses io.MouseDraggingThreshold +CIMGUI_API void igResetMouseDragDelta(int button); // +CIMGUI_API ImGuiMouseCursor igGetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you +CIMGUI_API void igSetMouseCursor(ImGuiMouseCursor type); // set desired cursor type +CIMGUI_API void igCaptureKeyboardFromApp(bool capture); // manually override io.WantCaptureKeyboard flag next frame (said flag is entirely left for your application to handle). e.g. force capture keyboard when your widget is being hovered. +CIMGUI_API void igCaptureMouseFromApp(bool capture); // manually override io.WantCaptureMouse flag next frame (said flag is entirely left for your application to handle). CIMGUI_API const char* igGetClipboardText(); CIMGUI_API void igSetClipboardText(const char* text); CIMGUI_API void igSetAllocatorFunctions(void*(*alloc_func)(size_t sz,void* user_data),void(*free_func)(void* ptr,void* user_data),void* user_data); CIMGUI_API void* igMemAlloc(size_t size); CIMGUI_API void igMemFree(void* ptr); CIMGUI_API void ImGuiStyle_ScaleAllSizes(ImGuiStyle* self,float scale_factor); -CIMGUI_API void ImGuiIO_AddInputCharacter(ImGuiIO* self,ImWchar c); -CIMGUI_API void ImGuiIO_AddInputCharactersUTF8(ImGuiIO* self,const char* utf8_chars); -CIMGUI_API inline void ImGuiIO_ClearInputCharacters(ImGuiIO* self); +CIMGUI_API void ImGuiIO_AddInputCharacter(ImGuiIO* self,ImWchar c); // Add new character into InputCharacters[] +CIMGUI_API void ImGuiIO_AddInputCharactersUTF8(ImGuiIO* self,const char* utf8_chars); // Add new characters into InputCharacters[] from an UTF-8 string +CIMGUI_API inline void ImGuiIO_ClearInputCharacters(ImGuiIO* self); // Clear the text input buffer manually CIMGUI_API const char* TextRange_begin(TextRange* self); CIMGUI_API const char* TextRange_end(TextRange* self); CIMGUI_API bool TextRange_empty(TextRange* self); @@ -1121,13 +1121,13 @@ CIMGUI_API char TextRange_front(TextRange* self); CIMGUI_API bool TextRange_is_blank(TextRange* self,char c); CIMGUI_API void TextRange_trim_blanks(TextRange* self); CIMGUI_API void TextRange_split(TextRange* self,char separator,ImVector_TextRange out); -CIMGUI_API bool ImGuiTextFilter_Draw(ImGuiTextFilter* self,const char* label,float width); +CIMGUI_API bool ImGuiTextFilter_Draw(ImGuiTextFilter* self,const char* label,float width); // Helper calling InputText+Build CIMGUI_API bool ImGuiTextFilter_PassFilter(ImGuiTextFilter* self,const char* text,const char* text_end); CIMGUI_API void ImGuiTextFilter_Build(ImGuiTextFilter* self); CIMGUI_API void ImGuiTextFilter_Clear(ImGuiTextFilter* self); CIMGUI_API bool ImGuiTextFilter_IsActive(ImGuiTextFilter* self); CIMGUI_API const char* ImGuiTextBuffer_begin(ImGuiTextBuffer* self); -CIMGUI_API const char* ImGuiTextBuffer_end(ImGuiTextBuffer* self); +CIMGUI_API const char* ImGuiTextBuffer_end(ImGuiTextBuffer* self); // Buf is zero-terminated, so end() will point on the zero-terminator CIMGUI_API int ImGuiTextBuffer_size(ImGuiTextBuffer* self); CIMGUI_API bool ImGuiTextBuffer_empty(ImGuiTextBuffer* self); CIMGUI_API void ImGuiTextBuffer_clear(ImGuiTextBuffer* self); @@ -1141,7 +1141,7 @@ CIMGUI_API bool ImGuiStorage_GetBool(ImGuiStorage* self,ImGuiID key,bool defaul CIMGUI_API void ImGuiStorage_SetBool(ImGuiStorage* self,ImGuiID key,bool val); CIMGUI_API float ImGuiStorage_GetFloat(ImGuiStorage* self,ImGuiID key,float default_val); CIMGUI_API void ImGuiStorage_SetFloat(ImGuiStorage* self,ImGuiID key,float val); -CIMGUI_API void* ImGuiStorage_GetVoidPtr(ImGuiStorage* self,ImGuiID key); +CIMGUI_API void* ImGuiStorage_GetVoidPtr(ImGuiStorage* self,ImGuiID key); // default_val is NULL CIMGUI_API void ImGuiStorage_SetVoidPtr(ImGuiStorage* self,ImGuiID key,void* val); CIMGUI_API int* ImGuiStorage_GetIntRef(ImGuiStorage* self,ImGuiID key,int default_val); CIMGUI_API bool* ImGuiStorage_GetBoolRef(ImGuiStorage* self,ImGuiID key,bool default_val); @@ -1158,10 +1158,10 @@ CIMGUI_API bool ImGuiPayload_IsPreview(ImGuiPayload* self); CIMGUI_API bool ImGuiPayload_IsDelivery(ImGuiPayload* self); CIMGUI_API inline void ImColor_SetHSV(ImColor* self,float h,float s,float v,float a); CIMGUI_API ImColor ImColor_HSV(ImColor* self,float h,float s,float v,float a); -CIMGUI_API bool ImGuiListClipper_Step(ImGuiListClipper* self); -CIMGUI_API void ImGuiListClipper_Begin(ImGuiListClipper* self,int items_count,float items_height); -CIMGUI_API void ImGuiListClipper_End(ImGuiListClipper* self); -CIMGUI_API void ImDrawList_PushClipRect(ImDrawList* self,ImVec2 clip_rect_min,ImVec2 clip_rect_max,bool intersect_with_current_clip_rect); +CIMGUI_API bool ImGuiListClipper_Step(ImGuiListClipper* self); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items. +CIMGUI_API void ImGuiListClipper_Begin(ImGuiListClipper* self,int items_count,float items_height); // Automatically called by constructor if you passed 'items_count' or by Step() in Step 1. +CIMGUI_API void ImGuiListClipper_End(ImGuiListClipper* self); // Automatically called on the last call of Step() that returns false. +CIMGUI_API void ImDrawList_PushClipRect(ImDrawList* self,ImVec2 clip_rect_min,ImVec2 clip_rect_max,bool intersect_with_current_clip_rect); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling) CIMGUI_API void ImDrawList_PushClipRectFullScreen(ImDrawList* self); CIMGUI_API void ImDrawList_PopClipRect(ImDrawList* self); CIMGUI_API void ImDrawList_PushTextureID(ImDrawList* self,ImTextureID texture_id); @@ -1169,8 +1169,8 @@ CIMGUI_API void ImDrawList_PopTextureID(ImDrawList* self); CIMGUI_API inline ImVec2 ImDrawList_GetClipRectMin(ImDrawList* self); CIMGUI_API inline ImVec2 ImDrawList_GetClipRectMax(ImDrawList* self); CIMGUI_API void ImDrawList_AddLine(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col,float thickness); -CIMGUI_API void ImDrawList_AddRect(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col,float rounding,int rounding_corners_flags,float thickness); -CIMGUI_API void ImDrawList_AddRectFilled(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col,float rounding,int rounding_corners_flags); +CIMGUI_API void ImDrawList_AddRect(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col,float rounding,int rounding_corners_flags,float thickness); // a: upper-left, b: lower-right, rounding_corners_flags: 4-bits corresponding to which corner to round +CIMGUI_API void ImDrawList_AddRectFilled(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col,float rounding,int rounding_corners_flags); // a: upper-left, b: lower-right CIMGUI_API void ImDrawList_AddRectFilledMultiColor(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col_upr_left,ImU32 col_upr_right,ImU32 col_bot_right,ImU32 col_bot_left); CIMGUI_API void ImDrawList_AddQuad(ImDrawList* self,const ImVec2 a,const ImVec2 b,const ImVec2 c,const ImVec2 d,ImU32 col,float thickness); CIMGUI_API void ImDrawList_AddQuadFilled(ImDrawList* self,const ImVec2 a,const ImVec2 b,const ImVec2 c,const ImVec2 d,ImU32 col); @@ -1192,19 +1192,19 @@ CIMGUI_API inline void ImDrawList_PathLineToMergeDuplicate(ImDrawList* self,con CIMGUI_API inline void ImDrawList_PathFillConvex(ImDrawList* self,ImU32 col); CIMGUI_API inline void ImDrawList_PathStroke(ImDrawList* self,ImU32 col,bool closed,float thickness); CIMGUI_API void ImDrawList_PathArcTo(ImDrawList* self,const ImVec2 centre,float radius,float a_min,float a_max,int num_segments); -CIMGUI_API void ImDrawList_PathArcToFast(ImDrawList* self,const ImVec2 centre,float radius,int a_min_of_12,int a_max_of_12); +CIMGUI_API void ImDrawList_PathArcToFast(ImDrawList* self,const ImVec2 centre,float radius,int a_min_of_12,int a_max_of_12); // Use precomputed angles for a 12 steps circle CIMGUI_API void ImDrawList_PathBezierCurveTo(ImDrawList* self,const ImVec2 p1,const ImVec2 p2,const ImVec2 p3,int num_segments); CIMGUI_API void ImDrawList_PathRect(ImDrawList* self,const ImVec2 rect_min,const ImVec2 rect_max,float rounding,int rounding_corners_flags); CIMGUI_API void ImDrawList_ChannelsSplit(ImDrawList* self,int channels_count); CIMGUI_API void ImDrawList_ChannelsMerge(ImDrawList* self); CIMGUI_API void ImDrawList_ChannelsSetCurrent(ImDrawList* self,int channel_index); -CIMGUI_API void ImDrawList_AddCallback(ImDrawList* self,ImDrawCallback callback,void* callback_data); -CIMGUI_API void ImDrawList_AddDrawCmd(ImDrawList* self); -CIMGUI_API ImDrawList* ImDrawList_CloneOutput(ImDrawList* self); +CIMGUI_API void ImDrawList_AddCallback(ImDrawList* self,ImDrawCallback callback,void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles. +CIMGUI_API void ImDrawList_AddDrawCmd(ImDrawList* self); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible +CIMGUI_API ImDrawList* ImDrawList_CloneOutput(ImDrawList* self); // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer. CIMGUI_API void ImDrawList_Clear(ImDrawList* self); CIMGUI_API void ImDrawList_ClearFreeMemory(ImDrawList* self); CIMGUI_API void ImDrawList_PrimReserve(ImDrawList* self,int idx_count,int vtx_count); -CIMGUI_API void ImDrawList_PrimRect(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col); +CIMGUI_API void ImDrawList_PrimRect(ImDrawList* self,const ImVec2 a,const ImVec2 b,ImU32 col); // Axis aligned rectangle (composed of two triangles) CIMGUI_API void ImDrawList_PrimRectUV(ImDrawList* self,const ImVec2 a,const ImVec2 b,const ImVec2 uv_a,const ImVec2 uv_b,ImU32 col); CIMGUI_API void ImDrawList_PrimQuadUV(ImDrawList* self,const ImVec2 a,const ImVec2 b,const ImVec2 c,const ImVec2 d,const ImVec2 uv_a,const ImVec2 uv_b,const ImVec2 uv_c,const ImVec2 uv_d,ImU32 col); CIMGUI_API inline void ImDrawList_PrimWriteVtx(ImDrawList* self,const ImVec2 pos,const ImVec2 uv,ImU32 col); @@ -1212,38 +1212,38 @@ CIMGUI_API inline void ImDrawList_PrimWriteIdx(ImDrawList* self,ImDrawIdx idx); CIMGUI_API inline void ImDrawList_PrimVtx(ImDrawList* self,const ImVec2 pos,const ImVec2 uv,ImU32 col); CIMGUI_API void ImDrawList_UpdateClipRect(ImDrawList* self); CIMGUI_API void ImDrawList_UpdateTextureID(ImDrawList* self); -CIMGUI_API void ImDrawData_Clear(ImDrawData* self); -CIMGUI_API void ImDrawData_DeIndexAllBuffers(ImDrawData* self); -CIMGUI_API void ImDrawData_ScaleClipRects(ImDrawData* self,const ImVec2 sc); +CIMGUI_API void ImDrawData_Clear(ImDrawData* self); // The ImDrawList are owned by ImGuiContext! +CIMGUI_API void ImDrawData_DeIndexAllBuffers(ImDrawData* self); // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering! +CIMGUI_API void ImDrawData_ScaleClipRects(ImDrawData* self,const ImVec2 sc); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than ImGui expects, or if there is a difference between your window resolution and framebuffer resolution. CIMGUI_API ImFont* ImFontAtlas_AddFont(ImFontAtlas* self,const ImFontConfig* font_cfg); CIMGUI_API ImFont* ImFontAtlas_AddFontDefault(ImFontAtlas* self,const ImFontConfig* font_cfg); CIMGUI_API ImFont* ImFontAtlas_AddFontFromFileTTF(ImFontAtlas* self,const char* filename,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges); -CIMGUI_API ImFont* ImFontAtlas_AddFontFromMemoryTTF(ImFontAtlas* self,void* font_data,int font_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges); -CIMGUI_API ImFont* ImFontAtlas_AddFontFromMemoryCompressedTTF(ImFontAtlas* self,const void* compressed_font_data,int compressed_font_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges); -CIMGUI_API ImFont* ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(ImFontAtlas* self,const char* compressed_font_data_base85,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges); -CIMGUI_API void ImFontAtlas_ClearInputData(ImFontAtlas* self); -CIMGUI_API void ImFontAtlas_ClearTexData(ImFontAtlas* self); -CIMGUI_API void ImFontAtlas_ClearFonts(ImFontAtlas* self); -CIMGUI_API void ImFontAtlas_Clear(ImFontAtlas* self); -CIMGUI_API bool ImFontAtlas_Build(ImFontAtlas* self); -CIMGUI_API void ImFontAtlas_GetTexDataAsAlpha8(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel); -CIMGUI_API void ImFontAtlas_GetTexDataAsRGBA32(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel); +CIMGUI_API ImFont* ImFontAtlas_AddFontFromMemoryTTF(ImFontAtlas* self,void* font_data,int font_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after Build(). Set font_cfg->FontDataOwnedByAtlas to false to keep ownership. +CIMGUI_API ImFont* ImFontAtlas_AddFontFromMemoryCompressedTTF(ImFontAtlas* self,const void* compressed_font_data,int compressed_font_size,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp. +CIMGUI_API ImFont* ImFontAtlas_AddFontFromMemoryCompressedBase85TTF(ImFontAtlas* self,const char* compressed_font_data_base85,float size_pixels,const ImFontConfig* font_cfg,const ImWchar* glyph_ranges); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter. +CIMGUI_API void ImFontAtlas_ClearInputData(ImFontAtlas* self); // Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts. +CIMGUI_API void ImFontAtlas_ClearTexData(ImFontAtlas* self); // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory. +CIMGUI_API void ImFontAtlas_ClearFonts(ImFontAtlas* self); // Clear output font data (glyphs storage, UV coordinates). +CIMGUI_API void ImFontAtlas_Clear(ImFontAtlas* self); // Clear all input and output. +CIMGUI_API bool ImFontAtlas_Build(ImFontAtlas* self); // Build pixels data. This is called automatically for you by the GetTexData*** functions. +CIMGUI_API void ImFontAtlas_GetTexDataAsAlpha8(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel); // 1 byte per-pixel +CIMGUI_API void ImFontAtlas_GetTexDataAsRGBA32(ImFontAtlas* self,unsigned char** out_pixels,int* out_width,int* out_height,int* out_bytes_per_pixel); // 4 bytes-per-pixel CIMGUI_API void ImFontAtlas_SetTexID(ImFontAtlas* self,ImTextureID id); -CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesDefault(ImFontAtlas* self); -CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesKorean(ImFontAtlas* self); -CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesJapanese(ImFontAtlas* self); -CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesChinese(ImFontAtlas* self); -CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesCyrillic(ImFontAtlas* self); -CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesThai(ImFontAtlas* self); +CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesDefault(ImFontAtlas* self); // Basic Latin, Extended Latin +CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesKorean(ImFontAtlas* self); // Default + Korean characters +CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesJapanese(ImFontAtlas* self); // Default + Hiragana, Katakana, Half-Width, Selection of 1946 Ideographs +CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesChinese(ImFontAtlas* self); // Default + Japanese + full set of about 21000 CJK Unified Ideographs +CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesCyrillic(ImFontAtlas* self); // Default + about 400 Cyrillic characters +CIMGUI_API const ImWchar* ImFontAtlas_GetGlyphRangesThai(ImFontAtlas* self); // Default + Thai characters CIMGUI_API bool GlyphRangesBuilder_GetBit(GlyphRangesBuilder* self,int n); -CIMGUI_API void GlyphRangesBuilder_SetBit(GlyphRangesBuilder* self,int n); -CIMGUI_API void GlyphRangesBuilder_AddChar(GlyphRangesBuilder* self,ImWchar c); -CIMGUI_API void GlyphRangesBuilder_AddText(GlyphRangesBuilder* self,const char* text,const char* text_end); -CIMGUI_API void GlyphRangesBuilder_AddRanges(GlyphRangesBuilder* self,const ImWchar* ranges); -CIMGUI_API void GlyphRangesBuilder_BuildRanges(GlyphRangesBuilder* self,ImVector_ImWchar* out_ranges); +CIMGUI_API void GlyphRangesBuilder_SetBit(GlyphRangesBuilder* self,int n); // Set bit 'c' in the array +CIMGUI_API void GlyphRangesBuilder_AddChar(GlyphRangesBuilder* self,ImWchar c); // Add character +CIMGUI_API void GlyphRangesBuilder_AddText(GlyphRangesBuilder* self,const char* text,const char* text_end); // Add string (each character of the UTF-8 string are added) +CIMGUI_API void GlyphRangesBuilder_AddRanges(GlyphRangesBuilder* self,const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault) to force add all of ASCII/Latin+Ext +CIMGUI_API void GlyphRangesBuilder_BuildRanges(GlyphRangesBuilder* self,ImVector_ImWchar* out_ranges); // Output new ranges CIMGUI_API bool CustomRect_IsPacked(CustomRect* self); -CIMGUI_API int ImFontAtlas_AddCustomRectRegular(ImFontAtlas* self,unsigned int id,int width,int height); -CIMGUI_API int ImFontAtlas_AddCustomRectFontGlyph(ImFontAtlas* self,ImFont* font,ImWchar id,int width,int height,float advance_x,const ImVec2 offset); +CIMGUI_API int ImFontAtlas_AddCustomRectRegular(ImFontAtlas* self,unsigned int id,int width,int height); // Id needs to be >= 0x10000. Id >= 0x80000000 are reserved for ImGui and ImDrawList +CIMGUI_API int ImFontAtlas_AddCustomRectFontGlyph(ImFontAtlas* self,ImFont* font,ImWchar id,int width,int height,float advance_x,const ImVec2 offset); // Id needs to be < 0x10000 to register a rectangle to map into a specific font. CIMGUI_API const CustomRect* ImFontAtlas_GetCustomRectByIndex(ImFontAtlas* self,int index); CIMGUI_API void ImFontAtlas_CalcCustomRectUV(ImFontAtlas* self,const CustomRect* rect,ImVec2* out_uv_min,ImVec2* out_uv_max); CIMGUI_API bool ImFontAtlas_GetMouseCursorTexData(ImFontAtlas* self,ImGuiMouseCursor cursor,ImVec2* out_offset,ImVec2* out_size,ImVec2 out_uv_border[2],ImVec2 out_uv_fill[2]); @@ -1255,13 +1255,13 @@ CIMGUI_API void ImFont_SetFallbackChar(ImFont* self,ImWchar c); CIMGUI_API float ImFont_GetCharAdvance(ImFont* self,ImWchar c); CIMGUI_API bool ImFont_IsLoaded(ImFont* self); CIMGUI_API const char* ImFont_GetDebugName(ImFont* self); -CIMGUI_API ImVec2 ImFont_CalcTextSizeA(ImFont* self,float size,float max_width,float wrap_width,const char* text_begin,const char* text_end,const char** remaining); +CIMGUI_API ImVec2 ImFont_CalcTextSizeA(ImFont* self,float size,float max_width,float wrap_width,const char* text_begin,const char* text_end,const char** remaining); // utf8 CIMGUI_API const char* ImFont_CalcWordWrapPositionA(ImFont* self,float scale,const char* text,const char* text_end,float wrap_width); CIMGUI_API void ImFont_RenderChar(ImFont* self,ImDrawList* draw_list,float size,ImVec2 pos,ImU32 col,unsigned short c); CIMGUI_API void ImFont_RenderText(ImFont* self,ImDrawList* draw_list,float size,ImVec2 pos,ImU32 col,const ImVec4 clip_rect,const char* text_begin,const char* text_end,float wrap_width,bool cpu_fine_clip); CIMGUI_API void ImFont_GrowIndex(ImFont* self,int new_size); CIMGUI_API void ImFont_AddGlyph(ImFont* self,ImWchar c,float x0,float y0,float x1,float y1,float u0,float v0,float u1,float v1,float advance_x); -CIMGUI_API void ImFont_AddRemapChar(ImFont* self,ImWchar dst,ImWchar src,bool overwrite_dst); +CIMGUI_API void ImFont_AddRemapChar(ImFont* self,ImWchar dst,ImWchar src,bool overwrite_dst); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built. /////////////////////////hand written functions diff --git a/cimgui/generator/generator.lua b/cimgui/generator/generator.lua index 0bed8b6..6d99fde 100644 --- a/cimgui/generator/generator.lua +++ b/cimgui/generator/generator.lua @@ -558,13 +558,13 @@ local function func_header_generate(FP) if not manual and def.ret then --not constructor local addcoment = def.comment or "" if def.stname == "ImGui" then - table.insert(outtab,"CIMGUI_API".." "..def.ret.." "..(def.ov_cimguiname or def.cimguiname)..def.args..addcoment..";\n") + table.insert(outtab,"CIMGUI_API".." "..def.ret.." "..(def.ov_cimguiname or def.cimguiname)..def.args..";"..addcoment.."\n") else local empty = def.args:match("^%(%)") --no args --local imgui_stname = embeded_structs[def.stname] or def.stname local imgui_stname = def.stname local args = def.args:gsub("^%(","("..imgui_stname.."* self"..(empty and "" or ",")) - table.insert(outtab,"CIMGUI_API".." "..def.ret.." "..(def.ov_cimguiname or def.cimguiname)..args..addcoment..";\n") + table.insert(outtab,"CIMGUI_API".." "..def.ret.." "..(def.ov_cimguiname or def.cimguiname)..args..";"..addcoment.."\n") end end end