chore(color): Cleanup layout refresh logic (#4074)

This commit is contained in:
philmoz
2023-10-30 10:24:12 +10:00
committed by GitHub
parent 00b1974295
commit 374c782f7e
5 changed files with 40 additions and 46 deletions
@@ -53,21 +53,6 @@ void Layout::paint(BitmapBuffer * dc)
}
#endif
void Layout::checkEvents()
{
LayoutBase::checkEvents();
adjustLayout();
// uint32_t now = RTOS_GET_MS();
// if (now - lastRefresh >= LAYOUT_REFRESH) {
// lastRefresh = now;
// invalidate();
// #if defined(DEBUG_WINDOWS)
// TRACE_WINDOWS("# %s refresh: %s", factory->getId(), getWindowDebugString().c_str());
// #endif
// }
}
void Layout::setTrimsVisible(bool visible)
{
decoration->setTrimsVisible(visible);
@@ -79,8 +79,6 @@ class Layout: public LayoutBase
{
return factory;
}
void checkEvents() override;
bool hasTopbar() const {
return getOptionValue(LAYOUT_OPTION_TOPBAR)->boolValue;
@@ -88,7 +88,7 @@ void TopBar::checkEvents()
uint32_t now = RTOS_GET_MS();
if (now - lastRefresh >= TOPBAR_REFRESH) {
lastRefresh = now;
invalidate();
TopBarBase::checkEvents();
}
}
+38 -28
View File
@@ -23,6 +23,8 @@
#include "widgets_container_impl.h"
#include "theme.h"
constexpr uint32_t WIDGET_REFRESH = 1000 / 10; // 10 Hz
#define W_AUDIO_X 0
#define W_USB_X 32
#define W_LOG_X 32
@@ -84,14 +86,34 @@ STATIC_LZ4_BITMAP(LBM_TOPMENU_TXBATT);
STATIC_LZ4_BITMAP(LBM_TOPMENU_TXBATT_CHARGING);
STATIC_LZ4_BITMAP(LBM_TOPMENU_ANTENNA);
class RadioInfoWidget: public Widget
class TopBarWidget : public Widget
{
protected:
public:
TopBarWidget(const WidgetFactory* factory, Window* parent,
const rect_t& rect, Widget::PersistentData* persistentData) :
Widget(factory, parent, rect, persistentData)
{
}
void checkEvents() override
{
Widget::checkEvents();
uint32_t now = RTOS_GET_MS();
if (now - lastRefresh >= WIDGET_REFRESH) {
lastRefresh = now;
invalidate();
}
}
uint32_t lastRefresh = 0;
};
class RadioInfoWidget: public TopBarWidget
{
public:
RadioInfoWidget(const WidgetFactory* factory, Window* parent,
const rect_t& rect, Widget::PersistentData* persistentData) :
Widget(factory, parent, rect, persistentData)
TopBarWidget(factory, parent, rect, persistentData)
{
}
@@ -159,14 +181,6 @@ class RadioInfoWidget: public Widget
dc->drawSolidFilledRect(W_AUDIO_X + 2 + 4 * i, 27, 2, 8, i >= bars ? COLOR_THEME_PRIMARY3 : COLOR_THEME_PRIMARY2);
}
}
void checkEvents() override
{
Widget::checkEvents();
invalidate();
}
static const ZoneOption options[];
};
BaseWidgetFactory<RadioInfoWidget> RadioInfoWidget("Radio Info", nullptr, "Radio Info");
@@ -178,14 +192,12 @@ BaseWidgetFactory<RadioInfoWidget> RadioInfoWidget("Radio Info", nullptr, "Radio
#define DT_OFFSET 1
#endif
class DateTimeWidget: public Widget
class DateTimeWidget: public TopBarWidget
{
protected:
public:
DateTimeWidget(const WidgetFactory* factory, Window* parent,
const rect_t& rect, Widget::PersistentData* persistentData) :
Widget(factory, parent, rect, persistentData)
TopBarWidget(factory, parent, rect, persistentData)
{
}
@@ -199,9 +211,17 @@ class DateTimeWidget: public Widget
void checkEvents() override
{
Widget::checkEvents();
invalidate();
// Only update if minute value has changed
struct gtm t;
gettime(&t);
if (t.tm_min != lastMinute) {
lastMinute = t.tm_min;
invalidate();
}
}
int8_t lastMinute = 0;
static const ZoneOption options[];
};
@@ -220,14 +240,12 @@ static const uint8_t _LBM_TOPMENU_GPS[] = {
STATIC_LZ4_BITMAP(LBM_TOPMENU_GPS);
class InternalGPSWidget: public Widget
class InternalGPSWidget: public TopBarWidget
{
protected:
public:
InternalGPSWidget(const WidgetFactory* factory, Window* parent,
const rect_t& rect, Widget::PersistentData* persistentData) :
Widget(factory, parent, rect, persistentData)
TopBarWidget(factory, parent, rect, persistentData)
{
}
@@ -244,14 +262,6 @@ class InternalGPSWidget: public Widget
(gpsData.fix) ? COLOR_THEME_PRIMARY2 : COLOR_THEME_PRIMARY3);
}
}
void checkEvents() override
{
Widget::checkEvents();
invalidate();
}
static const ZoneOption options[];
};
BaseWidgetFactory<InternalGPSWidget> InternalGPSWidget("Internal GPS", nullptr, "Internal GPS");
@@ -115,6 +115,7 @@ class WidgetsContainerImpl : public WidgetsContainer
inline void setOptionValue(unsigned int index, const ZoneOptionValue& value)
{
persistentData->options[index].value = value;
adjustLayout();
}
unsigned int getZonesCount() const override = 0;