fix(roller): clip overflowing text
This commit is contained in:
@@ -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_obj_init_draw_label_dsc(roller, LV_PART_MAIN, &label_draw_dsc);
|
||||||
lv_draw_ctx_t * draw_ctx = lv_event_get_draw_ctx(e);
|
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;
|
lv_area_t sel_area;
|
||||||
get_sel_area(roller, &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);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
draw_ctx->clip_area = clip_area_ori;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_sel_area(lv_obj_t * obj, lv_area_t * sel_area)
|
static void get_sel_area(lv_obj_t * obj, lv_area_t * sel_area)
|
||||||
|
|||||||
Reference in New Issue
Block a user