diff --git a/src/widgets/scale/lv_scale.c b/src/widgets/scale/lv_scale.c index 8d653a1476..015fe04146 100644 --- a/src/widgets/scale/lv_scale.c +++ b/src/widgets/scale/lv_scale.c @@ -1017,10 +1017,18 @@ static void scale_calculate_main_compensation(lv_obj_t * obj) const uint32_t total_tick_count = scale->total_tick_count; - if(total_tick_count <= 1) return; /* Not supported in round modes */ if(LV_SCALE_MODE_ROUND_OUTER == scale->mode || LV_SCALE_MODE_ROUND_INNER == scale->mode) return; + /* Reset compensation when scale has 1 or less ticks on vertical and horizontal scales */ + if(total_tick_count <= 1) { + /* Store initial tick width to be used in the main line drawing */ + scale_store_main_line_tick_width_compensation(obj, 0U, false, 0U, 0U); + + /* Store last tick width to be used in the main line drawing */ + scale_store_main_line_tick_width_compensation(obj, total_tick_count, false, 0U, 0U); + } + /* Major tick style */ lv_draw_line_dsc_t major_tick_dsc; lv_draw_line_dsc_init(&major_tick_dsc); @@ -1075,8 +1083,6 @@ static void scale_draw_main(lv_obj_t * obj, lv_event_t * event) lv_scale_t * scale = (lv_scale_t *)obj; lv_layer_t * layer = lv_event_get_layer(event); - if(scale->total_tick_count <= 1) return; - if((LV_SCALE_MODE_VERTICAL_LEFT == scale->mode || LV_SCALE_MODE_VERTICAL_RIGHT == scale->mode) || (LV_SCALE_MODE_HORIZONTAL_BOTTOM == scale->mode || LV_SCALE_MODE_HORIZONTAL_TOP == scale->mode)) { diff --git a/tests/ref_imgs/widgets/scale_9.png b/tests/ref_imgs/widgets/scale_9.png new file mode 100644 index 0000000000..b6457f447e Binary files /dev/null and b/tests/ref_imgs/widgets/scale_9.png differ diff --git a/tests/ref_imgs_vg_lite/widgets/scale_9.png b/tests/ref_imgs_vg_lite/widgets/scale_9.png new file mode 100644 index 0000000000..c55484a327 Binary files /dev/null and b/tests/ref_imgs_vg_lite/widgets/scale_9.png differ diff --git a/tests/src/test_cases/widgets/test_scale.c b/tests/src/test_cases/widgets/test_scale.c index ef0256d91d..a552f55c8c 100644 --- a/tests/src/test_cases/widgets/test_scale.c +++ b/tests/src/test_cases/widgets/test_scale.c @@ -637,4 +637,23 @@ void test_scale_properties(void) #endif } +void test_scale_with_1_tick(void) +{ + /* When the scale has 1 (or less) ticks, only the main part should be drawn, + * no ticks nor labels are expected to be drawn. */ + lv_obj_t * lv_obj_t_id = lv_scale_create(lv_screen_active()); + lv_obj_set_style_height(lv_obj_t_id, lv_pct(100), LV_PART_MAIN); + lv_obj_set_style_width(lv_obj_t_id, lv_pct(100), LV_PART_MAIN); + lv_obj_set_style_align(lv_obj_t_id, LV_ALIGN_CENTER, LV_PART_MAIN); + lv_obj_set_style_bg_opa(lv_obj_t_id, LV_OPA_TRANSP, LV_PART_MAIN); + lv_obj_set_style_radius(lv_obj_t_id, LV_RADIUS_CIRCLE, 0); + lv_scale_set_mode(lv_obj_t_id, LV_SCALE_MODE_ROUND_INNER); + lv_scale_set_range(lv_obj_t_id, 0, 100); + lv_scale_set_angle_range(lv_obj_t_id, 180); + lv_scale_set_rotation(lv_obj_t_id, 270); + lv_scale_set_total_tick_count(lv_obj_t_id, 1); + + TEST_ASSERT_EQUAL_SCREENSHOT("widgets/scale_9.png"); +} + #endif