feat(color): allow LVGL Lua objects to remain fixed in place within scrolling containers (#7175)

This commit is contained in:
philmoz
2026-03-18 12:21:52 +10:00
committed by GitHub
parent 0731d5f685
commit 5f8a38bb18
2 changed files with 38 additions and 1 deletions
+34 -1
View File
@@ -654,6 +654,8 @@ void LvglWidgetObjectBase::parseParam(lua_State *L, const char *key)
getSizeFunction = ::getRef(L, LUA_REGISTRYINDEX);
} else if (!strcmp(key, "pos")) {
getPosFunction = ::getRef(L, LUA_REGISTRYINDEX);
} else if (!strcmp(key, "floating")) {
floating = getLuaBool(L);
}
}
@@ -746,6 +748,7 @@ void LvglWidgetObjectBase::refresh()
setSize(w, h);
setColor(color.flags);
setOpacity(opacity.value);
setFloating(floating);
}
void LvglWidgetObjectBase::create(lua_State *L, int index)
@@ -777,6 +780,17 @@ void LvglSimpleWidgetObject::setSize(coord_t w, coord_t h)
if (lvobj) lv_obj_set_size(lvobj, w, h);
}
void LvglSimpleWidgetObject::setFloating(bool isFloating)
{
floating = isFloating;
if (lvobj) {
if (floating)
lv_obj_add_flag(lvobj, LV_OBJ_FLAG_FLOATING);
else
lv_obj_clear_flag(lvobj, LV_OBJ_FLAG_FLOATING);
}
}
void LvglSimpleWidgetObject::show()
{
if (!isVisible()) lv_obj_clear_flag(lvobj, LV_OBJ_FLAG_HIDDEN);
@@ -867,6 +881,7 @@ void LvglWidgetLabel::build(lua_State *L)
setOpacity(opacity.value);
setFont(font.flags);
setAlign(align.flags);
setFloating(floating);
}
//-----------------------------------------------------------------------------
@@ -922,6 +937,7 @@ void LvglWidgetLineBase::refresh()
{
setColor(color.flags);
setOpacity(opacity.value);
setFloating(floating);
setLine();
lv_obj_set_style_line_rounded(lvobj, rounded, LV_PART_MAIN);
if (dashGap > 0 && dashWidth > 0) {
@@ -1112,6 +1128,7 @@ void LvglWidgetLine::build(lua_State *L)
setLine();
setColor(color.flags);
setOpacity(opacity.value);
setFloating(floating);
}
}
@@ -1399,8 +1416,9 @@ void LvglWidgetTriangle::build(lua_State *L)
setPos(x, y);
LvglSimpleWidgetObject::setSize(w,h);
// Set color
// Set properties
setColor(color.flags);
setFloating(floating);
}
}
@@ -1468,6 +1486,17 @@ void LvglWidgetObject::setSize(coord_t w, coord_t h)
if (window) window->setSize(w, h);
}
void LvglWidgetObject::setFloating(bool isFloating)
{
floating = isFloating;
if (window) {
if (floating)
lv_obj_add_flag(window->getLvObj(), LV_OBJ_FLAG_FLOATING);
else
lv_obj_clear_flag(window->getLvObj(), LV_OBJ_FLAG_FLOATING);
}
}
bool LvglWidgetObject::setFlex()
{
if (customPad) {
@@ -1602,6 +1631,7 @@ void LvglWidgetBox::build(lua_State *L)
setPosAndSize();
setColor(color.flags);
setOpacity(opacity.value);
setFloating(floating);
}
//-----------------------------------------------------------------------------
@@ -1944,6 +1974,7 @@ void LvglWidgetArc::build(lua_State *L)
setBgColor(bgColor.flags);
setOpacity(opacity.value);
setBgOpacity(bgOpacity.value);
setFloating(floating);
}
//-----------------------------------------------------------------------------
@@ -1991,6 +2022,7 @@ void LvglWidgetImage::build(lua_State *L)
{
window = new StaticImage(lvglManager->getCurrentParent(), {x, y, w, h},
filename.chars(), fillFrame);
setFloating(floating);
}
//-----------------------------------------------------------------------------
@@ -2009,6 +2041,7 @@ void LvglWidgetQRCode::parseParam(lua_State *L, const char *key)
void LvglWidgetQRCode::build(lua_State *L)
{
window = new QRCode(lvglManager->getCurrentParent(), x, y, w, data, colorToRGB(color.flags), colorToRGB(bgColor));
setFloating(floating);
}
//-----------------------------------------------------------------------------