From 818cd278b24f54d36cf934fea3b6d5a6453bd383 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Wed, 25 Jul 2018 06:12:05 +0200 Subject: [PATCH] lv_label_no_break: fixes --- lv_draw/lv_draw.c | 3 +++ lv_misc/lv_txt.c | 9 ++++++--- lv_objx/lv_label.c | 6 ++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lv_draw/lv_draw.c b/lv_draw/lv_draw.c index 64e0bb764..ff6022602 100644 --- a/lv_draw/lv_draw.c +++ b/lv_draw/lv_draw.c @@ -365,6 +365,9 @@ void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, const lv_st } } + + if((flag & LV_TXT_FLAG_NO_BREAK) && (letter == '\n' || letter == '\r')) continue; + lv_color_t color = style->text.color; if(cmd_state == CMD_STATE_IN) color = recolor; diff --git a/lv_misc/lv_txt.c b/lv_misc/lv_txt.c index 76b886854..e55bcc890 100644 --- a/lv_misc/lv_txt.c +++ b/lv_misc/lv_txt.c @@ -195,10 +195,13 @@ lv_coord_t lv_txt_get_width(const char * txt, uint16_t length, continue; } } - width += lv_font_get_width(font, letter); - width += letter_space; - } + /*If NO_BREAK is set and '\n' or '\r' found then ignore this letter */ + if(((flag & LV_TXT_FLAG_NO_BREAK) == 0) || (letter != '\n' && letter != '\r')) { + width += lv_font_get_width(font, letter); + width += letter_space; + } + } width -= letter_space; /*Trim the last letter space. Important if the text is center aligned */ } diff --git a/lv_objx/lv_label.c b/lv_objx/lv_label.c index 304cb7ef9..95cfb4de8 100644 --- a/lv_objx/lv_label.c +++ b/lv_objx/lv_label.c @@ -516,8 +516,10 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, lv_point_t * pos) /*Search the line of the index letter */; while(txt[line_start] != '\0') { new_line_start += lv_txt_get_next_line(&txt[line_start], font, style->text.letter_space, max_w, flag); - if(pos->y <= y + letter_height) break; /*The line is found (stored in 'line_start')*/ - y += letter_height + style->text.line_space; + + if(pos->y <= y + letter_height) break; /*The line is found (stored in 'line_start')*/ + y += letter_height + style->text.line_space; + line_start = new_line_start; }