WiP
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -45,7 +45,7 @@ class TopBar: public WidgetsContainer<MAX_TOPBAR_ZONES, MAX_TOPBAR_OPTIONS>
|
||||
|
||||
rect_t getZone(unsigned int index) const override;
|
||||
|
||||
void setVisible(bool visible);
|
||||
void setVisible(float visible);
|
||||
|
||||
void paint(BitmapBuffer * dc) override;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user