From af7679a486688f31da15716a9c2a2e707f2285fd Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Tue, 27 Sep 2022 03:52:28 +0200 Subject: [PATCH] feat(color): More tuning of rotary encoder acc, enable for color picker (#2366) * Smoother encoder acceleration * Enable encoder accel on color picker --- radio/src/gui/colorlcd/LvglWrapper.cpp | 7 ++++--- radio/src/gui/colorlcd/color_editor.cpp | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/radio/src/gui/colorlcd/LvglWrapper.cpp b/radio/src/gui/colorlcd/LvglWrapper.cpp index d783f6048..c43be261f 100644 --- a/radio/src/gui/colorlcd/LvglWrapper.cpp +++ b/radio/src/gui/colorlcd/LvglWrapper.cpp @@ -261,10 +261,11 @@ static void rotaryDriverRead(lv_indev_drv_t *drv, lv_indev_data_t *data) else if (diff > 0) dir = 1; if (use_accel && (dir == prevDir)) { - if (g_tmr10ms - lastEvent <= ROTENC_DELAY_HIGHSPEED) { // 160 ms + auto speed = (g_tmr10ms - lastEvent) / abs(diff); + if (speed <= ROTENC_DELAY_HIGHSPEED/2) { // 80 ms // below ROTENC_DELAY_HIGHSPEED btw. events: accelerate - accel += abs(diff); - } else if (g_tmr10ms - lastEvent >= ROTENC_DELAY_MIDSPEED) { // 320 ms + accel = min((int8_t)(accel + 1), (int8_t)25); + } else if (speed >= ROTENC_DELAY_MIDSPEED/2) { // 160 ms // above ROTENC_DELAY_MIDSPEED btw. events: normal speed accel = 0; } diff --git a/radio/src/gui/colorlcd/color_editor.cpp b/radio/src/gui/colorlcd/color_editor.cpp index 7fdf92795..c8959ba82 100644 --- a/radio/src/gui/colorlcd/color_editor.cpp +++ b/radio/src/gui/colorlcd/color_editor.cpp @@ -140,6 +140,8 @@ ColorBar::ColorBar(Window* parent, const rect_t& r, uint32_t value, uint32_t maxValue, bool invert) : FormField(parent, r) { + lv_obj_add_flag(lvobj, LV_OBJ_FLAG_ENCODER_ACCEL); + lv_group_add_obj((lv_group_t*)lv_group_get_default(), lvobj); lv_obj_add_event_cb(lvobj, ColorBar::pressing, LV_EVENT_PRESSING, nullptr); lv_obj_add_event_cb(lvobj, ColorBar::on_key, LV_EVENT_KEY, nullptr);