Dear ImGui

From GiderosMobile
Revision as of 15:13, 1 October 2024 by MoKaLux (talk | contribs)

Supported platforms: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.pngPlatform html5.pngPlatform winrt.pngPlatform win32.png
Available since: Gideros 2020.9

Description

This is an implementation of the Dear ImGui library: https://github.com/ocornut/imgui.

To use Dear ImGui in your project you need to add the ImGui plugin and call require like so:

require "ImGui"

The current Dear ImGui version implemented in Gideros is version 1.89.6.


See full introduction documentation here: https://pixtur.github.io/mkdocs-for-imgui/site/
and the full Dear ImGui demo here: https://pthom.github.io/imgui_manual_online/manual/imgui_manual.html


You can find some Dear ImGui examples implemented in Gideros Studio here: ImGui_Examples.






WIP

(copied from @rrraptor's GitHub https://github.com/MultiPain/Gideros_ImGui)


Dear ImGui LUA binding for Gideros Mobile

Constructor

-- font_atlas: copy fonts
-- mouse_listeners: adds internal mouse event listeners
-- keyboard_listeners: adds internal keyboard event listeners
-- touch_listeners: adds internal touch event listeners
ImGui.new([font_atlas = nil, mouse_listeners = true, keyboard_listeners = true, touch_listeners = false])
<syntaxhighlight lang="lua">

EXPERIMENTAL

p_open = ImGui:showLog(title, p_open [, ImGui.WindowFlags = 0]) -- draw log window
ImGui:writeLog(text)

Gestures (touch only, turned OFF by default) _**WIP**_

  • Tap gesture (Left Mouse Button)
  • Hold gesture (Right Mouse Button)
ImGui:setTouchGesturesEnabled(bool)
bool = ImGui:isTouchGesturesEnabled()

FONTS

```lua IO = imgui:getIO() FontAtlas = IO:getFonts()

Font = FontAtlas:addFont(ttf_font_path, font_size [, options])

-- options (table): all parameters are optional -- fontDataOwnedByAtlas - bool -- pixelSnapH - bool -- mergeMode - bool -- fontNo - number -- oversampleH - number -- oversampleV - number -- glyphExtraSpacingX - number -- glyphExtraSpacingY - number -- glyphOffsetX - number -- glyphOffsetY - number -- glyphMinAdvanceX - number -- glyphMaxAdvanceX - number -- rasterizerFlags - number -- rasterizerMultiply - number -- -- glyphs - table: -- text(string): represents avaliable chars -- chars(table): list of specific char code (example: {0x7262, ...}) -- ranges(table): predefined glyph ranges (example: {ImGui.GlyphRanges_Default, ImGui.GlyphRanges_Japanese, ...}) FontAtlas:addFonts(fontsDescription) -- fontsDescriptions(talbe): -- description(table): -- ttf_font_path(string): path to a font -- font_size(number): font size -- options(table): see description above -- example: -- FontAtlas:addFonts{ {"fonts/DroidSans.ttf", 16}, {"fonts/ProggyTiny.ttf", 16} }

Font = FontAtlas:getFont([index]) -- get font by index (if index is 0 or nil you will get default font instance) FontAtlas:build() -- call after multiple FontAtlas:addFont(...) calls to update ImGui font atlas FontAtlas:clearInputData() FontAtlas:clearTexData() FontAtlas:clearFonts() FontAtlas:clear() table = FontAtlas:getFonts() -- returns a table with all fonts (included default) flag = FontAtlas:isBuilt() number = FontAtlas:addCustomRectRegular(width, height) number = FontAtlas:addCustomRectFontGlyph(font, id, width, height, advance_x [, offset_x, offset_y]) w, h, x, y, glyph_id, offset_x, offset_y, font, is_packed_flag = FontAtlas:getCustomRectByIndex(index)

ImGui:pushFont(font) -- font (table): object returned by FontAtlas:addFont(...) or FontAtlas:getFont([index]) ImGui:popFont() ```

      1. Minimal example:

```lua local UI = ImGui.new() local IO = UI:getIO() local FontAtlas = IO:getFonts() local VDS_font = FontAtlas:addFont("fonts/VDS.ttf", 16, {

   oversampleH = 2,
   oversampleV = 2,

glyphs = { ranges = {ImGui.GlyphRanges_Cyrillic} } }) IO:setFontDefault(VDS_font) FontAtlas:build() stage:addChild(UI)

-- you can use multiple fonts at the same time function enterFrame(e) UI:newFrame(e.deltaTime)

UI:pushFont(font1) UI:text("Font1") UI:popFont()

UI:pushFont(font2) UI:text("Font2") UI:popFont()

UI:render() UI:endFrame() end ```

      1. Glyphs example:

```lua local fonts = io:getFonts() fonts:addFont(font_path, font_size, { glyphs = { ranges = { { 0x2590,0x2593, -- range1 0x2660,0x266B -- range2 -- ... }, ImGui.GlyphRanges_Cyrillic, { 0x01C0, 0x01C3 -- range3 }, ImGui.GlyphRanges_Korean },

-- same structure: ranges = { { 0x2590,0x2593, -- range1 0x2660,0x266B, -- range2 0x01C0,0x01C3 -- range3 -- ... }, ImGui.GlyphRanges_Cyrillic, ImGui.GlyphRanges_Korean } }, mergeMode = true, -- merge into previous font }) fonts:build() ```

      1. Icons

```lua local icon = utf8.char(0x2590) ImGui:text("My icon >>" .. icon .. " << !!!")

-- or with new Luau support: ImGui:text("My icon >> \u{2590} << !!!") -- can be also stored in memory: local icon = "\u{2590}" ```

Font

```lua number = Font:getSize() FontAtlas = Font:getContainerAtlas() Font:setScale(number) number = Font:getScale() number = Font:getAscent() number = Font:getDescent() boo = Font:isLoaded() string = Font:getDebugName() w, h = Font:calcTextSizeA(size, max_width, wrap_width, string) Font:calcWordWrapPositionA(scale, string, wrap_width) -- not tested ```

INPUTS

```lua ImGui:onMouseHover(event) ImGui:onMouseMove(event) ImGui:onMouseDown(event) ImGui:onMouseUp(event) ImGui:onMouseWheel(event)

ImGui:onTouchMove(event) ImGui:onTouchBegin(event) ImGui:onTouchEnd(event) ImGui:onTouchCancel(event)

ImGui:onKeyUp(event) ImGui:onKeyDown(event) ImGui:onKeyChar(event) ```

      1. Usage example

```lua local UI = ImGui.new(nil, false, false, false) ```

    • Mouse**

```lua stage:addEventListener("mouseHover", function(e) UI:onMouseHover(e) end) stage:addEventListener("mouseMove", function(e) UI:onMouseMove(e) end) stage:addEventListener("mouseDown", function(e) UI:onMouseDown(e) end) stage:addEventListener("mouseUp", function(e) UI:onMouseUp(e) end) stage:addEventListener("mouseWheel", function(e) UI:onMouseWheel(e) end) ```

    • Touch**

```lua stage:addEventListener("touchesCancel", function(e) ui:onTouchCancel(e) end) stage:addEventListener("touchesMove", function(e) ui:onTouchMove(e) end) stage:addEventListener("touchesBegin", function(e) ui:onTouchBegin(e) end) stage:addEventListener("touchesEnd", function(e) ui:onTouchEnd(e) end) ```

    • Keyboard**

```lua stage:addEventListener("keyUp", function(e) UI:onKeyUp(e) end) stage:addEventListener("keyDown", function(e) UI:onKeyDown(e) end) stage:addEventListener("keyChar", function(e) UI:onKeyChar(e) end) ```

Style setters/getters

      1. Get style settings instance

```lua local Style = ImGui:getStyle() ``` ```lua Style:setColor(ImGui.Col, color, alpha) color, alpha = Style:getColor(ImGui.Col) Style:setAlpha(value) value = Style:getAlpha() Style:setWindowRounding(value) value = Style:getWindowRounding() Style:setWindowBorderSize(value) value = Style:getWindowBorderSize() Style:setChildRounding(value) value = Style:getChildRounding() Style:setChildBorderSize(value) value = Style:getChildBorderSize() Style:setPopupRounding(value) value = Style:getPopupRounding() Style:setPopupBorderSize(value) value = Style:getPopupBorderSize() Style:setFrameRounding(value) value = Style:getFrameRounding() Style:setFrameBorderSize(value) value = Style:getFrameBorderSize() Style:setIndentSpacing(value) value = Style:getIndentSpacing() Style:setColumnsMinSpacing(value) value = Style:getColumnsMinSpacing() Style:setScrollbarSize(value) value = Style:getScrollbarSize() Style:setScrollbarRounding(value) value = Style:getScrollbarRounding() Style:setGrabMinSize(value) value = Style:getGrabMinSize() Style:setGrabRounding(value) value = Style:getGrabRounding() Style:setLogSliderDeadzone(value) value = Style:getLogSliderDeadzone() Style:setTabRounding(value) value = Style:getTabRounding() Style:setTabBorderSize(value) value = Style:getTabBorderSize() Style:setTabMinWidthForCloseButton(value) value = Style:getTabMinWidthForCloseButton() Style:setMouseCursorScale(value) value = Style:getMouseCursorScale() Style:setCurveTessellationTol(value) value = Style:getCurveTessellationTol() Style:setCircleSegmentMaxError(value) value = Style:getCircleSegmentMaxError() Style:setWindowPadding(x, y) x, y = Style:getWindowPadding() Style:setWindowMinSize(x, y) x, y = Style:getWindowMinSize() Style:setWindowTitleAlign(x, y) x, y = Style:getWindowTitleAlign() Style:setFramePadding(x, y) x, y = Style:getFramePadding() Style:setCellPadding(x, y) x, y = Style:getCellPadding() Style:setItemSpacing(x, y) x, y = Style:getItemSpacing() Style:setItemInnerSpacing(x, y) x, y = Style:getItemInnerSpacing() Style:setTouchExtraPadding(x, y) x, y = Style:getTouchExtraPadding() Style:setButtonTextAlign(x, y) x, y = Style:getButtonTextAlign() Style:setSelectableTextAlign(x, y) x, y = Style:getSelectableTextAlign() Style:setDisplayWindowPadding(x, y) x, y = Style:getDisplayWindowPadding() Style:setDisplaySafeAreaPadding(x, y) x, y = Style:getDisplaySafeAreaPadding() Style:setWindowMenuButtonPosition(ImGui.Dir) dir = Style:getWindowMenuButtonPosition() Style:setColorButtonPosition(ImGui.Dir) dir = Style:getColorButtonPosition() Style:setAntiAliasedLines(flag) flag = Style:getAntiAliasedLines() Style:setAntiAliasedLinesUseTex(flag) flag = Style:getAntiAliasedLinesUseTex() Style:setAntiAliasedFill(flag) flag = Style:getAntiAliasedFill() Style:setDisabledAlpha(number) alpha = Style:getDisabledAlpha() Style:setSeparatorTextBorderSize(number) number = Style:getSeparatorTextBorderSize() Style:setSeparatorTextAlign(x, y) x, y = Style:getSeparatorTextAlign() Style:setSeparatorTextPadding(x, y) x, y = Style:getSeparatorTextPadding() ```

    1. DEFAULT STYLES

```lua ImGui:setDarkStyle() ImGui:setLightStyle() ImGui:setClassicStyle() ```

Color convert

    • Note**: use ***DOT*** instead of ***COLON***, so you can use it without creating an ImGui object

```lua r, g, b, a = ImGui.colorConvertHEXtoRGB(color [, alpha = 1]) hex = ImGui.colorConvertRGBtoHEX(r, g, b) h, s, v = ImGui.colorConvertRGBtoHSV(r, g, b) r, g, b = ImGui.colorConvertHSVtoRGB(h, s, v) h, s, v = ImGui.colorConvertHEXtoHSV(hex) hex = ImGui.colorConvertHSVtoHEX(h, s, v) ```

IO Functions

      1. Get IO instance

```lua local IO = ImGui:getIO() ```

      1. Functions

```lua IO:setFontDefault(font) ImGuiConfigFlag = IO:getConfigFlags() IO:setConfigFlags(ImGui.ConfigFlag) IO:addConfigFlags(ImGui.ConfigFlag) ImGuiBackendFlag = IO:getBackendFlags() IO:setBackendFlags(ImGui.BackendFlag) number = IO:getIniSavingRate() IO:setIniSavingRate(number) string = IO:getIniFilename() IO:setIniFilename(string) IO:saveIniSettings([path]) -- if path is not defined the it uses default path, which is set by IO:setIniFilename() IO:loadIniSettings([path]) string = IO:getLogFilename() IO:setLogFilename(string) number = IO:getMouseDoubleClickTime() IO:setMouseDoubleClickTime(number) number = IO:getMouseDragThreshold() IO:setMouseDragThreshold(number) flag = IO:getMouseDrawCursor() IO:setMouseDrawCursor(flag) number = IO:getMouseDoubleClickMaxDist() IO:setMouseDoubleClickMaxDist(number) number = IO:getKeyRepeatDelay() IO:setKeyRepeatDelay(number) number = IO:getKeyRepeatRate() IO:setKeyRepeatRate(number) number = IO:getFontGlobalScale() IO:setFontGlobalScale(number) bool = IO:getFontAllowUserScaling() IO:setFontAllowUserScaling(bool) number, number = IO:getDisplayFramebufferScale() IO:setDisplayFramebufferScale(number, number) bool = IO:getConfigMacOSXBehaviors() IO:setConfigMacOSXBehaviors(bool) bool = IO:getConfigInputTextCursorBlink() IO:setConfigInputTextCursorBlink(bool) bool = IO:getConfigWindowsResizeFromEdges() IO:setConfigWindowsResizeFromEdges(bool) bool = IO:getConfigWindowsMoveFromTitleBarOnly() IO:setConfigWindowsMoveFromTitleBarOnly(bool) number = IO:getConfigWindowsMemoryCompactTimer() IO:setConfigWindowsMemoryCompactTimer(number) string = IO:getBackendPlatformName() string = IO:getBackendRendererName() bool = IO:IsMouseDown(button) number = IO:getMouseWheel() number = IO:getMouseWheelH() flag = IO:wantCaptureMouse() flag = IO:wantCaptureKeyboard() flag = IO:wantTextInput() flag = IO:wantSetMousePos() flag = IO:wantSaveIniSettings() number = IO:getFramerate() number = IO:getMetricsRenderVertices() number = IO:getMetricsRenderIndices() number = IO:getMetricsRenderWindows() number = IO:getMetricsActiveWindows() number = IO:getMetricsActiveAllocations() x, y = IO:getMouseDelta() number = IO:getMouseDownSec(mouse_button) IO:setDisplaySize(w, h) w, h = IO:getDisplaySize() number = IO:getDeltaTime() -- reset mouse buttons state IO:resetMouseDown() -- reset key states (including ALT/SHIFT/CTRL/SUPER (META)) IO:resetKeysDown() -- set ALT/SHIFT/CTRL/SUPER (META) key state IO:setModKeyDown(key_code, bool) -- "key_code" is a gideros MOD key -- set any key state IO:setKeysDown(key_code, bool) -- "key_code" is a gideros regular "keyCode" -- adds text to active text input widget IO:addInputCharactersUTF8(text) -- emulate wheel scrolling IO:setMouseWheel(number) -- sets mouse position (data only, no visual changes) IO:setMousePos(x, y) -- set mouse state, where index: 0 - left mouse, 1 - right, 2 - middle, 3 - unused, 4 - unused. IO:setMouseDown(mouse_button, state) -- "mouse_button" is a gideros mouse button code

-- "key" is any ImGui KeyCode (check [here](#keyboard-keys)) -- "down" is a boolean IO:addKeyEvent(key, down) IO:addKeyAnalogEvent(key, down, number) IO:AddMousePosEvent(x, y) -- "button" is any ImGui button (check [here](#MouseButton)) IO:addMouseButtonEvent(button, down) IO:addMouseWheelEvent(x, y)

IO:setAppAcceptingEvents([accepting_events = true]) ```

Context

```lua string OR nil = ImGui:getHoveredWindow() string OR nil = ImGui:getHoveredWindowRoot() string OR nil = ImGui:getHoveredWindowUnderMovingWindow() string OR nil = ImGui:getMovingWindow() string OR nil = ImGui:getActiveIdWindow() id = ImGui:getActiveId() id = ImGui:getActiveIdPreviousFrame() number = ImGui:getActiveIdTimer() id = ImGui:getActiveIdAllowOverlap() id = ImGui:getHoveredId() id = ImGui:getHoveredIdPreviousFrame() number = ImGui:getHoveredIdTimer() id = ImGui:getHoveredIdAllowOverlap() bool = ImGui:getDragDropActive() id = ImGui:getDragDropPayloadSourceId() string = ImGui:getDragDropPayloadDataType() number = ImGui:getDragDropPayloadDataSize() ```

WIDGETS & STUFF

    1. Windows

```lua p_open, draw = ImGui:beginWindow(label, p_open [, ImGui.WindowFlags = 0]) -- do not show "X" button draw = ImGui:beginWindow(label, nil [, ImGui.WindowFlags = 0]) -- start a window with no borders, no paddings, no rounding and ImGui.WindowFlags_Fullscreen flag p_open, draw = ImGui:beginFullScreenWindow(label, p_open [, ImGui.WindowFlags = 0]) -- do not show "X" button draw = ImGui:beginFullScreenWindow(label, nil [, ImGui.WindowFlags = 0]) ImGui:endWindow() ```

    1. Disabled groups

```lua ImGui:beginDisabled(disabledFlag) ImGui:endDisabled() ```

    1. Child Windows

```lua ImGui:beginChild(id [, w = 0, h = 0, borderFlag = false, ImGui.WindowFlags = 0]) ImGui:endChild() ```

    1. Windows Utilities

```lua flag = ImGui:isWindowAppearing() flag = ImGui:isWindowCollapsed() flag = ImGui:isWindowFocused([ImGui.FocusedFlags = 0]) flag = ImGui:isWindowHovered([ImGui.HoveredFlags = 0]) x, y = ImGui:getWindowPos() w, h = ImGui:getWindowSize() w = ImGui:getWindowWidth() h = ImGui:getWindowHeight()

x1,y1, x2,y2 = ImGui:getWindowBounds() -- returns window region rectangle in global coordinates ImGui:setNextWindowPos(x, y [, ImGui.Cond = 0, pivotX = 0, pivotY = 0]) ImGui:setNextWindowSize(w, h [, ImGui.Cond = 0]) ImGui:setNextWindowContentSize(w, h) ImGui:setNextWindowCollapsed(flag [, ImGui.Cond = 0]) ImGui:setNextWindowFocus() ImGui:setNextWindowBgAlpha(alpha) ImGui:setNextWindowScroll(x, y) ImGui:setWindowPos(name, x, y [, ImGui.Cond = 0]) OR ImGui:setWindowPos(x, y [, ImGui.Cond = 0]) ImGui:setWindowSize(name, w, h [, ImGui.Cond = 0]) OR ImGui:setWindowSize(w, h [, ImGui.Cond = 0]) ImGui:setWindowCollapsed(name, flag [, ImGui.Cond = 0]) OR ImGui:setWindowCollapsed(flag [, ImGui.Cond = 0]) ImGui:setWindowFocus(name) OR ImGui:setWindowFocus() ImGui:setWindowFontScale(scale) -- scroll window when touching void ImGui:scrollWhenDragging(x, y) ```

      1. Window size constraints

Can be used to set minimum and maximum window size, plus contraint the size if needed ```lua -- call this function before ImGui:beginWindow() ImGui:setNextWindowSizeConstraints(min_w, min_h, max_w, max_h [, resize_callback, user_data])) -- resizeCallback is a function: function (callbackData [, user_data]) -- do some math, and return desired size -- ... return desired_width, desired_height end ```

      1. Resize callback

```lua -- get window position x, y = callbackData:getPos() x = callbackData:getX() y = callbackData:getY()

-- get currrent size current_width, current_height = callbackData:getCurrentSize() current_width = callbackData:getCurrentWidth() current_height = callbackData:getCurrentHeight()

-- get desired size deserid_width, deserid_height = callbackData:getDesiredSize() deserid_width = callbackData:getDesiredWidth() deserid_height = callbackData:getDesiredHeight()

```

      1. Example

```lua require "ImGui"

local function stepSize(callback_data, step) local w, h = callback_data:getDesiredSize() w = (w // step) * step h = (h // step) * step return w, h end

local ui = ImGui.new() stage:addChild(ui)

stage:addEventListener("enterFrame", function(e) ui:newFrame(e.deltaTime)

-- window size step is 32 (last argument, that is passed to the callback as second argument) ui:setNextWindowSizeConstraints(200, 200, 400, 400, stepSize, 32) if (ui:beginWindow("My window")) then

ui:textWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.") end ui:endWindow()

ui:showDemoWindow()

ui:render() ui:endFrame() end) ```

    1. Content region

```lua scaleX, scaleY = ImGui:getContentRegionMax() w, h = ImGui:getContentRegionAvail() x, y = ImGui:getWindowContentRegionMin() x, y = ImGui:getWindowContentRegionMax() ```

    1. Windows Scrolling

```lua x = ImGui:getScrollX() y = ImGui:getScrollY() maxX = ImGui:getScrollMaxX() maxY = ImGui:getScrollMaxY() ImGui:setScrollX(value) ImGui:setScrollY(value) ImGui:setScrollHereX([ratio = 0.5]) ImGui:setScrollHereY([ratio = 0.5]) ImGui:setScrollFromPosX(x [, ratio = 0.5]) ImGui:setScrollFromPosY(y [, ratio = 0.5]) ```

    1. Parameters stacks (shared)

```lua ImGui:pushStyleColor(ImGui.Col, color, alpha) ImGui:popStyleColor([count = 1]) ImGui:pushStyleVar(ImGui.StyleVar, value) OR ImGui:pushStyleVar(ImGui.StyleVar, value1, value2) ImGui:popStyleVar([count = 1]) color, alpha = ImGui:getStyleColor(ImGui.Col) fontSize = ImGui:getFontSize() ```

    1. Parameters stacks (current window)

```lua ImGui:pushItemWidth(w) ImGui:popItemWidth() ImGui:setNextItemWidth(w) w = ImGui:calcItemWidth() ImGui:pushTextWrapPos([localX = 0]) ImGui:popTextWrapPos() ImGui:pushTabStop(flag) ImGui:popTabStop() ImGui:pushButtonRepeat(flag) ImGui:popButtonRepeat() ```

    1. Cursor / Layout

```lua ImGui:separator() ImGui:sameLine([offset_x = 0, spacing = -1]) ImGui:newLine() ImGui:spacing() ImGui:dummy(w, h) ImGui:indent([indent = 0]) ImGui:unindent([indent = 0]) ImGui:beginGroup() ImGui:endGroup()

x, y = ImGui:getCursorPos() x = ImGui:getCursorPosX() y = ImGui:getCursorPosY() ImGui:setCursorPos(local_x, local_y) ImGui:setCursorPosX(local_x) ImGui:setCursorPosY(local_y) x, y = ImGui:getCursorStartPos() x, y = ImGui:getCursorScreenPos() ImGui:setCursorScreenPos(x, y) ImGui:alignTextToFramePadding() lineH = ImGui:getTextLineHeight() lineH = ImGui:getTextLineHeightWithSpacing() frameH = ImGui:getFrameHeight() frameH = ImGui:getFrameHeightWithSpacing() ```

    1. ID stack/scopes

```lua ImGui:pushID(anyValue) ImGui:pushID(str) ImGui:popID() number = ImGui:getID(any_value) number = ImGui:getID(string) number = ImGui:getItemID() ```

    1. Widgets: Text

```lua ImGui:textUnformatted(text [, textEnd]) ImGui:text(text) ImGui:textColored(text, color, alpha) ImGui:textDisabled(text) ImGui:textWrapped(text) ImGui:labelText(text, label) ImGui:bulletText(text) ImGui:separatorText(label) ```

    1. Widgets: Main

```lua flag = ImGui:button(text [, w = 0, h = 0]) flag = ImGui:smallButton(text) flag = ImGui:invisibleButton(string_ID [, w = 0, h = 0]) flag = ImGui:arrowButton(string_ID [, ImGui.Dir = 0]) flag = ImGui:checkbox(text, flag) flags, is_changed = ImGui:checkboxFlags(label [, flags = 0, flags_value = 0]) number, is_changed = ImGui:radioButton(text, number, number) is_changed = ImGui:radioButton(text, flag) ImGui:progressBar(fraction [, anchor_x = -1, anchor_y = 0, overlay_string = nil]) ImGui:bullet() ```

    1. Widgets: Images

```lua -- Images are streched (ImGui default functions) ImGui:image(texture, w, h [, tint_color = 0xffffff, tint_alpha = 1, border_color = 0xffffff, border_alpha = 0])

ImGui:imageUV(texture, w, h, uv0x, uv0y, uv1x, uv1y, [, tint_color = 0xffffff, tint_alpha = 1, border_color = 0xffffff, border_alpha = 0])

pressFlag = ImGui:imageButton(str_id, texture, w, h [, tint_color = 0xffffff, tint_alpha = 1, border_color = 0xffffff, border_alpha = 0])

pressFlag = ImGui:imageButtonUV(str_id, texture, w, h, uv0x, uv0y, uv1x, uv1y [, tint_color = 0xffffff, tint_alpha = 1, border_color = 0xffffff, border_alpha = 0])

-- Images are scaled (extended by @MultiPain) -- padding deprecated -- (use "ImGui:pushStyleVar(ImGui.StyleVar_FramePadding, x, y)/ImGui:popStyleVar()") ImGui:scaledImage(str_id, texture, w, h [, fit_mode = ImGui.ImageScaleMode_LetterBox, keep_size = false, anchor_x = 0.5, anchor_y = 0.5, tint_col = 0xffffff, tint_alpha = 1, border_col = 0, border_alpha = 0, bg_col = 0, bg_alpha = 0])

pressFlag = ImGui:scaledImageButton(str_id, texture, w, h [, fit_mode = ImGui.ImageScaleMode_LetterBox, keep_size = false, ImGui.ButtonFlags = 0, anchor_x = 0.5, anchor_y = 0.5, clip_offset_x = 0, clip_offset_y = 0, tint_col = 0xffffff, tint_alpha = 1, border_col = 0, border_alpha = 0, bg_col = 0, bg_alpha = 0])

pressFlag = ImGui:scaledImageButtonWithText(texture, label, image_w, image_h [, button_w = 0, button_h = 0, ImGui.ButtonFlags = 0, fit_mode = ImGui.ImageScaleMode_LetterBox, keep_size = false, anchor_x = 0.5, anchor_y = 0.5, image_side = ImGui.Dir_Left, clip_offset_x = 0, clip_offset_y = 0, tint_col = 0xffffff, tint_alpha = 1, border_col = 0, border_alpha = 0, bg_col = 0, bg_alpha = 0])

```

    1. Widgets: Combo Box

```lua openFlag = ImGui:beginCombo(text, preview_text [, ImGui.ComboFlags = 0]) ImGui:endCombo() current_item, is_open = ImGui:combo(label, current_item, items) -- items (table): {"item1", "item2", ...} ```

    1. Widgets: Drags

```lua value, is_changed = ImGui:dragFloat(label, value [, inc_step = 1, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, is_changed = ImGui:dragFloat2(label, value1, value2 [, inc_step = 1, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, value3, is_changed = ImGui:dragFloat3(label, value1, value2, value3 [, inc_step = 1, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, value3, value4, is_changed = ImGui:dragFloat4(label, value1, value2, value3, value4 [, inc_step = 1, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value_min, value_max, is_changed = ImGui:dragFloatRange2(label, value_min, value_max [, inc_step = 1, min = 0, max = 0, format_min_string = "%.3f", ImGui.SliderFlags = 0]) -- table must be an array of any size > 0 is_changed = ImGui:dragFloatT(label, table [, inc_step = 1, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value, is_changed = ImGui:dragInt(label, value [, inc_step = 1, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value1, value2, is_changed = ImGui:dragInt2(label, value1, value2 [, inc_step = 1, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value1, value2, value3, is_changed = ImGui:dragInt3(label, value1, value2, value3 [, inc_step = 1, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value1, value2, value3, value4, is_changed = ImGui:dragInt4(label, value1, value2, value3, value4 [, inc_step = 1, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

v_current_min, v_current_max, flag = ImGui:dragIntRange2(label, v_current_min, v_current_max [, v_speed = 1, v_min = 0, v_max = 0, format = "%d", format_max = nil, ImGui.SliderFlags = 0])

-- table must be an array of any size > 0 is_changed = ImGui:dragIntT(label, table [, inc_step = 1, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0]) ```

    1. Widgets: Sliders

```lua value, is_changed = ImGui:sliderFloat(label, value [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, is_changed = ImGui:sliderFloat2(label, value1, value2 [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, value3, is_changed = ImGui:sliderFloat3(label, value1, value2, value3 [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, value3, value4, is_changed = ImGui:sliderFloat4(label, value1, value2, value3, value4 [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value_in_rad, is_changed = ImGui:sliderAngle(label, value_in_rad [, min_degrees = -360, max_degrees = 360, format_string = "%.0f deg", ImGui.SliderFlags = 0])

-- table must be an array of any size > 0 is_changed = ImGui:sliderFloatT(label, table [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value, is_changed = ImGui:sliderInt(label, value [, min = 0, max = 0, format_string = "%d, ImGui.SliderFlags = 0"])

value1, value2, is_changed = ImGui:sliderInt2(label, value1, value2 [, min = 0, max = 0, format_string = "%d, ImGui.SliderFlags = 0"])

value1, value2, value3, is_changed = ImGui:sliderInt3(label, value1, value2, value3 [, min = 0, max = 0, format_string = "%d, ImGui.SliderFlags = 0"])

value1, value2, value3, value4, is_changed = ImGui:sliderInt4(label, value1, value2, value3, value4 [, min = 0, max = 0, format_string = "%d, ImGui.SliderFlags = 0"])

-- table must be an array of any size > 0 is_changed = ImGui:sliderIntT(label, table [, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value, is_changed = ImGui:vSliderFloat(label, w, h, value, min, max [, format_string = "%.3f", ImGui.SliderFlags = 0])

value, is_changed = ImGui:vSliderInt(label, w, h, value, min, max [, format_string = "%d", ImGui.SliderFlags = 0])

value, is_changed = ImGui:filledSliderFloat(label, mirror_flag, value [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, is_changed = ImGui:filledSliderFloat2(label, mirror_flag, value1, value2 [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, value3, is_changed = ImGui:filledSliderFloat3(label, mirror_flag, value1, value2, value3 [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value1, value2, value3, value4, is_changed = ImGui:filledSliderFloat4(label, mirror_flag, value1, value2, value3, value4 [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

-- table must be an array of any size > 0 is_changed = ImGui:filledSliderFloatT(label, mirror_flag, table [, min = 0, max = 0, format_string = "%.3f", ImGui.SliderFlags = 0])

value_in_rad, is_changed = ImGui:filledSliderAngle(label, mirror_flag, value_in_rad [, min_degrees = -360, max_degrees = 360, format_string = "%.0f deg", ImGui.SliderFlags = 0])

value, is_changed = ImGui:filledSliderInt(label, mirror_flag, value [, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value1, value2, is_changed = ImGui:filledSliderInt2(label, mirror_flag, value1, value2 [, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value1, value2, value3, is_changed = ImGui:filledSliderInt3(label, mirror_flag, value1, value2, value3 [, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value1, value2, value3, value4, is_changed = ImGui:filledSliderInt4(label, mirror_flag, value1, value2, value3, value4 [, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

-- table must be an array of any size > 0 is_changed = ImGui:filledSliderIntT(label, mirror_flag, table [, min = 0, max = 0, format_string = "%d", ImGui.SliderFlags = 0])

value, is_changed = ImGui:vFilledSliderFloat(label, mirror_flag, w, h, value, min, max [, format_string = "%.3f", ImGui.SliderFlags = 0])

value, is_changed = ImGui:vFilledSliderInt(label, mirror_flag, w, h, value, min, max [, format_string = "%d", ImGui.SliderFlags = 0])

```

    1. Widgets: Input with Keyboard

```lua text, flag = ImGui:inputText(label, text, buffer_size [, ImGui.InputTextFlags = 0]) text, flag = ImGui:inputTextMultiline(label, text, buffer_size [, w = 0, h = 0, ImGui.InputTextFlags = 0]) text, flag = ImGui:inputTextWithHint(label, text, hint, buffer_size [, ImGui.InputTextFlags = 0]) value, flag = ImGui:inputFloat(label, value [, step = 0, step_fast = 0, format = "%.3f", ImGui.InputTextFlags = 0]) value1, value2, flag = ImGui:inputFloat2(label, value1, value2 [, format = "%.3f", ImGui.InputTextFlags = 0]) value1, value2, value3, flag = ImGui:inputFloat3(label, value1, value2, value3 [, format = "%.3f", ImGui.InputTextFlags = 0]) value1, value2, value3, value4, flag = ImGui:inputFloat4(label, value1, value2, value3, value4 [, format = "%.3f", ImGui.InputTextFlags = 0]) -- table must be an array of any size > 0 flag = ImGui:inputFloatT(label, table [, format = "%.3f", ImGui.InputTextFlags = 0]) value, flag = ImGui:inputInt(label, value [, step = 0, step_fast = 0, ImGui.InputTextFlags = 0]) value1, value2, flag = ImGui:inputInt2(label, value1, value2 [, ImGui.InputTextFlags = 0]) value1, value2, value3, flag = ImGui:inputInt3(label, value1, value2, value3 [, ImGui.InputTextFlags = 0]) value1, value2, value3, value4, flag = ImGui:inputInt4(label, value1, value2, value3, value4 [, ImGui.InputTextFlags = 0]) -- table must be an array of any size > 0 flag = ImGui:inputIntT(label, table [, format = "%d", ImGui.InputTextFlags = 0]) value, flag = ImGui:inputDouble(label, value [, step = 0, step_fast = 0, format = "%.6f", ImGui.InputTextFlags = 0]) ```

      1. Input text callbacks

```lua ImGui:inputText(label, text, buffer_size [, ImGui.InputTextFlags = 0, callback_function, user_data]) ImGui:inputTextMultiline(label, text, buffer_size [, ImGui.InputTextFlags = 0, callback_function, user_data]) ImGui:inputTextWithHint(label, text, hint, buffer_size [, ImGui.InputTextFlags = 0, callback_function, user_data])

callback_function = function(callback_data, user_data) -- do something with data -- see below end ```

      1. callback_data

```lua ImGuiInputTextFlags = callback_data:getEventFlag() ImGuiInputTextFlags = callback_data:getFlags()

number = callback_data:getEventChar()

callback_data:setEventChar(number)

keyCode = callback_data:getEventKey()

string = callback_data:getBuf()

callback_data:setBuf(string)

number = callback_data:getBufTextLen()

callback_data:setBufTextLen(number)

number = callback_data:getBufSize()

callback_data:setBufDirty(bool) bool = callback_data:isBufDirty()

callback_data:setCursorPos(number) number = callback_data:getCursorPos()

callback_data:setSelectionStart(s_start) number = callback_data:getSelectionStart()

callback_data:setSelectionEnd(s_end) s_end = callback_data:getSelectionEnd()

callback_data:setSelection(s_start, s_end) s_start, s_end = callback_data:getSelection()

callback_data:selectAll() callback_data:clearSelection() bool = callback_data:hasSelection()

callback_data:deleteChars(position, bytesCount) callback_data:insertChars(position, text) ```

      1. Example

```lua require "ImGui"

ui = ImGui.new() stage:addChild(ui)

local testMessage1 = "" local testMessage2 = "" local testMessage3 = ""

-- Add ".." at the end of current input string function myCallback1(data) data:insertChars(data:getCursorPos(), "..") end

-- Replace all chars if UP/DOWN arrow is pressed function myCallback2(data) local key = data:getEventKey() if (key == key_code.UP) then data:deleteChars(0, data:getBufTextLen()) data:insertChars(0, "Pressed Up!") data:selectAll() elseif (key == key_code.DOWN) then data:deleteChars(0, data:getBufTextLen()) data:insertChars(0, "Pressed Down!") data:selectAll() end end

-- Switch case of the first char function myCallback3(data) local buf = data:getBuf() local s = buf:sub(1,1) if ((s >= 'a' and s <= 'z') or (s >= 'A' and s <= 'Z')) then local first = string.char(string.byte(s) ~ 32) data:setBuf(first .. buf:sub(2)) data:setBufDirty(true) end end

function enterFrame(e) ui:newFrame(e.deltaTime)

testMessage1 = ui:inputText( "Label1", testMessage1, 64, ImGui.InputTextFlags_CallbackCompletion, myCallback1 ) testMessage2 = ui:inputText( "Label2", testMessage2, 64, ImGui.InputTextFlags_CallbackHistory, myCallback2 ) testMessage3 = ui:inputText( "Label3", testMessage3, 64, ImGui.InputTextFlags_CallbackEdit, myCallback3 )

ui:render() ui:endFrame() end

stage:addEventListener("enterFrame", enterFrame) ```

    1. Widgets: Color Editor/Picker

```lua hexColor, is_touching = ImGui:colorEdit3(label, color [, ImGui.ColorEditFlags = 0]) -- alpha ignored, no need to pass it! hexColor, alpha, is_touching = ImGui:colorEdit4(label, color [, alpha = 1, ImGui.ColorEditFlags = 0]) hexColor, is_touching = ImGui:colorPicker3(label, color [, ImGui.ColorEditFlags = 0]) hexColor, alpha, originalColor, originalAlpha, is_touching = ImGui:colorPicker4(label, color [, alpha = 1, original_color = 0xffffff, original_alpha = 1, ImGui.ColorEditFlags = 0]) isHoveringFlag = ImGui:colorButton(string_ID, color [, alpha = 1, ImGui.ColorEditFlags = 0, w = 0, h = 0]) ImGui:setColorEditOptions(ImGui.ColorEditFlags) ```

    1. Widgets: Trees

```lua is_openFlag = ImGui:treeNode(label [, format_string]) ImGui:treeNodeEx(label, ImGui.TreeNodeFlags [, format_string]) ImGui:treePush(str_id) ImGui:treePop() number = ImGui:getTreeNodeToLabelSpacing() is_openFlag, p_open = ImGui:collapsingHeader(label, p_open [, ImGui.TreeNodeFlags = 0]) is_openFlag = ImGui:collapsingHeader(label [, ImGui.TreeNodeFlags = 0]) ImGui:setNextItemOpen(is_open, ImGui.Cond) ```

    1. Widgets: Selectables

```lua result?, selected = ImGui:selectable(label, selected [, ImGui.SelectableFlags = 0, w = 0, h = 0]) ```

    1. Widgets: List Boxes

```lua -- item_table: {"Item0", "Item1", ...} current_item, is_openFlag = ImGui:listBox(label, current_item, item_table [, max_visible_items = -1]) result? = ImGui:listBoxHeader(label [, w = 0, h = 0]) result? = ImGui:listBoxHeader2(label, items_count) ImGui:listBoxFooter() ```

    1. Widgets: Data Plotting
      1. Caching

If you have big array of points it is better to cache it instead of translating lua table to C++ vector every time you call `ImGui:plotLines()`. But in this case you need to manage memory by yourself (free points pointer when you dont need it). ```lua -- store points in memory -- points_table: {0.01, 0.5, 10, -50, ...} -- ptr: c++ pointer to a given vector ptr = ImGui.cachePoints(points_table)

-- delete points from memory ImGui.freePoints(ptr) ```

        1. Example

```lua -- delete ptr if it exist function deletePtr() if pointsPtr then ImGui.freePoints(pointsPtr) end end

function onEnterFrame() ui:newFrame(e.deltaTime)

if ui:button("Generate") then deletePtr() points = generatePoints() -- returns big array pointsPtr = ImGui.cachePoints(points) end

if pointsPtr then ui:plotCachedLines("Big data", pointsPtr, #points) end

ui:render() ui:endFrame() end

-- do not forget to clear memory when app is closing function onAppExit() deletePtr() end ```

      1. Plot functions

```lua -- len (number): points array lenght ImGui:plotCachedLines(label, ptr, len, [, values_offset = 0, overlay_text = nil, scale_min = math.huge, scale_max = math.huge, w = 0, h = 0])

ImGui:plotCachedHistogram(label, ptr, len, [, values_offset = 0, overlay_text = nil, scale_min = math.huge, scale_max = math.huge, w = 0, h = 0])

ImGui:plotLines(label, points_table [, values_offset = 0, overlay_text = nil, scale_min = math.huge, scale_max = math.huge, w = 0, h = 0])

ImGui:plotHistogram(label, points_table [, values_offset = 0, overlay_text = nil, scale_min = math.huge, scale_max = math.huge, w = 0, h = 0]) ```

    1. Widgets: Value() Helpers

```lua ImGui:value(prefix, bool) ImGui:value(prefix, number) ImGui:value(prefix, float, format_string) ```

    1. Widgets: Menus

```lua result? = ImGui:beginMenuBar() ImGui:endMenuBar() result? = ImGui:beginMainMenuBar() ImGui:endMainMenuBar() result = ImGui:beginMenu(label [, enabled = true]) result = ImGui:beginMenuEx(label, [icon = "", enabled = true]) ImGui:endMenu() result = ImGui:menuItem(label [, shortcut = "", selected = false, enabled = true]) result = ImGui:menuItemEx(label, [icon = "", shortcut = "", selected = false, enabled = true]) ImGui:beginTooltip() ImGui:endTooltip() ImGui:setTooltip(text) ```

    1. Popups, Modals

```lua result? = ImGui:beginPopup(str_id [, ImGui.WindowFlags = 0]) p_open, result? = ImGui:beginPopupModal(str_id, p_open [, ImGui.WindowFlags = 0]) ImGui:endPopup() ImGui:openPopup(str_id [, ImGui.PopupFlags = 0]) ImGui:openPopupOnItemClick(str_id [, ImGui.PopupFlags = 0]) ImGui:closeCurrentPopup() result? = ImGui:beginPopupContextItem(str_id [, ImGui.PopupFlags = 0]) result? = ImGui:beginPopupContextWindow(str_id [, ImGui.PopupFlags = 0]) result? = ImGui:beginPopupContextVoid(str_id [, ImGui.PopupFlags = 0]) result? = ImGui:isPopupOpen(str_id [, ImGui.PopupFlags = 0]) ```

    1. Tables

```lua flag = ImGui:beginTable(str_id, column [, ImGui.TableFlags = 0, outer_w = 0, outer_h = 0, inner_width = 0]) ImGui:endTable() ImGui:tableNextRow([ImGui.TableRowFlags = 0, min_row_height = 0]) flag = ImGui:tableNextColumn() flag = ImGui:tableSetColumnIndex(column_n) ImGui:tableSetupColumn(label [, ImGui.TableColumnFlags = 0, init_width_or_weight = 0, user_id = 0]) ImGui:tableSetupScrollFreeze(cols, rows) ImGui:tableHeadersRow() TableSortSpecs = ImGui:tableGetSortSpecs() -- see below number = ImGui:tableGetColumnCount() number = ImGui:tableGetColumnIndex() number = ImGui:tableGetRowIndex() string = ImGui:tableGetColumnName([column_n = -1]) ImGuiTableColumnFlags = ImGui:tableGetColumnFlags([column_n = -1]) ImGui:tableSetBgColor(ImGui.TableBgTarget, color [, alpha = 1, column_n = -1]) ```

    1. Table sort specs

```lua -- TableSortSpecs = ImGui:tableGetSortSpecs() number = TableSortSpecs:getSpecsCount() flag = TableSortSpecs:isSpecsDirty() TableSortSpecs:setSpecsDirty(flag) table = TableSortSpecs:getColumnSortSpecs() -- see below ```

    1. Table column sort specs

```lua -- table = TableSortSpecs:getColumnSortSpecs() -- each value of this table is an object that have this functions: number = item:getColumnUserID() number = item:getColumnIndex() -- 0 based number = item:getSortOrder() -- used in multi sorted tables number = item:getSortDirection() -- ImGui.SortDirection_Ascending OR ImGui.SortDirection_Descending ``` Example: https://github.com/MultiPain/Gideros_examples/blob/master/ImGuiTablesDemo/assets/TablesDemo.lua

    1. Columns

```lua ImGui:columns([count = 1, id = nil, border = true]) ImGui:nextColumn() index = ImGui:getColumnIndex() width = ImGui:getColumnWidth([column_index = -1]) ImGui:setColumnWidth(column_index, width) offset = ImGui:getColumnOffset([column_index = -1]) ImGui:setColumnOffset(column_index, offset) number = ImGui:getColumnsCount() ```

    1. Tab Bars, Tabs

```lua bool = ImGui:beginTabBar(str_id [, ImGui.TabBarFlags = 0]) ImGui:endTabBar() p_open, bool = ImGui:beginTabItem(label, p_open [, ImGui.TabItemFlags = 0]) ImGui:endTabItem() ImGui:setTabItemClosed(tab_or_docked_window_label) ImGui:tabItemButton(label [, ImGui.TabItemFlags = 0]) ```

    1. Logging/Capture

```lua ImGui:logToTTY(auto_open_depth = -1) ImGui:logToFile(auto_open_depth = -1, filename = nil) ImGui:logToClipboard(auto_open_depth = -1) ImGui:logFinish() ImGui:logButtons() ImGui:logText(text) ```

    1. Drag and drop

```lua flag = ImGui:beginDragDropSource([ImGui.DragDropFlags flags = 0]) flag = ImGui:setNumDragDropPayload(str_type, number [, ImGui.Cond cond = 0]) flag = ImGui:setStrDragDropPayload(str_type, string [, ImGui.Cond cond = 0]) ImGui:endDragDropSource() flag = ImGui:beginDragDropTarget() ImGuiPayload = ImGui:acceptDragDropPayload(type [, ImGui.DragDropFlags flags = 0]) ImGui:endDragDropTarget() ImGuiPayload = ImGui:getDragDropPayload() ```

      1. Usage example

```lua local names = { "Bobby", "Beatrice", "Betty", "Brianna", "Barry", "Bernard", "Bibi", "Blaine", "Bryn" } -- modes: local Mode_Copy = 0 local Mode_Move = 1 local Mode_Swap = 2

local mode = 0 -- current mode

function onEnterFrame(e) UI:newFrame(e.deltaTime)

if (UI:radioButton("Copy", mode == Mode_Copy)) then mode = Mode_Copy end UI:sameLine() if (UI:radioButton("Move", mode == Mode_Move)) then mode = Mode_Move end UI:sameLine() if (UI:radioButton("Swap", mode == Mode_Swap)) then mode = Mode_Swap end

for i,v in ipairs(names) do UI:pushID(i) if (((i-1) % 3) ~= 0) then UI:sameLine() end

UI:button(v, 60, 60)

if (UI:beginDragDropSource(ImGui.DragDropFlags_None)) then --UI:setStrDragDropPayload("DND_DEMO_CELL", "ID_"..i) -- used for strings UI:setNumDragDropPayload("DND_DEMO_CELL", i) -- used for numbers

if (mode == Mode_Copy) then UI:text(("Copy %s"):format(v)) end if (mode == Mode_Move) then UI:text(("Move %s"):format(v)) end if (mode == Mode_Swap) then UI:text(("Swap %s"):format(v)) end UI:endDragDropSource() end

if (UI:beginDragDropTarget()) then local payload = UI:acceptDragDropPayload("DND_DEMO_CELL") if (payload) then --local payload_n = tonumber(payload:getStrData():sub(4)) -- if "setStrDragDropPayload" was used local payload_n = payload:getNumData() -- if "setNumDragDropPayload" was used

if (mode == Mode_Copy) then names[i] = names[payload_n]; end if (mode == Mode_Move) then names[i] = names[payload_n]; names[payload_n] = ""; end

if (mode == Mode_Swap) then names[i], names[payload_n] = names[payload_n], names[i] end end UI:endDragDropTarget() end UI:popID() end UI:render() UI:endFrame() end

stage:addEventListener("enterFrame", onEnterFrame) ```

      1. Payload

```lua number = ImGuiPayload:getNumData() string = ImGuiPayload:getStrData() ImGuiPayload:clear() number = ImGuiPayload:getDataSize() flag = ImGuiPayload:isDataType(type) -- type must be the same as in "ImGui:acceptDragDropPayload(type)" flag = ImGuiPayload:isPreview() flag = ImGuiPayload:isDelivery() ```

    1. Clipping

```lua ImGui:pushClipRect(min_x, min_y, max_x, max_y, intersect_with_current_clip_rect) ImGui:popClipRect() ```

    1. ImGuiListClipper

Try to avoid creating new instaces in "enterFrame" event

      1. Constructor

```lua instance = ImGuiListClipper.new() ```

      1. Methods

```lua ImGuiListClipper:beginClip(number_of_items [, item_height = -1]) -- if item_height <= 0 then it is calculated automatically ImGuiListClipper:endClip() bool = ImGuiListClipper:step() number = ImGuiListClipper:getDisplayStart() number = ImGuiListClipper:getDisplayEnd() number = ImGuiListClipper:getStartPosY() number = ImGuiListClipper:getItemsCount() ImGuiListClipper:forceDisplayRangeByIndices(number_min, number_max) ```

      1. Usage example

```lua ui = ImGui.new() stage:addChild(ui)

clipper = ImGuiListClipper.new()

function onEnterFrame(e) ui:newFrame(e.deltaTime)

if (ui:beginWindow("Clipper demo")) then if (ui:beginTable("table", 3)) then ui:tableSetupScrollFreeze(0, 1) ui:tableSetupColumn("One") ui:tableSetupColumn("Two") ui:tableSetupColumn("Three") ui:tableHeadersRow()

clipper:beginClip(1000) while (clipper:step()) do for row = clipper:getDisplayStart(), clipper:getDisplayEnd() do ui:tableNextRow() for column = 1, 3 do ui:tableSetColumnIndex(column - 1) ui:text(("col: %d; row: %d"):format(column, row)) end end end clipper:endClip()

ui:endTable() end end ui:endWindow()

ui:endFrame() ui:render() end

stage:addEventListener("enterFrame", onEnterFrame) ```

    1. ImGuiTextFilter

Try to avoid creating new instaces in "enterFrame" event

      1. Constructor

```lua filter = ImGuiTextFilter.new() ```

      1. Methods

```lua -- draws the input field isValueChanged = filter:draw(label [, width = 0]) -- draws the input field (using ImGui:inutTextWithHint()) isValueChanged = filter:drawWithHint(label, hint [, width = 0])

filter:setBuffer(text) -- set filter text filter:build() -- update filter internals (see example below) bool = filter:passFilter(text) -- returns true if filter input matches with "text" ```

      1. Usage example №1

https://github.com/MultiPain/Gideros_ImGui/blob/28d2cdd4f393d6f2048792e51f695d56d7e0ae9a/imgui_src/imgui_demo.cpp#L5657 ```lua ui = ImGui.new() stage:addChild(ui)

filter = ImGuiTextFilter.new() items = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" }

function onEnterFrame(e) ui:newFrame(e.deltaTime)

if (ui:beginWindow("Filter demo")) then ui:text( [[Filter usage: "" display all lines "xxx" display lines containing "xxx" "xxx,yyy" display lines containing "xxx" or "yyy" "-xxx" hide lines containing "xxx"]])

filter:draw("Filter")

for i, text in ipairs(items) do if filter:passFilter(text) then ui:bulletText(text) end end end ui:endWindow()

ui:endFrame() ui:render() end

stage:addEventListener("enterFrame", onEnterFrame) ```

      1. Usage example №2

```lua ui = ImGui.new() stage:addChild(ui) filter = ImGuiTextFilter.new()

searchText = "" items = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" } function onEnterFrame(e) ui:newFrame(e.deltaTime)

-- Draw standart text input control -- filter:drawWithHint("Filter", "Search")

-- Draw custom control local valueChanged = false searchText, valueChanged = ui:inputText("Filter", searchText, 256, ImGui.InputTextFlags_EnterReturnsTrue) if valueChanged then filter:setBuffer(searchText) -- try to avoid calling "build" function every frame filter:build() end

for i, item in ipairs(items) do if not filter:passFilter(item) then continue end

ui:bulletText(item) end

ui:endFrame() ui:render() end ```

    1. Focus, Activation

```lua ImGui:setItemDefaultFocus() ImGui:setKeyboardFocusHere([offset = 0]) flag = ImGui:isItemHovered([ImGui.HoveredFlags = 0]) flag = ImGui:isItemActive() flag = ImGui:isItemFocused() flag = ImGui:isItemClicked(mouse_button) flag = ImGui:isItemVisible() flag = ImGui:isItemEdited() flag = ImGui:isItemActivated() flag = ImGui:isItemDeactivated() flag = ImGui:isItemDeactivatedAfterEdit() flag = ImGui:isItemToggledOpen() flag = ImGui:isAnyItemHovered() flag = ImGui:isAnyItemActive() flag = ImGui:isAnyItemFocused() minX, minY, maxX, maxY = ImGui:getItemRect() x, y = ImGui:getItemRectMin() x, y = ImGui:getItemRectMax() w, h = ImGui:getItemRectSize() ImGui:setItemAllowOverlap() ```

    1. Miscellaneous Utilities

```lua flag = ImGui:isRectVisible(w, h [, max_x, max_y]) number = ImGui:getTime() number = ImGui:getFrameCount() str = ImGui:getStyleColorName(idx) flag = ImGui:beginChildFrame(id, w, h [, ImGui.WindowFlags = 0]) -- id (number) ImGui:endChildFrame() ```

    1. Text Utilities

```lua w, h = ImGui:calcTextSize(text [, hide_text_after_double_hash = false, wrap_width = -1]) ```

    1. Inputs Utilities: Keyboard

```lua string = ImGui:getKeyName(keyCode) flag = ImGui:isKeyDown(keyCode) flag = ImGui:isKeyPressed(keyCode [, repeat = true]) flag = ImGui:isKeyReleased(keyCode) number = ImGui:getKeyPressedAmount(keyCode, repeat_delay, rate) ImGui:setNextFrameWantCaptureKeyboard([want_capture_keyboard_value = true]) ```

    1. Shortcut system

```lua -- (keyChord: an ImGuiKey optionally OR-ed with one or more ImGuiMod_XXX values (ImGuiKey | ImGuiMod_XXX)) ImGui:shortcut(keyChord [, owner_id = 0, ImGui.InputFlags = 0])

-- (useful to disable CTRL + TAB combo: ImGui:setShortcutRouting(ImGui.Mod_Ctrl | ImGui.Key_Tab, ImGui.KeyOwner_None)) ImGui:setShortcutRouting(keyChord [, owner_id = 0, ImGui.InputFlags = 0])

ImGui:setItemKeyOwner(keyCode [, ImGui.InputFlags = 0])

ImGui:setKeyOwner(keyCode, owner_id, [, ImGui.InputFlags = 0]) ```

    1. Inputs Utilities: Mouse

```lua -- "mouse_button" is any gideros mouse button code flag = ImGui:isMouseDown(mouse_button) flag = ImGui:isMouseClicked(mouse_button [, repeat = false]) flag = ImGui:isMouseReleased(mouse_button) flag = ImGui:isMouseDoubleClicked(mouse_button) flag = ImGui:isMouseHoveringRect(min_x, min_y, max_x, max_y [, clip = true]) flag = ImGui:isMousePosValid([x = inf, y = inf]) flag = ImGui:isAnyMouseDown() x, y = ImGui:getMousePos() x, y = ImGui:getMousePosOnOpeningCurrentPopup() flag = ImGui:isMouseDragging(mouse_button [, lock_threshold = -1]) x, y = ImGui:getMouseDragDelta(mouse_button [, lock_threshold = -1]) ImGui:resetMouseDragDelta(mouse_button) ImGuiMouseCursor = ImGui:getMouseCursor() ImGui:setMouseCursor(ImGui.MouseCursor) ImGui:setNextFrameWantCaptureMouse([want_capture_mouse_value = true]) ImGui:setNextFrameWantCaptureKeyboard([want_capture_keyboard_value = true]) ImGui:updateCursor() ```

    1. Render

```lua ImGui:newFrame(deltaTime) ImGui:render() ImGui:endFrame() ```

Demos

```lua is_openFlag = ImGui:showUserGuide() is_openFlag = ImGui:showDemoWindow([p_open]) is_openFlag = ImGui:showAboutWindow([p_open]) is_openFlag = ImGui:showStyleEditor() is_openFlag = ImGui:showFontSelector() is_openFlag = ImGui:showMetricsWindow([p_open]) is_openFlag = ImGui:showStyleSelector(label) is_openFlag = ImGui:ShowStackToolWindow([p_open]) ImGui:showLuaStyleEditor() ```

TextEditor

```lua -- otherTextEditor: another "ImGuiTextEditor" instance to copy setting TextEditor = ImGuiTextEditor.new([other_text_editor]) ```

    1. Functions

```lua LanguageDefinition = TextEditor:getLanguageCPP() LanguageDefinition = TextEditor:getLanguageGLSL() LanguageDefinition = TextEditor:getLanguageHLSL() LanguageDefinition = TextEditor:getLanguageC() LanguageDefinition = TextEditor:getLanguageSQL() LanguageDefinition = TextEditor:getLanguageAngelScript() LanguageDefinition = TextEditor:getLanguageLua()

TextEditor:setLanguageDefinition(LanguageDefinition) LanguageDefinition = TextEditor:getLanguageDefinition()

Palette = TextEditor:getPaletteDark() Palette = TextEditor:getPaletteLight() Palette = TextEditor:getPaletteRetro()

TextEditor:setPalette(Palette) Palette = TextEditor:getPalette()

TextEditor:setPaletteColor(TE_ColorIndex, color [, alpha = 1]) -- see TextEditor enums below color, alpha = TextEditor:getPaletteColor(TE_ColorIndex)

TextEditor:loadPalette(table) -- 42 elements table -- example: --[[ dark palete: TextEditor:loadPalette{ 0x7f7f7f, 1, -- Default 0xd69c56, 1, -- Keyword 0x00ff00, 1, -- Number 0x7070e0, 1, -- String 0x70a0e0, 1, -- Char literal 0xffffff, 1, -- Punctuation 0x408080, 1, -- Preprocessor 0xaaaaaa, 1, -- Identifier 0x9bc64d, 1, -- Known identifier 0xc040a0, 1, -- Preproc identifier 0x206020, 1, -- Comment (single line) 0x406020, 1, -- Comment (multi line) 0x101010, 1, -- Background 0xe0e0e0, 1, -- Cursor 0xa06020, 0.5, -- Selection 0x0020ff, 0.5, -- ErrorMarker 0xf08000, 0.25, -- Breakpoint 0x707000, 1, -- Line number 0x000000, 0.25, -- Current line fill 0x808080, 0.25, -- Current line fill (inactive) 0xa0a0a0, 0.25, -- Current line edge } ]]

-- see below TextEditor:setErrorMarkers(error_markers) TextEditor:setBreakpoints(breakpoints)

TextEditor:render(string_id [, w = 0, h = 0, border = 0])

TextEditor:setText(string) TextEditor:getText() TextEditor:setTextLines(table) -- set editor text using table. Structure: {"line 1", "line 2", "line 3", ...} table = TextEditor:getTextLines()

string = TextEditor:getSelectedText() string = TextEditor:getCurrentLineText()

number = TextEditor:getTotalLines() bool = TextEditor:isOverwrite()

bool = TextEditor:setReadOnly() bool = TextEditor:isReadOnly() bool = TextEditor:isTextChanged() bool = TextEditor:isCursorPositionChanged()

TextEditor:setColorizerEnable() bool = TextEditor:isColorizerEnabled()

line, column = TextEditor:getCursorPosition() -- 0 based line & column number TextEditor:setCursorPosition(line, column)

TextEditor:setHandleMouseInputs(bool) bool = TextEditor:isHandleMouseInputsEnabled()

TextEditor:setHandleKeyboardInputs(bool) bool = TextEditor:isHandleKeyboardInputsEnabled()

TextEditor:setTextEditorChildIgnored(bool) bool = TextEditor:isTextEditorChildIgnored()

TextEditor:setShowWhitespaces(bool) bool = TextEditor:isShowingWhitespaces()

TextEditor:setTabSize(size) size = TextEditor:getTabSize()

TextEditor:insertText(string)

TextEditor:moveUp([amount = 1, select = false]) TextEditor:moveDown([amount = 1, select = false]) TextEditor:moveLeft([amount = 1, select = false]) TextEditor:moveRight([amount = 1, select = false]) TextEditor:moveTop([select = false]) TextEditor:moveBottom([select = false]) TextEditor:moveHome([select = false]) TextEditor:moveEnd([select = false])

TextEditor:setSelectionStart(line, column) TextEditor:setSelectionEnd(line, column) TextEditor:setSelection(start_line, start_column, end_line, end_column) TextEditor:selectWordUnderCursor() TextEditor:selectAll() bool = TextEditor:hasSelection()

TextEditor:copy() TextEditor:cut() TextEditor:paste() TextEditor:delete()

bool = TextEditor:canUndo() bool = TextEditor:canRedo() TextEditor:undo() TextEditor:redo() ```


      1. LanguageDefinition

```lua string = LanguageDefinition:getName() ```

      1. ErrorMarkers

```lua ErrorMarkers = ImGuiErrorMarkers.new()

ErrorMarkers:add(line, message) ErrorMarkers:remove(line) message = ErrorMarkers:get(line) number = ErrorMarkers:getSize() ```

      1. Breakpoints

```lua Breakpoints = ImGuiBreakpoints.new()

Breakpoints:add(line) Breakpoints:remove(line) bool = Breakpoints:get(line) number = Breakpoints:getSize() ```


ENUMS

      1. Keyboard keys
        1. Keys

```lua ImGui.Key_None ImGui.Key_Tab ImGui.Key_LeftArrow ImGui.Key_RightArrow ImGui.Key_UpArrow ImGui.Key_DownArrow ImGui.Key_PageUp ImGui.Key_PageDown ImGui.Key_Home ImGui.Key_End ImGui.Key_Insert ImGui.Key_Delete ImGui.Key_Backspace ImGui.Key_Space ImGui.Key_Enter ImGui.Key_Escape ImGui.Key_LeftCtrl ImGui.Key_LeftShift ImGui.Key_LeftAlt ImGui.Key_LeftSuper ImGui.Key_RightCtrl ImGui.Key_RightShift ImGui.Key_RightAlt ImGui.Key_RightSuper ImGui.Key_Menu ImGui.Key_MouseLeft ImGui.Key_MouseRight ImGui.Key_MouseMiddle ImGui.Key_MouseX1 ImGui.Key_MouseX2 ImGui.Key_MouseWheelX ImGui.Key_MouseWheelY ImGui.Key_0 ImGui.Key_1 ImGui.Key_2 ImGui.Key_3 ImGui.Key_4 ImGui.Key_5 ImGui.Key_6 ImGui.Key_7 ImGui.Key_8 ImGui.Key_9 ImGui.Key_A ImGui.Key_B ImGui.Key_C ImGui.Key_D ImGui.Key_E ImGui.Key_F ImGui.Key_G ImGui.Key_H ImGui.Key_I ImGui.Key_J ImGui.Key_K ImGui.Key_L ImGui.Key_M ImGui.Key_N ImGui.Key_O ImGui.Key_P ImGui.Key_Q ImGui.Key_R ImGui.Key_S ImGui.Key_T ImGui.Key_U ImGui.Key_V ImGui.Key_W ImGui.Key_X ImGui.Key_Y ImGui.Key_Z ImGui.Key_F1 ImGui.Key_F2 ImGui.Key_F3 ImGui.Key_F4 ImGui.Key_F5 ImGui.Key_F6 ImGui.Key_F7 ImGui.Key_F8 ImGui.Key_F9 ImGui.Key_F10 ImGui.Key_F11 ImGui.Key_F12 ImGui.Key_Apostrophe ImGui.Key_Comma ImGui.Key_Minus ImGui.Key_Period ImGui.Key_Slash ImGui.Key_Semicolon ImGui.Key_Equal ImGui.Key_LeftBracket ImGui.Key_Backslash ImGui.Key_RightBracket ImGui.Key_GraveAccent ImGui.Key_CapsLock ImGui.Key_ScrollLock ImGui.Key_NumLock ImGui.Key_PrintScreen ImGui.Key_Pause ImGui.Key_Keypad0 ImGui.Key_Keypad1 ImGui.Key_Keypad2 ImGui.Key_Keypad3 ImGui.Key_Keypad4 ImGui.Key_Keypad5 ImGui.Key_Keypad6 ImGui.Key_Keypad7 ImGui.Key_Keypad8 ImGui.Key_Keypad9 ImGui.Key_KeypadDecimal ImGui.Key_KeypadDivide ImGui.Key_KeypadMultiply ImGui.Key_KeypadSubtract ImGui.Key_KeypadAdd ImGui.Key_KeypadEnter ImGui.Key_KeypadEqual ```

        1. Gamepad

```lua ImGui.Key_GamepadStart ImGui.Key_GamepadBack ImGui.Key_GamepadFaceUp ImGui.Key_GamepadFaceDown ImGui.Key_GamepadFaceLeft ImGui.Key_GamepadFaceRight ImGui.Key_GamepadDpadUp ImGui.Key_GamepadDpadDown ImGui.Key_GamepadDpadLeft ImGui.Key_GamepadDpadRight ImGui.Key_GamepadL1 ImGui.Key_GamepadR1 ImGui.Key_GamepadL2 ImGui.Key_GamepadR2 ImGui.Key_GamepadL3 ImGui.Key_GamepadR3 ImGui.Key_GamepadLStickUp ImGui.Key_GamepadLStickDown ImGui.Key_GamepadLStickLeft ImGui.Key_GamepadLStickRight ImGui.Key_GamepadRStickUp ImGui.Key_GamepadRStickDown ImGui.Key_GamepadRStickLeft ImGui.Key_GamepadRStickRight ```

        1. Modifiers

```lua ImGui.Key_ModCtrl ImGui.Key_ModShift ImGui.Key_ModAlt ImGui.Key_ModSuper ```

      1. FocusedFlags

```lua ImGui.FocusedFlags_ChildWindows ImGui.FocusedFlags_AnyWindow ImGui.FocusedFlags_RootWindow ImGui.FocusedFlags_RootAndChildWindows ImGui.FocusedFlags_None ImGui.FocusedFlags_NoPopupHierarchy ```

      1. PopupFlags

```lua ImGui.PopupFlags_NoOpenOverExistingPopup ImGui.PopupFlags_MouseButtonLeft ImGui.PopupFlags_MouseButtonMask ImGui.PopupFlags_MouseButtonRight ImGui.PopupFlags_AnyPopupId ImGui.PopupFlags_MouseButtonDefault ImGui.PopupFlags_MouseButtonMiddle ImGui.PopupFlags_None ImGui.PopupFlags_AnyPopup ImGui.PopupFlags_AnyPopupLevel ImGui.PopupFlags_NoOpenOverItems ```

      1. HoveredFlags

```lua ImGui.HoveredFlags_None ImGui.HoveredFlags_RootAndChildWindows ImGui.HoveredFlags_AllowWhenBlockedByPopup ImGui.HoveredFlags_AllowWhenBlockedByActiveItem ImGui.HoveredFlags_ChildWindows ImGui.HoveredFlags_RectOnly ImGui.HoveredFlags_AllowWhenDisabled ImGui.HoveredFlags_AllowWhenOverlapped ImGui.HoveredFlags_AnyWindow ImGui.HoveredFlags_RootWindow ImGui.HoveredFlags_NoNavOverride ImGui.HoveredFlags_DelayNormal ImGui.HoveredFlags_DelayShort ImGui.HoveredFlags_NoSharedDelay ```

      1. InputTextFlags

```lua ImGui.InputTextFlags_None ImGui.InputTextFlags_EnterReturnsTrue ImGui.InputTextFlags_ReadOnly ImGui.InputTextFlags_AutoSelectAll ImGui.InputTextFlags_AllowTabInput ImGui.InputTextFlags_CharsScientific ImGui.InputTextFlags_CharsDecimal ImGui.InputTextFlags_NoUndoRedo ImGui.InputTextFlags_CtrlEnterForNewLine ImGui.InputTextFlags_CharsHexadecimal ImGui.InputTextFlags_CharsNoBlank ImGui.InputTextFlags_Password ImGui.InputTextFlags_NoHorizontalScroll ImGui.InputTextFlags_AlwaysInsertMode ImGui.InputTextFlags_CharsUppercase ImGui.InputTextFlags_NoBackground -- custom constant, used to disable background ImGui.InputTextFlags_EscapeClearsAll ImGui.InputTextFlags_CallbackCompletion ImGui.InputTextFlags_CallbackResize ImGui.InputTextFlags_CallbackAlways ImGui.InputTextFlags_CallbackHistory ImGui.InputTextFlags_CallbackCharFilter ImGui.InputTextFlags_CallbackEdit ```

      1. NavInput

```lua ImGui.NavInput_FocusNext ImGui.NavInput_TweakFast ImGui.NavInput_Input ImGui.NavInput_DpadRight ImGui.NavInput_FocusPrev ImGui.NavInput_LStickDown ImGui.NavInput_LStickUp ImGui.NavInput_Activate ImGui.NavInput_LStickLeft ImGui.NavInput_LStickRight ImGui.NavInput_DpadLeft ImGui.NavInput_DpadDown ImGui.NavInput_TweakSlow ImGui.NavInput_DpadUp ImGui.NavInput_Menu ImGui.NavInput_Cancel ```

      1. TabBarFlags

```lua ImGui.TabBarFlags_AutoSelectNewTabs ImGui.TabBarFlags_NoCloseWithMiddleMouseButton ImGui.TabBarFlags_TabListPopupButton ImGui.TabBarFlags_NoTooltip ImGui.TabBarFlags_FittingPolicyMask ImGui.TabBarFlags_Reorderable ImGui.TabBarFlags_FittingPolicyDefault ImGui.TabBarFlags_FittingPolicyScroll ImGui.TabBarFlags_FittingPolicyResizeDown ImGui.TabBarFlags_None ImGui.TabBarFlags_NoTabListScrollingButtons ```

      1. TreeNodeFlags

```lua ImGui.TreeNodeFlags_Bullet ImGui.TreeNodeFlags_None ImGui.TreeNodeFlags_CollapsingHeader ImGui.TreeNodeFlags_NavLeftJumpsBackHere ImGui.TreeNodeFlags_Framed ImGui.TreeNodeFlags_FramePadding ImGui.TreeNodeFlags_AllowItemOverlap ImGui.TreeNodeFlags_OpenOnArrow ImGui.TreeNodeFlags_SpanFullWidth ImGui.TreeNodeFlags_NoAutoOpenOnLog ImGui.TreeNodeFlags_Leaf ImGui.TreeNodeFlags_NoTreePushOnOpen ImGui.TreeNodeFlags_Selected ImGui.TreeNodeFlags_SpanAvailWidth ImGui.TreeNodeFlags_OpenOnDoubleClick ImGui.TreeNodeFlags_DefaultOpen ```

      1. StyleVar

```lua ImGui.StyleVar_GrabRounding ImGui.StyleVar_Alpha ImGui.StyleVar_WindowMinSize ImGui.StyleVar_PopupBorderSize ImGui.StyleVar_WindowBorderSize ImGui.StyleVar_FrameBorderSize ImGui.StyleVar_ItemSpacing ImGui.StyleVar_IndentSpacing ImGui.StyleVar_FramePadding ImGui.StyleVar_WindowPadding ImGui.StyleVar_ChildRounding ImGui.StyleVar_ItemInnerSpacing ImGui.StyleVar_WindowRounding ImGui.StyleVar_FrameRounding ImGui.StyleVar_TabRounding ImGui.StyleVar_ChildBorderSize ImGui.StyleVar_GrabMinSize ImGui.StyleVar_ScrollbarRounding ImGui.StyleVar_ScrollbarSize ImGui.StyleVar_WindowTitleAlign ImGui.StyleVar_SelectableTextAlign ImGui.StyleVar_PopupRounding ImGui.StyleVar_ButtonTextAlign ImGui.StyleVar_CellPadding ImGui.StyleVar_DisabledAlpha ImGui.StyleVar_SeparatorTextBorderSize ImGui.StyleVar_SeparatorTextAlign ImGui.StyleVar_SeparatorTextPadding ```

      1. Col

```lua ImGui.Col_PlotHistogram ImGui.Col_TitleBg ImGui.Col_Separator ImGui.Col_HeaderActive ImGui.Col_HeaderHovered ImGui.Col_ButtonHovered ImGui.Col_NavWindowingHighlight ImGui.Col_ScrollbarGrab ImGui.Col_FrameBg ImGui.Col_TextSelectedBg ImGui.Col_ScrollbarGrabActive ImGui.Col_TitleBgCollapsed ImGui.Col_ModalWindowDimBg ImGui.Col_ResizeGripActive ImGui.Col_SeparatorHovered ImGui.Col_ScrollbarGrabHovered ImGui.Col_TabUnfocused ImGui.Col_ScrollbarBg ImGui.Col_ChildBg ImGui.Col_Header ImGui.Col_NavWindowingDimBg ImGui.Col_CheckMark ImGui.Col_Button ImGui.Col_BorderShadow ImGui.Col_DragDropTarget ImGui.Col_MenuBarBg ImGui.Col_TitleBgActive ImGui.Col_SeparatorActive ImGui.Col_Text ImGui.Col_PlotLinesHovered ImGui.Col_Border ImGui.Col_TabUnfocusedActive ImGui.Col_PlotLines ImGui.Col_PlotHistogramHovered ImGui.Col_ResizeGripHovered ImGui.Col_Tab ImGui.Col_TabHovered ImGui.Col_PopupBg ImGui.Col_TabActive ImGui.Col_FrameBgActive ImGui.Col_ButtonActive ImGui.Col_WindowBg ImGui.Col_SliderGrabActive ImGui.Col_SliderGrab ImGui.Col_NavHighlight ImGui.Col_FrameBgHovered ImGui.Col_TextDisabled ImGui.Col_ResizeGrip ImGui.Col_TableHeaderBg ImGui.Col_TableBorderStrong ImGui.Col_TableBorderLight ImGui.Col_TableRowBg ImGui.Col_TableRowBgAlt ```

      1. DataType

```lua ImGui.DataType_U8 ImGui.DataType_S64 ImGui.DataType_Float ImGui.DataType_S16 ImGui.DataType_U16 ImGui.DataType_Double ImGui.DataType_S8 ImGui.DataType_U32 ImGui.DataType_S32 ImGui.DataType_U64 ```

      1. Dir

```lua ImGui.Dir_None ImGui.Dir_Left ImGui.Dir_Up ImGui.Dir_Down ImGui.Dir_Right ```

      1. WindowFlags

```lua ImGui.WindowFlags_NoScrollWithMouse ImGui.WindowFlags_None ImGui.WindowFlags_NoScrollbar ImGui.WindowFlags_HorizontalScrollbar ImGui.WindowFlags_NoFocusOnAppearing ImGui.WindowFlags_NoBringToFrontOnFocus ImGui.WindowFlags_NoDecoration ImGui.WindowFlags_NoCollapse ImGui.WindowFlags_NoTitleBar ImGui.WindowFlags_NoMove ImGui.WindowFlags_NoInputs ImGui.WindowFlags_NoMouseInputs ImGui.WindowFlags_NoSavedSettings ImGui.WindowFlags_NoNav ImGui.WindowFlags_UnsavedDocument ImGui.WindowFlags_NoNavFocus ImGui.WindowFlags_AlwaysHorizontalScrollbar ImGui.WindowFlags_AlwaysUseWindowPadding ImGui.WindowFlags_NoNavInputs ImGui.WindowFlags_NoResize ImGui.WindowFlags_AlwaysVerticalScrollbar ImGui.WindowFlags_MenuBar ImGui.WindowFlags_NoBackground ImGui.WindowFlags_AlwaysAutoResize ImGui.WindowFlags_FullScreen -- custom constant, used to create a fullscreen window ```

      1. TabItemFlags

```lua ImGui.TabItemFlags_SetSelected ImGui.TabItemFlags_NoCloseWithMiddleMouseButton ImGui.TabItemFlags_NoTooltip ImGui.TabItemFlags_None ImGui.TabItemFlags_NoPushId ImGui.TabItemFlags_UnsavedDocument ImGui.TabItemFlags_Leading ImGui.TabItemFlags_Trailing ImGui.TabItemFlags_NoReorder ```

      1. ComboFlags

```lua ImGui.ComboFlags_HeightSmall ImGui.ComboFlags_HeightLarge ImGui.ComboFlags_PopupAlignLeft ImGui.ComboFlags_None ImGui.ComboFlags_NoPreview ImGui.ComboFlags_HeightRegular ImGui.ComboFlags_HeightMask ImGui.ComboFlags_NoArrowButton ImGui.ComboFlags_HeightLargest ```

      1. Cond

```lua ImGui.Cond_Appearing ImGui.Cond_None ImGui.Cond_Always ImGui.Cond_FirstUseEver ImGui.Cond_Once ```

      1. SelectableFlags

```lua ImGui.SelectableFlags_None ImGui.SelectableFlags_SpanAllColumns ImGui.SelectableFlags_AllowItemOverlap ImGui.SelectableFlags_DontClosePopups ImGui.SelectableFlags_AllowDoubleClick ImGui.SelectableFlags_Disabled ```

      1. MouseCursor

```lua ImGui.MouseCursor_Hand ImGui.MouseCursor_ResizeAll ImGui.MouseCursor_ResizeEW ImGui.MouseCursor_Arrow ImGui.MouseCursor_ResizeNS ImGui.MouseCursor_None ImGui.MouseCursor_NotAllowed ImGui.MouseCursor_ResizeNWSE ImGui.MouseCursor_ResizeNESW ImGui.MouseCursor_TextInput ```

      1. MouseButton

```lua ImGui.MouseButton_Right ImGui.MouseButton_Middle ImGui.MouseButton_Left ```

      1. ColorEditFlags

```lua ImGui.ColorEditFlags_AlphaPreview ImGui.ColorEditFlags_DisplayRGB ImGui.ColorEditFlags_DisplayHex ImGui.ColorEditFlags_InputHSV ImGui.ColorEditFlags_NoSidePreview ImGui.ColorEditFlags_Uint8 ImGui.ColorEditFlags_AlphaPreviewHalf ImGui.ColorEditFlags_Float ImGui.ColorEditFlags_PickerHueWheel ImGui.ColorEditFlags_OptionsDefault ImGui.ColorEditFlags_InputRGB ImGui.ColorEditFlags_HDR ImGui.ColorEditFlags_NoPicker ImGui.ColorEditFlags_AlphaBar ImGui.ColorEditFlags_DisplayHSV ImGui.ColorEditFlags_PickerHueBar ImGui.ColorEditFlags_NoAlpha ImGui.ColorEditFlags_NoOptions ImGui.ColorEditFlags_NoDragDrop ImGui.ColorEditFlags_NoInputs ImGui.ColorEditFlags_None ImGui.ColorEditFlags_NoSmallPreview ImGui.ColorEditFlags_NoBorder ImGui.ColorEditFlags_NoLabel ImGui.ColorEditFlags_NoTooltip ```

      1. DragDropFlags

```lua ImGui.DragDropFlags_SourceNoPreviewTooltip ImGui.DragDropFlags_SourceAllowNullID ImGui.DragDropFlags_AcceptNoDrawDefaultRect ImGui.DragDropFlags_AcceptPeekOnly ImGui.DragDropFlags_AcceptBeforeDelivery ImGui.DragDropFlags_SourceNoHoldToOpenOthers ImGui.DragDropFlags_AcceptNoPreviewTooltip ImGui.DragDropFlags_SourceAutoExpirePayload ImGui.DragDropFlags_SourceExtern ImGui.DragDropFlags_None ImGui.DragDropFlags_SourceNoDisableHover ```

      1. corner_flags

```lua ImGui.DrawFlags_None ImGui.DrawFlags_Closed ImGui.DrawFlags_RoundCornersTopLeft ImGui.DrawFlags_RoundCornersTopRight ImGui.DrawFlags_RoundCornersBottomLeft ImGui.DrawFlags_RoundCornersBottomRight ImGui.DrawFlags_RoundCornersTop ImGui.DrawFlags_RoundCornersBottom ImGui.DrawFlags_RoundCornersLeft ImGui.DrawFlags_RoundCornersRight ImGui.DrawFlags_RoundCornersAll ```

      1. ConfigFlags

```lua ImGui.ConfigFlags_None ImGui.ConfigFlags_NavEnableKeyboard ImGui.ConfigFlags_NavEnableGamepad ImGui.ConfigFlags_NavEnableSetMousePos ImGui.ConfigFlags_NavNoCaptureKeyboard ImGui.ConfigFlags_NoMouse ImGui.ConfigFlags_NoMouseCursorChange ImGui.ConfigFlags_IsSRGB ImGui.ConfigFlags_IsTouchScreen ```

      1. BackendFlags

```lua ImGui.BackendFlags_None ImGui.BackendFlags_HasGamepad ImGui.BackendFlags_HasMouseCursors ImGui.BackendFlags_HasSetMousePos ImGui.BackendFlags_RendererHasVtxOffset ```

      1. SliderFlags

```lua ImGui.SliderFlags_None ImGui.SliderFlags_ClampOnInput -- renamed in 1.79 to "SliderFlags_AlwaysClamp" (can be still used until 1.80) ImGui.SliderFlags_AlwaysClamp ImGui.SliderFlags_Logarithmic ImGui.SliderFlags_NoRoundToFormat ImGui.SliderFlags_NoInput ```

      1. GlyphRanges

```lua ImGui.GlyphRanges_Default, ImGui.GlyphRanges_Korean, ImGui.GlyphRanges_ChineseFull, ImGui.GlyphRanges_ChineseSimplifiedCommon, ImGui.GlyphRanges_Japanese, ImGui.GlyphRanges_Cyrillic, ImGui.GlyphRanges_Thai, ImGui.GlyphRanges_Vietnamese ```

      1. ItemFlags

```lua ImGui.ItemFlags_Disabled ImGui.ItemFlags_ButtonRepeat ImGui.ItemFlags_NoTabStop ```

      1. TableBgTarget

```lua ImGui.TableBgTarget_None ImGui.TableBgTarget_RowBg0 ImGui.TableBgTarget_RowBg1 ImGui.TableBgTarget_CellBg ```


      1. TableColumnFlags

```lua ImGui.TableColumnFlags_None ImGui.TableColumnFlags_DefaultHide ImGui.TableColumnFlags_DefaultSort ImGui.TableColumnFlags_WidthStretch ImGui.TableColumnFlags_WidthFixed ImGui.TableColumnFlags_NoResize ImGui.TableColumnFlags_NoReorder ImGui.TableColumnFlags_NoHide ImGui.TableColumnFlags_NoClip ImGui.TableColumnFlags_NoSort ImGui.TableColumnFlags_NoSortAscending ImGui.TableColumnFlags_NoSortDescending ImGui.TableColumnFlags_NoHeaderWidth ImGui.TableColumnFlags_PreferSortAscending ImGui.TableColumnFlags_PreferSortDescending ImGui.TableColumnFlags_IndentEnable ImGui.TableColumnFlags_IndentDisable ImGui.TableColumnFlags_IsEnabled ImGui.TableColumnFlags_IsVisible ImGui.TableColumnFlags_IsSorted ImGui.TableColumnFlags_IsHovered ImGui.TableColumnFlags_Disabled ImGui.TableColumnFlags_NoHeaderLabel ```


      1. TableFlags

```lua ImGui.TableFlags_None ImGui.TableFlags_Resizable ImGui.TableFlags_Reorderable ImGui.TableFlags_Hideable ImGui.TableFlags_Sortable ImGui.TableFlags_NoSavedSettings ImGui.TableFlags_ContextMenuInBody ImGui.TableFlags_RowBg ImGui.TableFlags_BordersInnerH ImGui.TableFlags_BordersOuterH ImGui.TableFlags_BordersInnerV ImGui.TableFlags_BordersOuterV ImGui.TableFlags_BordersH ImGui.TableFlags_BordersV ImGui.TableFlags_BordersInner ImGui.TableFlags_BordersOuter ImGui.TableFlags_Borders ImGui.TableFlags_NoBordersInBody ImGui.TableFlags_NoBordersInBodyUntilResize ImGui.TableFlags_SizingFixedFit ImGui.TableFlags_SizingFixedSame ImGui.TableFlags_SizingStretchProp ImGui.TableFlags_SizingStretchSame ImGui.TableFlags_NoHostExtendX ImGui.TableFlags_NoHostExtendY ImGui.TableFlags_NoKeepColumnsVisible ImGui.TableFlags_PreciseWidths ImGui.TableFlags_NoClip ImGui.TableFlags_PadOuterX ImGui.TableFlags_NoPadOuterX ImGui.TableFlags_NoPadInnerX ImGui.TableFlags_ScrollX ImGui.TableFlags_ScrollY ImGui.TableFlags_SortMulti ImGui.TableFlags_SortTristate ```


      1. TableColumnFlags

```lua ImGui.TableColumnFlags_None ImGui.TableColumnFlags_DefaultHide ImGui.TableColumnFlags_DefaultSort ImGui.TableColumnFlags_WidthStretch ImGui.TableColumnFlags_WidthFixed ImGui.TableColumnFlags_NoResize ImGui.TableColumnFlags_NoReorder ImGui.TableColumnFlags_NoHide ImGui.TableColumnFlags_NoClip ImGui.TableColumnFlags_NoSort ImGui.TableColumnFlags_NoSortAscending ImGui.TableColumnFlags_NoSortDescending ImGui.TableColumnFlags_NoHeaderWidth ImGui.TableColumnFlags_PreferSortAscending ImGui.TableColumnFlags_PreferSortDescending ImGui.TableColumnFlags_IndentEnable ImGui.TableColumnFlags_IndentDisable ImGui.TableColumnFlags_IsEnabled ImGui.TableColumnFlags_IsVisible ImGui.TableColumnFlags_IsSorted ImGui.TableColumnFlags_IsHovered ```


      1. TableRowFlags

```lua ImGui.TableRowFlags_None ImGui.TableRowFlags_Headers ```


      1. SortDirection

```lua ImGui.SortDirection_None ImGui.SortDirection_Ascending ImGui.SortDirection_Descending ```


      1. TE_ColorIndex

```lua ImGui.TE_Default ImGui.TE_Keyword ImGui.TE_Number ImGui.TE_String ImGui.TE_CharLiteral ImGui.TE_Punctuation ImGui.TE_Preprocessor ImGui.TE_Identifier ImGui.TE_KnownIdentifier ImGui.TE_PreprocIdentifier ImGui.TE_Comment ImGui.TE_MultiLineComment ImGui.TE_Background ImGui.TE_Cursor ImGui.TE_Selection ImGui.TE_ErrorMarker ImGui.TE_Breakpoint ImGui.TE_LineNumber ImGui.TE_CurrentLineFill ImGui.TE_CurrentLineFillInactive ImGui.TE_CurrentLineEdge ```

    1. ImageScaleMode

```lua ImGui.ImageScaleMode_LetterBox ImGui.ImageScaleMode_FitWidth ImGui.ImageScaleMode_FitHeight ImGui.ImageScaleMode_Stretch ```

DRAW LISTS

      1. Window draw list

```lua local list = ImGui:getWindowDrawList() ```

      1. Background draw list

```lua local list = ImGui:getBackgroundDrawList() ```

      1. Foreground draw list

```lua local list = ImGui:getForegroundDrawList() ```

      1. Draw lists commands

```lua DrawList:pushClipRect(clip_rect_min_x, clip_rect_min_y, clip_rect_max_x, clip_rect_max_y [, intersect_with_current_clip_rect = false]) DrawList:pushClipRectFullScreen() DrawList:popClipRect() DrawList:pushTextureID(texture) DrawList:popTextureID() x, y = DrawList:getClipRectMin() x, y = DrawList:getClipRectMax() DrawList:addLine(p1_x, p1_y, p2_x, p2_y, color [, alpha = 1, thickness = 1]) DrawList:addRect( p_min_x, p_min_y, p_max_x, p_max_y, color [, alpha = 1, rounding = 0, rounding_corners = ImGui.DrawFlags_RoundCornersAll, thickness = 1]) DrawList:addRectFilled(p_min_x, p_min_y, p_max_x, p_max_y, color [, alpha = 1, rounding = 0, rounding_corners = ImGui.DrawFlags_RoundCornersAll]) DrawList:addRectFilledMultiColor(p_min_x, p_min_y, p_max_x, p_max_y, color_upr_left, color_upr_right, color_bot_right, color_bot_left) DrawList:addQuad(p1_x, p1_y, p2_x, p2_y, p3_x, p3_y, p4_x, p4_y, color [, alpha = 1, thickness = 1]) DrawList:addQuadFilled(p1_x, p1_y, p2_x, p2_y, p3_x, p3_y, p4_x, p4_y, color) DrawList:addTriangle(p1_x, p1_y, p2_x, p2_y, p3_x, p3_y, color [, alpha = 1, thickness = 1]) DrawList:addTriangleFilled(p1_x, p1_y, p2_x, p2_y, p3_x, p3_y, color) DrawList:addCircle(center_x, center_y, radius, color [, alpha = 1, num_segments = 12, thickness = 1]) DrawList:addCircleFilled(center_x, center_y, radius, color [, alpha = 1, num_segments = 12]) DrawList:addNgon(center_x, center_y, radius, color [, alpha = 1, num_segments = 12, thickness = 1]) DrawList:addNgonFilled(center_x, center_y, radius, color [, alpha = 1, num_segments = 12]) DrawList:addText(x, y, color, alpha, text) -- x, y (number), text_begin (string), text_end (string) DrawList:addFontText(font, font_size, pos_x, pos_y, color, alpha, text [, wrap_with = 0, cpu_fine_clip_rect_x, cpu_fine_clip_rect_y, cpu_fine_clip_rect_w, cpu_fine_clip_rect_h]) DrawList:addPolyline(points_table, color, alpha, closed, thickness) -- points_table (table), color (number), closed (bool), thickness (number) DrawList:addConvexPolyFilled(points_table, color) -- points_table (table), color (number) DrawList:addBezierCubic( p1_x, p1_y, p2_x, p2_y, p3_x, p3_y, p4_x, p4_y, color, alpha, thickness [, num_segments = 0]) DrawList:addBezierQuadratic( p1_x, p1_y, p2_x, p2_y, p3_x, p3_y, color, alpha, thickness [, num_segments = 0]) DrawList:addImage(texture, x, y, x + w, y + h [, tint_color = 0xffffff, tint_alpha = 1]) DrawList:addImageUV(texture, x, y, x + w, y + h, uv0x, uv0y, uv1x, uv1y [, tint_color = 0xffffff, tint_alpha = 1]) DrawList:addImageQuad(texture, x, y, x + w, y, x + w, y + h, x, y + h [, tint_color = 0xffffff, tint_alpha = 1, uv0x = 0, uv0y = 0, uv1x = 1, uv1y = 0, uv2x = 1, uv2y = 1, uv3x = 0, uv3y = 1]) DrawList:addImageRounded(texture, x, y, x + w, y + h, tint_color, tint_alpha, round_radius [, corner_flags = ImGui.CorenerFlags_All]) DrawList:addImageRoundedUV(texture, x, y, x + w, y + h, uv0x, uv0y, uv1x, uv1y, tint_color, tint_alpha, round_radius [, corner_flags = ImGui.CorenerFlags_All]) DrawList:pathClear() DrawList:pathLineTo(x, y) DrawList:pathLineToMergeDuplicate(x, y) DrawList:pathFillConvex(color) DrawList:pathStroke(color, alpha, closed [, thickness = 1]) DrawList:pathArcTo(center_x, center_y, radius, a_min, a_max [, num_segments = 10]) DrawList:pathArcToFast(center_x, center_y, radius, a_min, a_max) DrawList:pathBezierCubicCurveTo(p2x, p2y, p3x, p3y, p4x, p4y [, num_segments = 0]) DrawList:pathBezierQuadraticCurveTo(p2x, p2y, p3x, p3y [, num_segments = 0]) DrawList:pathRect(min_x, min_y, max_x, max_y [, rounding = 0, ImGui.DrawFlags = 0]) -- CUSTOM -- rotate any draw list item around its center point DrawList:rotateBegin() DrawList:rotateEnd(radians) -- example: ... local list = ImGui:getWindowDrawList() list:rotateBegin() list:addLine(100, 100, 100, 250, 0xff0000, 1, 10) list:rotateEnd(math.pi/2.2) ... ```

      1. Usage example

<img src="https://user-images.githubusercontent.com/1312968/99901217-4697fa80-2cb5-11eb-9e80-c469cc69b848.gif">
```lua -- reference: https://github.com/ocornut/imgui/issues/3606#issuecomment-731726406 require "ImGui" UI = ImGui.new() IO = UI:getIO() local w = 320 local h = 180 IO:setDisplaySize(w*2,h*2)

local cos,sin,sqrt=math.cos,math.sin,math.sqrt local HSV2RGB=ImGui.colorConvertHSVtoRGB local RGB2HEX=ImGui.colorConvertRGBtoHEX local p = {-1,-1, 1,-1, 1,1, -1,1} local function conv(z,szx,szy,ox,oy,vx,vy) return ((vx/z)*szx*5+szx*0.5)+ox,((vy/z)*szy*5+szy*0.5)+oy end local function R(vx, vy, ng) ng*=0.1 local cosn = cos(ng) local sinn = sin(ng) return vx*cosn-vy*sinn, vx*sinn+vy*cosn end local function FX(d,ax,ay,bx,by,sw,sh,t) d:addRectFilled(ax,ay,bx,by,0,1,0) t *= 4 for i = 0, 19 do local z=21-i-(t-(t//1))*2 local ng,ot0,ot1=-t*2.1+z,-t+z*0.2,-t+(z+1)*0.2 local s,of,pts={cos((t+z)*0.1)*0.2+1,sin((t+z)*0.1)*0.2+1,cos((t+z+1)*0.1)*0.2+1,sin((t+z+1)*0.1)*0.2+1},{cos(ot0)*0.3,sin(ot0)*0.3,cos(ot1)*0.3,sin(ot1)*0.3},{} for j=0,7 do local i,n = ((j%4)+1)*2,j//4 pts[j*2+1],pts[j*2+2]=conv((z+n)*2,sw,sh,ax,ay,R(p[i-1]*s[n*2+1]+of[n*2+1],p[i-0]*s[n*2+2]+of[n*2+2],ng+n)) end for j=0,3 do local it=((((i&1) ~= 0) and 0.5 or 0.6)+j*0.05)*((21-z)/21) d:addConvexPolyFilled( {pts[j*2+1],pts[j*2+2],pts[((j+1)%4)*2+1],pts[((j+1)%4)*2+2],pts[(((j+1)%4)+4)*2+1],pts[(((j+1)%4)+4)*2+2],pts[(j+4)*2+1],pts[(j+4)*2+2]}, RGB2HEX(HSV2RGB(0.6+sin(t*0.03)*0.5,1,sqrt(it))) ) end end end

function onEnterFrame(e) UI:newFrame(e.deltaTime) if (UI:beginWindow("FX", nil, ImGui.WindowFlags_AlwaysAutoResize)) then UI:invisibleButton("canvas", w, h) local min_x, min_y = UI:getItemRectMin() local max_x, max_y = UI:getItemRectMax() local draw_list = UI:getWindowDrawList() draw_list:pushClipRect(min_x, min_y, max_x, max_y) FX(draw_list,min_x,min_y,max_x,max_y,w,h,UI:getTime()) draw_list:popClipRect() end UI:endWindow() UI:render() UI:endFrame() end

stage:addChild(UI) stage:addEventListener("enterFrame", onEnterFrame) ```








Classes