From 139a8a47112582b5b1a4ce1a08303dbfea196b86 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Thu, 9 Jun 2022 13:53:49 +0200 Subject: [PATCH] Holding up/down in menudisplay repeatadly rotates --- src/menudisplay.cpp | 26 +++++++++++++++++++++++--- src/menudisplay.h | 5 +++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/menudisplay.cpp b/src/menudisplay.cpp index bfdcb68..c706ce3 100644 --- a/src/menudisplay.cpp +++ b/src/menudisplay.cpp @@ -3,6 +3,8 @@ // local includes #include "tftinstance.h" +using namespace std::chrono_literals; + namespace espgui { void MenuDisplay::start() { @@ -93,6 +95,18 @@ void MenuDisplay::redraw() { Base::redraw(); + if (m_upHoldingSince && espchrono::ago(*m_upHoldingSince) > 500ms) + { + m_upHoldingSince = espchrono::millis_clock::now(); + m_rotateOffset--; + } + + if (m_downHoldingSince && espchrono::ago(*m_downHoldingSince) > 500ms) + { + m_downHoldingSince = espchrono::millis_clock::now(); + m_rotateOffset++; + } + tft.setTextFont(4); tft.setTextColor(TFT_YELLOW, TFT_BLACK); @@ -197,14 +211,20 @@ void MenuDisplay::buttonPressed(Button button) { case Button::Left: this->back(); break; case Button::Right: m_pressed = true; break; - case Button::Up: m_rotateOffset--; break; - case Button::Down: m_rotateOffset++; break; + case Button::Up: m_rotateOffset--; m_upHoldingSince = espchrono::millis_clock::now(); break; + case Button::Down: m_rotateOffset++; m_downHoldingSince = espchrono::millis_clock::now(); break; } } void MenuDisplay::buttonReleased(Button button) { //Base::buttonPressed(button); - // TODO stop auto scroll + + switch (button) + { + case Button::Up: m_upHoldingSince = std::nullopt; break; + case Button::Down: m_downHoldingSince = std::nullopt; break; + default:; + } } } // namespace espgui diff --git a/src/menudisplay.h b/src/menudisplay.h index 102841a..deeb7b4 100644 --- a/src/menudisplay.h +++ b/src/menudisplay.h @@ -8,6 +8,8 @@ #include #include #include +#include +#include // local includes #include "displaywithtitle.h" @@ -146,5 +148,8 @@ private: bool m_pressed; std::vector> m_menuItems; + + std::optional m_upHoldingSince; + std::optional m_downHoldingSince; }; } // namespace espgui