From 528ef68a1d1eb40262a5964a58d659d98d501b03 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Thu, 13 Aug 2020 10:32:28 +0200 Subject: [PATCH] Carousel update --- radio/src/thirdparty/libopenui/src/carousel.cpp | 7 +++++-- radio/src/thirdparty/libopenui/src/carousel.h | 8 ++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/carousel.cpp b/radio/src/thirdparty/libopenui/src/carousel.cpp index 44c069ead..5495ba000 100644 --- a/radio/src/thirdparty/libopenui/src/carousel.cpp +++ b/radio/src/thirdparty/libopenui/src/carousel.cpp @@ -21,9 +21,12 @@ void CarouselWindow::update() { - auto first = min(selection - 2, items.size() - 5); + auto first = min(selection - 2, items.size() - count); first = max(0, first); coord_t lastPosition = 0; + coord_t spacing = 10; + if (count > 1) + spacing = (width() - items[0]->back->width() * (count - 1) - items[0]->front->width()) / (count - 1); int index = 0; for (auto & item: items) { @@ -41,7 +44,7 @@ void CarouselWindow::update() window->setTop((height() - window->height()) / 2); if (index == first) setScrollPositionX(lastPosition); - lastPosition += window->width() + CAROUSEL_SPACING; + lastPosition += window->width() + spacing; index += 1; } diff --git a/radio/src/thirdparty/libopenui/src/carousel.h b/radio/src/thirdparty/libopenui/src/carousel.h index 2fb4a7a82..23b4ec0ea 100644 --- a/radio/src/thirdparty/libopenui/src/carousel.h +++ b/radio/src/thirdparty/libopenui/src/carousel.h @@ -23,8 +23,6 @@ #include #include "button.h" -constexpr coord_t CAROUSEL_SPACING = 20; - class CarouselItem { public: CarouselItem(Window * front, Window * back): @@ -50,8 +48,9 @@ class CarouselWindow: public Window { friend class Carousel; public: - CarouselWindow(Window * parent, const rect_t & rect): - Window(parent, rect, NO_SCROLLBAR) + CarouselWindow(Window * parent, const rect_t & rect, uint8_t count): + Window(parent, rect, NO_SCROLLBAR), + count(count) { } @@ -90,6 +89,7 @@ class CarouselWindow: public Window { protected: std::vector items; int selection = 0; + uint8_t count; void update(); };