Implement auto scroll in menu displays by keeping up/down buttons pressed
This commit is contained in:
@ -3,6 +3,8 @@
|
|||||||
// local includes
|
// local includes
|
||||||
#include "tftinstance.h"
|
#include "tftinstance.h"
|
||||||
|
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
namespace espgui {
|
namespace espgui {
|
||||||
void MenuDisplay::start()
|
void MenuDisplay::start()
|
||||||
{
|
{
|
||||||
@ -35,7 +37,18 @@ void MenuDisplay::update()
|
|||||||
{
|
{
|
||||||
Base::update();
|
Base::update();
|
||||||
|
|
||||||
if (!m_pressed)
|
const auto now = espchrono::millis_clock::now();
|
||||||
|
if (m_upHeld && now >= *m_upHeld)
|
||||||
|
{
|
||||||
|
*m_upHeld += 200ms;
|
||||||
|
m_rotateOffset--;
|
||||||
|
}
|
||||||
|
if (m_downHeld && now >= *m_downHeld)
|
||||||
|
{
|
||||||
|
*m_downHeld += 200ms;
|
||||||
|
m_rotateOffset++;
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
const auto offset = m_rotateOffset;
|
const auto offset = m_rotateOffset;
|
||||||
m_rotateOffset = 0;
|
m_rotateOffset = 0;
|
||||||
@ -81,7 +94,8 @@ void MenuDisplay::update()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (m_pressed)
|
||||||
{
|
{
|
||||||
m_pressed = false;
|
m_pressed = false;
|
||||||
if (m_selectedIndex >= 0)
|
if (m_selectedIndex >= 0)
|
||||||
@ -198,14 +212,30 @@ void MenuDisplay::buttonPressed(Button button)
|
|||||||
{
|
{
|
||||||
case Button::Left: this->back(); break;
|
case Button::Left: this->back(); break;
|
||||||
case Button::Right: m_pressed = true; break;
|
case Button::Right: m_pressed = true; break;
|
||||||
case Button::Up: m_rotateOffset--; break;
|
case Button::Up:
|
||||||
case Button::Down: m_rotateOffset++; break;
|
m_rotateOffset--;
|
||||||
|
m_upHeld = espchrono::millis_clock::now() + 200ms;
|
||||||
|
break;
|
||||||
|
case Button::Down:
|
||||||
|
m_rotateOffset++;
|
||||||
|
m_downHeld = espchrono::millis_clock::now() + 200ms;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MenuDisplay::buttonReleased(Button button)
|
void MenuDisplay::buttonReleased(Button button)
|
||||||
{
|
{
|
||||||
//Base::buttonPressed(button);
|
//Base::buttonPressed(button);
|
||||||
// TODO stop auto scroll
|
|
||||||
|
switch (button)
|
||||||
|
{
|
||||||
|
case Button::Up:
|
||||||
|
m_upHeld = std::nullopt;
|
||||||
|
break;
|
||||||
|
case Button::Down:
|
||||||
|
m_downHeld = std::nullopt;
|
||||||
|
break;
|
||||||
|
default:;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} // namespace espgui
|
} // namespace espgui
|
||||||
|
@ -9,6 +9,9 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
// 3rdparty lib includes
|
||||||
|
#include <espchrono.h>
|
||||||
|
|
||||||
// local includes
|
// local includes
|
||||||
#include "displaywithtitle.h"
|
#include "displaywithtitle.h"
|
||||||
#include "textinterface.h"
|
#include "textinterface.h"
|
||||||
@ -146,5 +149,8 @@ private:
|
|||||||
bool m_pressed;
|
bool m_pressed;
|
||||||
|
|
||||||
std::vector<std::unique_ptr<MenuItem>> m_menuItems;
|
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;
|
||||||
};
|
};
|
||||||
} // namespace espgui
|
} // namespace espgui
|
||||||
|
Reference in New Issue
Block a user