From c7c36d0652be6161c910bc57407534e14740b6af Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 23 Feb 2021 18:40:14 +0100 Subject: [PATCH] Roller fix --- .../thirdparty/libopenui/src/libopenui_helpers.h | 5 +++++ radio/src/thirdparty/libopenui/src/roller.h | 14 +++++++------- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/radio/src/thirdparty/libopenui/src/libopenui_helpers.h b/radio/src/thirdparty/libopenui/src/libopenui_helpers.h index fd2329100..5c5597be4 100644 --- a/radio/src/thirdparty/libopenui/src/libopenui_helpers.h +++ b/radio/src/thirdparty/libopenui/src/libopenui_helpers.h @@ -61,6 +61,11 @@ inline int multDivRoundClosest(int v, int n, int d) return divRoundClosest(v * n, d); } +inline int mod(int k, int n) +{ + return ((k %= n) < 0) ? k + n : k; +} + template inline T sgn(T a) { diff --git a/radio/src/thirdparty/libopenui/src/roller.h b/radio/src/thirdparty/libopenui/src/roller.h index b4bf13fc9..d3a5ac846 100644 --- a/radio/src/thirdparty/libopenui/src/roller.h +++ b/radio/src/thirdparty/libopenui/src/roller.h @@ -68,7 +68,7 @@ class Roller: public Choice void paint(BitmapBuffer * dc) override { int32_t value = getValue(); - auto valuesCount = getValuesCount(); + auto valuesCount = (int)getValuesCount(); if (valuesCount == 0) { return; } @@ -76,11 +76,10 @@ class Roller: public Choice int index = (scrollPositionY - ROLLER_LINE_HEIGHT + 1) / ROLLER_LINE_HEIGHT; coord_t y = index * ROLLER_LINE_HEIGHT; coord_t yMax = scrollPositionY + 3 * ROLLER_LINE_HEIGHT; - while (index < 0) - index += valuesCount; + index = mod(index, valuesCount); while (y < yMax) { - auto displayedValue = getValueFromIndex(index % valuesCount); + auto displayedValue = getValueFromIndex(index); auto fgColor = DISABLE_COLOR; if (value == displayedValue) { @@ -99,7 +98,9 @@ class Roller: public Choice dc->drawSolidHorizontalLine(0, y - 10, width(), DISABLE_COLOR); } - index += 1; + if (++index == valuesCount) + index = 0; + y += ROLLER_LINE_HEIGHT; } } @@ -167,10 +168,9 @@ class Roller: public Choice lastScrollPositionY = scrollPositionY; auto valuesCount = getValuesCount(); - auto newValue = getValueFromIndex((((scrollPositionY / ROLLER_LINE_HEIGHT) + 1) + valuesCount) % valuesCount); + auto newValue = getValueFromIndex(mod((scrollPositionY / ROLLER_LINE_HEIGHT) + 1, valuesCount)); setValue(newValue); invalidate(); } }; -