add character encoder interface issue #131

This commit is contained in:
Gabor Kiss-Vamosi
2018-07-26 00:10:20 +02:00
parent bcd583914f
commit 81a20ef328
7 changed files with 219 additions and 103 deletions

View File

@@ -650,7 +650,7 @@ static lv_res_t lv_ddlist_release_action(lv_obj_t * ddlist)
uint32_t line_cnt = 0;
uint32_t letter;
for(line_cnt = 0; line_cnt < letter_i; line_cnt++) {
letter = lv_txt_utf8_next(txt, &i);
letter = lv_txt_encoded_next(txt, &i);
if(letter == '\n') new_opt ++;
}

View File

@@ -427,7 +427,7 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, lv_point_t * pos)
max_w = LV_COORD_MAX;
}
index = txt_utf8_get_byte_id(txt, index);
index = txt_encoded_get_byte_id(txt, index);
/*Search the line of the index letter */;
while(txt[new_line_start] != '\0') {
@@ -451,8 +451,8 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, lv_point_t * pos)
lv_txt_cmd_state_t cmd_state = LV_TXT_CMD_STATE_WAIT;
uint32_t letter;
while(cnt < index) {
cnt += lv_txt_utf8_size(txt[i]);
letter = lv_txt_utf8_next(txt, &i);
cnt += lv_txt_encoded_size(&txt[i]);
letter = lv_txt_encoded_next(txt, &i);
/*Handle the recolor command*/
if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
if(lv_txt_is_cmd(&cmd_state, txt[i]) != false) {
@@ -531,7 +531,7 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, lv_point_t * pos)
uint32_t i_current = i;
uint32_t letter;
while(i < new_line_start - 1) {
letter = lv_txt_utf8_next(txt, &i); /*Be careful 'i' already points to the next character*/
letter = lv_txt_encoded_next(txt, &i); /*Be careful 'i' already points to the next character*/
/*Handle the recolor command*/
if((flag & LV_TXT_FLAG_RECOLOR) != 0) {
if(lv_txt_is_cmd(&cmd_state, txt[i]) != false) {
@@ -548,7 +548,7 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, lv_point_t * pos)
i_current = i;
}
return lv_txt_utf8_get_char_id(txt, i);
return lv_encoded_get_char_id(txt, i);
}
@@ -585,7 +585,7 @@ void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
#if LV_TXT_UTF8 == 0
pos = old_len;
#else
pos = lv_txt_get_length(ext->text);
pos = lv_txt_get_encoded_length(ext->text);
#endif
}
@@ -836,7 +836,7 @@ static void lv_label_refr_text(lv_obj_t * label)
} else if(ext->long_mode == LV_LABEL_LONG_DOT) {
if(size.y <= lv_obj_get_height(label)) { /*No dots are required, the text is short enough*/
ext->dot_end = LV_LABEL_DOT_END_INV;
} else if(lv_txt_get_length(ext->text) <= LV_LABEL_DOT_NUM) { /*Don't turn to dots all the characters*/
} else if(lv_txt_get_encoded_length(ext->text) <= LV_LABEL_DOT_NUM) { /*Don't turn to dots all the characters*/
ext->dot_end = LV_LABEL_DOT_END_INV;
} else {
lv_point_t p;
@@ -862,12 +862,12 @@ static void lv_label_refr_text(lv_obj_t * label)
#else
/*Save letters under the dots and replace them with dots*/
uint32_t i;
uint32_t byte_id = txt_utf8_get_byte_id(ext->text, letter_id);
uint32_t byte_id = txt_encoded_get_byte_id(ext->text, letter_id);
uint32_t byte_id_ori = byte_id;
uint8_t len = 0;
for(i = 0; i <= LV_LABEL_DOT_NUM; i++) {
len += lv_txt_utf8_size(ext->text[byte_id]);
lv_txt_utf8_next(ext->text, &byte_id);
len += lv_txt_encoded_size(&ext->text[byte_id]);
lv_txt_encoded_next(ext->text, &byte_id);
}
memcpy(ext->dot_tmp, &ext->text[byte_id_ori], len);
@@ -904,7 +904,7 @@ static void lv_label_revert_dots(lv_obj_t * label)
}
#else
uint32_t letter_i = ext->dot_end - LV_LABEL_DOT_NUM;
uint32_t byte_i = txt_utf8_get_byte_id(ext->text, letter_i);
uint32_t byte_i = txt_encoded_get_byte_id(ext->text, letter_i);
/*Restore the characters*/
uint8_t i = 0;

View File

@@ -269,7 +269,7 @@ void lv_ta_add_text(lv_obj_t * ta, const char * txt)
}
/*Move the cursor after the new text*/
lv_ta_set_cursor_pos(ta, lv_ta_get_cursor_pos(ta) + lv_txt_get_length(txt));
lv_ta_set_cursor_pos(ta, lv_ta_get_cursor_pos(ta) + lv_txt_get_encoded_length(txt));
}
/**
@@ -299,8 +299,8 @@ void lv_ta_del_char(lv_obj_t * ta)
#if LV_TXT_UTF8 == 0
lv_txt_cut(ext->pwd_tmp, ext->cursor.pos - 1, 1);
#else
uint32_t byte_pos = txt_utf8_get_byte_id(ext->pwd_tmp, ext->cursor.pos - 1);
lv_txt_cut(ext->pwd_tmp, ext->cursor.pos - 1, lv_txt_utf8_size(label_txt[byte_pos]));
uint32_t byte_pos = txt_encoded_get_byte_id(ext->pwd_tmp, ext->cursor.pos - 1);
lv_txt_cut(ext->pwd_tmp, ext->cursor.pos - 1, lv_txt_encoded_size(&label_txt[byte_pos]));
#endif
ext->pwd_tmp = lv_mem_realloc(ext->pwd_tmp, strlen(ext->pwd_tmp) + 1);
lv_mem_assert(ext->pwd_tmp);
@@ -370,7 +370,7 @@ void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos)
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(ext->cursor.pos == pos) return;
uint16_t len = lv_txt_get_length(lv_label_get_text(ext->label));
uint16_t len = lv_txt_get_encoded_length(lv_label_get_text(ext->label));
if(pos < 0) pos = len + pos;
@@ -821,12 +821,12 @@ static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_
const char * txt = lv_label_get_text(ta_ext->label);
uint32_t byte_pos;
#if LV_TXT_UTF8 != 0
byte_pos = txt_utf8_get_byte_id(txt, cur_pos);
byte_pos = txt_encoded_get_byte_id(txt, cur_pos);
#else
byte_pos = cur_pos;
#endif
uint32_t letter = lv_txt_utf8_next(&txt[byte_pos], NULL);
uint32_t letter = lv_txt_encoded_next(&txt[byte_pos], NULL);
lv_coord_t letter_h = lv_font_get_height(label_style->text.font);
/*Set letter_w (set not 0 on non printable but valid chars)*/
lv_coord_t letter_w;
@@ -845,8 +845,8 @@ static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_
letter_pos.y += letter_h + label_style->text.line_space;
if(letter != '\0') {
byte_pos += lv_txt_utf8_size(txt[byte_pos]);
letter = lv_txt_utf8_next(&txt[byte_pos], NULL);
byte_pos += lv_txt_encoded_size(&txt[byte_pos]);
letter = lv_txt_encoded_next(&txt[byte_pos], NULL);
}
if(letter == '\0' || letter == '\n' || letter == '\r') {
@@ -879,7 +879,7 @@ static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * mask, lv_
letter_buf[1] = '\0';
#else
char letter_buf[8] = {0};
memcpy(letter_buf, &txt[byte_pos], lv_txt_utf8_size(txt[byte_pos]));
memcpy(letter_buf, &txt[byte_pos], lv_txt_encoded_size(&txt[byte_pos]));
#endif
cur_area.x1 += cur_style.body.padding.hor;
cur_area.y1 += cur_style.body.padding.ver;
@@ -1073,7 +1073,7 @@ static void pwd_char_hider(lv_obj_t * ta)
lv_ta_ext_t * ext = lv_obj_get_ext_attr(ta);
if(ext->pwd_mode != 0) {
char * txt = lv_label_get_text(ext->label);
int16_t len = lv_txt_get_length(txt);
int16_t len = lv_txt_get_encoded_length(txt);
bool refr = false;
uint16_t i;
for(i = 0; i < len; i++) {