From 2423da893702af3447b96c5ca666575e03681034 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Tue, 16 Aug 2022 17:38:55 +0200 Subject: [PATCH] Better acceleration in menu auto scroll --- src/menudisplay.cpp | 14 ++++++++------ src/menudisplay.h | 10 ++++++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/menudisplay.cpp b/src/menudisplay.cpp index 95d3c35..93f407a 100644 --- a/src/menudisplay.cpp +++ b/src/menudisplay.cpp @@ -38,14 +38,16 @@ void MenuDisplay::update() Base::update(); const auto now = espchrono::millis_clock::now(); - if (m_upHeld && now >= *m_upHeld) + if (m_upHeld && now >= m_upHeld->nextTimestamp) { - *m_upHeld += 200ms; + m_upHeld->nextTimestamp += m_upHeld->counter > 3 ? 100ms : 200ms; + m_upHeld->counter++; m_rotateOffset--; } - if (m_downHeld && now >= *m_downHeld) + if (m_downHeld && now >= m_downHeld->nextTimestamp) { - *m_downHeld += 200ms; + m_downHeld->nextTimestamp += m_downHeld->counter > 3 ? 100ms : 200ms; + m_downHeld->counter++; m_rotateOffset++; } @@ -214,11 +216,11 @@ void MenuDisplay::buttonPressed(Button button) case Button::Right: m_pressed = true; break; case Button::Up: m_rotateOffset--; - m_upHeld = espchrono::millis_clock::now() + 200ms; + m_upHeld = ButtonHeldInfo { .nextTimestamp = espchrono::millis_clock::now() + 300ms }; break; case Button::Down: m_rotateOffset++; - m_downHeld = espchrono::millis_clock::now() + 200ms; + m_downHeld = ButtonHeldInfo { .nextTimestamp = espchrono::millis_clock::now() + 300ms }; break; } } diff --git a/src/menudisplay.h b/src/menudisplay.h index 5dff818..f156512 100644 --- a/src/menudisplay.h +++ b/src/menudisplay.h @@ -150,7 +150,13 @@ private: std::vector> m_menuItems; - std::optional m_upHeld; - std::optional m_downHeld; + struct ButtonHeldInfo + { + espchrono::millis_clock::time_point nextTimestamp; + int counter{}; + }; + + std::optional m_upHeld; + std::optional m_downHeld; }; } // namespace espgui