Lines Matching +full:- +full:- +full:include

9 #include "lv_draw_label_private.h"
10 #include "lv_draw_private.h"
11 #include "../misc/lv_area_private.h"
12 #include "lv_draw_vector_private.h"
13 #include "lv_draw_rect_private.h"
14 #include "../core/lv_obj.h"
15 #include "../misc/lv_math.h"
16 #include "../core/lv_obj_event.h"
17 #include "../misc/lv_bidi_private.h"
18 #include "../misc/lv_text_private.h"
19 #include "../misc/lv_assert.h"
20 #include "../stdlib/lv_mem.h"
21 #include "../stdlib/lv_string.h"
22 #include "../core/lv_global.h"
30 #define font_draw_buf_handlers &(LV_GLOBAL_DEFAULT()->font_draw_buf_handlers)
66 dsc->opa = LV_OPA_COVER; in lv_draw_letter_dsc_init()
67 dsc->color = lv_color_black(); in lv_draw_letter_dsc_init()
68 dsc->font = LV_FONT_DEFAULT; in lv_draw_letter_dsc_init()
69 dsc->rotation = 0; in lv_draw_letter_dsc_init()
70 dsc->scale_x = LV_SCALE_NONE; in lv_draw_letter_dsc_init()
71 dsc->scale_y = LV_SCALE_NONE; in lv_draw_letter_dsc_init()
72 dsc->base.dsc_size = sizeof(lv_draw_letter_dsc_t); in lv_draw_letter_dsc_init()
78 dsc->opa = LV_OPA_COVER; in lv_draw_label_dsc_init()
79 dsc->color = lv_color_black(); in lv_draw_label_dsc_init()
80 dsc->text_length = LV_TEXT_LEN_MAX; in lv_draw_label_dsc_init()
81 dsc->font = LV_FONT_DEFAULT; in lv_draw_label_dsc_init()
82 dsc->sel_start = LV_DRAW_LABEL_NO_TXT_SEL; in lv_draw_label_dsc_init()
83 dsc->sel_end = LV_DRAW_LABEL_NO_TXT_SEL; in lv_draw_label_dsc_init()
84 dsc->sel_color = lv_color_black(); in lv_draw_label_dsc_init()
85 dsc->sel_bg_color = lv_palette_main(LV_PALETTE_BLUE); in lv_draw_label_dsc_init()
86 dsc->bidi_dir = LV_BASE_DIR_LTR; in lv_draw_label_dsc_init()
87 dsc->base.dsc_size = sizeof(lv_draw_label_dsc_t); in lv_draw_label_dsc_init()
92 return task->type == LV_DRAW_TASK_TYPE_LABEL ? (lv_draw_label_dsc_t *)task->draw_dsc : NULL; in lv_draw_task_get_label_dsc()
103 if(dsc->opa <= LV_OPA_MIN) return; in lv_draw_label()
104 if(dsc->text == NULL || dsc->text[0] == '\0') return; in lv_draw_label()
105 if(dsc->font == NULL) { in lv_draw_label()
106 LV_LOG_WARN("dsc->font == NULL"); in lv_draw_label()
113 t->draw_dsc = lv_malloc(sizeof(*dsc)); in lv_draw_label()
114 LV_ASSERT_MALLOC(t->draw_dsc); in lv_draw_label()
115 lv_memcpy(t->draw_dsc, dsc, sizeof(*dsc)); in lv_draw_label()
116 t->type = LV_DRAW_TASK_TYPE_LABEL; in lv_draw_label()
119 if(dsc->text_local) { in lv_draw_label()
120 lv_draw_label_dsc_t * new_dsc = t->draw_dsc; in lv_draw_label()
121 new_dsc->text = lv_strdup(dsc->text); in lv_draw_label()
131 if(dsc->opa <= LV_OPA_MIN) return; in lv_draw_character()
132 if(dsc->font == NULL) { in lv_draw_character()
133 LV_LOG_WARN("dsc->font == NULL"); in lv_draw_character()
142 lv_font_get_glyph_dsc(dsc->font, &g, unicode_letter, 0); in lv_draw_character()
145 a.x1 = point->x; in lv_draw_character()
146 a.y1 = point->y; in lv_draw_character()
148 a.y2 = a.y1 + lv_font_get_line_height(g.resolved_font ? g.resolved_font : dsc->font); in lv_draw_character()
161 dsc->text = letter_buf_char; in lv_draw_character()
162 dsc->text_local = 1; in lv_draw_character()
170 if(dsc->opa <= LV_OPA_MIN) return; in lv_draw_letter()
171 if(dsc->font == NULL) { in lv_draw_letter()
172 LV_LOG_WARN("dsc->font == NULL"); in lv_draw_letter()
176 const lv_font_t * font = dsc->font; in lv_draw_letter()
180 lv_font_get_glyph_dsc(font, &g, dsc->unicode, 0); in lv_draw_letter()
182 font = g.resolved_font ? g.resolved_font : dsc->font; in lv_draw_letter()
185 a.x1 = point->x; in lv_draw_letter()
186 a.y1 = point->y; in lv_draw_letter()
190 dsc->pivot.x = g.adv_w / 2 ; in lv_draw_letter()
191 dsc->pivot.y = font->line_height - font->base_line; in lv_draw_letter()
195 t->draw_dsc = lv_malloc(sizeof(*dsc)); in lv_draw_letter()
196 LV_ASSERT_MALLOC(t->draw_dsc); in lv_draw_letter()
197 lv_memcpy(t->draw_dsc, dsc, sizeof(*dsc)); in lv_draw_letter()
198 t->type = LV_DRAW_TASK_TYPE_LETTER; in lv_draw_letter()
208 const lv_font_t * font = dsc->font; in lv_draw_label_iterate_characters()
212 bool clip_ok = lv_area_intersect(&clipped_area, coords, draw_unit->clip_area); in lv_draw_label_iterate_characters()
215 lv_text_align_t align = dsc->align; in lv_draw_label_iterate_characters()
216 lv_base_dir_t base_dir = dsc->bidi_dir; in lv_draw_label_iterate_characters()
218 lv_bidi_calculate_align(&align, &base_dir, dsc->text); in lv_draw_label_iterate_characters()
220 if((dsc->flag & LV_TEXT_FLAG_EXPAND) == 0) { in lv_draw_label_iterate_characters()
227 lv_text_get_size(&p, dsc->text, dsc->font, dsc->letter_space, dsc->line_space, LV_COORD_MAX, in lv_draw_label_iterate_characters()
228 dsc->flag); in lv_draw_label_iterate_characters()
233 int32_t line_height = line_height_font + dsc->line_space; in lv_draw_label_iterate_characters()
238 lv_point_set(&pos, coords->x1, coords->y1); in lv_draw_label_iterate_characters()
242 x_ofs = dsc->ofs_x; in lv_draw_label_iterate_characters()
243 y_ofs = dsc->ofs_y; in lv_draw_label_iterate_characters()
247 int32_t last_line_start = -1; in lv_draw_label_iterate_characters()
250 if(dsc->hint && y_ofs == 0 && coords->y1 < 0) { in lv_draw_label_iterate_characters()
252 if(LV_ABS(dsc->hint->coord_y - coords->y1) > LV_LABEL_HINT_UPDATE_TH - 2 * line_height) { in lv_draw_label_iterate_characters()
253 dsc->hint->line_start = -1; in lv_draw_label_iterate_characters()
255 last_line_start = dsc->hint->line_start; in lv_draw_label_iterate_characters()
259 if(dsc->hint && last_line_start >= 0) { in lv_draw_label_iterate_characters()
261 pos.y += dsc->hint->y; in lv_draw_label_iterate_characters()
264 uint32_t remaining_len = dsc->text_length; in lv_draw_label_iterate_characters()
266 …2_t line_end = line_start + lv_text_get_next_line(&dsc->text[line_start], remaining_len, font, dsc in lv_draw_label_iterate_characters()
267 w, NULL, dsc->flag); in lv_draw_label_iterate_characters()
270 while(pos.y + line_height_font < draw_unit->clip_area->y1) { in lv_draw_label_iterate_characters()
273 …line_end += lv_text_get_next_line(&dsc->text[line_start], remaining_len, font, dsc->letter_space, … in lv_draw_label_iterate_characters()
277 if(dsc->hint && pos.y >= -LV_LABEL_HINT_UPDATE_TH && dsc->hint->line_start < 0) { in lv_draw_label_iterate_characters()
278 dsc->hint->line_start = line_start; in lv_draw_label_iterate_characters()
279 dsc->hint->y = pos.y - coords->y1; in lv_draw_label_iterate_characters()
280 dsc->hint->coord_y = coords->y1; in lv_draw_label_iterate_characters()
283 if(dsc->text[line_start] == '\0') return; in lv_draw_label_iterate_characters()
288 …line_width = lv_text_get_width_with_flags(&dsc->text[line_start], line_end - line_start, font, dsc in lv_draw_label_iterate_characters()
289 dsc->flag); in lv_draw_label_iterate_characters()
291 pos.x += (lv_area_get_width(coords) - line_width) / 2; in lv_draw_label_iterate_characters()
296 …line_width = lv_text_get_width_with_flags(&dsc->text[line_start], line_end - line_start, font, dsc in lv_draw_label_iterate_characters()
297 dsc->flag); in lv_draw_label_iterate_characters()
298 pos.x += lv_area_get_width(coords) - line_width; in lv_draw_label_iterate_characters()
301 uint32_t sel_start = dsc->sel_start; in lv_draw_label_iterate_characters()
302 uint32_t sel_end = dsc->sel_end; in lv_draw_label_iterate_characters()
312 draw_letter_dsc.opa = dsc->opa; in lv_draw_label_iterate_characters()
314 draw_letter_dsc.color = dsc->color; in lv_draw_label_iterate_characters()
315 draw_letter_dsc.rotation = dsc->rotation; in lv_draw_label_iterate_characters()
319 fill_dsc.opa = dsc->opa; in lv_draw_label_iterate_characters()
320 int32_t underline_width = font->underline_thickness ? font->underline_thickness : 1; in lv_draw_label_iterate_characters()
330 while(remaining_len && dsc->text[line_start] != '\0') { in lv_draw_label_iterate_characters()
338 char * bidi_txt = lv_malloc(line_end - line_start + 1); in lv_draw_label_iterate_characters()
340 …lv_bidi_process_paragraph(dsc->text + line_start, bidi_txt, line_end - line_start, base_dir, NULL,… in lv_draw_label_iterate_characters()
342 const char * bidi_txt = dsc->text + line_start; in lv_draw_label_iterate_characters()
345 while(next_char_offset < remaining_len && next_char_offset < line_end - line_start) { in lv_draw_label_iterate_characters()
351 logical_char_pos = lv_text_encoded_get_char_id(dsc->text, line_start); in lv_draw_label_iterate_characters()
353 …logical_char_pos += lv_bidi_get_logical_pos(bidi_txt, NULL, line_end - line_start, base_dir, t, NU… in lv_draw_label_iterate_characters()
355 … logical_char_pos = lv_text_encoded_get_char_id(dsc->text, line_start + next_char_offset); in lv_draw_label_iterate_characters()
364 if((dsc->flag & LV_TEXT_FLAG_RECOLOR) != 0) { in lv_draw_label_iterate_characters()
403 … if((next_char_offset - recolor_command_start_index) == LABEL_RECOLOR_PAR_LENGTH + 1) { in lv_draw_label_iterate_characters()
417 recolor.red = dsc->color.red; in lv_draw_label_iterate_characters()
418 recolor.blue = dsc->color.blue; in lv_draw_label_iterate_characters()
419 recolor.green = dsc->color.green; in lv_draw_label_iterate_characters()
433 …if(((dsc->flag & LV_TEXT_FLAG_RECOLOR) != 0) && (recolor_cmd_state == RECOLOR_CMD_STATE_TEXT_INPUT… in lv_draw_label_iterate_characters()
434 logical_char_pos -= (LABEL_RECOLOR_PAR_LENGTH + 1); in lv_draw_label_iterate_characters()
442 bg_coords.x2 = pos.x + letter_w - 1; in lv_draw_label_iterate_characters()
443 bg_coords.y2 = pos.y + line_height - 1; in lv_draw_label_iterate_characters()
445 if(next_char_offset >= line_end - line_start) { in lv_draw_label_iterate_characters()
446 if(dsc->decor & LV_TEXT_DECOR_UNDERLINE) { in lv_draw_label_iterate_characters()
449 fill_area.x2 = pos.x + letter_w - 1; in lv_draw_label_iterate_characters()
450 … fill_area.y1 = pos.y + font->line_height - font->base_line - font->underline_position; in lv_draw_label_iterate_characters()
451 fill_area.y2 = fill_area.y1 + underline_width - 1; in lv_draw_label_iterate_characters()
453 fill_dsc.color = dsc->color; in lv_draw_label_iterate_characters()
456 if(dsc->decor & LV_TEXT_DECOR_STRIKETHROUGH) { in lv_draw_label_iterate_characters()
459 fill_area.x2 = pos.x + letter_w - 1; in lv_draw_label_iterate_characters()
460 …fill_area.y1 = pos.y + (font->line_height - font->base_line) * 2 / 3 + font->underline_thickness /… in lv_draw_label_iterate_characters()
461 fill_area.y2 = fill_area.y1 + underline_width - 1; in lv_draw_label_iterate_characters()
463 fill_dsc.color = dsc->color; in lv_draw_label_iterate_characters()
471 draw_letter_dsc.color = dsc->sel_color; in lv_draw_label_iterate_characters()
472 fill_dsc.color = dsc->sel_bg_color; in lv_draw_label_iterate_characters()
479 draw_letter_dsc.color = dsc->color; in lv_draw_label_iterate_characters()
485 pos.x += letter_w + dsc->letter_space; in lv_draw_label_iterate_characters()
494 remaining_len -= line_end - line_start; in lv_draw_label_iterate_characters()
497 …line_end += lv_text_get_next_line(&dsc->text[line_start], remaining_len, font, dsc->letter_space, … in lv_draw_label_iterate_characters()
500 pos.x = coords->x1; in lv_draw_label_iterate_characters()
504 …lv_text_get_width_with_flags(&dsc->text[line_start], line_end - line_start, font, dsc->letter_spac… in lv_draw_label_iterate_characters()
506 pos.x += (lv_area_get_width(coords) - line_width) / 2; in lv_draw_label_iterate_characters()
511 …lv_text_get_width_with_flags(&dsc->text[line_start], line_end - line_start, font, dsc->letter_spac… in lv_draw_label_iterate_characters()
512 pos.x += lv_area_get_width(coords) - line_width; in lv_draw_label_iterate_characters()
518 if(pos.y > draw_unit->clip_area->y2) break; in lv_draw_label_iterate_characters()
537 if(hex >= '0' && hex <= '9') return hex - '0'; in hex_char_to_num()
538 if(hex >= 'a') hex -= 'a' - 'A'; /*Convert to upper case*/ in hex_char_to_num()
539 return 'A' <= hex && hex <= 'F' ? hex - 'A' + 10 : 0; in hex_char_to_num()
564 letter_coords.x1 = pos->x + g.ofs_x; in lv_draw_unit_draw_letter()
565 letter_coords.x2 = letter_coords.x1 + g.box_w - 1; in lv_draw_unit_draw_letter()
566 letter_coords.y1 = pos->y + (font->line_height - font->base_line) - g.box_h - g.ofs_y; in lv_draw_unit_draw_letter()
567 letter_coords.y2 = letter_coords.y1 + g.box_h - 1; in lv_draw_unit_draw_letter()
568 lv_area_move(&letter_coords, -dsc->pivot.x, -dsc->pivot.y); in lv_draw_unit_draw_letter()
571 if(lv_area_is_out(&letter_coords, draw_unit->clip_area, 0) && in lv_draw_unit_draw_letter()
572 dsc->bg_coords && in lv_draw_unit_draw_letter()
573 lv_area_is_out(dsc->bg_coords, draw_unit->clip_area, 0)) { in lv_draw_unit_draw_letter()
582 draw_buf = lv_draw_buf_reshape(dsc->_draw_buf, 0, g.box_w, g.box_h, LV_STRIDE_AUTO); in lv_draw_unit_draw_letter()
584 if(dsc->_draw_buf) lv_draw_buf_destroy(dsc->_draw_buf); in lv_draw_unit_draw_letter()
590 draw_buf->header.h = g.box_h; in lv_draw_unit_draw_letter()
591 dsc->_draw_buf = draw_buf; in lv_draw_unit_draw_letter()
595 dsc->format = g.format; in lv_draw_unit_draw_letter()
598 dsc->format = LV_FONT_GLYPH_FORMAT_NONE; in lv_draw_unit_draw_letter()
601 dsc->letter_coords = &letter_coords; in lv_draw_unit_draw_letter()
602 dsc->g = &g; in lv_draw_unit_draw_letter()