diff --git a/radio/src/thirdparty/libopenui/src/slider.cpp b/radio/src/thirdparty/libopenui/src/slider.cpp index 7f4494eb3..26a5feac9 100644 --- a/radio/src/thirdparty/libopenui/src/slider.cpp +++ b/radio/src/thirdparty/libopenui/src/slider.cpp @@ -25,9 +25,16 @@ static void slider_changed_cb(lv_event_t * e) { lv_obj_t * target = lv_event_get_target(e); - if (!lv_slider_is_dragged(target)) { - Slider* sl = (Slider*)lv_obj_get_user_data(target); - sl->setValue(lv_slider_get_value(target)); + auto code = lv_event_get_code(e); + + Slider* sl = (Slider*)lv_obj_get_user_data(target); + if (code == LV_EVENT_VALUE_CHANGED) { + // if (!lv_slider_is_dragged(target)) { + if (sl != nullptr) + sl->setValue(lv_slider_get_value(target)); + // } + } else if (code == LV_EVENT_PRESSED) { + sl->setEditMode(true); } } @@ -50,14 +57,15 @@ Slider::Slider(Window* parent, const rect_t& rect, int32_t vmin, int32_t vmax, 0, 0, &sliderFactory), vmin(vmin), vmax(vmax), - getValue(std::move(getValue)), + _getValue(std::move(getValue)), _setValue(std::move(setValue)) { - lv_obj_add_event_cb(lvobj, slider_changed_cb, LV_EVENT_VALUE_CHANGED, NULL); + lv_obj_add_event_cb(lvobj, slider_changed_cb, LV_EVENT_VALUE_CHANGED, this); + lv_obj_add_event_cb(lvobj, slider_changed_cb, LV_EVENT_PRESSED, this); lv_slider_set_range(lvobj, vmin, vmax); - if (getValue) - lv_slider_set_value(lvobj, getValue(), LV_ANIM_OFF); + if (_getValue != nullptr) + lv_slider_set_value(lvobj, _getValue(), LV_ANIM_OFF); // LV_PART_MAIN lv_style_init(&style_main); @@ -110,14 +118,14 @@ void Slider::onEvent(event_t event) if (editMode) { if (event == EVT_ROTARY_RIGHT) { - setValue(getValue() + ROTARY_ENCODER_SPEED()); - lv_slider_set_value(lvobj, getValue(), LV_ANIM_OFF); + setValue(_getValue() + ROTARY_ENCODER_SPEED()); + lv_slider_set_value(lvobj, _getValue(), LV_ANIM_OFF); onKeyPress(); return; } else if (event == EVT_ROTARY_LEFT) { - setValue(getValue() - ROTARY_ENCODER_SPEED()); - lv_slider_set_value(lvobj, getValue(), LV_ANIM_OFF); + setValue(_getValue() - ROTARY_ENCODER_SPEED()); + lv_slider_set_value(lvobj, _getValue(), LV_ANIM_OFF); onKeyPress(); return; } else if (event == EVT_KEY_FIRST(KEY_EXIT)) diff --git a/radio/src/thirdparty/libopenui/src/slider.h b/radio/src/thirdparty/libopenui/src/slider.h index fb26e551e..d289676d7 100644 --- a/radio/src/thirdparty/libopenui/src/slider.h +++ b/radio/src/thirdparty/libopenui/src/slider.h @@ -33,8 +33,8 @@ class Slider : public FormField void setValue(int value) { - _setValue(limit(vmin, value, vmax)); - invalidate(); + if (_setValue != nullptr) + _setValue(limit(vmin, value, vmax)); } void paint(BitmapBuffer* dc) override; @@ -48,6 +48,6 @@ class Slider : public FormField int vmin; int vmax; bool sliding = false; - std::function getValue; + std::function _getValue; std::function _setValue; }; diff --git a/radio/src/thirdparty/libopenui/src/static.h b/radio/src/thirdparty/libopenui/src/static.h index 7c8c18545..0d4c9d680 100644 --- a/radio/src/thirdparty/libopenui/src/static.h +++ b/radio/src/thirdparty/libopenui/src/static.h @@ -32,10 +32,12 @@ class StaticText: public Window label = lv_label_create(lvobj); lv_label_set_text(label, this->text.c_str()); - auto color = COLOR_VAL(textFlags); - lv_obj_set_style_text_color(label, lv_color_make(GET_RED(color), GET_GREEN(color), GET_BLUE(color)), LV_PART_MAIN); + lv_obj_set_style_text_color(label, makeLvColor(textFlags), LV_PART_MAIN); if (textFlags & CENTERED) lv_obj_center(label); + else if (textFlags & RIGHT) + lv_obj_align(label, LV_ALIGN_TOP_RIGHT, 0, 0); + if (textFlags & FONT(BOLD)) { }