diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-08-25 10:13:37 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-08-25 10:13:37 +1000 |
| commit | 3b3bc64d19715c418f407d5231795ca5a2c2fa71 (patch) | |
| tree | 87fb1bf2b9ec366abc712f2096a0908d0ae2cc4b /src/ui/screen.cpp | |
| parent | 079b2b53d434869df419da1373aba239990c34d9 (diff) | |
| download | tangara-fw-3b3bc64d19715c418f407d5231795ca5a2c2fa71.tar.gz | |
Add modal dialog support
Diffstat (limited to 'src/ui/screen.cpp')
| -rw-r--r-- | src/ui/screen.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/ui/screen.cpp b/src/ui/screen.cpp index 7ea5e3ce..039d2439 100644 --- a/src/ui/screen.cpp +++ b/src/ui/screen.cpp @@ -8,10 +8,38 @@ #include <memory> +#include "core/lv_obj_pos.h" +#include "core/lv_obj_tree.h" +#include "misc/lv_area.h" +#include "misc/lv_color.h" #include "widget_top_bar.hpp" namespace ui { +Screen::Screen() + : root_(lv_obj_create(NULL)), + content_(lv_obj_create(root_)), + modal_content_(lv_obj_create(root_)), + group_(lv_group_create()), + modal_group_(nullptr) { + lv_obj_set_size(root_, lv_pct(100), lv_pct(100)); + lv_obj_set_size(content_, lv_pct(100), lv_pct(100)); + lv_obj_set_size(modal_content_, lv_pct(100), lv_pct(100)); + lv_obj_center(root_); + lv_obj_center(content_); + lv_obj_center(modal_content_); + + lv_obj_set_style_bg_opa(modal_content_, LV_OPA_TRANSP, 0); + lv_obj_set_style_bg_color(modal_content_, lv_color_black(), 0); +} + +Screen::~Screen() { + // The group *must* be deleted first. Otherwise, focus events will be + // generated whilst deleting the object tree, which causes a big mess. + lv_group_del(group_); + lv_obj_del(root_); +} + auto Screen::UpdateTopBar(const widgets::TopBar::State& state) -> void { if (top_bar_) { top_bar_->Update(state); |
