From fd05bcab1996fb60d15e52daf300919d3d5d726e Mon Sep 17 00:00:00 2001 From: jfrickmann Date: Mon, 12 Jul 2021 15:33:12 -0400 Subject: [PATCH] One swipe at a time Added a timeout so we do not get a swipe storm during slide events --- radio/src/lua/widgets.cpp | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/radio/src/lua/widgets.cpp b/radio/src/lua/widgets.cpp index 0abba222a..105ab320e 100644 --- a/radio/src/lua/widgets.cpp +++ b/radio/src/lua/widgets.cpp @@ -32,9 +32,10 @@ #define LUA_WARNING_INFO_LEN 64 #if defined(HARDWARE_TOUCH) -#define EVT_TOUCH_TAP_TIME 25 -#define EVT_TOUCH_SWIPE_LOCK 4 -#define EVT_TOUCH_SWIPE_SPEED 35 +#define EVT_TOUCH_TAP_TIME 25 +#define EVT_TOUCH_SWIPE_LOCK 4 +#define EVT_TOUCH_SWIPE_SPEED 35 +#define EVT_TOUCH_SWIPE_TIMEOUT 50 #endif constexpr int LUA_WIDGET_REFRESH = 1000 / 10; // 10 Hz @@ -226,6 +227,7 @@ class LuaWidget: public Widget static coord_t slideX; static coord_t slideY; static tmr10ms_t lastTouchDown; + static tmr10ms_t swipeTimeOut; #endif void checkEvents() override; void setErrorMessage(const char * funcName); @@ -241,6 +243,7 @@ coord_t LuaWidget::startY = 0; coord_t LuaWidget::slideX = 0; coord_t LuaWidget::slideY = 0; tmr10ms_t LuaWidget::lastTouchDown = 0; +tmr10ms_t LuaWidget::swipeTimeOut = 0; #endif void l_pushtableint(const char * key, int value) @@ -409,17 +412,25 @@ void LuaWidget::refresh(BitmapBuffer* dc) coord_t absX = (slideX < 0) ? -slideX : slideX; coord_t absY = (slideY < 0) ? -slideY : slideY; - if (absX > EVT_TOUCH_SWIPE_LOCK * absY) { - if (slideX > EVT_TOUCH_SWIPE_SPEED) - l_pushtablebool("swipeRight", true); - else if (slideX < -EVT_TOUCH_SWIPE_SPEED) - l_pushtablebool("swipeLeft", true); - } - else if (absY > EVT_TOUCH_SWIPE_LOCK * absX) { - if (slideY > EVT_TOUCH_SWIPE_SPEED) - l_pushtablebool("swipeDown", true); - else if (slideY < -EVT_TOUCH_SWIPE_SPEED) - l_pushtablebool("swipeUp", true); + if (get_tmr10ms() > swipeTimeOut) { + if (absX > EVT_TOUCH_SWIPE_LOCK * absY) { + if (slideX > EVT_TOUCH_SWIPE_SPEED) { + l_pushtablebool("swipeRight", true); + swipeTimeOut = get_tmr10ms() + EVT_TOUCH_SWIPE_TIMEOUT; + } else if (slideX < -EVT_TOUCH_SWIPE_SPEED) { + l_pushtablebool("swipeLeft", true); + swipeTimeOut = get_tmr10ms() + EVT_TOUCH_SWIPE_TIMEOUT; + } + } + else if (absY > EVT_TOUCH_SWIPE_LOCK * absX) { + if (slideY > EVT_TOUCH_SWIPE_SPEED) { + l_pushtablebool("swipeDown", true); + swipeTimeOut = get_tmr10ms() + EVT_TOUCH_SWIPE_TIMEOUT; + } else if (slideY < -EVT_TOUCH_SWIPE_SPEED) { + l_pushtablebool("swipeUp", true); + swipeTimeOut = get_tmr10ms() + EVT_TOUCH_SWIPE_TIMEOUT; + } + } } } } else