fix(text) fix handling LV_TEXT_ALIGN_AUTO

This commit is contained in:
Gabor Kiss-Vamosi
2021-05-21 11:30:42 +02:00
parent d73e42011d
commit 33ab14568a
4 changed files with 28 additions and 15 deletions
+4 -2
View File
@@ -489,8 +489,10 @@ void lv_dropdown_open(lv_obj_t * dropdown_obj)
}
lv_text_align_t align = lv_obj_get_style_text_align(label, LV_PART_MAIN);
if(align == LV_TEXT_ALIGN_AUTO && lv_obj_get_style_base_dir(label, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
if(align == LV_TEXT_ALIGN_AUTO) {
if(lv_obj_get_style_base_dir(label, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
}
switch(align) {
default:
+16 -9
View File
@@ -290,8 +290,10 @@ void lv_label_get_letter_pos(const lv_obj_t * obj, uint32_t char_id, lv_point_t
const char * txt = lv_label_get_text(obj);
lv_text_align_t align = lv_obj_get_style_text_align(obj, LV_PART_MAIN);
if(align == LV_TEXT_ALIGN_AUTO && lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
if(align == LV_TEXT_ALIGN_AUTO) {
if(lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
}
if(txt[0] == '\0') {
pos->y = 0;
@@ -426,8 +428,10 @@ uint32_t lv_label_get_letter_on(const lv_obj_t * obj, lv_point_t * pos_in)
if(lv_obj_get_style_width(obj, LV_PART_MAIN) == LV_SIZE_CONTENT && !obj->w_layout) flag |= LV_TEXT_FLAG_FIT;
lv_text_align_t align = lv_obj_get_style_text_align(obj, LV_PART_MAIN);
if(align == LV_TEXT_ALIGN_AUTO && lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
if(align == LV_TEXT_ALIGN_AUTO) {
if(lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
}
/*Search the line of the index letter*/;
while(txt[line_start] != '\0') {
@@ -539,8 +543,10 @@ bool lv_label_is_char_under_pos(const lv_obj_t * obj, lv_point_t * pos)
lv_coord_t letter_space = lv_obj_get_style_text_letter_space(obj, LV_PART_MAIN);
lv_coord_t letter_height = lv_font_get_line_height(font);
lv_text_align_t align = lv_obj_get_style_text_align(obj, LV_PART_MAIN);
if(align == LV_TEXT_ALIGN_AUTO && lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
if(align == LV_TEXT_ALIGN_AUTO) {
if(lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
}
lv_coord_t y = 0;
lv_text_flag_t flag = LV_TEXT_FLAG_NONE;
@@ -804,9 +810,10 @@ static void draw_main(lv_event_t * e)
lv_obj_get_content_coords(obj, &txt_coords);
lv_text_align_t align = lv_obj_get_style_text_align(obj, LV_PART_MAIN);
if(align == LV_TEXT_ALIGN_AUTO && lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
if(align == LV_TEXT_ALIGN_AUTO) {
if(lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
}
lv_text_flag_t flag = LV_TEXT_FLAG_NONE;
if(label->recolor != 0) flag |= LV_TEXT_FLAG_RECOLOR;
if(label->expand != 0) flag |= LV_TEXT_FLAG_EXPAND;
+4 -2
View File
@@ -574,8 +574,10 @@ static void refr_position(lv_obj_t * obj, lv_anim_enable_t anim_en)
if(label == NULL) return;
lv_text_align_t align = lv_obj_get_style_text_align(label, LV_PART_MAIN);
if(align == LV_TEXT_ALIGN_AUTO && lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
if(align == LV_TEXT_ALIGN_AUTO) {
if(lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
}
switch(align) {
case LV_TEXT_ALIGN_CENTER:
+4 -2
View File
@@ -1073,8 +1073,10 @@ static void refr_cursor_area(lv_obj_t * obj)
lv_label_get_letter_pos(ta->label, cur_pos, &letter_pos);
lv_text_align_t align = lv_obj_get_style_text_align(ta->label, LV_PART_MAIN);
if(align == LV_TEXT_ALIGN_AUTO && lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
if(align == LV_TEXT_ALIGN_AUTO) {
if(lv_obj_get_style_base_dir(obj, LV_PART_MAIN) == LV_BASE_DIR_RTL) align = LV_TEXT_ALIGN_RIGHT;
else align = LV_TEXT_ALIGN_LEFT;
}
/*If the cursor is out of the text (most right) draw it to the next line*/
if(letter_pos.x + ta->label->coords.x1 + letter_w > ta->label->coords.x2 && ta->one_line == 0 && align != LV_TEXT_ALIGN_RIGHT) {