Lines Matching +full:- +full:- +full:include
9 #include "lv_label_private.h"
10 #include "../../misc/lv_area_private.h"
11 #include "../../misc/lv_anim_private.h"
12 #include "../../draw/lv_draw_label_private.h"
13 #include "../../core/lv_obj_class_private.h"
15 #include "../../core/lv_obj_private.h"
16 #include "../../misc/lv_assert.h"
17 #include "../../core/lv_group.h"
18 #include "../../display/lv_display.h"
19 #include "../../draw/lv_draw_private.h"
20 #include "../../misc/lv_color.h"
21 #include "../../misc/lv_math.h"
22 #include "../../misc/lv_bidi_private.h"
23 #include "../../misc/lv_text_ap.h"
24 #include "../../misc/lv_text_private.h"
25 #include "../../stdlib/lv_sprintf.h"
26 #include "../../stdlib/lv_string.h"
139 if(text == NULL) text = label->text; in lv_label_set_text()
141 lv_label_revert_dots(obj); /*In case text == label->text*/ in lv_label_set_text()
145 if(label->text == text && label->static_txt == 0) { in lv_label_set_text()
146 label->text = lv_realloc(label->text, text_len); in lv_label_set_text()
147 LV_ASSERT_MALLOC(label->text); in lv_label_set_text()
148 if(label->text == NULL) return; in lv_label_set_text()
151 lv_text_ap_proc(label->text, label->text); in lv_label_set_text()
157 if(label->text != NULL && label->static_txt == 0) { in lv_label_set_text()
158 lv_free(label->text); in lv_label_set_text()
159 label->text = NULL; in lv_label_set_text()
162 label->text = lv_malloc(text_len); in lv_label_set_text()
163 LV_ASSERT_MALLOC(label->text); in lv_label_set_text()
164 if(label->text == NULL) return; in lv_label_set_text()
169 label->static_txt = 0; in lv_label_set_text()
189 if(label->text != NULL && label->static_txt == 0) { in lv_label_set_text_fmt()
190 lv_free(label->text); in lv_label_set_text_fmt()
191 label->text = NULL; in lv_label_set_text_fmt()
196 label->text = lv_text_set_text_vfmt(fmt, args); in lv_label_set_text_fmt()
198 label->static_txt = 0; /*Now the text is dynamically allocated*/ in lv_label_set_text_fmt()
208 if(label->static_txt == 0 && label->text != NULL) { in lv_label_set_text_static()
209 lv_free(label->text); in lv_label_set_text_static()
210 label->text = NULL; in lv_label_set_text_static()
214 label->static_txt = 1; in lv_label_set_text_static()
215 label->text = (char *)text; in lv_label_set_text_static()
230 lv_point_set(&label->offset, 0, 0); in lv_label_set_long_mode()
234 label->expand = 1; in lv_label_set_long_mode()
236 label->expand = 0; in lv_label_set_long_mode()
238 label->long_mode = long_mode; in lv_label_set_long_mode()
248 label->sel_start = index; in lv_label_set_text_selection_start()
262 label->sel_end = index; in lv_label_set_text_selection_end()
275 if(label->recolor == en) return; in lv_label_set_recolor()
277 label->recolor = en == false ? 0 : 1; in lv_label_set_recolor()
291 return label->text; in lv_label_get_text()
298 return label->long_mode; in lv_label_get_long_mode()
311 pos->y = 0; in lv_label_get_letter_pos()
314 pos->x = 0; in lv_label_get_letter_pos()
317 pos->x = lv_obj_get_content_width(obj); in lv_label_get_letter_pos()
320 pos->x = lv_obj_get_content_width(obj) / 2; in lv_label_get_letter_pos()
323 pos->x = 0; in lv_label_get_letter_pos()
349 if(last_line && label->long_mode == LV_LABEL_LONG_MODE_DOTS) flag |= LV_TEXT_FLAG_BREAK_ALL; in lv_label_get_letter_pos()
361 if((txt[byte_id - 1] == '\n' || txt[byte_id - 1] == '\r') && txt[byte_id] == '\0') { in lv_label_get_letter_pos()
376 visual_byte_pos = base_dir == LV_BASE_DIR_RTL ? 0 : byte_id - line_start; in lv_label_get_letter_pos()
380 uint32_t line_char_id = lv_text_encoded_get_char_id(&txt[line_start], byte_id - line_start); in lv_label_get_letter_pos()
383 …char_pos = lv_bidi_get_visual_pos(&txt[line_start], &mutable_bidi_txt, new_line_start - line_start, in lv_label_get_letter_pos()
392 visual_byte_pos = byte_id - line_start; in lv_label_get_letter_pos()
399 uint32_t length = new_line_start - line_start; in lv_label_get_letter_pos()
401 pos->x = x; in lv_label_get_letter_pos()
402 pos->y = y; in lv_label_get_letter_pos()
417 pos.x = pos_in->x - lv_obj_get_style_pad_left(obj, LV_PART_MAIN); in lv_label_get_letter_on()
418 pos.y = pos_in->y - lv_obj_get_style_pad_top(obj, LV_PART_MAIN); in lv_label_get_letter_on()
440 if(last_line && label->long_mode == LV_LABEL_LONG_MODE_DOTS) flag |= LV_TEXT_FLAG_BREAK_ALL; in lv_label_get_letter_on()
446 /*Include the NULL terminator in the last line*/ in lv_label_get_letter_on()
463 bidi_txt = lv_malloc(new_line_start - line_start + 1); in lv_label_get_letter_on()
464 txt_len = new_line_start - line_start; in lv_label_get_letter_on()
465 if(new_line_start > 0 && txt[new_line_start - 1] == '\0' && txt_len > 0) txt_len--; in lv_label_get_letter_on()
476 const lv_text_align_t align = lv_obj_calculate_style_text_align(obj, LV_PART_MAIN, label->text); in lv_label_get_letter_on()
477 uint32_t length = new_line_start - line_start; in lv_label_get_letter_on()
561 if(last_line && label->long_mode == LV_LABEL_LONG_MODE_DOTS) flag |= LV_TEXT_FLAG_BREAK_ALL; in lv_label_is_char_under_pos()
565 if(pos->y <= y + letter_height) break; /*The line is found (stored in 'line_start')*/ in lv_label_is_char_under_pos()
572 const lv_text_align_t align = lv_obj_calculate_style_text_align(obj, LV_PART_MAIN, label->text); in lv_label_is_char_under_pos()
576 …const int32_t line_w = lv_text_get_width_with_flags(&txt[line_start], new_line_start - line_start,… in lv_label_is_char_under_pos()
578 x += lv_area_get_width(&txt_coords) / 2 - line_w / 2; in lv_label_is_char_under_pos()
581 …const int32_t line_w = lv_text_get_width_with_flags(&txt[line_start], new_line_start - line_start,… in lv_label_is_char_under_pos()
583 x += lv_area_get_width(&txt_coords) - line_w; in lv_label_is_char_under_pos()
595 while(i <= new_line_start - 1) { in lv_label_is_char_under_pos()
608 if(pos->x < x) { in lv_label_is_char_under_pos()
618 return (pos->x >= (last_x - letter_space) && pos->x <= (last_x + max_diff)); in lv_label_is_char_under_pos()
627 return label->sel_start; in lv_label_get_text_selection_start()
640 return label->sel_end; in lv_label_get_text_selection_end()
652 return label->recolor == 0 ? false : true; in lv_label_get_recolor()
667 if(label->static_txt != 0) return; in lv_label_ins_text()
672 size_t old_len = lv_strlen(label->text); in lv_label_ins_text()
675 label->text = lv_realloc(label->text, new_len + 1); in lv_label_ins_text()
676 LV_ASSERT_MALLOC(label->text); in lv_label_ins_text()
677 if(label->text == NULL) return; in lv_label_ins_text()
680 pos = lv_text_get_encoded_length(label->text); in lv_label_ins_text()
683 lv_text_ins(label->text, pos, txt); in lv_label_ins_text()
693 if(label->static_txt) return; in lv_label_cut_text()
716 label->text = NULL; in lv_label_constructor()
717 label->recolor = 0; in lv_label_constructor()
718 label->static_txt = 0; in lv_label_constructor()
719 label->dot_begin = LV_LABEL_DOT_BEGIN_INV; in lv_label_constructor()
720 label->long_mode = LV_LABEL_LONG_MODE_WRAP; in lv_label_constructor()
721 lv_point_set(&label->offset, 0, 0); in lv_label_constructor()
724 label->hint.line_start = -1; in lv_label_constructor()
725 label->hint.coord_y = 0; in lv_label_constructor()
726 label->hint.y = 0; in lv_label_constructor()
730 label->sel_start = LV_DRAW_LABEL_NO_TXT_SEL; in lv_label_constructor()
731 label->sel_end = LV_DRAW_LABEL_NO_TXT_SEL; in lv_label_constructor()
746 if(!label->static_txt) lv_free(label->text); in lv_label_destructor()
747 label->text = NULL; in lv_label_destructor()
765 /* Italic or other non-typical letters can be drawn of out of the object. in lv_label_event()
775 if(label->invalid_size_cache) { in lv_label_event()
780 if(label->recolor != 0) flag |= LV_TEXT_FLAG_RECOLOR; in lv_label_event()
781 if(label->expand != 0) flag |= LV_TEXT_FLAG_EXPAND; in lv_label_event()
784 …if(lv_obj_get_style_width(obj, LV_PART_MAIN) == LV_SIZE_CONTENT && !obj->w_layout) w = LV_COORD_MA… in lv_label_event()
788 uint32_t dot_begin = label->dot_begin; in lv_label_event()
790 … lv_text_get_size(&label->size_cache, label->text, font, letter_space, line_space, w, flag); in lv_label_event()
793 … label->size_cache.y = LV_MIN(label->size_cache.y, lv_obj_get_style_max_height(obj, LV_PART_MAIN)); in lv_label_event()
795 label->invalid_size_cache = false; in lv_label_event()
799 self_size->x = LV_MAX(self_size->x, label->size_cache.x); in lv_label_event()
800 self_size->y = LV_MAX(self_size->y, label->size_cache.y); in lv_label_event()
820 label_draw_dsc.text = label->text; in draw_main()
821 label_draw_dsc.text_static = label->static_txt; in draw_main()
822 label_draw_dsc.ofs_x = label->offset.x; in draw_main()
823 label_draw_dsc.ofs_y = label->offset.y; in draw_main()
825 if(label->long_mode != LV_LABEL_LONG_MODE_SCROLL_CIRCULAR && in draw_main()
827 label_draw_dsc.hint = &label->hint; in draw_main()
834 lv_bidi_calculate_align(&label_draw_dsc.align, &label_draw_dsc.bidi_dir, label->text); in draw_main()
845 …if((label->long_mode == LV_LABEL_LONG_MODE_SCROLL || label->long_mode == LV_LABEL_LONG_MODE_SCROLL… in draw_main()
848 …lv_text_get_size(&size, label->text, label_draw_dsc.font, label_draw_dsc.letter_space, label_draw_… in draw_main()
856 bool is_common = lv_area_intersect(&txt_clip, &txt_coords, &layer->_clip_area); in draw_main()
861 if(label->long_mode == LV_LABEL_LONG_MODE_WRAP) { in draw_main()
863 lv_area_move(&txt_coords, 0, -s); in draw_main()
864 txt_coords.y2 = obj->coords.y2; in draw_main()
866 …if(label->long_mode == LV_LABEL_LONG_MODE_SCROLL || label->long_mode == LV_LABEL_LONG_MODE_SCROLL_… in draw_main()
867 const lv_area_t clip_area_ori = layer->_clip_area; in draw_main()
868 layer->_clip_area = txt_clip; in draw_main()
870 layer->_clip_area = clip_area_ori; in draw_main()
876 lv_area_t clip_area_ori = layer->_clip_area; in draw_main()
877 layer->_clip_area = txt_clip; in draw_main()
879 if(label->long_mode == LV_LABEL_LONG_MODE_SCROLL_CIRCULAR) { in draw_main()
881 …lv_text_get_size(&size, label->text, label_draw_dsc.font, label_draw_dsc.letter_space, label_draw_… in draw_main()
886 label_draw_dsc.ofs_x = label->offset.x + size.x + in draw_main()
888 label_draw_dsc.ofs_y = label->offset.y; in draw_main()
895 label_draw_dsc.ofs_x = label->offset.x; in draw_main()
896 … label_draw_dsc.ofs_y = label->offset.y + size.y + lv_font_get_line_height(label_draw_dsc.font); in draw_main()
902 layer->_clip_area = clip_area_ori; in draw_main()
910 if(dest->act_time <= 0) in overwrite_anim_property()
911 dest->act_time = src->act_time; in overwrite_anim_property()
912 dest->repeat_cnt = src->repeat_cnt; in overwrite_anim_property()
913 dest->repeat_delay = src->repeat_delay; in overwrite_anim_property()
914 dest->completed_cb = src->completed_cb; in overwrite_anim_property()
915 dest->reverse_delay = src->reverse_delay; in overwrite_anim_property()
919 if(dest->act_time <= 0) in overwrite_anim_property()
920 dest->act_time = src->act_time; in overwrite_anim_property()
921 dest->repeat_cnt = src->repeat_cnt; in overwrite_anim_property()
922 dest->repeat_delay = src->repeat_delay; in overwrite_anim_property()
923 dest->completed_cb = src->completed_cb; in overwrite_anim_property()
937 if(label->text == NULL) return; in lv_label_refr_text()
939 label->hint.line_start = -1; /*The hint is invalid if the text changes*/ in lv_label_refr_text()
941 label->invalid_size_cache = true; in lv_label_refr_text()
955 lv_text_get_size(&size, label->text, font, letter_space, line_space, max_w, flag); in lv_label_refr_text()
960 if(label->long_mode == LV_LABEL_LONG_MODE_SCROLL) { in lv_label_refr_text()
980 base_dir = lv_bidi_detect_base_dir(label->text); in lv_label_refr_text()
983 start = lv_area_get_width(&txt_coords) - size.x; in lv_label_refr_text()
988 end = lv_area_get_width(&txt_coords) - size.x; in lv_label_refr_text()
991 end = lv_area_get_width(&txt_coords) - size.x; in lv_label_refr_text()
1001 act_time = anim_cur->act_time; in lv_label_refr_text()
1002 reverse_play_in_progress = anim_cur->reverse_play_in_progress; in lv_label_refr_text()
1024 overwrite_anim_property(&a, anim_template, label->long_mode); in lv_label_refr_text()
1028 if(act_time < 0) label->offset.x = start; in lv_label_refr_text()
1035 label->offset.x = 0; in lv_label_refr_text()
1039 …lv_anim_set_values(&a, 0, lv_area_get_height(&txt_coords) - size.y - (lv_font_get_line_height(font… in lv_label_refr_text()
1046 act_time = anim_cur->act_time; in lv_label_refr_text()
1047 reverse_play_in_progress = anim_cur->reverse_play_in_progress; in lv_label_refr_text()
1066 overwrite_anim_property(&a, anim_template, label->long_mode); in lv_label_refr_text()
1073 label->offset.y = 0; in lv_label_refr_text()
1077 else if(label->long_mode == LV_LABEL_LONG_MODE_SCROLL_CIRCULAR) { in lv_label_refr_text()
1093 base_dir = lv_bidi_detect_base_dir(label->text); in lv_label_refr_text()
1096 … start = -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT; in lv_label_refr_text()
1101 end = -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_COUNT; in lv_label_refr_text()
1106 …lv_anim_set_values(&a, 0, -size.x - lv_font_get_glyph_width(font, ' ', ' ') * LV_LABEL_WAIT_CHAR_C… in lv_label_refr_text()
1112 int32_t act_time = anim_cur ? anim_cur->act_time : 0; in lv_label_refr_text()
1114 /*To keep the old position when the label text is updated mid-scrolling*/ in lv_label_refr_text()
1122 overwrite_anim_property(&a, anim_template, label->long_mode); in lv_label_refr_text()
1131 label->offset.x = 0; in lv_label_refr_text()
1135 lv_anim_set_values(&a, 0, -size.y - (lv_font_get_line_height(font))); in lv_label_refr_text()
1140 int32_t act_time = anim_cur ? anim_cur->act_time : 0; in lv_label_refr_text()
1144 overwrite_anim_property(&a, anim_template, label->long_mode); in lv_label_refr_text()
1146 /*To keep the old position when the label text is updated mid-scrolling*/ in lv_label_refr_text()
1156 label->offset.y = 0; in lv_label_refr_text()
1159 else if(label->long_mode == LV_LABEL_LONG_MODE_DOTS) { in lv_label_refr_text()
1162 …lv_text_get_encoded_length(label->text) > LV_LABEL_DOT_NUM) { /*Do not turn all characters into do… in lv_label_refr_text()
1165 p.x = lv_area_get_width(&txt_coords) - in lv_label_refr_text()
1172 p.y -= y_overed; in lv_label_refr_text()
1176 p.y -= y_overed; in lv_label_refr_text()
1177 p.y -= line_space; in lv_label_refr_text()
1183 size_t txt_len = lv_strlen(label->text); in lv_label_refr_text()
1184 uint32_t byte_id = lv_text_encoded_get_byte_id(label->text, letter_id); in lv_label_refr_text()
1186 lv_text_encoded_prev(label->text, &byte_id); in lv_label_refr_text()
1187 letter_id--; in lv_label_refr_text()
1194 …else if(label->long_mode == LV_LABEL_LONG_MODE_CLIP || label->long_mode == LV_LABEL_LONG_MODE_WRAP… in lv_label_refr_text()
1204 if(label->dot_begin != LV_LABEL_DOT_BEGIN_INV) { in lv_label_revert_dots()
1205 for(int i = 0; i < LV_LABEL_DOT_NUM + 1 && label->dot[i]; i++) { in lv_label_revert_dots()
1206 label->text[label->dot_begin + i] = label->dot[i]; in lv_label_revert_dots()
1208 label->dot_begin = LV_LABEL_DOT_BEGIN_INV; in lv_label_revert_dots()
1215 LV_ASSERT_MSG(label->dot_begin == LV_LABEL_DOT_BEGIN_INV, "Label dots already set"); in lv_label_set_dots()
1218 lv_strncpy(label->dot, &label->text[dot_begin], LV_LABEL_DOT_NUM + 1); in lv_label_set_dots()
1219 label->dot_begin = dot_begin; in lv_label_set_dots()
1223 for(; i < LV_LABEL_DOT_NUM && label->text[dot_begin + i]; i++) { in lv_label_set_dots()
1224 label->text[dot_begin + i] = '.'; in lv_label_set_dots()
1226 label->text[dot_begin + i] = '\0'; in lv_label_set_dots()
1233 label->offset.x = v; in set_ofs_x_anim()
1240 label->offset.y = v; in set_ofs_y_anim()
1259 lv_text_ap_proc(text, label->text); in copy_text_to_label()
1261 lv_strcpy(label->text, text); in copy_text_to_label()
1269 if(label->recolor) flag |= LV_TEXT_FLAG_RECOLOR; in get_label_flags()
1270 if(label->expand) flag |= LV_TEXT_FLAG_EXPAND; in get_label_flags()
1275 !obj->w_layout) { in get_label_flags()
1288 *x += lv_area_get_width(txt_coords) / 2 - line_w / 2; in calculate_x_coordinate()
1292 *x += lv_area_get_width(txt_coords) - line_w; in calculate_x_coordinate()