From fa59524ebdfdd89996eb45c86bd421cbe341dc1a Mon Sep 17 00:00:00 2001 From: Malte Langermann <54738901+gagarinlg@users.noreply.github.com> Date: Sat, 1 Oct 2022 13:23:18 +0200 Subject: [PATCH] fix(gui): Outline, more padding, wider buttons for menu toolbars (#70) --- radio/src/thirdparty/libopenui/src/menu.cpp | 15 +++++++++++-- radio/src/thirdparty/libopenui/src/menu.h | 2 ++ .../thirdparty/libopenui/src/menutoolbar.cpp | 21 +++++++++++-------- .../thirdparty/libopenui/src/menutoolbar.h | 2 ++ 4 files changed, 29 insertions(+), 11 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/menu.cpp b/radio/src/thirdparty/libopenui/src/menu.cpp index 19d6adcdd..d80c033f9 100644 --- a/radio/src/thirdparty/libopenui/src/menu.cpp +++ b/radio/src/thirdparty/libopenui/src/menu.cpp @@ -207,8 +207,8 @@ void MenuBody::onEvent(event_t event) else { TableField::onEvent(event); } -} #endif +} void MenuBody::onCancel() { @@ -254,12 +254,22 @@ void Menu::setToolbar(Window * window) toolbar->setHeight(content->height()); } +void Menu::setOutline(Window* obj) +{ + lv_obj_set_style_outline_width(obj->getLvObj(), 4, LV_PART_MAIN); + lv_obj_set_style_outline_color(obj->getLvObj(), makeLvColor(COLOR_THEME_SECONDARY2), LV_PART_MAIN); + lv_obj_set_style_outline_opa(obj->getLvObj(), LV_OPA_100, LV_PART_MAIN); + lv_obj_set_style_outline_pad(obj->getLvObj(), 1, LV_PART_MAIN); + +} + void Menu::updatePosition() { coord_t height = content->body.getContentHeight(); if (toolbar) { content->setLeft((LCD_W - content->width() + toolbar->width())/2); + setOutline(toolbar); } else { content->setLeft((LCD_W - content->width())/2); auto headerHeight = content->getHeaderHeight(); @@ -267,8 +277,9 @@ void Menu::updatePosition() content->setTop((LCD_H - headerHeight - bodyHeight) / 2); content->setHeight(headerHeight + bodyHeight); content->body.setTop(headerHeight); - content->body.setHeight(bodyHeight); + content->body.setHeight(bodyHeight); } + setOutline(content); } void Menu::setTitle(std::string text) diff --git a/radio/src/thirdparty/libopenui/src/menu.h b/radio/src/thirdparty/libopenui/src/menu.h index f838187b3..c724f54fe 100644 --- a/radio/src/thirdparty/libopenui/src/menu.h +++ b/radio/src/thirdparty/libopenui/src/menu.h @@ -221,6 +221,8 @@ class Menu: public ModalWindow Window * toolbar = nullptr; std::function waitHandler; void updatePosition(); + + void setOutline(Window* obj); }; Menu * MenuBody::getParentMenu() diff --git a/radio/src/thirdparty/libopenui/src/menutoolbar.cpp b/radio/src/thirdparty/libopenui/src/menutoolbar.cpp index 536dd37e4..c1320160d 100644 --- a/radio/src/thirdparty/libopenui/src/menutoolbar.cpp +++ b/radio/src/thirdparty/libopenui/src/menutoolbar.cpp @@ -31,17 +31,18 @@ MenuToolbarButton::MenuToolbarButton(Window* parent, const rect_t& rect, void MenuToolbarButton::paint(BitmapBuffer * dc) { + lv_coord_t width = lv_obj_get_content_width(lvobj); if (checked()) { dc->drawSolidFilledRect( MENUS_TOOLBAR_BUTTON_PADDING, MENUS_TOOLBAR_BUTTON_PADDING, - MENUS_TOOLBAR_BUTTON_WIDTH - 2 * MENUS_TOOLBAR_BUTTON_PADDING, + width - 2 * MENUS_TOOLBAR_BUTTON_PADDING, MENUS_TOOLBAR_BUTTON_WIDTH - 2 * MENUS_TOOLBAR_BUTTON_PADDING, COLOR_THEME_FOCUS); - dc->drawText(rect.w / 2, (rect.h - getFontHeight(FONT(STD))) / 2 + 1, - picto, CENTERED | COLOR_THEME_PRIMARY2); + dc->drawText(width / 2, (rect.h - getFontHeight(FONT(L))) / 2 + 2, + picto, FONT(L) | CENTERED | COLOR_THEME_PRIMARY2); } else { - dc->drawText(rect.w / 2, (rect.h - getFontHeight(FONT(STD))) / 2 + 1, - picto, CENTERED | COLOR_THEME_PRIMARY1); + dc->drawText(width / 2, (rect.h - getFontHeight(FONT(L))) / 2 + 2, + picto, FONT(L) | CENTERED | COLOR_THEME_PRIMARY1); } } @@ -83,10 +84,12 @@ void MenuToolbar::onEvent(event_t event) } } -static rect_t _get_button_rect(size_t buttons) +rect_t MenuToolbar::getButtonRect(size_t buttons) { - coord_t y = buttons * MENUS_TOOLBAR_BUTTON_WIDTH; - return {0, y, MENUS_TOOLBAR_BUTTON_WIDTH, MENUS_TOOLBAR_BUTTON_WIDTH}; + coord_t y = buttons * (MENUS_TOOLBAR_BUTTON_WIDTH + MENUS_TOOLBAR_BUTTON_PADDING); + coord_t width = std::max(MENUS_TOOLBAR_BUTTON_WIDTH, lv_obj_get_content_width(lvobj)); + return {0, y, LV_PCT(100), MENUS_TOOLBAR_BUTTON_WIDTH}; + } bool MenuToolbar::filterMenu(MenuToolbarButton* btn, int16_t filtermin, @@ -131,7 +134,7 @@ void MenuToolbar::addButton(const char* picto, int16_t filtermin, getFirstAvailable(filtermin, filtermax, choice->isValueAvailable) == 0) return; - rect_t r = _get_button_rect(children.size()); + rect_t r = getButtonRect(children.size()); auto button = new MenuToolbarButton(this, r, picto); button->setPressHandler( diff --git a/radio/src/thirdparty/libopenui/src/menutoolbar.h b/radio/src/thirdparty/libopenui/src/menutoolbar.h index cbec1830d..38ffda3a0 100644 --- a/radio/src/thirdparty/libopenui/src/menutoolbar.h +++ b/radio/src/thirdparty/libopenui/src/menutoolbar.h @@ -52,4 +52,6 @@ class MenuToolbar : public Window void addButton(const char* picto, int16_t filtermin, int16_t filtermax); bool filterMenu(MenuToolbarButton* btn, int16_t filtermin, int16_t filtermax); + + rect_t getButtonRect(size_t buttons); };