From 53628a386f91fda7f7f8abc06559918e879342bf Mon Sep 17 00:00:00 2001 From: philmoz Date: Mon, 5 Aug 2024 15:23:13 +1000 Subject: [PATCH] fix(color): main view layout, lua widget display issues (#5382) --- .../gui/colorlcd/mainview/layout_factory_impl.h | 10 +++++----- radio/src/gui/colorlcd/mainview/view_main.cpp | 5 ++++- radio/src/gui/colorlcd/mainview/view_main.h | 2 +- radio/src/gui/colorlcd/mainview/widgets_setup.cpp | 2 ++ radio/src/lua/lua_widget.cpp | 15 ++++++++++----- 5 files changed, 22 insertions(+), 12 deletions(-) diff --git a/radio/src/gui/colorlcd/mainview/layout_factory_impl.h b/radio/src/gui/colorlcd/mainview/layout_factory_impl.h index 25a24f45a..4a0531629 100644 --- a/radio/src/gui/colorlcd/mainview/layout_factory_impl.h +++ b/radio/src/gui/colorlcd/mainview/layout_factory_impl.h @@ -79,23 +79,23 @@ class Layout: public LayoutBase } virtual bool hasTopbar() const { - return ((uint8_t*)(&getOptionValue(LAYOUT_OPTION_TOPBAR)->boolValue))[0]; + return getOptionValue(LAYOUT_OPTION_TOPBAR)->boolValue; } virtual bool hasFlightMode() const { - return ((uint8_t*)(&getOptionValue(LAYOUT_OPTION_FM)->boolValue))[0]; + return getOptionValue(LAYOUT_OPTION_FM)->boolValue; } virtual bool hasSliders() const { - return ((uint8_t*)(&getOptionValue(LAYOUT_OPTION_SLIDERS)->boolValue))[0]; + return getOptionValue(LAYOUT_OPTION_SLIDERS)->boolValue; } virtual bool hasTrims() const { - return ((uint8_t*)(&getOptionValue(LAYOUT_OPTION_TRIMS)->boolValue))[0]; + return getOptionValue(LAYOUT_OPTION_TRIMS)->boolValue; } virtual bool isMirrored() const { - return ((uint8_t*)(&getOptionValue(LAYOUT_OPTION_MIRRORED)->boolValue))[0]; + return getOptionValue(LAYOUT_OPTION_MIRRORED)->boolValue; } virtual bool isAppMode() const { return false; } diff --git a/radio/src/gui/colorlcd/mainview/view_main.cpp b/radio/src/gui/colorlcd/mainview/view_main.cpp index 6d1b720d2..f44ce2d18 100644 --- a/radio/src/gui/colorlcd/mainview/view_main.cpp +++ b/radio/src/gui/colorlcd/mainview/view_main.cpp @@ -97,7 +97,7 @@ void ViewMain::deleteLater(bool detach, bool trash) Window::deleteLater(detach, trash); } -void ViewMain::addMainView(Window* view, uint32_t viewId) +void ViewMain::addMainView(WidgetsContainer* view, uint32_t viewId) { TRACE("addMainView(0x%p, %d)", view, viewId); @@ -110,6 +110,9 @@ void ViewMain::addMainView(Window* view, uint32_t viewId) auto user_data = (void*)(intptr_t)viewId; lv_obj_add_event_cb(tile, tile_view_deleted_cb, LV_EVENT_CHILD_DELETED, user_data); + + view->adjustLayout(); + view->show(); } void ViewMain::setTopbarVisible(float visible) { topbar->setVisible(visible); } diff --git a/radio/src/gui/colorlcd/mainview/view_main.h b/radio/src/gui/colorlcd/mainview/view_main.h index 481fe6dc4..61c8cf380 100644 --- a/radio/src/gui/colorlcd/mainview/view_main.h +++ b/radio/src/gui/colorlcd/mainview/view_main.h @@ -49,7 +49,7 @@ class ViewMain : public NavWindow std::string getName() const override { return "ViewMain"; } #endif - void addMainView(Window* view, uint32_t viewId); + void addMainView(WidgetsContainer* view, uint32_t viewId); void enableTopbar(); void disableTopbar(); diff --git a/radio/src/gui/colorlcd/mainview/widgets_setup.cpp b/radio/src/gui/colorlcd/mainview/widgets_setup.cpp index 627d6ad56..6f8097a41 100644 --- a/radio/src/gui/colorlcd/mainview/widgets_setup.cpp +++ b/radio/src/gui/colorlcd/mainview/widgets_setup.cpp @@ -142,6 +142,8 @@ SetupWidgetsPage::SetupWidgetsPage(uint8_t customScreenIdx) : #if defined(HARDWARE_TOUCH) addBackButton(); #endif + + screen->show(); } void SetupWidgetsPage::onClicked() diff --git a/radio/src/lua/lua_widget.cpp b/radio/src/lua/lua_widget.cpp index 3575e080e..ad7e1206c 100644 --- a/radio/src/lua/lua_widget.cpp +++ b/radio/src/lua/lua_widget.cpp @@ -200,8 +200,13 @@ void LuaWidget::redraw_cb(lv_event_t* e) } else { lv_draw_ctx_t* draw_ctx = lv_event_get_draw_ctx(e); - auto w = draw_ctx->buf_area->x2 - draw_ctx->buf_area->x1 + 1; - auto h = draw_ctx->buf_area->y2 - draw_ctx->buf_area->y1 + 1; + lv_area_t a, clipping, obj_coords; + lv_area_copy(&a, draw_ctx->buf_area); + lv_area_copy(&clipping, draw_ctx->clip_area); + lv_obj_get_coords(target, &obj_coords); + + auto w = a.x2 - a.x1 + 1; + auto h = a.y2 - a.y1 + 1; TRACE_WINDOWS("Draw %s", widget->getWindowDebugString().c_str()); @@ -210,9 +215,9 @@ void LuaWidget::redraw_cb(lv_event_t* e) buf.setDrawCtx(draw_ctx); - buf.setOffset(draw_ctx->clip_area->x1 - draw_ctx->buf_area->x1, draw_ctx->clip_area->y1 - draw_ctx->buf_area->y1); - buf.setClippingRect(draw_ctx->clip_area->x1 - draw_ctx->buf_area->x1, draw_ctx->clip_area->x2 - draw_ctx->buf_area->x1 + 1, - draw_ctx->clip_area->y1 - draw_ctx->buf_area->y1, draw_ctx->clip_area->y2 - draw_ctx->buf_area->y1 + 1); + buf.setOffset(obj_coords.x1 - a.x1, obj_coords.y1 - a.y1); + buf.setClippingRect(clipping.x1 - a.x1, clipping.x2 + 1 - a.x1, + clipping.y1 - a.y1, clipping.y2 + 1 - a.y1); widget->refresh(&buf); }