From 015c4795ca92c801bc34503ab95eb2da028cbc0f Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 12 Jun 2022 17:29:09 +0200 Subject: [PATCH] Padding adjustments & dialog autosize --- radio/src/thirdparty/libopenui/src/dialog.cpp | 24 +++++++++++++------ radio/src/thirdparty/libopenui/src/dialog.h | 2 ++ .../src/thirdparty/libopenui/src/flexlayout.h | 3 +-- radio/src/thirdparty/libopenui/src/form.cpp | 3 ++- radio/src/thirdparty/libopenui/src/form.h | 2 +- .../thirdparty/libopenui/src/modal_window.h | 2 +- radio/src/thirdparty/libopenui/src/window.cpp | 1 - 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/dialog.cpp b/radio/src/thirdparty/libopenui/src/dialog.cpp index 066fffafd..21d1f143a 100644 --- a/radio/src/thirdparty/libopenui/src/dialog.cpp +++ b/radio/src/thirdparty/libopenui/src/dialog.cpp @@ -21,16 +21,26 @@ #include "mainwindow.h" #include "theme.h" -static rect_t _get_form_rect(const rect_t& rect) -{ - return {0, POPUP_HEADER_HEIGHT, rect.w, - coord_t(rect.h - POPUP_HEADER_HEIGHT)}; -} - DialogWindowContent::DialogWindowContent(Dialog* parent, const rect_t& rect) : ModalWindowContent(parent, rect), - form(this, _get_form_rect(rect), FORM_NO_BORDER) + form(this, rect_t{}) { + form.setFlexLayout(); + + auto form_obj = form.getLvObj(); + lv_obj_set_style_pad_all(form_obj, lv_dpx(8), 0); + + lv_coord_t max_height = LCD_H * 0.8; + lv_obj_set_style_max_height(form_obj, max_height, 0); +} + +void DialogWindowContent::setTitle(const std::string& text) +{ + ModalWindowContent::setTitle(text); + if (title) { + lv_coord_t title_h = lv_obj_get_height(title); + lv_obj_set_y(form.getLvObj(), title_h); + } } void DialogWindowContent::deleteLater(bool detach, bool trash) diff --git a/radio/src/thirdparty/libopenui/src/dialog.h b/radio/src/thirdparty/libopenui/src/dialog.h index 0678fc11b..146554a95 100644 --- a/radio/src/thirdparty/libopenui/src/dialog.h +++ b/radio/src/thirdparty/libopenui/src/dialog.h @@ -31,6 +31,8 @@ class DialogWindowContent : public ModalWindowContent public: DialogWindowContent(Dialog* parent, const rect_t& rect); + void setTitle(const std::string& text) override; + void deleteLater(bool detach = true, bool trash = true) override; void updateSize() override; diff --git a/radio/src/thirdparty/libopenui/src/flexlayout.h b/radio/src/thirdparty/libopenui/src/flexlayout.h index abe39bcbb..fe5f3ed59 100644 --- a/radio/src/thirdparty/libopenui/src/flexlayout.h +++ b/radio/src/thirdparty/libopenui/src/flexlayout.h @@ -47,9 +47,8 @@ class FlexGridLayout // padding lv_obj_set_style_pad_all(obj, padding, LV_PART_MAIN); - lv_obj_set_style_pad_left(obj, padding + PAGE_PADDING, LV_PART_MAIN); - lv_obj_set_style_pad_right(obj, padding + PAGE_PADDING, LV_PART_MAIN); lv_obj_set_style_pad_row(obj, padding, LV_PART_MAIN); + lv_obj_set_style_pad_column(obj, padding, LV_PART_MAIN); // layout lv_obj_set_layout(obj, LV_LAYOUT_GRID); diff --git a/radio/src/thirdparty/libopenui/src/form.cpp b/radio/src/thirdparty/libopenui/src/form.cpp index fa74c251f..6fc96559e 100644 --- a/radio/src/thirdparty/libopenui/src/form.cpp +++ b/radio/src/thirdparty/libopenui/src/form.cpp @@ -115,9 +115,10 @@ void FormGroup::setFlexLayout(lv_flex_flow_t flow, lv_coord_t padding) lv_obj_set_height(lvobj, LV_SIZE_CONTENT); } -FormGroup::Line* FormGroup::newLine(FlexGridLayout* layout) +FormGroup::Line* FormGroup::newLine(FlexGridLayout* layout, lv_coord_t left_padding) { if (layout) layout->resetPos(); auto lv_line = window_create(lvobj); + if (left_padding) lv_obj_set_style_pad_left(lv_line, left_padding, 0); return new Line(this, lv_line, layout); } diff --git a/radio/src/thirdparty/libopenui/src/form.h b/radio/src/thirdparty/libopenui/src/form.h index c6fd3066d..13732a80f 100644 --- a/radio/src/thirdparty/libopenui/src/form.h +++ b/radio/src/thirdparty/libopenui/src/form.h @@ -101,7 +101,7 @@ class FormGroup : public Window #endif void setFlexLayout(lv_flex_flow_t flow = LV_FLEX_FLOW_COLUMN, lv_coord_t padding = 0); - Line* newLine(FlexGridLayout* layout = nullptr); + Line* newLine(FlexGridLayout* layout = nullptr, lv_coord_t left_padding = 0); }; class FormWindow : public FormGroup diff --git a/radio/src/thirdparty/libopenui/src/modal_window.h b/radio/src/thirdparty/libopenui/src/modal_window.h index 09864cf87..63487a2f0 100644 --- a/radio/src/thirdparty/libopenui/src/modal_window.h +++ b/radio/src/thirdparty/libopenui/src/modal_window.h @@ -51,7 +51,7 @@ class ModalWindowContent : public Window std::string getName() const override { return "ModalWindowContent"; } #endif - void setTitle(const std::string& text); + virtual void setTitle(const std::string& text); std::string getTitle() const; void onClicked() override; diff --git a/radio/src/thirdparty/libopenui/src/window.cpp b/radio/src/thirdparty/libopenui/src/window.cpp index ff8996ae7..42f9fe1ca 100644 --- a/radio/src/thirdparty/libopenui/src/window.cpp +++ b/radio/src/thirdparty/libopenui/src/window.cpp @@ -480,7 +480,6 @@ void Window::bringToTop() if (lvobj) lv_obj_move_foreground(lvobj); } -void lvglPushEncoderEvent(event_t& evt); void Window::checkEvents() { auto copy = children;