Near all text area functions are added
This commit is contained in:
101
lv_objx/lv_ta.c
101
lv_objx/lv_ta.c
@@ -31,6 +31,7 @@ static bool lv_ta_design(lv_obj_t* obj_dp, const area_t * mask_p, lv_design_mode
|
||||
**********************/
|
||||
static lv_tas_t lv_tas_def =
|
||||
{ /*Create a default style*/ };
|
||||
|
||||
lv_design_f_t ancestor_design_f;
|
||||
|
||||
/**********************
|
||||
@@ -71,8 +72,10 @@ lv_obj_t* lv_ta_create(lv_obj_t* par_dp, lv_obj_t * copy_dp)
|
||||
/*Init the new text area object*/
|
||||
if(copy_dp == NULL) {
|
||||
ext_dp->label_dp = lv_label_create(new_obj_dp, NULL);
|
||||
lv_label_set_text(ext_dp->label_dp, "Abc def xyz\n\n\n\n\n\n\n\n\n\n\n\nghi\n\n\n\n\n\n\n\n\n\n123\n\n\n\n\n\n\n\n\n\n456\n\n\n\n\n\n789");
|
||||
lv_obj_set_style(ext_dp->label_dp, lv_labels_get(LV_LABELS_TXT, NULL));
|
||||
lv_label_set_text(ext_dp->label_dp, "0123456789 abcdef\nABCDEF\nG\nHIJKLM\n\nnopqrs");
|
||||
//lv_obj_set_style(ext_dp->label_dp, lv_labels_get(LV_LABELS_TXT, NULL));
|
||||
// lv_label_set_fixw(ext_dp->label_dp, true);
|
||||
lv_obj_set_width_us(ext_dp->label_dp, 200);
|
||||
}
|
||||
/*Copy an existing object*/
|
||||
else {
|
||||
@@ -115,15 +118,97 @@ bool lv_ta_signal(lv_obj_t* obj_dp, lv_signal_t sign, void * param)
|
||||
* Setter functions
|
||||
*====================*/
|
||||
|
||||
void lv_ta_add_char(lv_obj_t * obj_dp, char c)
|
||||
{
|
||||
lv_ta_ext_t * ta_dp = lv_obj_get_ext(obj_dp);
|
||||
|
||||
char buf[LV_TA_MAX_LENGTH];
|
||||
const char * label_txt = lv_label_get_text(ta_dp->label_dp);
|
||||
|
||||
memcpy(buf, label_txt, ta_dp->cursor_pos);
|
||||
buf[ta_dp->cursor_pos] = c;
|
||||
memcpy(buf+ta_dp->cursor_pos+1, label_txt+ta_dp->cursor_pos, strlen(label_txt) - ta_dp->cursor_pos + 1);
|
||||
|
||||
lv_label_set_text(ta_dp->label_dp, buf);
|
||||
|
||||
lv_ta_set_cursor_pos(obj_dp, lv_ta_get_cursor_pos(obj_dp) + 1);
|
||||
}
|
||||
|
||||
void lv_ta_add_text(lv_obj_t * obj_dp, const char * txt)
|
||||
{
|
||||
lv_ta_ext_t * ta_dp = lv_obj_get_ext(obj_dp);
|
||||
|
||||
char buf[LV_TA_MAX_LENGTH];
|
||||
const char * label_txt = lv_label_get_text(ta_dp->label_dp);
|
||||
uint16_t label_len = strlen(label_txt);
|
||||
uint16_t txt_len = strlen(txt);
|
||||
|
||||
memcpy(buf, label_txt, ta_dp->cursor_pos);
|
||||
memcpy(buf+ta_dp->cursor_pos, txt, txt_len);
|
||||
memcpy(buf+ta_dp->cursor_pos + txt_len, label_txt+ta_dp->cursor_pos, label_len - ta_dp->cursor_pos + 1);
|
||||
|
||||
lv_label_set_text(ta_dp->label_dp, buf);
|
||||
|
||||
lv_ta_set_cursor_pos(obj_dp, lv_ta_get_cursor_pos(obj_dp) + txt_len);
|
||||
}
|
||||
|
||||
void lv_ta_del(lv_obj_t * obj_dp)
|
||||
{
|
||||
lv_ta_ext_t * ta_dp = lv_obj_get_ext(obj_dp);
|
||||
uint16_t cur_pos = ta_dp->cursor_pos;
|
||||
|
||||
if(cur_pos == 0) return;
|
||||
|
||||
char buf[LV_TA_MAX_LENGTH];
|
||||
const char * label_txt = lv_label_get_text(ta_dp->label_dp);
|
||||
uint16_t label_len = strlen(label_txt);
|
||||
memcpy(buf, label_txt, cur_pos - 1);
|
||||
memcpy(buf+cur_pos - 1, label_txt + cur_pos, label_len - cur_pos + 1);
|
||||
|
||||
lv_label_set_text(ta_dp->label_dp, buf);
|
||||
|
||||
lv_ta_set_cursor_pos(obj_dp, lv_ta_get_cursor_pos(obj_dp) - 1);
|
||||
}
|
||||
|
||||
void lv_ta_set_cursor_pos(lv_obj_t * obj_dp, uint16_t pos)
|
||||
{
|
||||
|
||||
lv_ta_ext_t * ta_dp = lv_obj_get_ext(obj_dp);
|
||||
ta_dp->cursor_pos = pos;
|
||||
|
||||
lv_obj_inv(obj_dp);
|
||||
}
|
||||
|
||||
void lv_ta_cursor_down(lv_obj_t * obj_dp)
|
||||
{
|
||||
lv_ta_ext_t * ta_dp = lv_obj_get_ext(obj_dp);
|
||||
point_t pos;
|
||||
|
||||
lv_label_get_letter_pos(ta_dp->label_dp, lv_ta_get_cursor_pos(obj_dp), &pos);
|
||||
|
||||
lv_labels_t * labels_p = lv_obj_get_style(ta_dp->label_dp);
|
||||
const font_t * font_p = font_get(labels_p->font);
|
||||
pos.y += font_get_height(font_p) + labels_p->line_space + 1;
|
||||
|
||||
uint16_t new_cur_pos = lv_label_get_letter_on(ta_dp->label_dp, &pos);
|
||||
|
||||
lv_ta_set_cursor_pos(obj_dp, new_cur_pos);
|
||||
}
|
||||
|
||||
void lv_ta_cursor_up(lv_obj_t * obj_dp)
|
||||
{
|
||||
lv_ta_ext_t * ta_dp = lv_obj_get_ext(obj_dp);
|
||||
point_t pos;
|
||||
|
||||
lv_label_get_letter_pos(ta_dp->label_dp, lv_ta_get_cursor_pos(obj_dp), &pos);
|
||||
|
||||
lv_labels_t * labels_p = lv_obj_get_style(ta_dp->label_dp);
|
||||
const font_t * font_p = font_get(labels_p->font);
|
||||
pos.y -= font_get_height(font_p) + labels_p->line_space - 1;
|
||||
|
||||
uint16_t new_cur_pos = lv_label_get_letter_on(ta_dp->label_dp, &pos);
|
||||
|
||||
lv_ta_set_cursor_pos(obj_dp, new_cur_pos);
|
||||
}
|
||||
/*=====================
|
||||
* Getter functions
|
||||
*====================*/
|
||||
@@ -189,11 +274,11 @@ static bool lv_ta_design(lv_obj_t* obj_dp, const area_t * mask_p, lv_design_mode
|
||||
lv_label_get_letter_pos(ta_dp->label_dp, cur_pos, &letter_pos);
|
||||
|
||||
area_t cur_area;
|
||||
lv_labels_t * label_p = lv_obj_get_style(ta_dp->label_dp);
|
||||
cur_area.x1 = letter_pos.x;
|
||||
cur_area.y1 = letter_pos.y;
|
||||
cur_area.x2 = letter_pos.x + 4;
|
||||
cur_area.y2 = letter_pos.y + font_get_height(font_get(label_p->font));
|
||||
lv_labels_t * labels_p = lv_obj_get_style(ta_dp->label_dp);
|
||||
cur_area.x1 = letter_pos.x + ta_dp->label_dp->cords.x1 - 2;
|
||||
cur_area.y1 = letter_pos.y + ta_dp->label_dp->cords.y1;
|
||||
cur_area.x2 = letter_pos.x + ta_dp->label_dp->cords.x1 + 2;
|
||||
cur_area.y2 = letter_pos.y + ta_dp->label_dp->cords.y1 + font_get_height(font_get(labels_p->font));
|
||||
|
||||
lv_rects_t rects;
|
||||
lv_rects_get(LV_RECTS_DEF, &rects);
|
||||
|
||||
Reference in New Issue
Block a user