summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.luarc.json3
-rw-r--r--config.ld3
-rw-r--r--luals-stubs/lvgl.lua1546
-rwxr-xr-xtools/luals-gendoc/gendoc.lua65
4 files changed, 1609 insertions, 8 deletions
diff --git a/.luarc.json b/.luarc.json
index a0e9e1b7..e16ba477 100644
--- a/.luarc.json
+++ b/.luarc.json
@@ -1,7 +1,6 @@
{
"$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json",
- "workspace.library": ["lib/luavgl/src", "luals-stubs"],
- "workspace.ignoreDir": ["ldoc-stubs"],
+ "workspace.library": ["luals-stubs"],
"runtime.version": "Lua 5.4",
}
diff --git a/config.ld b/config.ld
deleted file mode 100644
index e1c54172..00000000
--- a/config.ld
+++ /dev/null
@@ -1,3 +0,0 @@
-file = {'ldoc-stubs'}
-project = "Tangara"
-description = "Lua modules provided by Tangara's firmware"
diff --git a/luals-stubs/lvgl.lua b/luals-stubs/lvgl.lua
new file mode 100644
index 00000000..59093000
--- /dev/null
+++ b/luals-stubs/lvgl.lua
@@ -0,0 +1,1546 @@
+---@meta
+---
+--- lvgl comments
+---
+
+--- The `lvgl` module provides bindings to the LVGL graphics library. These
+--- bindings were originally based on [luavgl](https://github.com/XuNeo/luavgl/),
+--- but have diverged somewhat. These bindings are also largely a very thin
+--- abstraction around LVGL's C API, so [LVGL's documentation](https://docs.lvgl.io/8.3/)
+--- may also be useful to reference.
+--- This module is currently only available from the UI Lua context; i.e. the
+--- `main.lua` script run after boot on-device.
+---@class lvgl
+lvgl = {}
+
+--- Event codes for use with `obj:onevent`. See the [LVGL docs](https://docs.lvgl.io/8.3/overview/event.html#event-codes)
+--- for a description of each event type.
+--- @enum ObjEventCode
+lvgl.EVENT = {
+ ALL = 0,
+ PRESSED = 0,
+ PRESSING = 0,
+ PRESS_LOST = 0,
+ SHORT_CLICKED = 0,
+ LONG_PRESSED = 0,
+ LONG_PRESSED_REPEAT = 0,
+ CLICKED = 0,
+ RELEASED = 0,
+ SCROLL_BEGIN = 0,
+ SCROLL_END = 0,
+ SCROLL = 0,
+ GESTURE = 0,
+ KEY = 0,
+ FOCUSED = 0,
+ DEFOCUSED = 0,
+ LEAVE = 0,
+ HIT_TEST = 0,
+ COVER_CHECK = 0,
+ REFR_EXT_DRAW_SIZE = 0,
+ DRAW_MAIN_BEGIN = 0,
+ DRAW_MAIN = 0,
+ DRAW_MAIN_END = 0,
+ DRAW_POST_BEGIN = 0,
+ DRAW_POST = 0,
+ DRAW_POST_END = 0,
+ DRAW_PART_BEGIN = 0,
+ DRAW_PART_END = 0,
+ VALUE_CHANGED = 0,
+ INSERT = 0,
+ REFRESH = 0,
+ READY = 0,
+ CANCEL = 0,
+ DELETE = 0,
+ CHILD_CHANGED = 0,
+ CHILD_CREATED = 0,
+ CHILD_DELETED = 0,
+ SCREEN_UNLOAD_START = 0,
+ SCREEN_LOAD_START = 0,
+ SCREEN_LOADED = 0,
+ SCREEN_UNLOADED = 0,
+ SIZE_CHANGED = 0,
+ STYLE_CHANGED = 0,
+ LAYOUT_CHANGED = 0,
+ GET_SELF_SIZE = 0,
+}
+
+--- Flags that can be set for each LVGL object.
+--- @enum ObjFlag
+lvgl.FLAG = {
+ PRESSED = 0,
+ HIDDEN = 0,
+ CLICKABLE = 0,
+ CLICK_FOCUSABLE = 0,
+ CHECKABLE = 0,
+ SCROLLABLE = 0,
+ SCROLL_ELASTIC = 0,
+ SCROLL_MOMENTUM = 0,
+ SCROLL_ONE = 0,
+ SCROLL_CHAIN_HOR = 0,
+ SCROLL_CHAIN_VER = 0,
+ SCROLL_CHAIN = 0,
+ SCROLL_ON_FOCUS = 0,
+ SCROLL_WITH_ARROW = 0,
+ SNAPPABLE = 0,
+ PRESS_LOCK = 0,
+ EVENT_BUBBLE = 0,
+ GESTURE_BUBBLE = 0,
+ ADV_HITTEST = 0,
+ IGNORE_LAYOUT = 0,
+ FLOATING = 0,
+ OVERFLOW_VISIBLE = 0,
+ LAYOUT_1 = 0,
+ LAYOUT_2 = 0,
+ WIDGET_1 = 0,
+ WIDGET_2 = 0,
+ USER_1 = 0,
+ USER_2 = 0,
+ USER_3 = 0,
+ USER_4 = 0,
+}
+
+--- States that can be set on each LVGL object. See the [LVGL docs](https://docs.lvgl.io/8.3/overview/object.html#states)
+--- for an explanation of what each state means.
+--- @enum ObjState
+lvgl.STATE = {
+ DEFAULT = 0,
+ CHECKED = 0,
+ FOCUSED = 0,
+ FOCUS_KEY = 0,
+ EDITED = 0,
+ HOVERED = 0,
+ PRESSED = 0,
+ SCROLLED = 0,
+ DISABLED = 0,
+ USER_1 = 0,
+ USER_2 = 0,
+ USER_3 = 0,
+ USER_4 = 0,
+ ANY = 0,
+}
+
+--- Enum for specifying what kind of alignment to use for an LVGL object. See
+--- the [LVGL docs](https://docs.lvgl.io/8.3/overview/style-props.html#align)
+--- for an explanation of each value.
+--- @enum ObjAlignType
+lvgl.ALIGN = {
+ DEFAULT = 0,
+ TOP_LEFT = 0,
+ TOP_MID = 0,
+ TOP_RIGHT = 0,
+ BOTTOM_LEFT = 0,
+ BOTTOM_MID = 0,
+ BOTTOM_RIGHT = 0,
+ LEFT_MID = 0,
+ RIGHT_MID = 0,
+ CENTER = 0,
+ OUT_TOP_LEFT = 0,
+ OUT_TOP_MID = 0,
+ OUT_TOP_RIGHT = 0,
+ OUT_BOTTOM_LEFT = 0,
+ OUT_BOTTOM_MID = 0,
+ OUT_BOTTOM_RIGHT = 0,
+ OUT_LEFT_TOP = 0,
+ OUT_LEFT_MID = 0,
+ OUT_LEFT_BOTTOM = 0,
+ OUT_RIGHT_TOP = 0,
+ OUT_RIGHT_MID = 0,
+ OUT_RIGHT_BOTTOM = 0,
+}
+
+--- Long modes for use with labels.
+--- @enum LABEL
+lvgl.LABEL = {
+ LONG_WRAP = 0,
+ LONG_DOT = 0,
+ LONG_SCROLL = 0,
+ LONG_SCROLL_CIRCULAR = 0,
+ LONG_CLIP = 0,
+}
+
+--- Scroll modes
+--- @enum ScrollbarMode
+lvgl.SCROLLBAR_MODE = {
+ OFF = 0,
+ ON = 0,
+ ACTIVE = 0,
+ AUTO = 0,
+}
+
+--- Directions values for dropdown and scroll directions
+--- @enum Dir
+lvgl.DIR = {
+ NONE = 0,
+ LEFT = 0,
+ RIGHT = 0,
+ TOP = 0,
+ BOTTOM = 0,
+ HOR = 0,
+ VER = 0,
+ ALL = 0,
+}
+
+--- Keyboard modes
+--- @enum KeyboardMode
+lvgl.KEYBOARD_MODE = {
+ TEXT_LOWER = 0,
+ TEXT_UPPER = 0,
+ SPECIAL = 0,
+ NUMBER = 0,
+ USER_1 = 0,
+ USER_2 = 0,
+ USER_3 = 0,
+ USER_4 = 0,
+ TEXT_ARABIC = 0,
+}
+
+--- Flow direction for flex layouts. See the [LVGL docs](https://docs.lvgl.io/8.3/layouts/flex.html#flex-flow)
+--- for more details.
+--- @enum FlexFlow
+lvgl.FLEX_FLOW = {
+ ROW = 0,
+ COLUMN = 0,
+ ROW_WRAP = 0,
+ ROW_REVERSE = 0,
+ ROW_WRAP_REVERSE = 0,
+ COLUMN_WRAP = 0,
+ COLUMN_REVERSE = 0,
+ COLUMN_WRAP_REVERSE = 0,
+}
+
+--- Alignment values for flex layouts. See the [LVGL docs](https://docs.lvgl.io/8.3/layouts/flex.html#flex-align)
+--- for more details.
+--- @enum FlexAlign
+lvgl.FLEX_ALIGN = {
+ START = 0,
+ END = 0,
+ CENTER = 0,
+ SPACE_EVENLY = 0,
+ SPACE_AROUND = 0,
+ SPACE_BETWEEN = 0,
+}
+
+--- Alignment values for grid layouts. See the [LVGL docs](https://docs.lvgl.io/8.3/layouts/grid.html#grid-align)
+--- for more details.
+--- @enum GridAlign
+lvgl.GRID_ALIGN = {
+ START = 0,
+ CENTER = 0,
+ END = 0,
+ STRETCH = 0,
+ SPACE_EVENLY = 0,
+ SPACE_AROUND = 0,
+ SPACE_BETWEEN = 0,
+}
+
+--- Values for KEY events.
+--- @enum KEY
+lvgl.KEY = {
+ UP = 0,
+ DOWN = 0,
+ RIGHT = 0,
+ LEFT = 0,
+ ESC = 0,
+ DEL = 0,
+ BACKSPACE = 0,
+ ENTER = 0,
+ NEXT = 0,
+ PREV = 0,
+ HOME = 0,
+ END = 0,
+}
+
+lvgl.ANIM_REPEAT_INFINITE = 0
+lvgl.ANIM_PLAYTIME_INFINITE = 0
+lvgl.SIZE_CONTENT = 0
+lvgl.RADIUS_CIRCLE = 0
+lvgl.COORD_MAX = 0
+lvgl.COORD_MIN = 0
+lvgl.IMG_ZOOM_NONE = 0
+lvgl.BTNMATRIX_BTN_NONE = 0
+lvgl.CHART_POINT_NONE = 0
+lvgl.DROPDOWN_POS_LAST = 0
+lvgl.LABEL_DOT_NUM = 0
+lvgl.LABEL_POS_LAST = 0
+lvgl.LABEL_TEXT_SELECTION_OFF = 0
+lvgl.TABLE_CELL_NONE = 0
+lvgl.TEXTAREA_CURSOR_LAST = 0
+lvgl.LAYOUT_FLEX = 0
+lvgl.LAYOUT_GRID = 0
+
+--- Converts an opacity value as a percentage into the LVGL opacity range of 0
+--- to 255.
+---@param p integer opacity value in range of 0..100
+---@return integer opacity value in the range of 0..255
+function lvgl.OPA(p)
+end
+
+--- Converts a size in percent into an LVGL size value.
+---@param p integer size percentage
+---@return integer size in LVGL units
+function lvgl.PCT(p)
+end
+
+--- Returns the horizontal resolution of the display.
+---@return integer
+function lvgl.HOR_RES()
+end
+
+--- Returns the vertical resolution of the display.
+---@return integer
+function lvgl.VER_RES()
+end
+
+--- Creates a new base LVGL object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/obj.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? StyleProp Style properties to apply to this object
+--- @return Object
+function lvgl.Object(parent, property)
+end
+
+--- Create a new Bar widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/bar.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? BarStyle Style properties to apply to this object
+--- @return Bar
+function lvgl.Bar(parent, property)
+end
+
+--- Create a new Button widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/btn.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? StyleProp Style properties to apply to this object
+--- @return Button
+function lvgl.Button(parent, property)
+end
+
+--- Create a new Calendar widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/calendar.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? CalendarStyle Style properties to apply to this object
+--- @return Calendar
+function lvgl.Calendar(parent, property)
+end
+
+--- Create a new Checkbox widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/checkbox.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? CheckboxStyle Style properties to apply to this object
+--- @return Checkbox
+function lvgl.Checkbox(parent, property)
+end
+
+--- Create a new Dropdown widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/dropdown.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? DropdownStyle Style properties to apply to this object
+--- @return Dropdown
+function lvgl.Dropdown(parent, property)
+end
+
+--- Create a new Image widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/img.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? ImageStyle Style properties to apply to this object
+--- @return Image
+function lvgl.Image(parent, property)
+end
+
+--- Create a new Label widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/label.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? LabelStyle Style properties to apply to this object
+--- @return Label
+function lvgl.Label(parent, property)
+end
+
+--- Create a new Text Area widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/textarea.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? TextareaStyle Style properties to apply to this object
+--- @return Textarea
+function lvgl.Textarea(parent, property)
+end
+
+--- Create a new Keyboard widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/keyboard.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? KeyboardStyle Style properties to apply to this object
+--- @return Keyboard
+function lvgl.Keyboard(parent, property)
+end
+
+--- Create a new LED widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/led.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? LedStyle Style properties to apply to this object
+--- @return Led
+function lvgl.Led(parent, property)
+end
+
+--- Create a new List widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/list.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? ListStyle Style properties to apply to this object
+--- @return List
+function lvgl.List(parent, property)
+end
+
+--- Create a new Roller widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/roller.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? RollerStyle Style properties to apply to this object
+--- @return Roller
+function lvgl.Roller(parent, property)
+end
+
+--- Create a new Slider widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/slider.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? BarStyle Style properties to apply to this object. Sliders use the same style properties as Bars.
+--- @return Slider
+function lvgl.Slider(parent, property)
+end
+
+--- Create a new Switch widget. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/switch.html)
+--- for details about this widget.
+--- @param parent? Object The parent for this object, or nil to add to the screen root.
+--- @param property? StyleProp Style properties to apply to this object
+--- @return Switch
+function lvgl.Switch(parent, property)
+end
+
+--- Create a new Timer. See the [LVGL docs](https://docs.lvgl.io/8.3/overview/timer.html)
+--- for more details on LVGL's Timers system.
+--- @param p TimerPara Parameters to use for configuring the timer.
+--- @return Timer
+function lvgl.Timer(p)
+end
+
+--- Create a new a font. Currently only the inbuilt "fusion" font family is
+--- available, in "normal" weight and sizes 12 and 10.
+--- @param family string Name of the font family.
+--- @param size integer the font size in px
+--- @param weight string the weight of the font. e.g.g "normal", "bold", "light"
+--- @return Font
+function lvgl.Font(family, size, weight)
+end
+
+--- Create a new style that can be applied to objects via `obj:add_style`.
+--- @param p? StyleProp Style properties that will be applied by this style.
+--- @return Style
+function lvgl.Style(p)
+end
+
+---
+--- Base LVGL object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/obj.html)
+--- for additional details.
+--- @class Object
+obj = {}
+
+--- Creates a new base LVGL object as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/obj.html)
+--- for details about this widget.
+--- @param property? StyleProp Style properties to apply to this object
+--- @return Object
+function obj:Object(property)
+end
+
+--- Create a new Bar widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/bar.html)
+--- for details about this widget.
+--- @param property? BarStyle Style properties to apply to this object
+--- @return Bar
+function obj:Bar(property)
+end
+
+--- Create a new Button widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/btn.html)
+--- for details about this widget.
+--- @param property? StyleProp Style properties to apply to this object
+--- @return Button
+function obj:Button(property)
+end
+
+--- Create a new Calendar widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/calendar.html)
+--- for details about this widget.
+--- @param property? CalendarStyle Style properties to apply to this object
+--- @return Calendar
+function obj:Calendar(property)
+end
+
+--- Create a new Checkbox widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/checkbox.html)
+--- for details about this widget.
+--- @param property? CheckboxStyle Style properties to apply to this object
+--- @return Checkbox
+function obj:Checkbox(property)
+end
+
+--- Create a new Dropdown widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/dropdown.html)
+--- for details about this widget.
+--- @param property? DropdownStyle Style properties to apply to this object
+--- @return Dropdown
+function obj:Dropdown(parent, property)
+end
+
+--- Create a new Image widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/img.html)
+--- for details about this widget.
+--- @param property? ImageStyle Style properties to apply to this object
+--- @return Image
+function obj:Image(property)
+end
+
+--- Create a new Label widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/label.html)
+--- for details about this widget.
+--- @param property? LabelStyle Style properties to apply to this object
+--- @return Label
+function obj:Label(property)
+end
+
+--- Create a new Text Area widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/textarea.html)
+--- for details about this widget.
+--- @param property? TextareaStyle Style properties to apply to this object
+--- @return Textarea
+function obj:Textarea(property)
+end
+
+--- Create a new Keyboard widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/keyboard.html)
+--- for details about this widget.
+--- @param property? KeyboardStyle Style properties to apply to this object
+--- @return Keyboard
+function obj:Keyboard(property)
+end
+
+--- Create a new LED widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/led.html)
+--- for details about this widget.
+--- @param property? LedStyle Style properties to apply to this object
+--- @return Led
+function obj:Led(property)
+end
+
+--- Create a new List widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/extra/list.html)
+--- for details about this widget.
+--- @param property? ListStyle Style properties to apply to this object
+--- @return List
+function obj:List(property)
+end
+
+--- Create a new Roller widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/roller.html)
+--- for details about this widget.
+--- @param property? RollerStyle Style properties to apply to this object
+--- @return Roller
+function obj:Roller(parent, property)
+end
+
+--- Create a new Slider widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/slider.html)
+--- for details about this widget.
+--- @param property? BarStyle Style properties to apply to this object. Sliders use the same style properties as Bars.
+--- @return Slider
+function obj:Slider(property)
+end
+
+--- Create a new Switch widget as a child of this object. See the [LVGL docs](https://docs.lvgl.io/8.3/widgets/core/switch.html)
+--- for details about this widget.
+--- @param property? StyleProp Style properties to apply to this object
+--- @return Switch
+function obj:Switch(property)
+end
+
+--- Sets new style properties on this object.
+--- @param p StyleProp Style properties to be applied.
+function obj:set(p)
+end
+
+--- Sets new style properties on this object.
+--- @param p StyleProp Style properties to be applied.
+--- @param selector integer Selector to detemine when the style is used
+---
+function obj:set_style(p, selector)
+end
+
+--- Sets this object's position relative to another object.
+--- @param p AlignToPara
+function obj:align_to(p)
+end
+
+--- Deletes this object, removing it from the view hierarchy.
+function obj:delete()
+end
+
+--- Delete all children of this object
+function obj:clean()
+end
+
+--- Sets the parent of this object, detaching it from any existing parent.
+--- @param p Object The new parent object
+function obj:set_parent(p)
+end
+
+--- Gets this object's parent
+--- @return Object Parent
+function obj:get_parent()
+end
+
+---
+--- set and/or get object's parent
+--- @param p Object
+--- @return Object
+function obj:parent(p)
+end
+
+---
+--- get child object
+--- @param id integer 0 the first child, -1 the lastly created child
+--- @return Object
+function obj:get_child(id)
+end
+
+---
+--- get object children count
+--- @return integer
+function obj:get_child_cnt()
+end
+
+---
+--- get the state of this object
+--- @return ObjState
+function obj:get_state(p)
+end
+
+---
+--- Scroll to a given coordinate on an object.
+--- @class ScrollToPara
+--- @field x integer position x
+--- @field y integer
+--- @field anim boolean
+---
+--- @param p ScrollToPara
+--- @return ObjState
+function obj:scroll_to(p)
+end
+
+---
+--- Tell whether an object is being scrolled or not at this moment
+--- @return boolean
+function obj:is_scrolling()
+end
+
+---
+--- Tell whether an object is visible (even partially) now or not
+--- @return boolean
+function obj:is_visible()
+end
+
+---
+--- add flag to object
+--- @param p ObjFlag
+--- @return nil
+function obj:add_flag(p)
+end
+
+---
+--- clear object flag
+--- @param p ObjFlag
+--- @return nil
+function obj:clear_flag(p)
+end
+
+---
+--- add state to object
+--- @param p ObjState
+--- @return nil
+function obj:add_state(p)
+end
+
+---
+--- clear object state
+--- @param p ObjState
+--- @return nil
+function obj:clear_state(p)
+end
+
+---
+--- add style to object
+--- @param s Style
+--- @param selector? integer
+--- @return nil
+function obj:add_style(s, selector)
+end
+
+---
+--- remove style from object
+--- @param s Style
+--- @param selector? integer
+--- @return nil
+function obj:remove_style(s, selector)
+end
+
+---
+--- remove all style from object
+--- @return nil
+function obj:remove_style_all()
+end
+
+---scroll obj by x,y
+---@param x integer
+---@param y integer
+---@param anim_en? boolean
+function obj:scroll_by(x, y, anim_en)
+end
+
+---scroll obj by x,y
+---@param x integer
+---@param y integer
+---@param anim_en boolean
+function obj:scroll_by_bounded(x, y, anim_en)
+end
+
+--- Scroll to an object until it becomes visible on its parent
+---@param anim_en? boolean
+function obj:scroll_to_view(anim_en)
+end
+
+--- Scroll to an object until it becomes visible on its parent
+--- Do the same on the parent's parent, and so on.
+--- Therefore the object will be scrolled into view even it has nested scrollable parents
+---@param anim_en? boolean
+function obj:scroll_to_view_recursive(anim_en)
+end
+
+---scroll obj by x,y, low level APIs
+---@param x integer
+---@param y integer
+---@param anim_en boolean
+function obj:scroll_by_raw(x, y, anim_en)
+end
+
+---Invalidate the area of the scrollbars
+function obj:scrollbar_invalidate()
+end
+
+---Checked if the content is scrolled "in" and adjusts it to a normal position.
+---@param anim_en boolean
+function obj:readjust_scroll(anim_en)
+end
+
+---If object is editable
+---@return boolean
+function obj:is_editable()
+end
+
+--- class group def
+---@return boolean
+function obj:is_group_def()
+end
+
+--- Test whether the and object is positioned by a layout or not
+---@return boolean
+function obj:is_layout_positioned()
+end
+
+--- Mark the object for layout update.
+---@return nil
+function obj:mark_layout_as_dirty()
+end
+
+--- Align an object to the center on its parent. same as obj:set{align={type = lvgl.ALIGN.CENTER}}
+---@return nil
+function obj:center()
+end
+
+--- Align an object to the center on its parent. same as obj:set{align={type = lvgl.ALIGN.CENTER}}
+---@return nil
+function obj:invalidate()
+end
+
+--- Sets this object as the current selection of the object's group.
+---@return nil
+function obj:focus()
+end
+
+---
+--- Object event callback. `para` is not used for now.
+--- @alias EventCallback fun(obj:Object, code: ObjEventCode): nil
+---
+--- set object event callback
+--- @param code ObjEventCode
+--- @param cb EventCallback
+--- @return nil
+function obj:onevent(code, cb)
+end
+
+---
+--- set object pressed event callback, same as obj:onevent(lvgl.EVENT.PRESSED, cb)
+--- @param cb EventCallback
+--- @return nil
+function obj:onPressed(cb)
+end
+
+---
+--- set object clicked event callback, same as obj:onevent(lvgl.EVENT.CLICKED, cb)
+--- @param cb EventCallback
+--- @return nil
+function obj:onClicked(cb)
+end
+
+---
+--- set object short clicked event callback, same as obj:onevent(lvgl.EVENT.SHORT_CLICKED, cb)
+--- @param cb EventCallback
+--- @return nil
+function obj:onShortClicked(cb)
+end
+
+---
+--- Create anim for object
+--- @param p AnimPara
+--- @return Anim
+function obj:Anim(p)
+end
+
+---
+--- Get coords of object
+--- @return Coords coords
+function obj:get_coords()
+end
+
+---
+--- Get real postion of object relative to its parent
+--- @return Coords coords
+function obj:get_pos()
+end
+
+---
+--- Calendar widget
+---@class Calendar:Object
+---
+local calendar = {}
+
+--- set method for calendar widget
+--- @param p CalendarStyle
+--- @return nil
+function calendar:set(p)
+end
+
+--- get today para setting from calendar widget
+--- @return CalendarDatePara
+function calendar:get_today(p)
+end
+
+--- get the currently showed date
+--- @return CalendarDatePara
+function calendar:get_showed(p)
+end
+
+--- get the currently pressed day
+--- @return CalendarDatePara
+function calendar:get_pressed(p)
+end
+
+--- get the button matrix object of the calendar.
+--- @return Object
+function calendar:get_btnm(p)
+end
+
+--- create a calendar header with drop-drowns to select the year and month.
+--- @return Object
+function calendar:Arrow(p)
+end
+
+--- create a calendar header with drop-drowns to select the year and month
+--- @return Object
+function calendar:Dropdown(p)
+end
+
+---
+--- Bar widget
+---@class Bar:Object
+---
+local bar = {}
+
+--- set method for bar widget
+--- @param p BarStyle
+--- @return nil
+function bar:set(p)
+end
+
+---
+--- Button widget
+---@class Button:Object
+---
+local button = {}
+
+--- set method for button widget
+--- @param p ButtonStyle
+--- @return nil
+function button:set(p)
+end
+
+---
+--- Checkbox widget
+---@class Checkbox:Object
+---
+local checkbox = {}
+
+--- set method
+--- @param p CheckboxStyle
+--- @return nil
+function checkbox:set(p)
+end
+
+---
+--- Get the text of a label
+--- @return string
+function checkbox:get_text()
+end
+
+---
+--- Dropdown widget
+---@class Dropdown:Object
+---
+local dropdown = {}
+
+--- set method
+--- @param p DropdownStyle
+--- @return nil
+function dropdown:set(p)
+end
+
+--- Gets an attribute of the dropdown.
+--- @param which string Which property to retrieve. Valid values are "list", "options", "selected", "option_cnt", "selected_str", "option_index", "symbol", or "dir"
+--- @param arg ? string
+--- @return string | Dir | Object
+function dropdown:get(which, arg)
+end
+
+--- Open the drop down list
+function dropdown:open()
+end
+
+--- Close (Collapse) the drop-down list
+function dropdown:close()
+end
+
+--- Tells whether the list is opened or not
+function dropdown:is_open()
+end
+
+--- Add an options to a drop-down list from a string
+--- @param option string
+--- @param pos integer
+function dropdown:add_option(option, pos)
+end
+
+--- Tells whether the list is opened or not
+function dropdown:clear_option()
+end
+
+---
+--- Image widget
+---@class Image:Object
+---
+local img = {}
+
+--- Image set method
+--- @param p ImageStyle
+--- @return nil
+function img:set(p)
+end
+
+--- set image source
+--- @param src string image source path
+--- @return nil
+function img:set_src(src)
+end
+
+--- set image offset
+--- img:set_offset{x = 0, y = 100}
+--- @param p table
+--- @return nil
+function img:set_offset(p)
+end
+
+--- set image pivot
+--- img:set_pivot{x = 0, y = 100}
+--- @param p table
+--- @return nil
+function img:set_pivot(p)
+end
+
+--- get image size, return w,h
+--- w, h = img:get_img_size()
+--- w, h = img:get_img_size("/path/to/this/image.png")
+--- @param src ? string
+--- @return integer, integer
+function img:get_img_size(src)
+end
+
+---
+--- Label widget
+---@class Label: Object
+---
+local label = {}
+
+--- Image set method
+--- @param p LabelStyle
+--- @return nil
+function label:set(p)
+end
+
+---
+--- Get the text of a label
+--- @return string
+function label:get_text()
+end
+
+---
+--- Get the long mode of a label
+--- @return string
+function label:get_long_mode()
+end
+
+---
+--- Get the recoloring attribute
+--- @return string
+function label:get_recolor()
+end
+
+---
+--- Insert a text to a label.
+--- @param pos integer
+--- @param txt string
+--- @return nil
+function label:ins_text(pos, txt)
+end
+
+---
+--- Delete characters from a label.
+--- @param pos integer
+--- @param cnt integer
+--- @return nil
+function label:cut_text(pos, cnt)
+end
+
+---
+--- Slider widget
+---@class Slider:Object
+---
+local slider = {}
+
+--- set method for slider widget. Uses Bar widget's properties.
+--- @param p BarStyle
+--- @return nil
+function slider:set(p)
+end
+
+--- get value of slider
+--- @return integer
+function slider:value()
+end
+
+--- get whether slider is dragged or not
+--- @return boolean
+function slider:is_dragged()
+end
+
+---
+--- Switch widget
+---@class Switch:Object
+---
+local switch = {}
+
+--- set method for switch widget
+--- @param p StyleProp
+--- @return nil
+function switch:set(p)
+end
+
+--- get checked state of switch
+--- @return boolean
+function switch:enabled()
+end
+
+---
+--- Textarea widget
+---@class Textarea: Object
+---
+local textarea = {}
+
+--- Textarea set method
+--- @param p TextareaStyle
+--- @return nil
+function textarea:set(p)
+end
+
+--- get textarea text
+--- @return string
+function textarea:get_text(p)
+end
+
+---
+--- Keyboard widget
+---@class Keyboard: Object based on btnmatrix object
+---
+local keyboard = {}
+
+--- Keyboard set method
+--- @param p KeyboardStyle
+--- @return nil
+function keyboard:set(p)
+end
+
+---
+--- LED widget
+---@class Led: Object
+---
+local led = {}
+
+--- LED set method
+--- @param p LedStyle
+--- @return nil
+function led:set(p)
+end
+
+--- LED set to ON
+--- @return nil
+function led:on()
+end
+
+--- LED set to OFF
+--- @return nil
+function led:off()
+end
+
+--- toggle LED status
+--- @return nil
+function led:toggle()
+end
+
+--- get LED brightness
+--- @return integer
+function led:get_brightness()
+end
+
+---
+--- List widget
+---@class List: Object
+---
+local list = {}
+
+--- List set method
+--- @param p ListStyle
+--- @return nil
+function list:set(p)
+end
+
+--- add text to list
+--- @param text string
+--- @return Label
+function list:add_text(text)
+end
+
+--- add button to list
+--- @param icon ImgSrc | nil
+--- @param text? string
+--- @return Object a button object
+function list:add_btn(icon, text)
+end
+
+--- get list button text
+--- @param btn Object
+--- @return string
+function list:get_btn_text(btn)
+end
+
+---
+--- Roller widget
+---@class Roller: Object
+---
+local roller = {}
+
+--- Roller set method
+--- @param p RollerStyle
+--- @return nil
+function roller:set(p)
+end
+
+--- Get the options of a roller
+--- @return string
+function roller:get_options()
+end
+
+--- Get the index of the selected option
+--- @return integer
+function roller:get_selected()
+end
+
+--- Get the current selected option as a string.
+--- @return string
+function roller:get_selected_str()
+end
+
+--- Get the total number of options
+--- @return integer
+function roller:get_options_cnt()
+end
+
+---
+--- Anim
+---@class Anim
+---
+local Anim = {}
+
+--- start animation
+--- @return nil
+function Anim:start()
+end
+
+--- set animation new parameters
+--- @param para AnimPara new animation parameters
+--- @return nil
+function Anim:set(para)
+end
+
+--- stop animation
+--- @return nil
+function Anim:stop()
+end
+
+--- delete animation
+--- @return nil
+function Anim:delete()
+end
+
+---
+--- Timer
+---@class Timer
+---
+local timer = {}
+
+--- set timer property
+--- @param p TimerPara
+--- @return nil
+function timer:set(p)
+end
+
+--- resume timer
+--- @return nil
+function timer:resume()
+end
+
+--- pause timer
+--- @return nil
+function timer:pause()
+end
+
+--- delete timer
+--- @return nil
+function timer:delete()
+end
+
+--- make timer ready now, cb will be made soon on next loop
+--- @return nil
+function timer:ready()
+end
+
+--[[
+Font is a light userdata that can be uset to set style text_font.
+]]
+--- @class Font
+---
+
+local font = {}
+
+---
+--- @class Style : lightuserdata
+---
+local style = {}
+
+--- update style properties
+--- @param p StyleProp
+--- @return nil
+function style:set(p)
+end
+
+--- delete style, only delted style could be gc'ed
+--- @return nil
+function style:delete()
+end
+
+--- remove specified property from style
+--- @param p string property name from field of StyleProp
+--- @return nil
+function style:remove_prop(p)
+end
+
+---
+--- Align parameter
+--- @class Align
+--- @field type ObjAlignType
+--- @field x_ofs integer
+--- @field y_ofs integer
+
+--- AlignTo parameter
+--- @class AlignToPara
+--- @field type ObjAlignType
+--- @field base Object
+--- @field x_ofs integer
+
+--- Style properties
+--- @class StyleProp
+--- @field w? integer
+--- @field width? integer
+--- @field min_width? integer
+--- @field max_width? integer
+--- @field height? integer
+--- @field min_height? integer
+--- @field max_height? integer
+--- @field x? integer
+--- @field y? integer
+--- @field size? integer set size is equivalent to set w/h to same value
+--- @field align? Align | ObjAlignType
+--- @field transform_width? integer
+--- @field transform_height? integer
+--- @field translate_x? integer
+--- @field translate_y? integer
+--- @field transform_zoom? integer
+--- @field transform_angle? integer
+--- @field transform_pivot_x? integer
+--- @field transform_pivot_y? integer
+--- @field pad_all? integer
+--- @field pad_top? integer
+--- @field pad_bottom? integer
+--- @field pad_ver? integer
+--- @field pad_left? integer
+--- @field pad_right? integer
+--- @field pad_hor? integer
+--- @field pad_row? integer
+--- @field pad_column? integer
+--- @field pad_gap? integer
+--- @field bg_color? integer | string text color in hex integer or #RGB or #RRGGBB format
+--- @field bg_opa? integer
+--- @field bg_grad_color? integer
+--- @field bg_grad_dir? integer
+--- @field bg_main_stop? integer
+--- @field bg_grad_stop? integer
+--- @field bg_dither_mode? integer
+--- @field bg_img_src? integer
+--- @field bg_img_opa? integer
+--- @field bg_img_recolor? integer
+--- @field bg_img_recolor_opa? integer
+--- @field bg_img_tiled? integer
+--- @field border_color? integer | string
+--- @field border_opa? integer
+--- @field border_width? integer
+--- @field border_side? integer
+--- @field border_post? integer
+--- @field outline_width? integer
+--- @field outline_color? integer | string
+--- @field outline_opa? integer
+--- @field outline_pad? integer
+--- @field shadow_width? integer
+--- @field shadow_ofs_x? integer
+--- @field shadow_ofs_y? integer
+--- @field shadow_spread? integer
+--- @field shadow_color? integer | string
+--- @field shadow_opa? integer
+--- @field img_opa? integer
+--- @field img_recolor? integer
+--- @field img_recolor_opa? integer
+--- @field line_width? integer
+--- @field line_dash_width? integer
+--- @field line_dash_gap? integer
+--- @field line_rounded? integer
+--- @field line_color? integer | string
+--- @field line_opa? integer
+--- @field arc_width? integer
+--- @field arc_rounded? integer
+--- @field arc_color? integer | string
+--- @field arc_opa? integer
+--- @field arc_img_src? integer
+--- @field text_color? integer | string
+--- @field text_opa? integer
+--- @field text_font? Font | BuiltinFont
+--- @field text_letter_space? integer
+--- @field text_line_space/ integer
+--- @field text_decor? integer
+--- @field text_align? integer
+--- @field radius? integer
+--- @field clip_corner? integer
+--- @field opa? integer
+--- @field color_filter_opa? integer
+--- @field anim_time? integer
+--- @field anim_speed? integer
+--- @field blend_mode? integer
+--- @field layout? integer
+--- @field base_dir? integer
+--- @field flex_flow? FlexFlow
+--- @field flex_main_place? FlexAlign
+--- @field flex_cross_place? FlexAlign
+--- @field flex_track_place/ FlexAlign
+--- @field flex_grow? integer 0..255
+--- @field flex? FlexLayoutPara
+
+---
+
+--- Object style
+--- @class ObjectStyle :StyleProp
+--- @field x integer
+--- @field y integer
+--- @field w integer
+--- @field h integer
+--- @field align Align | integer
+--- @field align_to AlignToPara
+--- @field scrollbar_mode ScrollbarMode
+--- @field scroll_dir Dir
+--- @field scroll_snap_x integer
+--- @field scroll_snap_y integer
+---
+
+--- Image style
+--- @class ImageStyle :StyleProp
+--- @field src string
+--- @field offset_x integer offset of image
+--- @field offset_y integer
+--- @field angle integer
+--- @field zoom integer
+--- @field antialias boolean
+--- @field pivot table
+---
+
+--- Label style
+--- @class LabelStyle :StyleProp
+--- @field text string
+
+--- Bar style
+--- @class BarStyle :StyleProp
+--- @field range BarRangePara
+--- @field value integer
+
+--- Button style
+--- @class ButtonStyle :StyleProp
+
+--- Checkbox style
+--- @class CalendarStyle :StyleProp
+--- @field today CalendarDatePara
+--- @field showed CalendarDatePara
+
+--- Checkbox style
+--- @class CheckboxStyle :StyleProp
+--- @field text string
+
+--- Dropdown style
+--- @class DropdownStyle :StyleProp
+--- @field text string | nil
+--- @field options string
+--- @field selected integer
+--- @field dir Dir
+--- @field symbol lightuserdata | string
+--- @field highlight boolean
+
+--- Textarea style
+--- @class TextareaStyle :StyleProp
+--- @field text string
+--- @field placeholder string
+--- @field cursor integer cursor position
+--- @field password_mode boolean enable password
+--- @field one_line boolean enable one line mode
+--- @field password_bullet string Set the replacement characters to show in password mode
+--- @field accepted_chars string DO NOT USE. Set a list of characters. Only these characters will be accepted by the text area E.g. "+-.,0123456789"
+--- @field max_length integer Set max length of a Text Area.
+--- @field password_show_time integer Set how long show the password before changing it to '*'
+
+--- Keyboard style
+--- @class KeyboardStyle :StyleProp
+--- @field textarea Textarea textarea object
+--- @field mode KeyboardMode
+--- @field popovers boolean Show the button title in a popover when pressed.
+
+--- Led style
+--- @class LedStyle :StyleProp
+--- @field color integer|string color of led
+--- @field brightness integer brightness in range of 0..255
+
+--- List style
+--- @class ListStyle :StyleProp
+
+--- Roller style
+--- @class RollerStyle :StyleProp
+--- @field options table | string
+--- @field selected table | integer
+--- @field visible_cnt integer
+
+---
+--- Anim(for object) parameter
+--- @alias AnimExecCb fun(obj:any, value:integer): nil
+--- @alias AnimDoneCb fun(anim:Anim, var:any): nil
+
+--- @class AnimPara
+--- @field run boolean run this anim right now, or later using anim:start(). default: false
+--- @field start_value integer start value
+--- @field end_value integer
+--- @field duration integer Anim duration in milisecond
+--- @field delay integer Set a delay before starting the animation
+--- @field repeat_count integer Anim repeat count, default: 1, set to 0 to disable repeat, set to lvgl.ANIM_REPEAT_INFINITE for infinite repeat, set to any other integer for specified repeate count
+--- @field playback_delay integer
+--- @field playback_time integer
+--- @field early_apply boolean set start_value right now or not. default: true
+--- @field path string | "linear" | "ease_in" | "ease_out" | "ease_in_out" | "overshoot" | "bounce" | "step"
+--- @field exec_cb AnimExecCb
+--- @field done_cb AnimDoneCb
+
+
+---
+--- Timer para
+--- @alias TimerCallback fun(t:Timer): nil
+--- @class TimerPara
+--- @field paused boolean Do not start timer immediaely
+--- @field period integer timer period in ms unit
+--- @field repeat_count integer | -1 |
+--- @field cb TimerCallback
+---
+
+
+---
+--- @alias ImgSrc string | lightuserdata
+
+--- Alignment values for flex layouts. See the [LVGL docs](https://docs.lvgl.io/8.3/layouts/flex.html#flex-align)
+--- for more details.
+--- @alias flexAlignOptions
+---| "flex-start"
+---| "flex-end"
+---| "center" wow
+---| "space-between"
+---| "space-around"
+---| "space-evenly"
+
+--- @class FlexLayoutPara
+--- @field flex_direction? "row" | "column" | "row-reverse" | "column-reverse"
+--- @field flex_wrap? "nowrap" | "wrap" | "wrap-reverse"
+--- @field justify_content? flexAlignOptions
+--- @field align_items? flexAlignOptions
+--- @field align_content? flexAlignOptions
+
+
+---
+--- BarRange para
+--- @class BarRangePara
+--- @field min integer
+--- @field max integer
+---
+
+---
+--- CalendarToday para
+--- @class CalendarDatePara
+--- @field year integer
+--- @field month integer
+--- @field day integer
+---
+
+---
+--- Coordinates
+--- @class Coords
+--- @field x1 integer
+--- @field y1 integer
+--- @field x2 integer
+--- @field y2 integer
+---
+
+return lvgl
diff --git a/tools/luals-gendoc/gendoc.lua b/tools/luals-gendoc/gendoc.lua
index 15f46b3c..ace0b6c9 100755
--- a/tools/luals-gendoc/gendoc.lua
+++ b/tools/luals-gendoc/gendoc.lua
@@ -14,6 +14,7 @@ local raw_data = io.read("*all")
local parsed = json.decode(raw_data)
local definitions_per_module = {}
+local fields_per_class = {}
for _, class in ipairs(parsed) do
if not class.defines or not class.defines[1] then goto continue end
@@ -27,6 +28,12 @@ for _, class in ipairs(parsed) do
module[class.name] = class
definitions_per_module[module_name] = module
+ local fields = {}
+ for _, field in ipairs(class.fields or {}) do
+ fields[field.name] = true
+ end
+ fields_per_class[class.name] = fields
+
::continue::
end
@@ -72,6 +79,8 @@ local function filterReturns(field)
end
local function emitField(level, prefix, field)
+ if not field.desc then return end
+
printHeading(level, "`" .. prefix .. "." .. field.name .. "`")
print()
print("`" .. field.extends.view .. "`")
@@ -111,14 +120,64 @@ local function emitField(level, prefix, field)
end
end
+local function baseClassName(class)
+ for _, define in ipairs(class.defines or {}) do
+ for _, extend in ipairs(define.extends or {}) do
+ if extend.type == "doc.extends.name" then
+ return extend.view
+ end
+ end
+ end
+end
+
+local function isEnum(class)
+ for _, define in pairs(class.defines) do
+ if define.type == "doc.enum" then return true end
+ end
+ return false
+end
+
+local function isAlias(class)
+ for _, define in pairs(class.defines) do
+ if define.type == "doc.alias" then return true end
+ end
+ return false
+end
+
local function emitClass(level, prefix, class)
if not class.name then return end
+ if not class.fields then return end
+ if isAlias(class) then return end
+
+ for _, define in ipairs(class.defines or {}) do
+ if define.type == "tablefield" then
+ print(" - " .. class.name)
+ return
+ end
+ end
printHeading(level, "`" .. prefix .. "." .. class.name .. "`")
+ print()
+
+ local base_class = baseClassName(class)
+ local base_class_fields = {}
+ if base_class then
+ base_class_fields = fields_per_class[base_class] or {}
+ print("`" .. class.name .. ":" .. base_class .. "`")
+ print()
+ end
+
if class.desc then print(class.desc) end
- for _, field in ipairs(class.fields) do
- emitField(level + 1, class.name, field)
+ for _, field in ipairs(class.fields or {}) do
+ if not base_class_fields[field.name] then
+ emitField(level + 1, class.name, field)
+ end
+ end
+
+ if isEnum(class) then
+ printHeading(level + 1, "Values")
+ print()
end
end
@@ -130,7 +189,7 @@ for name, module in sortedPairs(definitions_per_module) do
local top_level_class = module[name]
if top_level_class then
if top_level_class.desc then print(top_level_class.desc) end
- for _, field in ipairs(top_level_class.fields) do
+ for _, field in ipairs(top_level_class.fields or {}) do
emitField(initial_level + 1, name, field)
end
end