1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-14 06:42:58 +08:00

lv_draw_label: trim the traling whitespaces when aligned to the middle

This commit is contained in:
Gabor Kiss-Vamosi 2018-07-11 18:56:54 +02:00
parent 8a7a966a7b
commit 9c0bb3d392

View File

@ -273,7 +273,7 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
} }
/*Init variables for the first line*/ /*Init variables for the first line*/
lv_coord_t line_length = 0; lv_coord_t line_widht = 0;
uint32_t line_start = 0; uint32_t line_start = 0;
uint32_t line_end = lv_txt_get_next_line(txt, font, style->text.letter_space, w, flag); uint32_t line_end = lv_txt_get_next_line(txt, font, style->text.letter_space, w, flag);
@ -283,9 +283,19 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
/*Align the line to middle if enabled*/ /*Align the line to middle if enabled*/
if(flag & LV_TXT_FLAG_CENTER) { if(flag & LV_TXT_FLAG_CENTER) {
line_length = lv_txt_get_width(&txt[line_start], line_end - line_start, line_widht = lv_txt_get_width(&txt[line_start], line_end - line_start,
font, style->text.letter_space, flag); font, style->text.letter_space, flag);
pos.x += (w - line_length) / 2; /*Trim closing spaces.*/
uint16_t i;
for(i = line_end - 1; i > 0; i--) {
if(txt[i] == ' ' || txt[i] == '\n' || txt[i] == '\r') {
line_widht -= lv_font_get_width(font, txt[i]);
line_widht -= style->text.letter_space;
} else {
break;
}
}
pos.x += (w - line_widht) / 2;
} }
cmd_state_t cmd_state = CMD_STATE_WAIT; cmd_state_t cmd_state = CMD_STATE_WAIT;
@ -371,9 +381,19 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st
pos.x = coords->x1; pos.x = coords->x1;
/*Align to middle*/ /*Align to middle*/
if(flag & LV_TXT_FLAG_CENTER) { if(flag & LV_TXT_FLAG_CENTER) {
line_length = lv_txt_get_width(&txt[line_start], line_end - line_start, line_widht = lv_txt_get_width(&txt[line_start], line_end - line_start,
font, style->text.letter_space, flag); font, style->text.letter_space, flag);
pos.x += (w - line_length) / 2; /*Trim closing spaces.*/
uint16_t i;
for(i = line_end - 1; i > line_start; i--) {
if(txt[i] == ' ' || txt[i] == '\n' || txt[i] == '\r') {
line_widht -= lv_font_get_width(font, txt[i]);
line_widht -= style->text.letter_space;
} else {
break;
}
}
pos.x += (w - line_widht) / 2;
} }
/*Go the next line position*/ /*Go the next line position*/
pos.y += lv_font_get_height(font); pos.y += lv_font_get_height(font);