diff --git a/radio/src/gui/colorlcd/layout.h b/radio/src/gui/colorlcd/layout.h index eddd62e5c..6fc864127 100644 --- a/radio/src/gui/colorlcd/layout.h +++ b/radio/src/gui/colorlcd/layout.h @@ -50,6 +50,8 @@ class LayoutFactory const char* getId() const { return id; } const char* getName() const { return name; } + virtual const uint8_t* getBitmap() const = 0; + virtual void drawThumb(BitmapBuffer* dc, uint16_t x, uint16_t y, LcdFlags flags) const = 0; diff --git a/radio/src/gui/colorlcd/layouts/layout_factory_impl.h b/radio/src/gui/colorlcd/layouts/layout_factory_impl.h index bfde29232..b3ec959cb 100644 --- a/radio/src/gui/colorlcd/layouts/layout_factory_impl.h +++ b/radio/src/gui/colorlcd/layouts/layout_factory_impl.h @@ -122,6 +122,8 @@ class BaseLayoutFactory: public LayoutFactory { } + const uint8_t* getBitmap() const override { return bitmap; } + void drawThumb(BitmapBuffer * dc, uint16_t x, uint16_t y, uint32_t flags) const override { dc->drawBitmapPattern(x, y, bitmap, flags); diff --git a/radio/src/gui/colorlcd/screen_setup.cpp b/radio/src/gui/colorlcd/screen_setup.cpp index 6f63630ea..efa5b0ef3 100644 --- a/radio/src/gui/colorlcd/screen_setup.cpp +++ b/radio/src/gui/colorlcd/screen_setup.cpp @@ -91,21 +91,18 @@ class LayoutChoice: public FormField { auto menu = new Menu(parent); - for (auto layout: getRegisteredLayouts()) { - menu->addCustomLine([=](BitmapBuffer * dc, coord_t x, coord_t y, LcdFlags flags) { - layout->drawThumb(dc, x + 2, y + 2, flags); - dc->drawText(65, y + 5, layout->getName(), flags); - }, [=]() { - setValue(layout); - }); + for (auto layout : getRegisteredLayouts()) { + menu->addLine(layout->getBitmap(), layout->getName(), + [=]() { setValue(layout); }); } - auto it = std::find(getRegisteredLayouts().begin(), getRegisteredLayouts().end(), getValue()); + auto it = std::find(getRegisteredLayouts().begin(), + getRegisteredLayouts().end(), getValue()); menu->select(std::distance(getRegisteredLayouts().begin(), it)); menu->setCloseHandler([=]() { - editMode = false; - setFocus(SET_FOCUS_DEFAULT); + editMode = false; + setFocus(SET_FOCUS_DEFAULT); }); } diff --git a/radio/src/gui/colorlcd/widget.cpp b/radio/src/gui/colorlcd/widget.cpp index 302ebb8da..688103ec3 100644 --- a/radio/src/gui/colorlcd/widget.cpp +++ b/radio/src/gui/colorlcd/widget.cpp @@ -38,7 +38,7 @@ static void openWidgetMenu(Widget * parent) menu->addLine("Full screen", [=]() { parent->setFullscreen(true); }); - if(parent->getOptions() && parent->getOptions()->name) + if(parent->getOptions() && parent->getOptions()->name) menu->addLine(TR_WIDGET_SETTINGS, [=]() { new WidgetSettings(parent, parent); }); @@ -78,11 +78,11 @@ bool Widget::onTouchEnd(coord_t x, coord_t y) if (hasFocus()) { - // TODO: find a better way - if (touchState.tapCount == 0) - onPress(); - else if (touchState.tapCount > 1) + // if (touchState.tapCount == 0) + // onPress(); + // else + if (touchState.tapCount > 1) setFullscreen(true); } else { diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index 52be6fba8..01343abfb 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit 52be6fba83b514229c61cda2365db2d7548d5d74 +Subproject commit 01343abfbd7619fddb785a81021837ecd60c9a48