Better acceleration in menu auto scroll

This commit is contained in:
2022-08-16 17:38:55 +02:00
parent 8db536fcfd
commit 2423da8937
2 changed files with 16 additions and 8 deletions

View File

@ -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;
}
}

View File

@ -150,7 +150,13 @@ private:
std::vector<std::unique_ptr<MenuItem>> m_menuItems;
std::optional<espchrono::millis_clock::time_point> m_upHeld;
std::optional<espchrono::millis_clock::time_point> m_downHeld;
struct ButtonHeldInfo
{
espchrono::millis_clock::time_point nextTimestamp;
int counter{};
};
std::optional<ButtonHeldInfo> m_upHeld;
std::optional<ButtonHeldInfo> m_downHeld;
};
} // namespace espgui