From 4fc2fc8ae6d8a5cfe870a4c113bdf3adca894879 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 25 Jan 2022 18:51:52 +0100 Subject: [PATCH] Layers are only meant to backup the focus window --- radio/src/thirdparty/libopenui/src/layer.h | 13 ------------- .../thirdparty/libopenui/src/mainwindow.cpp | 18 +++++++++++------- .../src/thirdparty/libopenui/src/mainwindow.h | 9 +-------- 3 files changed, 12 insertions(+), 28 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/layer.h b/radio/src/thirdparty/libopenui/src/layer.h index 64da2542b..94c0677a6 100644 --- a/radio/src/thirdparty/libopenui/src/layer.h +++ b/radio/src/thirdparty/libopenui/src/layer.h @@ -37,20 +37,12 @@ class Layer static void push(Window * window) { - if (window->getLvObj()->parent != nullptr) { - TRACE("Layers must have lvgl parent to be null"); - } if (!stack.empty()) { Layer & parentLayer = stack.back(); parentLayer.focus = Window::getFocus(); } - // layers are screens in lvgl - lv_obj_set_parent(canvas, window->getLvObj()); - lv_obj_move_background(canvas); - lv_scr_load(window->getLvObj()); - lv_obj_invalidate(canvas); stack.emplace_back(Layer(window)); @@ -67,9 +59,6 @@ class Layer if (stack.back().main == window) { stack.pop_back(); const auto & back = stack.back(); - lv_obj_set_parent(canvas, back.main->getLvObj()); - lv_obj_move_background(canvas); - lv_scr_load(back.main->getLvObj()); // load the screen. if (back.focus) { back.focus->setFocus(SET_FOCUS_DEFAULT); } @@ -78,8 +67,6 @@ class Layer // TODO it would be better to do it in reverse order for (auto it = stack.begin(); it != stack.end(); it++) { if (it->main == window) { - lv_obj_set_parent(canvas, it->main->getLvObj()); - lv_scr_load(it->main->getLvObj()); stack.erase(it); break; } diff --git a/radio/src/thirdparty/libopenui/src/mainwindow.cpp b/radio/src/thirdparty/libopenui/src/mainwindow.cpp index d9d7dd51b..aa9a28e37 100644 --- a/radio/src/thirdparty/libopenui/src/mainwindow.cpp +++ b/radio/src/thirdparty/libopenui/src/mainwindow.cpp @@ -24,17 +24,21 @@ #include "touch.h" #endif -MainWindow * MainWindow::_instance = nullptr; - -LvglWidgetFactory mainWindowFactory = LvglWidgetFactory([] (lv_obj_t *parent) { - return lv_obj_create(nullptr); -}); - - #if defined(HARDWARE_TOUCH) TouchState touchState; #endif +static LvglWidgetFactory mainWindowFactory = { lv_obj_create, nullptr }; + +MainWindow * MainWindow::_instance = nullptr; + +MainWindow::MainWindow() : + Window(nullptr, {0, 0, LCD_W, LCD_H}, 0, 0, &mainWindowFactory), + invalidatedRect(rect) +{ + Layer::push(this); +} + void MainWindow::emptyTrash() { for (auto window: trash) { diff --git a/radio/src/thirdparty/libopenui/src/mainwindow.h b/radio/src/thirdparty/libopenui/src/mainwindow.h index ec140811d..9e1d5951d 100644 --- a/radio/src/thirdparty/libopenui/src/mainwindow.h +++ b/radio/src/thirdparty/libopenui/src/mainwindow.h @@ -23,18 +23,11 @@ #include "layer.h" #include "bitmapbuffer.h" -extern LvglWidgetFactory mainWindowFactory; - class MainWindow: public Window { protected: // singleton - MainWindow(): - Window(nullptr, {0, 0, LCD_W, LCD_H}, 0, 0, &mainWindowFactory), - invalidatedRect(rect) - { - Layer::push(this); - } + MainWindow(); public: ~MainWindow() override