1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

Merge branch 'skypoldo-spinbox-rollover' into dev-7.0

This commit is contained in:
Themba Dube 2020-04-06 19:42:34 -04:00
commit c0d689b698
2 changed files with 53 additions and 7 deletions

View File

@ -78,6 +78,7 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
ext->step = 1; ext->step = 1;
ext->range_max = 99999; ext->range_max = 99999;
ext->range_min = -99999; ext->range_min = -99999;
ext->rollover = false;
/*The signal and design functions are not copied so set them here*/ /*The signal and design functions are not copied so set them here*/
@ -102,7 +103,7 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
lv_spinbox_set_digit_format(spinbox, (uint8_t)copy_ext->digit_count, (uint8_t)copy_ext->dec_point_pos); lv_spinbox_set_digit_format(spinbox, (uint8_t)copy_ext->digit_count, (uint8_t)copy_ext->dec_point_pos);
lv_spinbox_set_range(spinbox, copy_ext->range_min, copy_ext->range_max); lv_spinbox_set_range(spinbox, copy_ext->range_min, copy_ext->range_max);
lv_spinbox_set_step(spinbox, copy_ext->step); lv_spinbox_set_step(spinbox, copy_ext->step);
lv_spinbox_set_rollover(spinbox, copy_ext->rollover);
/*Refresh the style with new signal function*/ /*Refresh the style with new signal function*/
lv_obj_refresh_style(spinbox, LV_STYLE_PROP_ALL); lv_obj_refresh_style(spinbox, LV_STYLE_PROP_ALL);
@ -119,6 +120,19 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
* Setter functions * Setter functions
*====================*/ *====================*/
/**
* Set spinbox rollover function
* @param spinbox pointer to spinbox
* @param b true or false to enable or disable (default)
*/
void lv_spinbox_set_rollover(lv_obj_t * spinbox, bool b) {
LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
ext->rollover = b;
}
/** /**
* Set spinbox value * Set spinbox value
* @param spinbox pointer to spinbox * @param spinbox pointer to spinbox
@ -223,6 +237,18 @@ void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding)
* Getter functions * Getter functions
*====================*/ *====================*/
/**
* Get spinbox rollover function status
* @param spinbox pointer to spinbox
*/
bool lv_spinbox_get_rollover(lv_obj_t * spinbox) {
LV_ASSERT_OBJ(spinbox, LV_OBJX_NAME);
lv_spinbox_ext_t * ext = lv_obj_get_ext_attr(spinbox);
return ext->rollover;
}
/** /**
* Get the spinbox numeral value (user has to convert to float according to its digit format) * Get the spinbox numeral value (user has to convert to float according to its digit format)
* @param spinbox pointer to spinbox * @param spinbox pointer to spinbox
@ -292,8 +318,11 @@ void lv_spinbox_increment(lv_obj_t * spinbox)
if((ext->value + ext->step) > 0 && ext->value < 0) ext->value = -ext->value; if((ext->value + ext->step) > 0 && ext->value < 0) ext->value = -ext->value;
ext->value += ext->step; ext->value += ext->step;
} } else {
else { // Rollover?
if ((ext->rollover) && (ext->value == ext->range_max))
ext->value = ext->range_min;
else
ext->value = ext->range_max; ext->value = ext->range_max;
} }
@ -314,8 +343,11 @@ void lv_spinbox_decrement(lv_obj_t * spinbox)
/*Special mode when zero crossing*/ /*Special mode when zero crossing*/
if((ext->value - ext->step) < 0 && ext->value > 0) ext->value = -ext->value; if((ext->value - ext->step) < 0 && ext->value > 0) ext->value = -ext->value;
ext->value -= ext->step; ext->value -= ext->step;
} } else {
else { // Rollover?
if ((ext->rollover) && (ext->value == ext->range_min))
ext->value = ext->range_max;
else
ext->value = ext->range_min; ext->value = ext->range_min;
} }

View File

@ -42,6 +42,7 @@ typedef struct {
int32_t range_max; int32_t range_max;
int32_t range_min; int32_t range_min;
int32_t step; int32_t step;
uint8_t rollover : 1; // Set to true for rollover functionality
uint16_t digit_count : 4; uint16_t digit_count : 4;
uint16_t dec_point_pos : 4; /*if 0, there is no separator and the number is an integer*/ uint16_t dec_point_pos : 4; /*if 0, there is no separator and the number is an integer*/
uint16_t digit_padding_left : 4; uint16_t digit_padding_left : 4;
@ -72,6 +73,13 @@ lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy);
* Setter functions * Setter functions
*====================*/ *====================*/
/**
* Set spinbox rollover function
* @param spinbox pointer to spinbox
* @param b true or false to enable or disable (default)
*/
void lv_spinbox_set_rollover(lv_obj_t * spinbox, bool b);
/** /**
* Set spinbox value * Set spinbox value
* @param spinbox pointer to spinbox * @param spinbox pointer to spinbox
@ -114,6 +122,12 @@ void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding);
* Getter functions * Getter functions
*====================*/ *====================*/
/**
* Get spinbox rollover function status
* @param spinbox pointer to spinbox
*/
bool lv_spinbox_get_rollover(lv_obj_t * spinbox);
/** /**
* Get the spinbox numeral value (user has to convert to float according to its digit format) * Get the spinbox numeral value (user has to convert to float according to its digit format)
* @param spinbox pointer to spinbox * @param spinbox pointer to spinbox