summaryrefslogtreecommitdiff
path: root/lib/luavgl/src
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-01-15 12:31:20 +1100
committerjacqueline <me@jacqueline.id.au>2024-01-15 12:31:20 +1100
commit7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0 (patch)
tree637b43848d17c9dbdc1688cb4733eb235f223e37 /lib/luavgl/src
parent0e04eb918ec976017276306181282769d8896c83 (diff)
downloadtangara-fw-7cdcd44e0ca10ebdc796638190ed1d9b45d99ef0.tar.gz
Begin migration of remaining screens to Lua
Diffstat (limited to 'lib/luavgl/src')
-rw-r--r--lib/luavgl/src/lvgl.lua495
-rw-r--r--lib/luavgl/src/widgets/slider.c88
-rw-r--r--lib/luavgl/src/widgets/switch.c57
-rw-r--r--lib/luavgl/src/widgets/widgets.c24
4 files changed, 447 insertions, 217 deletions
diff --git a/lib/luavgl/src/lvgl.lua b/lib/luavgl/src/lvgl.lua
index 67c2960e..32061c1f 100644
--- a/lib/luavgl/src/lvgl.lua
+++ b/lib/luavgl/src/lvgl.lua
@@ -9,278 +9,278 @@ lvgl = {}
--- @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,
+ 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,
}
--- object flag for obj:add_flag obj:clear_flag
--- @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,
+ 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,
}
--- @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,
+ 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 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,
+ 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,
}
--- @enum BuiltinFont
lvgl.BUILTIN_FONT = {
- MONTSERRAT_8 = 0,
- MONTSERRAT_10 = 0,
- MONTSERRAT_12 = 0,
- MONTSERRAT_14 = 0,
- MONTSERRAT_16 = 0,
- MONTSERRAT_18 = 0,
- MONTSERRAT_20 = 0,
- MONTSERRAT_22 = 0,
- MONTSERRAT_24 = 0,
- MONTSERRAT_26 = 0,
- MONTSERRAT_28 = 0,
- MONTSERRAT_30 = 0,
- MONTSERRAT_32 = 0,
- MONTSERRAT_34 = 0,
- MONTSERRAT_36 = 0,
- MONTSERRAT_38 = 0,
- MONTSERRAT_40 = 0,
- MONTSERRAT_42 = 0,
- MONTSERRAT_44 = 0,
- MONTSERRAT_46 = 0,
- MONTSERRAT_48 = 0,
- MONTSERRAT_12_SUBPX = 0,
- MONTSERRAT_28_COMPRESSED = 0,
- DEJAVU_16_PERSIAN_HEBREW = 0,
- SIMSUN_16_CJK = 0,
- UNSCII_8 = 0,
- UNSCII_16 = 0,
+ MONTSERRAT_8 = 0,
+ MONTSERRAT_10 = 0,
+ MONTSERRAT_12 = 0,
+ MONTSERRAT_14 = 0,
+ MONTSERRAT_16 = 0,
+ MONTSERRAT_18 = 0,
+ MONTSERRAT_20 = 0,
+ MONTSERRAT_22 = 0,
+ MONTSERRAT_24 = 0,
+ MONTSERRAT_26 = 0,
+ MONTSERRAT_28 = 0,
+ MONTSERRAT_30 = 0,
+ MONTSERRAT_32 = 0,
+ MONTSERRAT_34 = 0,
+ MONTSERRAT_36 = 0,
+ MONTSERRAT_38 = 0,
+ MONTSERRAT_40 = 0,
+ MONTSERRAT_42 = 0,
+ MONTSERRAT_44 = 0,
+ MONTSERRAT_46 = 0,
+ MONTSERRAT_48 = 0,
+ MONTSERRAT_12_SUBPX = 0,
+ MONTSERRAT_28_COMPRESSED = 0,
+ DEJAVU_16_PERSIAN_HEBREW = 0,
+ SIMSUN_16_CJK = 0,
+ UNSCII_8 = 0,
+ UNSCII_16 = 0,
}
--- @enum LABEL
lvgl.LABEL = {
- LONG_WRAP = 0,
- LONG_DOT = 0,
- LONG_SCROLL = 0,
- LONG_SCROLL_CIRCULAR = 0,
- LONG_CLIP = 0,
+ LONG_WRAP = 0,
+ LONG_DOT = 0,
+ LONG_SCROLL = 0,
+ LONG_SCROLL_CIRCULAR = 0,
+ LONG_CLIP = 0,
}
--- @enum SCR_LOAD_ANIM
lvgl.SCR_LOAD_ANIM = {
- NONE = 0,
- OVER_LEFT = 0,
- OVER_RIGHT = 0,
- OVER_TOP = 0,
- OVER_BOTTOM = 0,
- MOVE_LEFT = 0,
- MOVE_RIGHT = 0,
- MOVE_TOP = 0,
- MOVE_BOTTOM = 0,
- FADE_IN = 0,
- FADE_ON = 0,
- FADE_OUT = 0,
- OUT_LEFT = 0,
- OUT_RIGHT = 0,
- OUT_TOP = 0,
- OUT_BOTTOM = 0,
+ NONE = 0,
+ OVER_LEFT = 0,
+ OVER_RIGHT = 0,
+ OVER_TOP = 0,
+ OVER_BOTTOM = 0,
+ MOVE_LEFT = 0,
+ MOVE_RIGHT = 0,
+ MOVE_TOP = 0,
+ MOVE_BOTTOM = 0,
+ FADE_IN = 0,
+ FADE_ON = 0,
+ FADE_OUT = 0,
+ OUT_LEFT = 0,
+ OUT_RIGHT = 0,
+ OUT_TOP = 0,
+ OUT_BOTTOM = 0,
}
--- @enum ScrollbarMode
lvgl.SCROLLBAR_MODE = {
- OFF = 0,
- ON = 0,
- ACTIVE = 0,
- AUTO = 0,
+ OFF = 0,
+ ON = 0,
+ ACTIVE = 0,
+ AUTO = 0,
}
--- @enum Dir
lvgl.DIR = {
- NONE = 0,
- LEFT = 0,
- RIGHT = 0,
- TOP = 0,
- BOTTOM = 0,
- HOR = 0,
- VER = 0,
- ALL = 0,
+ NONE = 0,
+ LEFT = 0,
+ RIGHT = 0,
+ TOP = 0,
+ BOTTOM = 0,
+ HOR = 0,
+ VER = 0,
+ ALL = 0,
}
--- @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,
+ 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,
}
--- @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,
+ ROW = 0,
+ COLUMN = 0,
+ ROW_WRAP = 0,
+ ROW_REVERSE = 0,
+ ROW_WRAP_REVERSE = 0,
+ COLUMN_WRAP = 0,
+ COLUMN_REVERSE = 0,
+ COLUMN_WRAP_REVERSE = 0,
}
--- @enum FlexAlign
lvgl.FLEX_ALIGN = {
- START = 0,
- END = 0,
- CENTER = 0,
- SPACE_EVENLY = 0,
- SPACE_AROUND = 0,
- SPACE_BETWEEN = 0,
+ START = 0,
+ END = 0,
+ CENTER = 0,
+ SPACE_EVENLY = 0,
+ SPACE_AROUND = 0,
+ SPACE_BETWEEN = 0,
}
--- @enum GridAlign
lvgl.GRID_ALIGN = {
- START = 0,
- CENTER = 0,
- END = 0,
- STRETCH = 0,
- SPACE_EVENLY = 0,
- SPACE_AROUND = 0,
- SPACE_BETWEEN = 0,
+ START = 0,
+ CENTER = 0,
+ END = 0,
+ STRETCH = 0,
+ SPACE_EVENLY = 0,
+ SPACE_AROUND = 0,
+ SPACE_BETWEEN = 0,
}
--- @enum RollerMode
lvgl.ROLLER_MODE = {
- NORMAL = 0,
- INFINITE = 0,
+ NORMAL = 0,
+ INFINITE = 0,
}
--- @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,
+ 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
@@ -404,7 +404,6 @@ end
function lvgl.Keyboard(parent, property)
end
-
---
--- Create Led Widget on parent
--- @param parent? Object | nil
@@ -429,6 +428,20 @@ end
function lvgl.Roller(parent, property)
end
+--- Create Slider widget on parent
+--- @param parent? Object | nil
+--- @param property? BarStyle
+--- @return Slider
+function lvgl.Slider(parent, property)
+end
+
+--- Create Switch widget on parent
+--- @param parent? Object | nil
+--- @param property? StyleProp
+--- @return Switch
+function lvgl.Switch(parent, property)
+end
+
---
--- Create Timer
--- @param p TimerPara
@@ -555,13 +568,27 @@ end
function obj:List(property)
end
-
---
--- Create Roller Widget on parent
--- @param property? RollerStyle
--- @return Roller
function obj:Roller(parent, property)
end
+
+---
+--- Create Slider on object
+--- @param property? BarStyle
+--- @return Slider
+function obj:Slider(property)
+end
+
+---
+--- Create switch on object
+--- @param property? StyleProp
+--- @return Switch
+function obj:Switch(property)
+end
+
---
--- Set object property
--- @param p StyleProp
@@ -1050,6 +1077,40 @@ 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
+
+---
+--- 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
---
diff --git a/lib/luavgl/src/widgets/slider.c b/lib/luavgl/src/widgets/slider.c
new file mode 100644
index 00000000..c385f6bb
--- /dev/null
+++ b/lib/luavgl/src/widgets/slider.c
@@ -0,0 +1,88 @@
+#include "lua.h"
+#include "luavgl.h"
+#include "private.h"
+#include <src/widgets/lv_slider.h>
+
+static int luavgl_slider_create(lua_State *L) {
+ return luavgl_obj_create_helper(L, lv_slider_create);
+}
+
+static void _lv_slider_set_range(void *obj, lua_State *L) {
+ int min = 0, max = 100;
+
+ int type = lua_type(L, -1);
+ if (type == LUA_TTABLE) {
+ lua_getfield(L, -1, "min");
+ min = lua_tointeger(L, -1);
+ lua_pop(L, 1);
+ lua_getfield(L, -1, "max");
+ max = luavgl_tointeger(L, -1);
+ lua_pop(L, 1);
+ }
+
+ lv_slider_set_range(obj, min, max);
+}
+
+static void _lv_slider_set_value(void *obj, int value) {
+ lv_slider_set_value(obj, value, LV_ANIM_OFF);
+}
+
+static const luavgl_value_setter_t slider_property_table[] = {
+ {"range", SETTER_TYPE_STACK, {.setter_stack = _lv_slider_set_range}},
+ {"value", SETTER_TYPE_INT, {.setter = (setter_int_t)_lv_slider_set_value}},
+};
+
+LUALIB_API int luavgl_slider_set_property_kv(lua_State *L, void *data) {
+ lv_obj_t *obj = data;
+ int ret = luavgl_set_property(L, obj, slider_property_table);
+
+ if (ret == 0) {
+ return 0;
+ }
+ /* a base obj property? */
+ ret = luavgl_obj_set_property_kv(L, obj);
+ if (ret != 0) {
+ debug("unkown property for slider.\n");
+ }
+
+ return ret;
+}
+
+static int luavgl_slider_set(lua_State *L) {
+ lv_obj_t *obj = luavgl_to_obj(L, 1);
+
+ if (!lua_istable(L, -1)) {
+ luaL_error(L, "expect a table on 2nd para.");
+ return 0;
+ }
+
+ luavgl_iterate(L, -1, luavgl_slider_set_property_kv, obj);
+
+ return 0;
+}
+
+static int luavgl_slider_value(lua_State *L) {
+ lv_obj_t *obj = luavgl_to_obj(L, 1);
+ lua_pushinteger(L, lv_slider_get_value(obj));
+ return 1;
+}
+
+static int luavgl_slider_tostring(lua_State *L) {
+ lv_obj_t *obj = luavgl_to_obj(L, 1);
+ lua_pushfstring(L, "lv_slider:%p", obj);
+ return 1;
+}
+
+static const luaL_Reg luavgl_slider_methods[] = {
+ {"set", luavgl_slider_set},
+ {"value", luavgl_slider_value},
+ {NULL, NULL},
+};
+
+static void luavgl_slider_init(lua_State *L) {
+ luavgl_obj_newmetatable(L, &lv_slider_class, "lv_slider",
+ luavgl_slider_methods);
+ lua_pushcfunction(L, luavgl_slider_tostring);
+ lua_setfield(L, -2, "__tostring");
+ lua_pop(L, 1);
+}
diff --git a/lib/luavgl/src/widgets/switch.c b/lib/luavgl/src/widgets/switch.c
new file mode 100644
index 00000000..e66f620e
--- /dev/null
+++ b/lib/luavgl/src/widgets/switch.c
@@ -0,0 +1,57 @@
+#include "luavgl.h"
+#include "private.h"
+#include <src/widgets/lv_switch.h>
+
+static int luavgl_switch_create(lua_State *L) {
+ return luavgl_obj_create_helper(L, lv_switch_create);
+}
+
+LUALIB_API int luavgl_switch_set_property_kv(lua_State *L, void *data) {
+ lv_obj_t *obj = data;
+ /* switches only use base properties */
+ int ret = luavgl_obj_set_property_kv(L, obj);
+ if (ret != 0) {
+ debug("unkown property for switch.\n");
+ }
+
+ return ret;
+}
+
+static int luavgl_switch_set(lua_State *L) {
+ lv_obj_t *obj = luavgl_to_obj(L, 1);
+
+ if (!lua_istable(L, -1)) {
+ luaL_error(L, "expect a table on 2nd para.");
+ return 0;
+ }
+
+ luavgl_iterate(L, -1, luavgl_switch_set_property_kv, obj);
+
+ return 0;
+}
+
+static int luavgl_switch_enabled(lua_State *L) {
+ lv_obj_t *obj = luavgl_to_obj(L, 1);
+ lua_pushboolean(L, lv_obj_has_state(obj, LV_STATE_CHECKED));
+ return 1;
+}
+
+static int luavgl_switch_tostring(lua_State *L) {
+ lv_obj_t *obj = luavgl_to_obj(L, 1);
+ lua_pushfstring(L, "lv_switch:%p", obj);
+ return 1;
+}
+
+static const luaL_Reg luavgl_switch_methods[] = {
+ {"set", luavgl_switch_set},
+ {"enabled", luavgl_switch_enabled},
+ {NULL, NULL},
+};
+
+static void luavgl_switch_init(lua_State *L) {
+ luavgl_obj_newmetatable(L, &lv_switch_class, "lv_switch",
+ luavgl_switch_methods);
+ lua_pushcfunction(L, luavgl_switch_tostring);
+ lua_setfield(L, -2, "__tostring");
+ lua_pop(L, 1);
+}
diff --git a/lib/luavgl/src/widgets/widgets.c b/lib/luavgl/src/widgets/widgets.c
index e5f64f23..4a7a126e 100644
--- a/lib/luavgl/src/widgets/widgets.c
+++ b/lib/luavgl/src/widgets/widgets.c
@@ -45,6 +45,14 @@
#include "roller.c"
#endif
+#if LV_USE_SLIDER
+#include "slider.c"
+#endif
+
+#if LV_USE_SWITCH
+#include "switch.c"
+#endif
+
#if LV_USE_TEXTAREA
#include "textarea.c"
#endif
@@ -98,6 +106,14 @@ static const luaL_Reg widget_create_methods[] = {
{"Roller", luavgl_roller_create },
#endif
+#if LV_USE_SLIDER
+ {"Slider", luavgl_slider_create},
+#endif
+
+#if LV_USE_SWITCH
+ {"Switch", luavgl_switch_create},
+#endif
+
#if LV_USE_TEXTAREA
{"Textarea", luavgl_textarea_create},
#endif
@@ -154,4 +170,12 @@ static void luavgl_widgets_init(lua_State *L)
luavgl_bar_init(L);
#endif
+#if LV_USE_SLIDER
+ luavgl_slider_init(L);
+#endif
+
+#if LV_USE_SWITCH
+ luavgl_switch_init(L);
+#endif
+
}