diff -urN cui55/cui_test.c cui56/cui_test.c --- cui55/cui_test.c 2014-02-01 02:00:00.000000000 +0900 +++ cui56/cui_test.c 2014-02-02 22:00:00.000000000 +0900 @@ -266,7 +266,7 @@ int etx_hdr(cui obj, int evt, int val, void *prm) { - static char buf[CUI_ETEXT_MAX * 2]; + static char buf[CUI_ETEXT_BSIZE * 2]; sprintf(buf, "'%s'", cui_etext_str_get(obj)); cui_label_str_set((cui)prm, buf); diff -urN cui55/etext.c cui56/etext.c --- cui55/etext.c 2014-02-01 02:00:00.000000000 +0900 +++ cui56/etext.c 2014-02-02 22:00:00.000000000 +0900 @@ -24,33 +24,20 @@ p->view = cui_base_new(obj, 1, 0, w-2, 1); p->lb_end = cui_label_new(obj, cui_x2(p->view), 0, "]"); cui_wh_fit(obj); - - p->inner = cui_base_new(p->view, 0, 0, 0, 1); - p->lbf = cui_lblfix_new(p->inner, 0, 0, CUI_ETEXT_BSIZE, p->buf, CUI_ATTR_NORMAL); - cui_wh_fit(p->inner); - + p->lbf = cui_lblfix_new(p->view, 0, 0, CUI_ETEXT_BSIZE, p->buf, CUI_ATTR_NORMAL); obj->flags |= CUI_FLG_CAN_FOCUS; p->edit_mode = FALSE; p->n = strlen(p->buf); p->cursor = 0; - p->buf_cursor[0] = ' '; - p->buf_cursor[1] = '\0'; - p->lb_cursor = cui_label_new(p->lbf, 0, 0, p->buf_cursor); - cui_label_attr_set(p->lb_cursor, CUI_ATTR_REVERSE); - cui_hide(p->lb_cursor); + p->view_cursor = cui_base_new(p->lbf, 0, 0, 1, 1); + p->lbf_shadow = cui_lblfix_new(p->view_cursor, 0, 0, CUI_ETEXT_BSIZE, p->buf, CUI_ATTR_REVERSE); + cui_hide(p->view_cursor); cui_bind(obj, CUI_EVT_DRAW | CUI_EVT_KEY, cui_etext_hdr, NULL); } void -cui_etext_buf_to_lb(cui obj) -{ - cui_etext p = (cui_etext)obj; - cui_lblfix_str_set(p->lbf, p->buf); -} - -void cui_etext_edit_in(cui obj) { cui_etext p = (cui_etext)obj; @@ -60,13 +47,13 @@ p->n = strlen(p->buf); cui_lblfix_attr_set(p->lbf, CUI_ATTR_NORMAL); - cui_etext_buf_to_lb(obj); + cui_lblfix_str_set(p->lbf, p->buf); + cui_lblfix_str_set(p->lbf_shadow, p->buf); p->cursor = 0; - p->buf_cursor[0] = p->cursor < p->n ? p->buf[p->cursor] : ' '; - cui_label_str_set(p->lb_cursor, p->buf_cursor); - p->lb_cursor->x = p->cursor; - cui_show(p->lb_cursor); + cui_x_set(p->view_cursor, p->cursor); + cui_x_set(p->lbf_shadow, -p->cursor); + cui_show(p->view_cursor); } void @@ -74,12 +61,10 @@ { cui_etext p = (cui_etext)obj; - cui_hide(p->inner); - cui_hide(p->lb_cursor); + cui_hide(p->view_cursor); cui_lblfix_str_set(p->lbf, p->buf); cui_lblfix_attr_set(p->lbf, CUI_ATTR_ULINE); - p->inner->x = 0; - cui_show(p->inner); + cui_x_set(p->lbf, 0); p->edit_mode = FALSE; if(strcmp(p->buf, p->bak) != 0) cui_handler_call(obj, CUI_EVT_BUTTON, 0); } @@ -89,17 +74,17 @@ { cui_etext p = (cui_etext)obj; - cui_hide(p->lb_cursor); - cui_draw(p->lb_cursor->parent); - p->buf_cursor[0] = p->cursor < p->n ? p->buf[p->cursor] : ' '; - p->lb_cursor->x = p->cursor; - while(cui_lx(p->view, cui_gx(p->lb_cursor)) < 0){ - cui_x_set(p->inner, p->inner->x + 1); + cui_hide(p->view_cursor); + cui_draw(p->view_cursor->parent); + cui_x_set(p->view_cursor, p->cursor); + cui_x_set(p->lbf_shadow, -p->cursor); + while(cui_lx(p->view, cui_gx(p->view_cursor)) < 0){ + cui_x_set(p->lbf, p->lbf->x + 1); } - while(cui_lx(p->view, cui_gx(p->lb_cursor)) >= p->view->w){ - cui_x_set(p->inner, p->inner->x - 1); + while(cui_lx(p->view, cui_gx(p->view_cursor)) >= p->view->w){ + cui_x_set(p->lbf, p->lbf->x - 1); } - cui_show(p->lb_cursor); + cui_show(p->view_cursor); } int @@ -147,7 +132,8 @@ if(p->cursor <= 0) break; for(i=p->cursor; i<=p->n; i++) p->buf[i-1] = p->buf[i]; p->n--; - cui_etext_buf_to_lb(obj); + cui_lblfix_str_set(p->lbf, p->buf); + cui_lblfix_str_set(p->lbf_shadow, p->buf); p->cursor--; cui_etext_cursor_update(obj); break; @@ -156,7 +142,8 @@ for(i=p->n; i>=p->cursor; i--) p->buf[i+1] = p->buf[i]; p->buf[p->cursor] = val; p->n++; - cui_etext_buf_to_lb(obj); + cui_lblfix_str_set(p->lbf, p->buf); + cui_lblfix_str_set(p->lbf_shadow, p->buf); p->cursor++; cui_etext_cursor_update(obj); break; @@ -177,12 +164,9 @@ cui_etext_str_set(cui obj, char *s) { cui_etext p = (cui_etext)obj; - if(p->edit_mode) cui_etext_edit_out(obj); - cui_hide(p->inner); strcpy(p->buf, s); cui_lblfix_str_set(p->lbf, p->buf); - cui_show(p->inner); } /* EOF */ diff -urN cui55/etext.h cui56/etext.h --- cui55/etext.h 2014-02-01 02:00:00.000000000 +0900 +++ cui56/etext.h 2014-02-02 22:00:00.000000000 +0900 @@ -9,12 +9,11 @@ struct cui_base base; char buf[ CUI_ETEXT_BSIZE ], bak[ CUI_ETEXT_BSIZE ]; cui lb_top, lbf, lb_end; - cui view, inner; + cui view; int edit_mode; int n, cursor; - char buf_cursor[2]; - cui lb_cursor; + cui view_cursor, lbf_shadow; } *cui_etext; cui cui_etext_new(cui parent, int x, int y, int w, char *init_s); diff -urN cui55/lblfix.c cui56/lblfix.c --- cui55/lblfix.c 2014-02-01 02:00:00.000000000 +0900 +++ cui56/lblfix.c 2014-02-02 22:00:00.000000000 +0900 @@ -1,4 +1,5 @@ #include "lblfix.h" +#include cui cui_lblfix_new(cui parent, int x, int y, int w, char *s, int attr)