1. fix slider setValue and getValue.

2. add editMode processing so focus gets set on pressing slider.
3. fix right align of Static.  Clean up color processing
This commit is contained in:
kkoenig1@optonline.com
2022-06-11 15:13:11 +02:00
committed by Raphael Coeffic
parent d438525f72
commit 2baf771c30
3 changed files with 26 additions and 16 deletions
+19 -11
View File
@@ -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))
+3 -3
View File
@@ -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<int()> getValue;
std::function<int()> _getValue;
std::function<void(int)> _setValue;
};
+4 -2
View File
@@ -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)) {
}