An immediate mode GUI library for LOVR and LOVE
#ui #gui #lovr #love #lua #gamedev #library #plugin
|
há 2 meses atrás | |
---|---|---|
ui2d | há 2 meses atrás | |
.gitattributes | há 1 ano atrás | |
.gitignore | há 1 ano atrás | |
LICENSE | há 1 ano atrás | |
README.md | há 1 ano atrás | |
conf.lua | há 10 meses atrás | |
love_demo.lua | há 1 ano atrás | |
love_minimal.lua | há 1 ano atrás | |
lovelogo.png | há 1 ano atrás | |
lovr_demo.lua | há 1 ano atrás | |
lovr_minimal.lua | há 1 ano atrás | |
lovrlogo.png | há 1 ano atrás | |
main.lua | há 10 meses atrás |
This is the sister project of lovr-ui (a VR GUI library for lovr). Both projects borrow concepts from the outstanding Dear ImGui library and are inspired by microui, trying to be simple and minimal.
This was formerly 2 different branches, one for each framework. It's now a unified codebase since lovr and love have a very similar API. It has zero depedencies and it is pure Lua, meaning this is not bindings to a "foreign" library (which usually require a specific version of said library to work).
https://github.com/immortalx74/lovr-ui2d/assets/29693328/3b1e15cc-948f-401f-a236-ee63c44e07ea
How to use:
See main.lua
for minimal and demo implementations. Below is the complete API documentation but some things will make more sense by examining the examples.
Widgets:
API:
UI2D.Button(name, width, height, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|button's text
|width
[opt]|number|button width in pixels
|height
[opt]|number|button height in pixels
|tooltip
[opt]|string|tooltip text
Returns: boolean
, true when clicked.
NOTE: if no width
and/or height
are provided, the button size will be auto-calculated based on text. Otherwise, it will be set to width
X height
(with the text centered) or ignored if that size doesn't fit the text.
UI2D.ImageButton(texture, width, height, text, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|texture
|texture/image|texture(lovr) or image(love)
|width
|number|image width in pixels
|height
|number|image height in pixels
|text
[opt]|string|optional text
|tooltip
[opt]|string|tooltip text
Returns: boolean
, true when clicked.
UI2D.CustomWidget(name, width, height, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|custom widget name
|width
|number|width in pixels
|height
|number|height in pixels
|tooltip
[opt]|string|tooltip text
Returns: Pass(lovr) or Canvas(love)
, boolean
, boolean
, boolean
, boolean
, number
, number
, number
, number
[1] Pass object(lovr) or Canvas(love), [2] clicked, [3] down, [4] released, [5] hovered, [6] mouse X, [7] mouse Y, [8] wheel X, [9] wheel Y
NOTE: General purpose widget for custom drawing/interaction. The returned Pass(lovr) or Canvas(love) can be used to do regular draw-commands. X and Y are the local 2D coordinates of the pointer (0,0 is top,left)
UI2D.TextBox(name, num_visible_chars, text, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|textbox name
|num_visible_chars
|number|number of visible characters
|text
|string|text
|tooltip
[opt]|string|tooltip text
Returns: string
, boolean
[1] text, [2] finished editing.
NOTE: Always assign back to your string variable e.g. mytext = UI2D.TextBox("My textbox, 10, mytext)
. To do validation on the edited text, check the finished editing return value.
UI2D.ListBox(name, num_visible_rows, num_visible_chars, collection, selected, multi_select, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|listbox name
|num_visible_rows
|number|number of visible rows
|num_visible_chars
|number|number of visible characters on each row
|collection
|table|table of strings
|selected
[opt]|number or string|selected item index (in case it's a string, selects the 1st occurence of the item that matches the string)
|multi_select
[opt]|boolean|whether multi-select should be enabled
|tooltip
[opt]|string|tooltip text
Returns: boolean
, number
, table
, [1] true when clicked, [2] selected item index, [3] table of selected item indices (if multi_select is true)
NOTE: The UI2D.ListBoxSetSelected
helper can be used to select item(s) programmatically.
UI2D.SliderInt(name, v, v_min, v_max, width, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|slider text
|v
|number|initial value
|v_min
|number|minimum value
|v_max
|number|maximum value
|width
[opt]|number|total width in pixels of the slider, including it's text
|tooltip
[opt]|string|tooltip text
Returns: number
, boolean
, [1] current value, [2] true when released
NOTE: Always assign back to your slider-value, e.g. myval = UI2D.SliderInt("my slider", myval, 0, 100)
If width is provided, it will be taken into account only if it exceeds the width of text, otherwise it will be ignored.
UI2D.SliderFloat(name, v, v_min, v_max, width, num_decimals, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|slider text
|v
|number|initial value
|v_min
|number|minimum value
|v_max
|number|maximum value
|width
[opt]|number|total width in pixels of the slider, including it's text
|num_decimals
[opt]|number|number of decimals to display
|tooltip
[opt]|string|tooltip text
Returns: number
, boolean
, [1] current value, [2] true when released
NOTE: Always assign back to your slider-value, e.g. myval = UI2D.SliderFloat("my slider", myval, 0, 100)
If width
is provided, it will be taken into account only if it exceeds the width of text, otherwise it will be ignored. If no num_decimals
is provided, it defaults to 2.
UI2D.Label(text)
|Argument|Type|Description
|:---|:---|:---|
|text
|string|label text
|compact
[opt]|boolean|ignore vertical margin
Returns: nothing
UI2D.ProgressBar(progress, width, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|progress
|number|progress percentage
|width
[opt]|number|width in pixels
|tooltip
[opt]|string|tooltip text
Returns: nothing
NOTE: Default width is 300 pixels
UI2D.Separator()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: Horizontal Separator
UI2D.CheckBox(text, checked, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|text
|string|checkbox text
|checked
|boolean|state
|tooltip
[opt]|string|tooltip text
Returns: boolean
, true when clicked
NOTE: To set the state use this idiom: if UI2D.CheckBox("My checkbox", my_state) then my_state = not my_state end
UI2D.ToggleButton(text, checked, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|text
|string|toggle button text
|checked
|boolean|state
|tooltip
[opt]|string|tooltip text
Returns: boolean
, true when clicked
NOTE: To set the state use this idiom: if UI2D.ToggleButton("My toggle button", my_state) then my_state = not my_state end
UI2D.RadioButton(text, checked, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|text
|string|radiobutton text
|checked
|boolean|state
|tooltip
[opt]|string|tooltip text
Returns: boolean
, true when clicked
NOTE: To set the state on a group of RadioButtons use this idiom:
if UI2D.RadioButton("Radio1", rb_group_idx == 1) then rb_group_idx = 1 end
if UI2D.RadioButton("Radio2", rb_group_idx == 2) then rb_group_idx = 2 end
-- etc...
UI2D.TabBar(name, tabs, idx, tooltip)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|TabBar name
|tabs
|table|a table of strings
|idx
|number|initial active tab index
|tooltip
[opt]|string|tooltip text
Returns: boolean
, number
, [1] true when clicked, [2] the selected tab index
UI2D.Dummy(width, height)
|Argument|Type|Description
|:---|:---|:---|
|width
|number|width
|height
|number|height
Returns: nothing
NOTE: This is an invisible widget useful only to "push" other widgets' positions or to leave a desired gap.
UI2D.Begin(name, x, y, is_modal)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|window title
|x
|number|window X position
|y
|number|window Y position
|is_modal
[opt]|boolean|is this a modal window
Returns: nothing
NOTE: Starts a new window. Every widget call after this function will belong to this window, until UI2D.End()
is called. If this is set as a modal window (by passing true to the last argument) you should always call UI2D.EndModalWindow
before closing it physically.
UI2D.End(main_pass(lovr) or nothing(love))
|Argument|Type|Description
|:---|:---|:---|
|main_pass
|Pass|the main Pass object(only for lovr)
Returns: nothing
NOTE: Ends the current window.
UI2D.SameLine()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: Places the next widget side-to-side with the last one, instead of bellow
UI2D.GetWindowSize(name)
|Argument|Type|Description
|:---|:---|:---|
|name
|number|window name
Returns: number
, number
, [1] window width, [2] window height
NOTE: If no window with this name was found, return type is nil
UI2D.Init(type, size)
|Argument|Type|Description
|:---|:---|:---|
|type
|string|which framework to use (valid values: "lovr", "love")
|size
[opt]|number|font size
Returns: nothing
NOTE: Initializes the library and should be called on lovr/love.load()
. Font size dictates the general size of the UI. Default is 14
UI2D.InputInfo()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: Should be called on lovr/love.update()
UI2D.RenderFrame(main_pass(only for lovr))
|Argument|Type|Description
|:---|:---|:---|
|main_pass
|Pass|the main Pass object(lovr).
Returns: table
of ui passes(lovr) or nothing(love)
NOTE: Renders the UI. Should be called in lovr/love.draw()
. (If you're using lovr see the examples on how to handle the passes returned from this call.)
UI2D.OverrideColor(col_name, color)
|Argument|Type|Description
|:---|:---|:---|
|col_name
|string|color name
|color
|table|color value in table form (r, g, b, a)
Returns: nothing
NOTE: Helper to override a color value.
UI2D.SetColorTheme(theme, copy_from)
|Argument|Type|Description
|:---|:---|:---|
|theme
|string or table|color name or table with names of colors
|copy_from
[opt]|string|color-theme to copy values from
Returns: nothing
NOTE: Sets the color-theme to one of the built-in ones ("dark", "light") if the passed argument is a string. Also accepts a table of colors. If the passed table doesn't contain all of the keys, the rest of them will be copied from the built-in theme of the copy_from
argument.
UI2D.CloseModalWindow()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: Closes a modal window
UI2D.KeyPressed(key, repeating)
|Argument|Type|Description
|:---|:---|:---|
|key
|string|key name
|repeating
|boolean|if the key is repeating instead of an instant press.
Returns: nothing
NOTE: Should be called on lovr/love.keypressed()
callback.
UI2D.TextInput(text)
|Argument|Type|Description
|:---|:---|:---|
|text
|string|character from a textinput event.
Returns: nothing
NOTE: Should be called on lovr/love.textinput()
callback.
UI2D.KeyReleased()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: Should be called on lovr/love.keyreleased()
callback.
UI2D.WheelMoved(x, y)
|Argument|Type|Description
|:---|:---|:---|
|x
|number|wheel X.
|y
|number|wheel Y.
Returns: nothing
NOTE: Should be called on lovr/love.wheelmoved()
callback.
UI2D.HasMouse()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: Whether the mouse-pointer hovers a UI2D window.
UI2D.SetWindowPosition(name, x, y)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|name of the window
|x
|number|X position
|y
|number|Y position
Returns: boolean
, true if the window was found
NOTE: Sets a window's position programmatically.
UI2D.GetColorTheme()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: string
, theme name
NOTE: Gets the current color-theme
UI2D.ResetColor(col_name)
|Argument|Type|Description
|:---|:---|:---|
|col_name
|string|color name
Returns: nothing
NOTE: Resets a color to its default value
UI2D.SetFontSize(size)
|Argument|Type|Description
|:---|:---|:---|
|size
|number|font size
Returns: nothing
NOTE: Sets the font size
UI2D.GetFontSize()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: number
, font size
NOTE: Gets the current font size
UI2D.HasTextInput()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: boolean
, true if a textbox has focus
NOTE: Gets whether the text of a textbox is currently being edited
UI2D.IsModalOpen()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: boolean
, true if a modal window is currently open
NOTE: Gets whether a modal window is currently open
UI2D.EndModalWindow()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: Informs UI2D that a previously open modal-window was closed. You should always call this when closing a modal-window (usually performed from a button inside that window) so that UI2D can restore interaction with the other windows.
UI2D.SameColumn()
|Argument|Type|Description
|:---|:---|:---|
|none
||
Returns: nothing
NOTE: If the last widget used the UI2D.SameLine()
call, it effectively started a new "column". This function can be called such as the next widget will be placed on that column, under the last widget.
UI2D.ListBoxSetSelected(name, idx)
|Argument|Type|Description
|:---|:---|:---|
|name
|string|listbox name
|idx
|number or table|Index of item to be selected, or table of indices (in case this listbox' multi_select property is set to true)
Returns: nothing
NOTE: Sets the selected item(s) of a ListBox programmatically