diff --git a/lv_objx/lv_spinbox.c b/lv_objx/lv_spinbox.c index a5a78c2c1f..9ec5766a58 100644 --- a/lv_objx/lv_spinbox.c +++ b/lv_objx/lv_spinbox.c @@ -205,6 +205,18 @@ void lv_spinbox_set_value_changed_cb(const lv_obj_t * spinbox, lv_spinbox_value_ ext->value_changed_cb = cb; } +/** + * Set spinbox left padding in digits count (added between sign and first digit) + * @param spinbox pointer to spinbox + * @param cb Callback function called on value change event + */ +void lv_spinbox_set_padding_left(const lv_obj_t * spinbox, uint8_t padding) +{ + lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox); + ext->digit_padding_left = padding; + lv_spinbox_updatevalue(spinbox); +} + /*===================== * Getter functions *====================*/ @@ -387,7 +399,7 @@ static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, void * p if(c == LV_GROUP_KEY_ENTER) { int p = lv_ta_get_cursor_pos(spinbox); - if(p == ext->digit_count + 1) + if(p == (1 + ext->digit_padding_left + ext->digit_count)) { for(int i = 0; i < ext->digit_count; i++) lv_spinbox_step_previous(spinbox); @@ -422,6 +434,12 @@ static void lv_spinbox_updatevalue(lv_obj_t * spinbox) ext->digits[0] = v>=0 ? '+' : '-'; + int pl; /*padding left*/ + for(pl = 0; pl < ext->digit_padding_left; pl++) + { + ext->digits[1 + pl] = ' '; + } + int i = 0; uint8_t digits[16]; @@ -436,30 +454,31 @@ static void lv_spinbox_updatevalue(lv_obj_t * spinbox) int k; for(k = 0; k < intDigits; k++) { - ext->digits[1 + k] = '0' + digits[--i]; + ext->digits[1 + pl + k] = '0' + digits[--i]; } - ext->digits[1 + intDigits] = '.'; + ext->digits[1 + pl + intDigits] = '.'; int d; for(d = 0; d < decDigits; d++) { - ext->digits[1 + intDigits + 1 + d] = '0' + digits[--i]; + ext->digits[1 + pl + intDigits + 1 + d] = '0' + digits[--i]; } - ext->digits[1 + intDigits + 1 + decDigits] = '\0'; + ext->digits[1 + pl + intDigits + 1 + decDigits] = '\0'; lv_label_set_text(ext->ta.label, (char*)ext->digits); int32_t step = ext->step; - uint8_t cPos = ext->digit_count; + uint8_t cPos = ext->digit_count + pl; while(step >= 10) { step /= 10; cPos--; } - if(cPos > intDigits) + + if(cPos > pl + intDigits ) { cPos ++; } diff --git a/lv_objx/lv_spinbox.h b/lv_objx/lv_spinbox.h index 25dfbde825..628e5dfae2 100644 --- a/lv_objx/lv_spinbox.h +++ b/lv_objx/lv_spinbox.h @@ -127,6 +127,12 @@ void lv_spinbox_set_range(const lv_obj_t * spinbox, int32_t range_min, int32_t r */ void lv_spinbox_set_value_changed_cb(const lv_obj_t * spinbox, lv_spinbox_value_changed_cb_t cb); +/** + * Set spinbox left padding in digits count (added between sign and first digit) + * @param spinbox pointer to spinbox + * @param cb Callback function called on value change event + */ +void lv_spinbox_set_padding_left(const lv_obj_t * spinbox, uint8_t padding); /*===================== * Getter functions