feat(color): allow LVGL Lua objects to remain fixed in place within scrolling containers (#7175)
This commit is contained in:
@@ -654,6 +654,8 @@ void LvglWidgetObjectBase::parseParam(lua_State *L, const char *key)
|
|||||||
getSizeFunction = ::getRef(L, LUA_REGISTRYINDEX);
|
getSizeFunction = ::getRef(L, LUA_REGISTRYINDEX);
|
||||||
} else if (!strcmp(key, "pos")) {
|
} else if (!strcmp(key, "pos")) {
|
||||||
getPosFunction = ::getRef(L, LUA_REGISTRYINDEX);
|
getPosFunction = ::getRef(L, LUA_REGISTRYINDEX);
|
||||||
|
} else if (!strcmp(key, "floating")) {
|
||||||
|
floating = getLuaBool(L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -746,6 +748,7 @@ void LvglWidgetObjectBase::refresh()
|
|||||||
setSize(w, h);
|
setSize(w, h);
|
||||||
setColor(color.flags);
|
setColor(color.flags);
|
||||||
setOpacity(opacity.value);
|
setOpacity(opacity.value);
|
||||||
|
setFloating(floating);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LvglWidgetObjectBase::create(lua_State *L, int index)
|
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);
|
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()
|
void LvglSimpleWidgetObject::show()
|
||||||
{
|
{
|
||||||
if (!isVisible()) lv_obj_clear_flag(lvobj, LV_OBJ_FLAG_HIDDEN);
|
if (!isVisible()) lv_obj_clear_flag(lvobj, LV_OBJ_FLAG_HIDDEN);
|
||||||
@@ -867,6 +881,7 @@ void LvglWidgetLabel::build(lua_State *L)
|
|||||||
setOpacity(opacity.value);
|
setOpacity(opacity.value);
|
||||||
setFont(font.flags);
|
setFont(font.flags);
|
||||||
setAlign(align.flags);
|
setAlign(align.flags);
|
||||||
|
setFloating(floating);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -922,6 +937,7 @@ void LvglWidgetLineBase::refresh()
|
|||||||
{
|
{
|
||||||
setColor(color.flags);
|
setColor(color.flags);
|
||||||
setOpacity(opacity.value);
|
setOpacity(opacity.value);
|
||||||
|
setFloating(floating);
|
||||||
setLine();
|
setLine();
|
||||||
lv_obj_set_style_line_rounded(lvobj, rounded, LV_PART_MAIN);
|
lv_obj_set_style_line_rounded(lvobj, rounded, LV_PART_MAIN);
|
||||||
if (dashGap > 0 && dashWidth > 0) {
|
if (dashGap > 0 && dashWidth > 0) {
|
||||||
@@ -1112,6 +1128,7 @@ void LvglWidgetLine::build(lua_State *L)
|
|||||||
setLine();
|
setLine();
|
||||||
setColor(color.flags);
|
setColor(color.flags);
|
||||||
setOpacity(opacity.value);
|
setOpacity(opacity.value);
|
||||||
|
setFloating(floating);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1399,8 +1416,9 @@ void LvglWidgetTriangle::build(lua_State *L)
|
|||||||
setPos(x, y);
|
setPos(x, y);
|
||||||
LvglSimpleWidgetObject::setSize(w,h);
|
LvglSimpleWidgetObject::setSize(w,h);
|
||||||
|
|
||||||
// Set color
|
// Set properties
|
||||||
setColor(color.flags);
|
setColor(color.flags);
|
||||||
|
setFloating(floating);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1468,6 +1486,17 @@ void LvglWidgetObject::setSize(coord_t w, coord_t h)
|
|||||||
if (window) window->setSize(w, 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()
|
bool LvglWidgetObject::setFlex()
|
||||||
{
|
{
|
||||||
if (customPad) {
|
if (customPad) {
|
||||||
@@ -1602,6 +1631,7 @@ void LvglWidgetBox::build(lua_State *L)
|
|||||||
setPosAndSize();
|
setPosAndSize();
|
||||||
setColor(color.flags);
|
setColor(color.flags);
|
||||||
setOpacity(opacity.value);
|
setOpacity(opacity.value);
|
||||||
|
setFloating(floating);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -1944,6 +1974,7 @@ void LvglWidgetArc::build(lua_State *L)
|
|||||||
setBgColor(bgColor.flags);
|
setBgColor(bgColor.flags);
|
||||||
setOpacity(opacity.value);
|
setOpacity(opacity.value);
|
||||||
setBgOpacity(bgOpacity.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},
|
window = new StaticImage(lvglManager->getCurrentParent(), {x, y, w, h},
|
||||||
filename.chars(), fillFrame);
|
filename.chars(), fillFrame);
|
||||||
|
setFloating(floating);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@@ -2009,6 +2041,7 @@ void LvglWidgetQRCode::parseParam(lua_State *L, const char *key)
|
|||||||
void LvglWidgetQRCode::build(lua_State *L)
|
void LvglWidgetQRCode::build(lua_State *L)
|
||||||
{
|
{
|
||||||
window = new QRCode(lvglManager->getCurrentParent(), x, y, w, data, colorToRGB(color.flags), colorToRGB(bgColor));
|
window = new QRCode(lvglManager->getCurrentParent(), x, y, w, data, colorToRGB(color.flags), colorToRGB(bgColor));
|
||||||
|
setFloating(floating);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ class LvglWidgetObjectBase
|
|||||||
virtual void setOpacity(uint8_t newOpa) {}
|
virtual void setOpacity(uint8_t newOpa) {}
|
||||||
virtual void setPos(coord_t x, coord_t y) {}
|
virtual void setPos(coord_t x, coord_t y) {}
|
||||||
virtual void setSize(coord_t w, coord_t h) {}
|
virtual void setSize(coord_t w, coord_t h) {}
|
||||||
|
virtual void setFloating(bool isFloating) {}
|
||||||
|
|
||||||
void create(lua_State *L, int index);
|
void create(lua_State *L, int index);
|
||||||
void update(lua_State *L);
|
void update(lua_State *L);
|
||||||
@@ -286,6 +287,7 @@ class LvglWidgetObjectBase
|
|||||||
int getPosFunction = LUA_REFNIL;
|
int getPosFunction = LUA_REFNIL;
|
||||||
LvglParamFuncOrValue color = { .function = LUA_REFNIL, .flags = COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX)};
|
LvglParamFuncOrValue color = { .function = LUA_REFNIL, .flags = COLOR2FLAGS(COLOR_THEME_SECONDARY1_INDEX)};
|
||||||
LvglParamFuncOrValue opacity = { .function = LUA_REFNIL, .value = LV_OPA_COVER};
|
LvglParamFuncOrValue opacity = { .function = LUA_REFNIL, .value = LV_OPA_COVER};
|
||||||
|
bool floating = false;
|
||||||
|
|
||||||
virtual void build(lua_State *L);
|
virtual void build(lua_State *L);
|
||||||
virtual void refresh();
|
virtual void refresh();
|
||||||
@@ -322,6 +324,7 @@ class LvglSimpleWidgetObject : public LvglWidgetObjectBase
|
|||||||
|
|
||||||
void setPos(coord_t x, coord_t y) override;
|
void setPos(coord_t x, coord_t y) override;
|
||||||
void setSize(coord_t w, coord_t h) override;
|
void setSize(coord_t w, coord_t h) override;
|
||||||
|
void setFloating(bool isFloating) override;
|
||||||
|
|
||||||
Window *getWindow() const override { return nullptr; }
|
Window *getWindow() const override { return nullptr; }
|
||||||
|
|
||||||
@@ -482,6 +485,7 @@ class LvglWidgetObject : public LvglWidgetObjectBase
|
|||||||
|
|
||||||
void setPos(coord_t x, coord_t y) override;
|
void setPos(coord_t x, coord_t y) override;
|
||||||
void setSize(coord_t w, coord_t h) override;
|
void setSize(coord_t w, coord_t h) override;
|
||||||
|
void setFloating(bool isFloating) override;
|
||||||
|
|
||||||
bool callRefs(lua_State *L) override;
|
bool callRefs(lua_State *L) override;
|
||||||
void clearRefs(lua_State *L) override;
|
void clearRefs(lua_State *L) override;
|
||||||
|
|||||||
Reference in New Issue
Block a user