Near all text area functions are added

This commit is contained in:
Gabor
2016-10-01 00:25:10 +02:00
parent 1781771825
commit 1a591d4946
8 changed files with 168 additions and 26 deletions

View File

@@ -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);