From e8829d862f9993fbe898a2061cfd996ef42fcc03 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Fri, 16 Apr 2021 22:49:00 +0200 Subject: [PATCH] WiP --- radio/src/gui/colorlcd/topbar.cpp | 13 +++++++++-- radio/src/gui/colorlcd/topbar.h | 2 +- radio/src/gui/colorlcd/view_main.cpp | 33 +++++++++++++++++----------- radio/src/gui/colorlcd/view_main.h | 4 ++-- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/radio/src/gui/colorlcd/topbar.cpp b/radio/src/gui/colorlcd/topbar.cpp index daa11a888..8fee1026d 100644 --- a/radio/src/gui/colorlcd/topbar.cpp +++ b/radio/src/gui/colorlcd/topbar.cpp @@ -43,9 +43,18 @@ rect_t TopBar::getZone(unsigned int index) const }; } -void TopBar::setVisible(bool visible) +void TopBar::setVisible(float visible) // 0.0 -> 1.0 { - setHeight(visible ? MENU_HEADER_HEIGHT : 0); + if (visible == 0.0) { + setTop(-(int)MENU_HEADER_HEIGHT); + } + else if (visible == 1.0) { + setTop(0); + } + else if (visible > 0.0 && visible < 1.0){ + float top = - (float)MENU_HEADER_HEIGHT * (1.0 - visible); + setTop((coord_t)top); + } } const char * const STR_MONTHS[] = TR_MONTHS; diff --git a/radio/src/gui/colorlcd/topbar.h b/radio/src/gui/colorlcd/topbar.h index c0c2596a2..cd6d6c2da 100644 --- a/radio/src/gui/colorlcd/topbar.h +++ b/radio/src/gui/colorlcd/topbar.h @@ -45,7 +45,7 @@ class TopBar: public WidgetsContainer rect_t getZone(unsigned int index) const override; - void setVisible(bool visible); + void setVisible(float visible); void paint(BitmapBuffer * dc) override; diff --git a/radio/src/gui/colorlcd/view_main.cpp b/radio/src/gui/colorlcd/view_main.cpp index d0d7e8453..5e1fc2183 100644 --- a/radio/src/gui/colorlcd/view_main.cpp +++ b/radio/src/gui/colorlcd/view_main.cpp @@ -72,7 +72,7 @@ ViewMain::~ViewMain() { } -void ViewMain::setTopbarVisible(bool visible) +void ViewMain::setTopbarVisible(float visible) { topbar->setVisible(visible); } @@ -98,8 +98,9 @@ coord_t ViewMain::getMainViewLeftPos(unsigned view) const rect_t ViewMain::getMainZone(rect_t zone) const { - zone.y += topbar->bottom(); - zone.h -= topbar->height(); + auto visibleHeight = topbar->bottom() - zone.y; + zone.y += visibleHeight; + zone.h -= visibleHeight; return zone; } @@ -142,16 +143,22 @@ void ViewMain::setScrollPositionX(coord_t value) Window::setScrollPositionX(value); topbar->setLeft(getScrollPositionX()); - auto pageIdx = getPageIndex(); - if (pageIdx != g_model.view) { - g_model.view = pageIdx; - if (customScreens[pageIdx]) { - // crude on/off for now - setTopbarVisible(customScreens[pageIdx]->hasTopbar()); - customScreens[pageIdx]->decorate(); - //TODO: compute topbar visibility - //auto relativeScrollPosition = getScrollPositionX() % pageWidth; - } + auto newIdx = getPageIndex(); + if (newIdx != g_model.view) { + + auto oldIdx = g_model.view; + // auto hadTopbar = customScreens[oldIdx]->hasTopbar(); + // auto willHaveTopbar = customScreens[newIdx]->hasTopbar(); + + // update current view + g_model.view = newIdx; + + // crude on/off for now + setTopbarVisible(customScreens[pageIdx]->hasTopbar()); + customScreens[pageIdx]->decorate(); + + //TODO: compute topbar visibility + //auto relativeScrollPosition = getScrollPositionX() % pageWidth; } } diff --git a/radio/src/gui/colorlcd/view_main.h b/radio/src/gui/colorlcd/view_main.h index ea0b23748..92cb3b31f 100644 --- a/radio/src/gui/colorlcd/view_main.h +++ b/radio/src/gui/colorlcd/view_main.h @@ -50,8 +50,8 @@ class ViewMain: public Window } #endif - // Set topbar visibility - void setTopbarVisible(bool visible); + // Set topbar visibility [0.0 -> 1.0] + void setTopbarVisible(float visible); // Get the available space in the middle of the screen // (without topbar)