diff --git a/radio/src/lua/api_colorlcd_lvgl.cpp b/radio/src/lua/api_colorlcd_lvgl.cpp index ae973ac7689..da4672f214b 100644 --- a/radio/src/lua/api_colorlcd_lvgl.cpp +++ b/radio/src/lua/api_colorlcd_lvgl.cpp @@ -32,8 +32,7 @@ static int luaLvglObj(lua_State *L, std::function create, b { if (luaScriptManager && (!fullscreenOnly || luaScriptManager->isFullscreen())) { auto obj = create(); - obj->getParams(L, 1); - obj->build(L); + obj->create(L, 1); obj->push(L); } else { lua_pushnil(L); @@ -56,8 +55,7 @@ static int luaLvglObjEx(lua_State *L, std::function cre } auto obj = create(); - obj->getParams(L, -1); - obj->build(L); + obj->create(L, -1); obj->push(L); if (p) @@ -72,8 +70,7 @@ static int luaLvglObjEx(lua_State *L, std::function cre static int luaLvglPopup(lua_State *L, std::function create) { auto obj = create(); - obj->getParams(L, 1); - obj->build(L); + obj->create(L, 1); return 0; } @@ -234,8 +231,7 @@ static void buildLvgl(lua_State *L, int srcIndex, int refIndex) obj = new LvglWidgetSetting(); } if (obj) { - obj->getParams(L, -1); - obj->build(L); + obj->create(L, -1); auto ref = obj->getRef(L); if (p.name) { lua_pushstring(L, p.name); diff --git a/radio/src/lua/lua_lvgl_widget.cpp b/radio/src/lua/lua_lvgl_widget.cpp index e371af1c2fb..2a7d0f39861 100644 --- a/radio/src/lua/lua_lvgl_widget.cpp +++ b/radio/src/lua/lua_lvgl_widget.cpp @@ -396,6 +396,13 @@ void LvglWidgetObjectBase::refresh() setOpacity(opacity); } +void LvglWidgetObjectBase::create(lua_State *L, int index) +{ + getParams(L, index); + build(L); + callRefs(L); +} + void LvglWidgetObjectBase::update(lua_State *L) { getParams(L, 2); @@ -547,7 +554,6 @@ void LvglWidgetLabel::build(lua_State *L) setOpacity(opacity); setFont(font); setAlign(align); - callRefs(L); } //----------------------------------------------------------------------------- @@ -600,7 +606,7 @@ void LvglWidgetLineBase::setSize(coord_t w, coord_t h) setLine(); } -void LvglWidgetLineBase::build(lua_State* L) +void LvglWidgetLineBase::build(lua_State *L) { lvobj = lv_line_create(lvglManager->getCurrentParent()->getLvObj()); refresh(); @@ -736,7 +742,6 @@ void LvglWidgetLine::build(lua_State *L) { lvobj = lv_line_create(lvglManager->getCurrentParent()->getLvObj()); refresh(); - callRefs(L); } void LvglWidgetLine::refresh() @@ -748,6 +753,11 @@ void LvglWidgetLine::refresh() //----------------------------------------------------------------------------- +LvglWidgetTriangle::LvglWidgetTriangle() : LvglSimpleWidgetObject() +{ + parent = lvglManager->getCurrentParent()->getLvObj(); +} + LvglWidgetTriangle::~LvglWidgetTriangle() { if (mask) @@ -760,25 +770,56 @@ void LvglWidgetTriangle::getPt(lua_State* L, int n) lua_rawgeti(L, -1, n + 1); luaL_checktype(L, -1, LUA_TTABLE); lua_rawgeti(L, -1, 1); - px[n] = luaL_checkunsigned(L, -1); + pts[n].x = luaL_checkunsigned(L, -1); lua_pop(L, 1); lua_rawgeti(L, -1, 2); - py[n] = luaL_checkunsigned(L, -1); + pts[n].y = luaL_checkunsigned(L, -1); lua_pop(L, 2); } void LvglWidgetTriangle::parseParam(lua_State *L, const char *key) { if (!strcmp(key, "pts")) { - luaL_checktype(L, -1, LUA_TTABLE); - getPt(L, 0); - getPt(L, 1); - getPt(L, 2); + if (lua_isfunction(L, -1)) { + getPointsFunction = luaL_ref(L, LUA_REGISTRYINDEX); + } else { + luaL_checktype(L, -1, LUA_TTABLE); + getPt(L, 0); + getPt(L, 1); + getPt(L, 2); + } } else { LvglSimpleWidgetObject::parseParam(L, key); } } +bool LvglWidgetTriangle::callRefs(lua_State *L) +{ + int t = lua_gettop(L); + if (getPointsFunction != LUA_REFNIL) { + if (pcallFunc(L, getPointsFunction, 1)) { + luaL_checktype(L, -1, LUA_TTABLE); + getPt(L, 0); + getPt(L, 1); + getPt(L, 2); + lua_settop(L, t); + if (memcmp(&last, &pts, sizeof(pts)) != 0) { + memcpy(&last, &pts, sizeof(pts)); + refresh(); + } + } else { + return false; + } + } + return LvglSimpleWidgetObject::callRefs(L); +} + +void LvglWidgetTriangle::clearRefs(lua_State *L) +{ + clearRef(L, getPointsFunction); + LvglSimpleWidgetObject::clearRefs(L); +} + void LvglWidgetTriangle::setColor(LcdFlags newColor) { if (lvobj && colorChanged(newColor)) { @@ -810,9 +851,12 @@ void LvglWidgetTriangle::fillTriangle() { if (!mask) return; - coord_t x1 = px[0], y1 = py[0], x2 = px[1], y2 = py[1], x3 = px[2], y3 = py[2]; + // Convert to relative coords + coord_t x1 = pts[0].x - x, y1 = pts[0].y - y; + coord_t x2 = pts[1].x - x, y2 = pts[1].y - y; + coord_t x3 = pts[2].x - x, y3 = pts[2].y - y; - coord_t t1x, t2x, y, minx, maxx, t1xp, t2xp; + coord_t t1x, t2x, ty, minx, maxx, t1xp, t2xp; bool changed1 = false; bool changed2 = false; coord_t signx1, signx2, dx1, dy1, dx2, dy2; @@ -823,7 +867,7 @@ void LvglWidgetTriangle::fillTriangle() if (y1 > y3) { SWAP(y1, y3); SWAP(x1, x3); } if (y2 > y3) { SWAP(y2, y3); SWAP(x2, x3); } - t1x = t2x = x1; y = y1; // Starting points + t1x = t2x = x1; ty = y1; // Starting points dx1 = (coord_t)(x2 - x1); if(dx1 < 0) { dx1 = -dx1; signx1 = -1; } else signx1 = 1; dy1 = (coord_t)(y2 - y1); @@ -849,7 +893,7 @@ void LvglWidgetTriangle::fillTriangle() t1xp = 0; t2xp = 0; if (t1x < t2x) { minx = t1x; maxx = t2x; } else { minx = t2x; maxx = t1x; } - // process first line until y value is about to change + // process first line until ty value is about to change while (i < dx1) { i++; e1 += dy1; @@ -863,7 +907,7 @@ void LvglWidgetTriangle::fillTriangle() } // Move line next1: - // process second line until y value is about to change + // process second line until ty value is about to change while (1) { e2 += dy2; while (e2 >= dx2) { @@ -879,14 +923,14 @@ void LvglWidgetTriangle::fillTriangle() if (minx > t2x) minx = t2x; if (maxx < t1x) maxx = t1x; if (maxx < t2x) maxx = t2x; - fillLine(minx, maxx, y); // Draw line from min to max points found on the y + fillLine(minx, maxx, ty); // Draw line from min to max points found on the y // Now increase y if (!changed1) t1x += signx1; t1x += t1xp; if (!changed2) t2x += signx2; t2x += t2xp; - y += 1; - if (y == y2) break; + ty += 1; + if (ty == y2) break; } next: // Second half @@ -905,7 +949,7 @@ void LvglWidgetTriangle::fillTriangle() t1xp = 0; t2xp = 0; if (t1x < t2x) { minx = t1x; maxx = t2x; } else { minx = t2x; maxx = t1x; } - // process first line until y value is about to change + // process first line until ty value is about to change while (i < dx1) { e1 += dy1; while (e1 >= dx1) { @@ -918,7 +962,7 @@ void LvglWidgetTriangle::fillTriangle() if (i < dx1) i++; } next3: - // process second line until y value is about to change + // process second line until ty value is about to change while (t2x != x3) { e2 += dy2; while (e2 >= dx2) { @@ -934,29 +978,25 @@ void LvglWidgetTriangle::fillTriangle() if (minx > t2x) minx = t2x; if (maxx < t1x) maxx = t1x; if (maxx < t2x) maxx = t2x; - fillLine(minx, maxx, y); // Draw line from min to max points found on the y + fillLine(minx, maxx, ty); // Draw line from min to max points found on the y // Now increase y if (!changed1) t1x += signx1; t1x += t1xp; if (!changed2) t2x += signx2; t2x += t2xp; - y += 1; - if (y > y3) return; + ty += 1; + if (ty > y3) return; } } void LvglWidgetTriangle::build(lua_State *L) { // Bounds - x = min(min(px[0], px[1]), px[2]); - y = min(min(py[0], py[1]), py[2]); - w = max(max(px[0], px[1]), px[2]) - x + 1; - h = max(max(py[0], py[1]), py[2]) - y + 1; - - // Convert to relative coords - px[0] -= x; px[1] -= x; px[2] -= x; - py[0] -= y; py[1] -= y; py[2] -= y; - + x = min(min(pts[0].x, pts[1].x), pts[2].x); + y = min(min(pts[0].y, pts[1].y), pts[2].y); + w = max(max(pts[0].x, pts[1].x), pts[2].x) - x + 1; + h = max(max(pts[0].y, pts[1].y), pts[2].y) - y + 1; + // Allocate mask size_t size = w * h; mask = (MaskBitmap*)malloc(size + 4); @@ -970,22 +1010,31 @@ void LvglWidgetTriangle::build(lua_State *L) // Create canvas from mask buffer if (lvobj == nullptr) - lvobj = lv_canvas_create(lvglManager->getCurrentParent()->getLvObj()); + lvobj = lv_canvas_create(parent); lv_canvas_set_buffer(lvobj, (void*)mask->data, mask->width, mask->height, LV_IMG_CF_ALPHA_8BIT); - // Set position, size and color + // Set position and, size setPos(x, y); LvglSimpleWidgetObject::setSize(w,h); + + // Set color setColor(color); } - if (L) callRefs(L); } void LvglWidgetTriangle::refresh() { - if (mask) free(mask); - mask = nullptr; + if (mask) { + free(mask); + mask = nullptr; + } + if (lvobj) { + // May render incorrectly when trying to reuse previous canvas + lv_obj_del(lvobj); + lvobj = nullptr; + } + currentColor = -1; build(nullptr); } @@ -1046,7 +1095,7 @@ void LvglWidgetObject::clearRefs(lua_State *L) //----------------------------------------------------------------------------- -void LvglWidgetBox::build(lua_State* L) +void LvglWidgetBox::build(lua_State *L) { window = new Window(lvglManager->getCurrentParent(), {x, y, w, h}, lv_obj_create); @@ -1071,7 +1120,7 @@ void LvglWidgetSetting::parseParam(lua_State *L, const char *key) } } -void LvglWidgetSetting::build(lua_State* L) +void LvglWidgetSetting::build(lua_State *L) { window = new Window(lvglManager->getCurrentParent(), {x, y, w, h}, lv_obj_create); @@ -1201,7 +1250,6 @@ void LvglWidgetRectangle::build(lua_State *L) (rounded >= thickness) ? rounded : thickness, LV_PART_MAIN); } - callRefs(L); } //----------------------------------------------------------------------------- @@ -1214,7 +1262,6 @@ void LvglWidgetCircle::build(lua_State *L) setRadius(radius); LvglWidgetRoundObject::build(L); lv_obj_set_style_radius(window->getLvObj(), LV_RADIUS_CIRCLE, LV_PART_MAIN); - callRefs(L); } //----------------------------------------------------------------------------- @@ -1303,7 +1350,6 @@ void LvglWidgetArc::build(lua_State *L) lv_obj_set_style_arc_opa(window->getLvObj(), LV_OPA_TRANSP, LV_PART_MAIN); lv_obj_set_style_arc_width(window->getLvObj(), thickness, LV_PART_INDICATOR); setOpacity(opacity); - callRefs(L); } //----------------------------------------------------------------------------- diff --git a/radio/src/lua/lua_lvgl_widget.h b/radio/src/lua/lua_lvgl_widget.h index dfd451cc2f3..30341c6e35c 100644 --- a/radio/src/lua/lua_lvgl_widget.h +++ b/radio/src/lua/lua_lvgl_widget.h @@ -38,9 +38,6 @@ class LvglWidgetObjectBase void push(lua_State *L); void saveLvglObjectRef(int ref); - void getParams(lua_State *L, int index); - - virtual void build(lua_State *L); virtual bool callRefs(lua_State *L); virtual void clearRefs(lua_State *L); void clearChildRefs(lua_State *L); @@ -55,6 +52,7 @@ class LvglWidgetObjectBase virtual void setPos(coord_t x, coord_t y) {} virtual void setSize(coord_t w, coord_t h) {} + void create(lua_State *L, int index); void update(lua_State *L); virtual Window *getWindow() const = 0; @@ -79,10 +77,13 @@ class LvglWidgetObjectBase int getSizeFunction = LUA_REFNIL; int getPosFunction = LUA_REFNIL; + virtual void build(lua_State *L); virtual void refresh(); virtual void parseParam(lua_State *L, const char *key); + void getParams(lua_State *L, int index); + bool colorChanged(LcdFlags newColor); void clearRef(lua_State *L, int& ref); @@ -130,7 +131,6 @@ class LvglWidgetLabel : public LvglSimpleWidgetObject void setFont(LcdFlags font); void setAlign(LcdFlags align); - void build(lua_State *L) override; bool callRefs(lua_State *L) override; void clearRefs(lua_State *L) override; @@ -144,6 +144,7 @@ class LvglWidgetLabel : public LvglSimpleWidgetObject int getFontFunction = LUA_REFNIL; int getAlignFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; void refresh() override { @@ -166,8 +167,6 @@ class LvglWidgetLineBase : public LvglSimpleWidgetObject void setPos(coord_t x, coord_t y) override; void setSize(coord_t w, coord_t h) override; - void build(lua_State *L) override; - protected: bool rounded = false; int dashGap = 0; @@ -176,6 +175,7 @@ class LvglWidgetLineBase : public LvglSimpleWidgetObject virtual void setLine() = 0; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; void refresh() override; }; @@ -214,8 +214,6 @@ class LvglWidgetLine : public LvglSimpleWidgetObject void setPos(coord_t x, coord_t y) override; void setSize(coord_t w, coord_t h) override; - void build(lua_State *L) override; - protected: coord_t thickness = 1; bool rounded = false; @@ -225,6 +223,7 @@ class LvglWidgetLine : public LvglSimpleWidgetObject void setLine(); void getPt(lua_State* L, int n); + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; void refresh() override; }; @@ -234,22 +233,27 @@ class LvglWidgetLine : public LvglSimpleWidgetObject class LvglWidgetTriangle : public LvglSimpleWidgetObject { public: - LvglWidgetTriangle() : LvglSimpleWidgetObject() {} + LvglWidgetTriangle(); ~LvglWidgetTriangle(); void setColor(LcdFlags newColor) override; void setSize(coord_t w, coord_t h) override; - void build(lua_State *L) override; + bool callRefs(lua_State *L) override; + void clearRefs(lua_State *L) override; protected: - coord_t px[3] = {0}, py[3] = {0}; + lv_point_t pts[3] = {0}; + lv_point_t last[3] = {-1}; MaskBitmap* mask = nullptr; + lv_obj_t* parent = nullptr; + int getPointsFunction = LUA_REFNIL; void fillTriangle(); void fillLine(coord_t x1, coord_t x2, coord_t y); void getPt(lua_State* L, int n); + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; void refresh() override; }; @@ -292,9 +296,8 @@ class LvglWidgetBox : public LvglWidgetObject public: LvglWidgetBox() : LvglWidgetObject() {} - void build(lua_State *L) override; - protected: + void build(lua_State *L) override; }; //----------------------------------------------------------------------------- @@ -304,11 +307,10 @@ class LvglWidgetSetting : public LvglWidgetObject public: LvglWidgetSetting() : LvglWidgetObject() {} - void build(lua_State *L) override; - protected: const char *txt = ""; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -322,12 +324,11 @@ class LvglWidgetBorderedObject : public LvglWidgetObject void setColor(LcdFlags newColor) override; void setOpacity(uint8_t newOpa) override; - void build(lua_State *L) override; - protected: coord_t thickness = 1; bool filled = false; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -364,11 +365,10 @@ class LvglWidgetRectangle : public LvglWidgetBorderedObject public: LvglWidgetRectangle() : LvglWidgetBorderedObject() {} - void build(lua_State *L) override; - protected: coord_t rounded = 0; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -379,9 +379,8 @@ class LvglWidgetCircle : public LvglWidgetRoundObject public: LvglWidgetCircle() : LvglWidgetRoundObject() {} - void build(lua_State *L) override; - protected: + void build(lua_State *L) override; }; //----------------------------------------------------------------------------- @@ -396,7 +395,6 @@ class LvglWidgetArc : public LvglWidgetRoundObject void setStartAngle(coord_t angle); void setEndAngle(coord_t angle); - void build(lua_State *L) override; bool callRefs(lua_State *L) override; void clearRefs(lua_State *L) override; @@ -406,6 +404,7 @@ class LvglWidgetArc : public LvglWidgetRoundObject int getStartAngleFunction = LUA_REFNIL; int getEndAngleFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; void refresh() override { @@ -422,12 +421,11 @@ class LvglWidgetImage : public LvglWidgetObject public: LvglWidgetImage() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {} - void build(lua_State *L) override; - protected: std::string filename; bool fillFrame = false; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -438,12 +436,11 @@ class LvglWidgetQRCode : public LvglWidgetObject public: LvglWidgetQRCode() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {} - void build(lua_State *L) override; - protected: std::string data; LcdFlags bgColor = COLOR2FLAGS(COLOR_THEME_SECONDARY3_INDEX); + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -487,13 +484,13 @@ class LvglWidgetTextButton : public LvglWidgetTextButtonBase void setFont(LcdFlags font); void setChecked(bool check); - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: bool checked = false; int longPressFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; void refresh() override { @@ -511,12 +508,12 @@ class LvglWidgetMomentaryButton : public LvglWidgetTextButtonBase void setFont(LcdFlags font); - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: int releaseFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -527,13 +524,13 @@ class LvglWidgetToggleSwitch : public LvglWidgetObject public: LvglWidgetToggleSwitch() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {} - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: int getStateFunction = LUA_REFNIL; int setStateFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -544,7 +541,6 @@ class LvglWidgetTextEdit : public LvglWidgetObject public: LvglWidgetTextEdit() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {} - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: @@ -554,6 +550,7 @@ class LvglWidgetTextEdit : public LvglWidgetObject int setFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -564,7 +561,6 @@ class LvglWidgetNumberEdit : public LvglWidgetObject public: LvglWidgetNumberEdit() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {} - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: @@ -574,6 +570,7 @@ class LvglWidgetNumberEdit : public LvglWidgetObject int setFunction = LUA_REFNIL; int dispFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -607,6 +604,7 @@ class LvglWidgetSlider : public LvglWidgetSliderBase public: LvglWidgetSlider() : LvglWidgetSliderBase() {} + protected: void build(lua_State *L) override; }; @@ -617,6 +615,7 @@ class LvglWidgetVerticalSlider : public LvglWidgetSliderBase public: LvglWidgetVerticalSlider() : LvglWidgetSliderBase() {} + protected: void build(lua_State *L) override; }; @@ -627,7 +626,6 @@ class LvglWidgetPage : public LvglWidgetObject public: LvglWidgetPage() : LvglWidgetObject() {} - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: @@ -637,6 +635,7 @@ class LvglWidgetPage : public LvglWidgetObject int backActionFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -647,7 +646,6 @@ class LvglWidgetDialog : public LvglWidgetObject public: LvglWidgetDialog() : LvglWidgetObject() {} - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: @@ -655,6 +653,7 @@ class LvglWidgetDialog : public LvglWidgetObject int closeFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -665,7 +664,6 @@ class LvglWidgetConfirmDialog : public LvglWidgetObject public: LvglWidgetConfirmDialog() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {} - void build(lua_State *L) override; void clearRefs(lua_State *L) override; protected: @@ -675,6 +673,7 @@ class LvglWidgetConfirmDialog : public LvglWidgetObject int confirmFunction = LUA_REFNIL; int cancelFunction = LUA_REFNIL; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -685,13 +684,12 @@ class LvglWidgetMessageDialog : public LvglWidgetObject public: LvglWidgetMessageDialog() : LvglWidgetObject(LVGL_SIMPLEMETATABLE) {} - void build(lua_State *L) override; - protected: const char *title = nullptr; const char *message = nullptr; const char *details = nullptr; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -718,12 +716,11 @@ class LvglWidgetChoice : public LvglWidgetPicker public: LvglWidgetChoice() : LvglWidgetPicker() {} - void build(lua_State *L) override; - protected: std::string title; std::vector values; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -734,6 +731,7 @@ class LvglWidgetFontPicker : public LvglWidgetPicker public: LvglWidgetFontPicker() : LvglWidgetPicker() {} + protected: void build(lua_State *L) override; }; @@ -744,6 +742,7 @@ class LvglWidgetAlignPicker : public LvglWidgetPicker public: LvglWidgetAlignPicker() : LvglWidgetPicker() {} + protected: void build(lua_State *L) override; }; @@ -754,6 +753,7 @@ class LvglWidgetColorPicker : public LvglWidgetPicker public: LvglWidgetColorPicker() : LvglWidgetPicker() {} + protected: void build(lua_State *L) override; }; @@ -764,6 +764,7 @@ class LvglWidgetTimerPicker : public LvglWidgetPicker public: LvglWidgetTimerPicker() : LvglWidgetPicker() {} + protected: void build(lua_State *L) override; }; @@ -774,11 +775,10 @@ class LvglWidgetSwitchPicker : public LvglWidgetPicker public: LvglWidgetSwitchPicker() : LvglWidgetPicker() {} - void build(lua_State *L) override; - protected: uint32_t filter = 0xFFFFFFFF; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; }; @@ -789,11 +789,10 @@ class LvglWidgetSourcePicker : public LvglWidgetPicker public: LvglWidgetSourcePicker() : LvglWidgetPicker() {} - void build(lua_State *L) override; - protected: uint32_t filter = 0xFFFFFFFF; + void build(lua_State *L) override; void parseParam(lua_State *L, const char *key) override; };