diff --git a/src/widgets/lv_roller.c b/src/widgets/lv_roller.c index ad75bdc6a..1ead5e2a4 100644 --- a/src/widgets/lv_roller.c +++ b/src/widgets/lv_roller.c @@ -528,6 +528,14 @@ static void draw_label(lv_event_t * e) lv_obj_init_draw_label_dsc(roller, LV_PART_MAIN, &label_draw_dsc); lv_draw_ctx_t * draw_ctx = lv_event_get_draw_ctx(e); + /*If the roller has shadow or outline it has some ext. draw size + *therefore the label can overflow the roller's boundaries. + *To solve this limit the clip area to the "plain" roller.*/ + const lv_area_t * clip_area_ori = draw_ctx->clip_area; + lv_area_t roller_clip_area; + if(!_lv_area_intersect(&roller_clip_area, draw_ctx->clip_area, &roller->coords)) return; + draw_ctx->clip_area = &roller_clip_area; + lv_area_t sel_area; get_sel_area(roller, &sel_area); @@ -553,6 +561,8 @@ static void draw_label(lv_event_t * e) lv_draw_label(draw_ctx, &label_draw_dsc, &label_obj->coords, lv_label_get_text(label_obj), NULL); draw_ctx->clip_area = clip_area_ori; } + + draw_ctx->clip_area = clip_area_ori; } static void get_sel_area(lv_obj_t * obj, lv_area_t * sel_area)