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:
committed by
Raphael Coeffic
parent
d438525f72
commit
2baf771c30
+19
-11
@@ -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
@@ -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
@@ -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)) {
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user