From 52e10c74de4c4fa9c9b67d4dbc8b19790078d882 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Mon, 23 May 2022 10:12:03 +0200 Subject: [PATCH] main menu: better fill the screen (flex layout) --- radio/src/gui/colorlcd/fab_button.cpp | 7 +++++++ radio/src/gui/colorlcd/fab_button.h | 8 +++++++- radio/src/gui/colorlcd/select_fab_button.cpp | 5 ++--- radio/src/gui/colorlcd/select_fab_button.h | 4 ++-- .../src/gui/colorlcd/select_fab_carousel.cpp | 18 +++++++---------- radio/src/gui/colorlcd/view_main_menu.cpp | 20 +++++++++---------- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/radio/src/gui/colorlcd/fab_button.cpp b/radio/src/gui/colorlcd/fab_button.cpp index e760375c7..fe6646ee0 100644 --- a/radio/src/gui/colorlcd/fab_button.cpp +++ b/radio/src/gui/colorlcd/fab_button.cpp @@ -44,6 +44,13 @@ FabButton::FabButton(FormGroup* parent, coord_t x, coord_t y, uint8_t icon, { } +FabButton::FabButton(FormGroup* parent, uint8_t icon, + std::function pressHandler, + WindowFlags windowFlags) : + Button(parent, {}, pressHandler, windowFlags), icon(icon) +{ +} + void FabButton::paint(BitmapBuffer * dc) { auto bitmap = checked() ? &ALPHA_BUTTON_ON : &ALPHA_BUTTON_OFF; diff --git a/radio/src/gui/colorlcd/fab_button.h b/radio/src/gui/colorlcd/fab_button.h index c0c2a6ec3..6cf65f29b 100644 --- a/radio/src/gui/colorlcd/fab_button.h +++ b/radio/src/gui/colorlcd/fab_button.h @@ -28,7 +28,13 @@ constexpr coord_t FAB_BUTTON_SIZE = 68; class FabButton: public Button { public: - FabButton(FormGroup * parent, coord_t x, coord_t y, uint8_t icon, std::function pressHandler, WindowFlags windowFlags = 0); + FabButton(FormGroup * parent, coord_t x, coord_t y, + uint8_t icon, std::function pressHandler, + WindowFlags windowFlags = 0); + + FabButton(FormGroup * parent, uint8_t icon, + std::function pressHandler, + WindowFlags windowFlags = 0); #if defined(DEBUG_WINDOWS) std::string getName() const override diff --git a/radio/src/gui/colorlcd/select_fab_button.cpp b/radio/src/gui/colorlcd/select_fab_button.cpp index 7bd8d89b8..561cdb97b 100644 --- a/radio/src/gui/colorlcd/select_fab_button.cpp +++ b/radio/src/gui/colorlcd/select_fab_button.cpp @@ -21,13 +21,12 @@ #include "select_fab_button.h" -SelectFabButton::SelectFabButton(FormGroup* parent, coord_t x, coord_t y, +SelectFabButton::SelectFabButton(FormGroup* parent, uint8_t icon, const char* title, std::function pressHandler, WindowFlags windowFlags) : // FabButton uses center coordinates, we want top left corner: - FabButton(parent, x, y, icon, - pressHandler, windowFlags), + FabButton(parent, icon, pressHandler, windowFlags), title(title) { // Add some space on either side on the button diff --git a/radio/src/gui/colorlcd/select_fab_button.h b/radio/src/gui/colorlcd/select_fab_button.h index fbaf7b182..ce4b29642 100644 --- a/radio/src/gui/colorlcd/select_fab_button.h +++ b/radio/src/gui/colorlcd/select_fab_button.h @@ -28,8 +28,8 @@ constexpr coord_t SELECT_BUTTON_BORDER = 12; class SelectFabButton : public FabButton { public: - SelectFabButton(FormGroup* parent, coord_t x, coord_t y, uint8_t icon, - const char* title, std::function pressHandler, + SelectFabButton(FormGroup* parent, uint8_t icon, const char* title, + std::function pressHandler, WindowFlags windowFlags = 0); void paint(BitmapBuffer* dc) override; diff --git a/radio/src/gui/colorlcd/select_fab_carousel.cpp b/radio/src/gui/colorlcd/select_fab_carousel.cpp index b2fc1442d..59b9e9c1a 100644 --- a/radio/src/gui/colorlcd/select_fab_carousel.cpp +++ b/radio/src/gui/colorlcd/select_fab_carousel.cpp @@ -24,21 +24,17 @@ SelectFabCarousel::SelectFabCarousel(Window* parent) : FormGroup(parent, {}, FORM_FORWARD_FOCUS | NO_SCROLLBAR) { - setHeight(FAB_BUTTON_SIZE + 2 * PAGE_LINE_HEIGHT + SELECT_BUTTON_BORDER / 2); -} + setFlexLayout(LV_FLEX_FLOW_ROW_WRAP); -void SelectFabCarousel::setMaxButtons(uint8_t max) -{ - maxButtons = max; - setWidth(maxButtons * (FAB_BUTTON_SIZE + SELECT_BUTTON_BORDER)); + coord_t w = parent->width() * 0.8; + w -= w % (FAB_BUTTON_SIZE + SELECT_BUTTON_BORDER); + lv_obj_set_width(lvobj, w); + + lv_obj_set_style_max_height(lvobj, lv_pct(85), 0); } void SelectFabCarousel::addButton(uint8_t icon, const char* title, std::function pressHandler) { - coord_t y_pos = 0; - coord_t x_pos = (FAB_BUTTON_SIZE + SELECT_BUTTON_BORDER) * buttons; - buttons++; - - new SelectFabButton(this, x_pos, y_pos, icon, title, pressHandler); + new SelectFabButton(this, icon, title, pressHandler); } diff --git a/radio/src/gui/colorlcd/view_main_menu.cpp b/radio/src/gui/colorlcd/view_main_menu.cpp index 46af52421..9009f1ce8 100644 --- a/radio/src/gui/colorlcd/view_main_menu.cpp +++ b/radio/src/gui/colorlcd/view_main_menu.cpp @@ -44,15 +44,6 @@ ViewMainMenu::ViewMainMenu(Window* parent) : setHeight(parent->height()); auto carousel = new SelectFabCarousel(this); - carousel->setMaxButtons(4); - - // Disabled Title - // - // auto title = new StaticText(this, - // {0, pos, width(), getFontHeight(FONT(XL))}, - // "Tasks", 0, COLOR_THEME_PRIMARY2 | FONT(XL) | CENTERED); - // pos += title->height() + PAGE_LINE_SPACING; - carousel->addButton(ICON_MODEL_SELECT, STR_MAIN_MENU_SELECT_MODEL, [=]() -> uint8_t { deleteLater(); new ModelSelectMenu(); @@ -114,8 +105,14 @@ ViewMainMenu::ViewMainMenu(Window* parent) : return 0; }); - carousel->setWindowCentered(); - carouselRect = carousel->getRect(); + auto carousel_obj = carousel->getLvObj(); + lv_obj_center(carousel_obj); + + lv_obj_update_layout(carousel_obj); + carouselRect.x = lv_obj_get_x(carousel_obj); + carouselRect.y = lv_obj_get_y(carousel_obj); + carouselRect.w = lv_obj_get_width(carousel_obj); + carouselRect.h = lv_obj_get_height(carousel_obj); carousel->setCloseHandler([=]() { deleteLater(); }); carousel->setFocus(); @@ -128,6 +125,7 @@ void ViewMainMenu::paint(BitmapBuffer* dc) rect_t zone = carouselRect; zone.x -= 8; zone.y -= 8; zone.w += 16; zone.h += 16; + dc->drawFilledRect(zone.x, zone.y, zone.w, zone.h, SOLID, BLACK, OPACITY(4)); }