diff options
Diffstat (limited to 'fw/fe310/eos/eve/widget')
| -rw-r--r-- | fw/fe310/eos/eve/widget/freew.c | 60 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/freew.h | 11 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/label.c | 19 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/label.h | 4 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/pagew.c | 18 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/pagew.h | 2 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/selectw.c | 78 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/selectw.h | 3 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/spacerw.c | 9 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/spacerw.h | 2 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/strw.c | 104 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/strw.h | 2 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/textw.c | 90 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/textw.h | 2 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/togglew.c | 27 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/togglew.h | 6 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/widget.c | 8 | ||||
| -rw-r--r-- | fw/fe310/eos/eve/widget/widget.h | 3 | 
18 files changed, 283 insertions, 165 deletions
diff --git a/fw/fe310/eos/eve/widget/freew.c b/fw/fe310/eos/eve/widget/freew.c index 11b8e50..f88f81e 100644 --- a/fw/fe310/eos/eve/widget/freew.c +++ b/fw/fe310/eos/eve/widget/freew.c @@ -10,22 +10,28 @@  #include "widget.h" -void eve_freew_init(EVEFreeWidget *widget, EVERect *g, EVEPage *page, eve_freew_draw_t draw, eve_freew_touch_t touch, eve_kbd_input_handler_t putc) { +int eve_freew_init(EVEFreeWidget *widget, EVERect *g, EVEPage *page, eve_freew_draw_t draw, eve_freew_touch_t touch, eve_kbd_input_handler_t putc) {      EVEWidget *_widget = &widget->w;      memset(widget, 0, sizeof(EVEFreeWidget));      eve_widget_init(_widget, EVE_WIDGET_TYPE_FREE, g, page, eve_freew_draw, eve_freew_touch, putc);      widget->_draw = draw;      widget->_touch = touch; + +    return EVE_OK; +} + +void eve_freew_set_uievt_handler(EVEFreeWidget *widget, eve_freew_uievt_t handler) { +    widget->_uievt = handler;  }  int eve_freew_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {      EVEFreeWidget *widget = (EVEFreeWidget *)_widget;      EVEFreeSpec *tspec = &spec->tspec.free; +    int rv; -    eve_freew_init(widget, &spec->g, page, tspec->draw, tspec->touch, tspec->putc); - -    return EVE_OK; +    rv = eve_freew_init(widget, &spec->g, page, tspec->draw, tspec->touch, tspec->putc); +    return rv;  }  uint8_t eve_freew_draw(EVEWidget *_widget, uint8_t tag0) { @@ -42,27 +48,53 @@ uint8_t eve_freew_draw(EVEWidget *_widget, uint8_t tag0) {  int eve_freew_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {      EVEFreeWidget *widget = (EVEFreeWidget *)_widget; -    int ret; +    int rv; + +    /* widget received non-touch event */ +    if (evt & EVE_TOUCH_ETYPE_EXT) { +        evt &= ~EVE_TOUCH_ETYPE_EXT; +        if (widget->_uievt) widget->_uievt(widget, evt); -    ret = widget->_touch(widget, touch, evt); -    return ret; +        /* always return 0 for non-touch events */ +        return 0; +    } + +    rv = widget->_touch(widget, touch, evt); +    return rv;  } -uint8_t eve_freew_tag(EVEFreeWidget *widget) { +uint8_t eve_freew_tag0(EVEFreeWidget *widget) { +    EVEWidget *_widget = &widget->w; + +    return _widget->tag0; +} + +void eve_freew_tag(EVEFreeWidget *widget, uint8_t tag_opt) {      EVEWidget *_widget = &widget->w; -    uint8_t ret = EVE_NOTAG;      if (_widget->tagN != EVE_NOTAG) { -        ret = _widget->tagN; -        eve_cmd_dl(TAG(ret)); +        eve_tag_set_opt(_widget->tagN, tag_opt); +        eve_cmd_dl(TAG(_widget->tagN));          _widget->tagN++;      } +} -    return ret; +void eve_freew_tag_idx(EVEFreeWidget *widget, uint8_t i) { +    EVEWidget *_widget = &widget->w; +    uint8_t tag = _widget->tag0; + +    if (tag != EVE_NOTAG) { +        tag += i; + +        /* prevents overflow */ +        if ((tag >= _widget->tag0) && (tag < _widget->tagN)) { +            eve_cmd_dl(TAG(tag)); +        } +    }  } -uint8_t eve_widget_tag_index(EVEFreeWidget *widget, uint8_t tag) { +uint8_t eve_freew_get_tag_idx(EVEFreeWidget *widget, uint8_t tag) {      EVEWidget *_widget = &widget->w;      return tag - _widget->tag0; -}
\ No newline at end of file +} diff --git a/fw/fe310/eos/eve/widget/freew.h b/fw/fe310/eos/eve/widget/freew.h index cbcd08b..82038c4 100644 --- a/fw/fe310/eos/eve/widget/freew.h +++ b/fw/fe310/eos/eve/widget/freew.h @@ -5,11 +5,13 @@ struct EVEWidgetSpec;  typedef void (*eve_freew_draw_t) (struct EVEFreeWidget *);  typedef int (*eve_freew_touch_t) (struct EVEFreeWidget *, EVETouch *, uint16_t); +typedef void (*eve_freew_uievt_t) (struct EVEFreeWidget *, uint16_t);  typedef struct EVEFreeWidget {      EVEWidget w;      eve_freew_draw_t _draw;      eve_freew_touch_t _touch; +    eve_freew_uievt_t _uievt;  } EVEFreeWidget;  typedef struct EVEFreeSpec { @@ -18,11 +20,14 @@ typedef struct EVEFreeSpec {      eve_kbd_input_handler_t putc;  } EVEFreeSpec; -void eve_freew_init(EVEFreeWidget *widget, EVERect *g, EVEPage *page, eve_freew_draw_t draw, eve_freew_touch_t touch, eve_kbd_input_handler_t putc); +int eve_freew_init(EVEFreeWidget *widget, EVERect *g, EVEPage *page, eve_freew_draw_t draw, eve_freew_touch_t touch, eve_kbd_input_handler_t putc); +void eve_freew_set_uievt_handler(EVEFreeWidget *widget, eve_freew_uievt_t handler);  int eve_freew_create(EVEWidget *_widget, struct EVEWidgetSpec *spec, EVEPage *page);  uint8_t eve_freew_draw(EVEWidget *_widget, uint8_t tag0);  int eve_freew_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt); -uint8_t eve_freew_tag(EVEFreeWidget *widget); -uint8_t eve_widget_tag_index(EVEFreeWidget *widget, uint8_t tag);
\ No newline at end of file +uint8_t eve_freew_tag0(EVEFreeWidget *widget); +void eve_freew_tag(EVEFreeWidget *widget, uint8_t tag_opt); +void eve_freew_tag_idx(EVEFreeWidget *widget, uint8_t i); +uint8_t eve_freew_get_tag_idx(EVEFreeWidget *widget, uint8_t tag); diff --git a/fw/fe310/eos/eve/widget/label.c b/fw/fe310/eos/eve/widget/label.c index 43c710c..d596677 100644 --- a/fw/fe310/eos/eve/widget/label.c +++ b/fw/fe310/eos/eve/widget/label.c @@ -10,26 +10,31 @@  #include "label.h" -void eve_label_init(EVELabel *label, EVERect *g, EVEFont *font, char *title) { +int eve_label_init(EVELabel *label, EVERect *g, EVEFont *font, char *title) {      size_t title_len;      int title_w, rv; -    memset(label, 0, sizeof(EVELabel)); -    if (g) label->g = *g; +    if (font == NULL) return EVE_ERR; -    rv = eve_font_verify(font, label->title, &title_w, &title_len); -    if (rv) title[title_len] = '\0'; +    rv = eve_font_verify(font, title, 0, &title_w, &title_len); +    if (rv) return rv; +    memset(label, 0, sizeof(EVELabel)); +    if (g) label->g = *g;      label->font = font;      label->title = title;      if (label->g.h == 0) label->g.h = eve_font_h(font);      if (label->g.w == 0) label->g.w = title_w + EVE_LABEL_MARGIN; + +    return EVE_OK;  } -void eve_label_create(EVELabel *label, EVELabelSpec *spec, EVEPage *page) { +int eve_label_create(EVELabel *label, EVELabelSpec *spec, EVEPage *page) {      EVEFont *font = spec->font ? spec->font : eve_window_font(page->v.window); +    int rv; -    eve_label_init(label, &spec->g, font, spec->title); +    rv = eve_label_init(label, &spec->g, font, spec->title); +    return rv;  }  void eve_label_draw(EVELabel *label) { diff --git a/fw/fe310/eos/eve/widget/label.h b/fw/fe310/eos/eve/widget/label.h index 9992f8c..f9c192b 100644 --- a/fw/fe310/eos/eve/widget/label.h +++ b/fw/fe310/eos/eve/widget/label.h @@ -15,7 +15,7 @@ typedef struct EVELabelSpec {      int16_t margin;  } EVELabelSpec; -void eve_label_init(EVELabel *label, EVERect *g, EVEFont *font, char *title); +int eve_label_init(EVELabel *label, EVERect *g, EVEFont *font, char *title); -void eve_label_create(EVELabel *label, EVELabelSpec *spec, EVEPage *page); +int eve_label_create(EVELabel *label, EVELabelSpec *spec, EVEPage *page);  void eve_label_draw(EVELabel *label);
\ No newline at end of file diff --git a/fw/fe310/eos/eve/widget/pagew.c b/fw/fe310/eos/eve/widget/pagew.c index 77e8f01..0ce4e82 100644 --- a/fw/fe310/eos/eve/widget/pagew.c +++ b/fw/fe310/eos/eve/widget/pagew.c @@ -10,8 +10,12 @@  #include "widget.h" -void eve_pagew_init(EVEPageWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *title, eve_view_constructor_t constructor) { +int eve_pagew_init(EVEPageWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *title, eve_view_constructor_t constructor) {      EVEWidget *_widget = &widget->w; +    int title_w, rv; + +    rv = eve_font_verify(font, title, 0, &title_w, NULL); +    if (rv) return rv;      memset(widget, 0, sizeof(EVEPageWidget));      eve_widget_init(_widget, EVE_WIDGET_TYPE_PAGE, g, page, eve_pagew_draw, eve_pagew_touch, NULL); @@ -19,16 +23,19 @@ void eve_pagew_init(EVEPageWidget *widget, EVERect *g, EVEPage *page, EVEFont *f      widget->title = title;      widget->constructor = constructor;      if (_widget->g.h == 0) _widget->g.h = eve_font_h(widget->font); +    if (_widget->g.w == 0) _widget->g.w = title_w; + +    return EVE_OK;  }  int eve_pagew_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {      EVEPageWidget *widget = (EVEPageWidget *)_widget;      EVEPageSpec *tspec = &spec->tspec.page;      EVEFont *font = tspec->font ? tspec->font : eve_window_font(page->v.window); +    int rv; -    eve_pagew_init(widget, &spec->g, page, font, tspec->title, tspec->constructor); - -    return EVE_OK; +    rv = eve_pagew_init(widget, &spec->g, page, font, tspec->title, tspec->constructor); +    return rv;  }  uint8_t eve_pagew_draw(EVEWidget *_widget, uint8_t tag0) { @@ -50,6 +57,9 @@ int eve_pagew_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {      EVEPage *parent = _widget->page;      EVEPageWidget *widget = (EVEPageWidget *)_widget; +    /* widget received non-touch event, always return 0 */ +    if (evt & EVE_TOUCH_ETYPE_EXT) return 0; +      if (evt & EVE_TOUCH_ETYPE_TAG_UP) {          eve_page_open(parent, widget->constructor);          return 1; diff --git a/fw/fe310/eos/eve/widget/pagew.h b/fw/fe310/eos/eve/widget/pagew.h index b1a91b2..9a1f1a1 100644 --- a/fw/fe310/eos/eve/widget/pagew.h +++ b/fw/fe310/eos/eve/widget/pagew.h @@ -15,7 +15,7 @@ typedef struct EVEPageSpec {      eve_view_constructor_t constructor;  } EVEPageSpec; -void eve_pagew_init(EVEPageWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *title, eve_view_constructor_t constructor); +int eve_pagew_init(EVEPageWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *title, eve_view_constructor_t constructor);  int eve_pagew_create(EVEWidget *_widget, struct EVEWidgetSpec *spec, EVEPage *page);  uint8_t eve_pagew_draw(EVEWidget *_widget, uint8_t tag0); diff --git a/fw/fe310/eos/eve/widget/selectw.c b/fw/fe310/eos/eve/widget/selectw.c index f0dfed9..c0e2bfe 100644 --- a/fw/fe310/eos/eve/widget/selectw.c +++ b/fw/fe310/eos/eve/widget/selectw.c @@ -14,19 +14,26 @@  #define DIVC(x,y)               ((x) / (y) + ((x) % (y) != 0)) -static int selectw_verify(utf8_t *option, uint16_t option_size) { +static int selectw_verify(utf8_t *option, uint16_t option_size, EVEFont *font, size_t *_o_len) {      size_t o_len;      uint16_t o_curr;      int rv;      o_curr = 0;      while (o_curr < option_size) { -        rv = utf8_verify(option + o_curr, option_size - o_curr, &o_len); -        if (rv) return EVE_ERR; -        if (o_len == 0) return EVE_OK; +        rv = eve_font_verify(font, option + o_curr, option_size - o_curr, NULL, &o_len); +        if (rv) { +            if (_o_len) *_o_len = o_curr; +            return rv; +        }          o_curr += o_len + 1; +        if (o_len == 0) { +            if (_o_len) *_o_len = o_curr; +            return EVE_OK; +        }      } +    if (_o_len) *_o_len = o_curr;      return EVE_OK;  } @@ -57,28 +64,32 @@ static void selectw_update_sz(EVESelectWidget *widget, int uievt) {      if (uievt) eve_view_uievt_push(&page->v, EVE_UIEVT_WIDGET_UPDATE_G, _widget);  } -void eve_selectw_init(EVESelectWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *option, uint16_t option_size, uint8_t multi) { +int eve_selectw_init(EVESelectWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *option, uint16_t option_size, uint8_t multi) {      EVEWidget *_widget = &widget->w;      int rv; +    rv = selectw_verify(option, option_size, font, NULL); +    if (rv) return rv; +      memset(widget, 0, sizeof(EVESelectWidget));      eve_widget_init(_widget, EVE_WIDGET_TYPE_SELECT, g, page, eve_selectw_draw, eve_selectw_touch, NULL); +      widget->font = font; -    rv = selectw_verify(option, option_size); -    if (rv == EVE_OK) { -        widget->option = option; -        widget->option_size = option_size; -        widget->option_count = selectw_count(widget); -        selectw_update_sz(widget, 0); -    } +    widget->option = option; +    widget->option_size = option_size; +    widget->option_count = selectw_count(widget); +    selectw_update_sz(widget, 0); +      widget->multi = multi;      widget->select = widget->multi ? 0 : SELECTW_NOSELECT; + +    return EVE_OK;  }  int eve_selectw_update(EVESelectWidget *widget) {      int rv, i; -    rv = selectw_verify(widget->option, widget->option_size); +    rv = selectw_verify(widget->option, widget->option_size, widget->font, NULL);      if (rv) return rv;      widget->option_count = selectw_count(widget); @@ -92,6 +103,7 @@ int eve_selectw_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {      EVESelectSpec *tspec = &spec->tspec.select;      EVEFont *font = tspec->font ? tspec->font : eve_window_font(page->v.window);      utf8_t *option; +    int rv;      option = eve_malloc(tspec->option_size);      if (option == NULL) { @@ -99,9 +111,8 @@ int eve_selectw_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {      }      memset(option, 0, tspec->option_size); -    eve_selectw_init(widget, &spec->g, page, font, option, tspec->option_size, tspec->multi); - -    return EVE_OK; +    rv = eve_selectw_init(widget, &spec->g, page, font, option, tspec->option_size, tspec->multi); +    return rv;  }  void eve_selectw_destroy(EVEWidget *_widget) { @@ -172,6 +183,10 @@ uint8_t eve_selectw_draw(EVEWidget *_widget, uint8_t tag0) {  int eve_selectw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {      EVESelectWidget *widget = (EVESelectWidget *)_widget; +    EVEPage *page = _widget->page; + +    /* widget received non-touch event, always return 0 */ +    if (evt & EVE_TOUCH_ETYPE_EXT) return 0;      if (evt & EVE_TOUCH_ETYPE_TAG_UP) {          int i = touch->tag0 - _widget->tag0 + widget->line0; @@ -192,6 +207,8 @@ int eve_selectw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {              }          } +        eve_view_uievt_push(&page->v, EVE_UIEVT_WIDGET_UPDATE, _widget); +          return 1;      } @@ -226,8 +243,8 @@ int eve_selectw_add_option(EVESelectWidget *widget, utf8_t *option) {      int o_curr;      int rv, i; -    rv = utf8_verify(option, strlen(option) + 1, NULL); -    if (rv) return EVE_ERR; +    rv = eve_font_verify(widget->font, option, 0, NULL, NULL); +    if (rv) return rv;      o_curr = 0;      i = 0; @@ -252,10 +269,11 @@ int eve_selectw_add_option(EVESelectWidget *widget, utf8_t *option) {  int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size) {      int rv, i; -    rv = selectw_verify(option, option_size); -    if (rv) return rv;      if (option_size > widget->option_size) return EVE_ERR_FULL; +    rv = selectw_verify(option, option_size, widget->font, NULL); +    if (rv) return rv; +      memcpy(widget->option, option, option_size);      memset(widget->option + option_size, 0, widget->option_size - option_size); @@ -264,3 +282,23 @@ int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t opt      return EVE_OK;  } + +void eve_selectw_fix_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size) { +    size_t good_l, bad_l; +    int rv; + +    do { +        rv = selectw_verify(option, option_size, widget->font, &good_l); +        if (rv == EVE_OK) return; + +        option += good_l; +        option_size -= good_l; + +        bad_l = strnlen(option, option_size); +        if (bad_l != option_size) { +            bad_l++; +        } +        memmove(option, option + bad_l, option_size - bad_l); +        memset(option + option_size - bad_l, 0, bad_l); +    } while (bad_l != option_size); +} diff --git a/fw/fe310/eos/eve/widget/selectw.h b/fw/fe310/eos/eve/widget/selectw.h index aa49866..185d787 100644 --- a/fw/fe310/eos/eve/widget/selectw.h +++ b/fw/fe310/eos/eve/widget/selectw.h @@ -19,7 +19,7 @@ typedef struct EVESelectSpec {      uint8_t multi;  } EVESelectSpec; -void eve_selectw_init(EVESelectWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *option, uint16_t option_size, uint8_t multi); +int eve_selectw_init(EVESelectWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *option, uint16_t option_size, uint8_t multi);  int eve_selectw_update(EVESelectWidget *widget);  int eve_selectw_create(EVEWidget *_widget, struct EVEWidgetSpec *spec, EVEPage *page); @@ -31,3 +31,4 @@ utf8_t *eve_selectw_option(EVESelectWidget *widget, int idx);  utf8_t *eve_selectw_option_selected(EVESelectWidget *widget);  int eve_selectw_add_option(EVESelectWidget *widget, utf8_t *option);  int eve_selectw_set_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size); +void eve_selectw_fix_option(EVESelectWidget *widget, utf8_t *option, uint16_t option_size); diff --git a/fw/fe310/eos/eve/widget/spacerw.c b/fw/fe310/eos/eve/widget/spacerw.c index aa5bec1..f597a2d 100644 --- a/fw/fe310/eos/eve/widget/spacerw.c +++ b/fw/fe310/eos/eve/widget/spacerw.c @@ -10,15 +10,18 @@  #include "widget.h" -void eve_spacerw_init(EVEWidget *widget, EVERect *g, EVEPage *page) { +int eve_spacerw_init(EVEWidget *widget, EVERect *g, EVEPage *page) {      memset(widget, 0, sizeof(EVEWidget));      eve_widget_init(widget, EVE_WIDGET_TYPE_SPACER, g, page, eve_spacerw_draw, eve_spacerw_touch, NULL); + +    return EVE_OK;  }  int eve_spacerw_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) { -    eve_spacerw_init(_widget, &spec->g, page); +    int rv; -    return EVE_OK; +    rv = eve_spacerw_init(_widget, &spec->g, page); +    return rv;  }  uint8_t eve_spacerw_draw(EVEWidget *_widget, uint8_t tag0) { diff --git a/fw/fe310/eos/eve/widget/spacerw.h b/fw/fe310/eos/eve/widget/spacerw.h index 621b45b..ae97479 100644 --- a/fw/fe310/eos/eve/widget/spacerw.h +++ b/fw/fe310/eos/eve/widget/spacerw.h @@ -2,7 +2,7 @@  struct EVEWidgetSpec; -void eve_spacerw_init(EVEWidget *widget, EVERect *g, EVEPage *page); +int eve_spacerw_init(EVEWidget *widget, EVERect *g, EVEPage *page);  int eve_spacerw_create(EVEWidget *_widget, struct EVEWidgetSpec *spec, EVEPage *page);  uint8_t eve_spacerw_draw(EVEWidget *_widget, uint8_t tag0); diff --git a/fw/fe310/eos/eve/widget/strw.c b/fw/fe310/eos/eve/widget/strw.c index 6a2692b..847de49 100644 --- a/fw/fe310/eos/eve/widget/strw.c +++ b/fw/fe310/eos/eve/widget/strw.c @@ -12,7 +12,7 @@  #include "widget.h" -#define STRW_TOUCH_OPT          EVE_TOUCH_OPT_TRACK | EVE_TOUCH_OPT_TRACK_X | EVE_TOUCH_OPT_TRACK_EXT_X | EVE_TOUCH_OPT_LPRESS +#define STRW_TOUCH_OPT          EVE_TOUCH_OPT_TRACK_X | EVE_TOUCH_OPT_TRACK_EXT_X | EVE_TOUCH_OPT_LPRESS  #define STRW_TMODE_NONE         0  #define STRW_TMODE_CRSR         1 @@ -27,37 +27,33 @@  #define CHAR_VALID_INPUT(c)     ((c >= 0x20) && (c < 0x7f)) -void eve_strw_init(EVEStrWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *str, uint16_t str_size) { +int eve_strw_init(EVEStrWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *str, uint16_t str_size) {      EVEWidget *_widget = &widget->w;      size_t str_len;      int str_w, rv; +    rv = eve_font_verify(font, str, str_size, &str_w, &str_len); +    if (rv) return rv; +      memset(widget, 0, sizeof(EVEStrWidget));      eve_widget_init(_widget, EVE_WIDGET_TYPE_STR, g, page, eve_strw_draw, eve_strw_touch, eve_strw_putc); -    rv = utf8_verify(str, str_size, &str_len); -    if (rv) str[str_len] = '\0'; - -    rv = eve_font_verify(font, str, &str_w, &str_len); -    if (rv) str[str_len] = '\0'; -      widget->font = font;      widget->str = str;      widget->str_size = str_size;      widget->str_len = str_len;      widget->str_g.w = str_w;      if (_widget->g.h == 0) _widget->g.h = eve_font_h(widget->font); + +    return EVE_OK;  }  int eve_strw_update(EVEStrWidget *widget) {      size_t str_len;      int str_w, rv; -    rv = utf8_verify(widget->str, widget->str_size, &str_len); -    if (rv) widget->str[str_len] = '\0'; - -    rv = eve_font_verify(widget->font, widget->str, &str_w, &str_len); -    if (rv) widget->str[str_len] = '\0'; +    rv = eve_font_verify(widget->font, widget->str, widget->str_size, &str_w, &str_len); +    if (rv) return rv;      widget->str_len = str_len;      widget->str_g.w = str_w; @@ -71,14 +67,15 @@ int eve_strw_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {      EVEFont *font = tspec->font ? tspec->font : eve_window_font(page->v.window);      utf8_t *str;      uint16_t *line; +    int rv;      str = eve_malloc(tspec->str_size);      if (str == NULL) return EVE_ERR_NOMEM;      str[0] = '\0'; -    eve_strw_init(widget, &spec->g, page, font, str, tspec->str_size); - -    return EVE_OK; +    rv = eve_strw_init(widget, &spec->g, page, font, str, tspec->str_size); +    if (rv) eve_free(str); +    return rv;  }  void eve_strw_destroy(EVEWidget *_widget) { @@ -87,15 +84,20 @@ void eve_strw_destroy(EVEWidget *_widget) {      eve_free(widget->str);  } -static void show_rect(EVEStrWidget *widget) { +static void show_text(EVEStrWidget *widget, EVEStrCursor *cursor, int del_w) {      EVEWidget *_widget = &widget->w; -    EVERect focus; +    int w0 = widget->font->w; +    int w1 = _widget->g.w - widget->font->w; -    focus.x = _widget->g.x; -    focus.y = _widget->g.y; -    focus.w = _widget->g.w; -    focus.h = 2 * widget->font->h; -    eve_page_show_rect(_widget->page, &focus); +    if (del_w && (widget->str_g.w - widget->str_g.x < w1)) { +        widget->str_g.x = (widget->str_g.x > del_w ? widget->str_g.x - del_w : 0); +    } +    if (cursor->x - widget->str_g.x < w0) { +        widget->str_g.x = (cursor->x > w0 ? cursor->x - w0 : 0); +    } +    if (cursor->x - widget->str_g.x > w1) { +        widget->str_g.x = cursor->x - w1; +    }  }  static EVEStrCursor *cursor_prox(EVEStrWidget *widget, EVEStrCursor *cursor, EVETouch *touch, short *dx) { @@ -156,7 +158,7 @@ uint8_t eve_strw_draw(EVEWidget *_widget, uint8_t tag0) {      _widget->tag0 = tag0;      if (tag0 != EVE_NOTAG) {          eve_cmd_dl(TAG(tag0)); -        eve_touch_set_opt(tag0, STRW_TOUCH_OPT); +        eve_tag_set_opt(tag0, STRW_TOUCH_OPT);          tag0++;      }      _widget->tagN = tag0; @@ -228,7 +230,22 @@ int eve_strw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {      EVEPage *page = _widget->page;      EVEStrCursor *t_cursor = NULL;      short dx; -    int ret = 0; +    int rv = 0; + +    /* widget received non-touch event */ +    if (evt & EVE_TOUCH_ETYPE_EXT) { +        evt &= ~EVE_TOUCH_ETYPE_EXT; +        switch (evt) { +            case EVE_UIEVT_WIDGET_FOCUS_OUT: { +                if (widget->cursor1.on) eve_strw_cursor_clear(widget, &widget->cursor1); +                if (widget->cursor2.on) eve_strw_cursor_clear(widget, &widget->cursor2); +                break; +            } +        } + +        /* always return 0 for non-touch events */ +        return 0; +    }      if (evt & (EVE_TOUCH_ETYPE_LPRESS | EVE_TOUCH_ETYPE_TRACK_START)) {          if (widget->cursor2.on) { @@ -266,10 +283,11 @@ int eve_strw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {                  case STRW_TMODE_CRSR:                      eve_strw_cursor_set(widget, widget->track.cursor, eve_page_x(page, touch->x) + widget->track.dx); +                    show_text(widget, widget->track.cursor, 0);                      break;              }          } -        ret = 1; +        rv = 1;      } else {          if (evt & EVE_TOUCH_ETYPE_LPRESS) {              if (widget->cursor2.on) { @@ -283,13 +301,12 @@ int eve_strw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {              } else {                  // select              } -            ret = 1; +            rv = 1;          } -        if ((evt & EVE_TOUCH_ETYPE_POINT_UP) && !(touch->eevt & (EVE_TOUCH_EETYPE_TRACK_XY | EVE_TOUCH_EETYPE_ABORT | EVE_TOUCH_EETYPE_LPRESS))) { +        if ((evt & EVE_TOUCH_ETYPE_POINT_UP) && !(touch->eevt & (EVE_TOUCH_EETYPE_TRACK_XY | EVE_TOUCH_EETYPE_TRACK_ABORT | EVE_TOUCH_EETYPE_LPRESS))) {              eve_strw_cursor_set(widget, &widget->cursor1, eve_page_x(page, touch->x0));              if (widget->cursor2.on) eve_strw_cursor_clear(widget, &widget->cursor2); -            show_rect(widget); -            ret = 1; +            rv = 1;          }      } @@ -299,7 +316,7 @@ int eve_strw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {          widget->track.dx = 0;      } -    return ret; +    return rv;  }  void eve_strw_putc(void *w, int c) { @@ -309,19 +326,18 @@ void eve_strw_putc(void *w, int c) {      EVEStrCursor *cursor2 = &widget->cursor2;      utf8_t *str;      utf8_t *clipb = NULL; -    int w0 = widget->font->w; -    int w1 = _widget->g.w - widget->font->w;      int ins_c = 0, del_c = 0;      int ins_w = 0, del_w = 0; -    if (c == EVE_PAGE_KBDCH_CLOSE) { -        if (cursor1->on) eve_strw_cursor_clear(widget, cursor1); -        if (cursor2->on) eve_strw_cursor_clear(widget, cursor2); +    if (!cursor1->on) return; + +    if (c == '\n') { +        EVEPage *page = _widget->page; + +        eve_view_uievt_push(&page->v, EVE_UIEVT_WIDGET_UPDATE, _widget);          return;      } -    if (!cursor1->on) return; -      if (!cursor2->on && ((c == CH_BS) || (c == CH_DEL))) {          ucp_t uc; @@ -349,10 +365,6 @@ void eve_strw_putc(void *w, int c) {                  }                  break;          } -        if (widget->str_g.w - widget->str_g.x < w1) { -            widget->str_g.x -= del_w; -            if (widget->str_g.x < 0) widget->str_g.x = 0; -        }      } else {          EVEStrCursor *c1 = cursor1;          EVEStrCursor *c2 = cursor1; @@ -387,9 +399,8 @@ void eve_strw_putc(void *w, int c) {              clipb = eve_clipb_get();              if (clipb) { -                rv = utf8_verify(clipb, EVE_CLIPB_SIZE_BUF, &clipb_len); -                if (!rv) ins_w = eve_font_str_w(widget->font, clipb); -                if (rv || (ins_w < 0)) { +                rv = eve_font_verify(widget->font, clipb, EVE_CLIPB_SIZE_BUF, &ins_w, &clipb_len); +                if (rv) {                      clipb = NULL;                      clipb_len = 0;                      ins_w = 0; @@ -419,8 +430,7 @@ void eve_strw_putc(void *w, int c) {          if (cursor2->on) eve_strw_cursor_clear(widget, cursor2);      } -    if (cursor1->x - widget->str_g.x < w0) widget->str_g.x = cursor1->x > w0 ? cursor1->x - w0 : 0; -    if (cursor1->x - widget->str_g.x > w1) widget->str_g.x = cursor1->x - w1; +    show_text(widget, cursor1, del_w);  }  void eve_strw_cursor_set(EVEStrWidget *widget, EVEStrCursor *cursor, int16_t x) { diff --git a/fw/fe310/eos/eve/widget/strw.h b/fw/fe310/eos/eve/widget/strw.h index acfd74b..a2817d0 100644 --- a/fw/fe310/eos/eve/widget/strw.h +++ b/fw/fe310/eos/eve/widget/strw.h @@ -33,7 +33,7 @@ typedef struct EVEStrSpec {      uint16_t str_size;  } EVEStrSpec; -void eve_strw_init(EVEStrWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *str, uint16_t str_size); +int eve_strw_init(EVEStrWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *str, uint16_t str_size);  int eve_strw_update(EVEStrWidget *widget);  int eve_strw_create(EVEWidget *_widget, struct EVEWidgetSpec *spec, EVEPage *page); diff --git a/fw/fe310/eos/eve/widget/textw.c b/fw/fe310/eos/eve/widget/textw.c index 7998e75..0a6a700 100644 --- a/fw/fe310/eos/eve/widget/textw.c +++ b/fw/fe310/eos/eve/widget/textw.c @@ -12,7 +12,7 @@  #include "widget.h" -#define TEXTW_TOUCH_OPT         EVE_TOUCH_OPT_TRACK | EVE_TOUCH_OPT_TRACK_XY | EVE_TOUCH_OPT_TRACK_EXT_XY | EVE_TOUCH_OPT_LPRESS +#define TEXTW_TOUCH_OPT         EVE_TOUCH_OPT_TRACK_XY | EVE_TOUCH_OPT_TRACK_EXT_XY | EVE_TOUCH_OPT_LPRESS  #define CH_BS                   0x08  #define CH_DEL                  0x7f @@ -30,20 +30,17 @@  #define DIVC(x,y)               ((x) / (y) + ((x) % (y) != 0)) -void eve_textw_init(EVETextWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *text, uint16_t text_size, uint16_t *line, uint16_t line_size) { +int eve_textw_init(EVETextWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *text, uint16_t text_size, uint16_t *line, uint16_t line_size) {      EVEWidget *_widget = &widget->w;      size_t text_len;      int rv; +    rv = eve_font_verify(font, text, text_size, NULL, &text_len); +    if (rv) return rv; +      memset(widget, 0, sizeof(EVETextWidget));      eve_widget_init(_widget, EVE_WIDGET_TYPE_TEXT, g, page, eve_textw_draw, eve_textw_touch, eve_textw_putc); -    rv = utf8_verify(text, text_size, &text_len); -    if (rv) text[text_len] = '\0'; - -    rv = eve_font_verify(font, text, NULL, &text_len); -    if (rv) text[text_len] = '\0'; -      widget->font = font;      widget->text = text;      widget->text_size = text_size; @@ -52,17 +49,16 @@ void eve_textw_init(EVETextWidget *widget, EVERect *g, EVEPage *page, EVEFont *f      widget->line_size = line_size;      memset(widget->line, 0xff, line_size * sizeof(uint16_t));      eve_textw_text_update(widget, 0, 0); + +    return EVE_OK;  }  int eve_textw_update(EVETextWidget *widget) {      size_t text_len;      int rv; -    rv = utf8_verify(widget->text, widget->text_size, &text_len); -    if (rv) widget->text[text_len] = '\0'; - -    rv = eve_font_verify(widget->font, widget->text, NULL, &text_len); -    if (rv) widget->text[text_len] = '\0'; +    rv = eve_font_verify(widget->font, widget->text, widget->text_size, NULL, &text_len); +    if (rv) return rv;      widget->text_len = text_len;      memset(widget->line, 0xff, widget->line_size * sizeof(uint16_t)); @@ -77,6 +73,7 @@ int eve_textw_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {      EVEFont *font = tspec->font ? tspec->font : eve_window_font(page->v.window);      utf8_t *text;      uint16_t *line; +    int rv;      text = eve_malloc(tspec->text_size);      if (text == NULL) { @@ -89,9 +86,12 @@ int eve_textw_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {          return EVE_ERR_NOMEM;      } -    eve_textw_init(widget, &spec->g, page, font, text, tspec->text_size, line, tspec->line_size); - -    return EVE_OK; +    rv = eve_textw_init(widget, &spec->g, page, font, text, tspec->text_size, line, tspec->line_size); +    if (rv) { +        eve_free(line); +        eve_free(text); +    } +    return rv;  }  void eve_textw_destroy(EVEWidget *_widget) { @@ -214,7 +214,7 @@ uint8_t eve_textw_draw(EVEWidget *_widget, uint8_t tag0) {          for (i=line0; i<lineN; i++) {              if (_widget->tagN != EVE_NOTAG) {                  eve_cmd_dl(TAG(_widget->tagN)); -                eve_touch_set_opt(_widget->tagN, TEXTW_TOUCH_OPT); +                eve_tag_set_opt(_widget->tagN, TEXTW_TOUCH_OPT);                  _widget->tagN++;              }              if (!s && c1 && (c1->line == i)) { @@ -257,7 +257,7 @@ uint8_t eve_textw_draw(EVEWidget *_widget, uint8_t tag0) {          if (lineNvisible) {              if (_widget->tagN != EVE_NOTAG) {                  eve_cmd_dl(TAG(_widget->tagN)); -                eve_touch_set_opt(_widget->tagN, TEXTW_TOUCH_OPT); +                eve_tag_set_opt(_widget->tagN, TEXTW_TOUCH_OPT);                  _widget->tagN++;              }              draw_line(widget, lineN, 0, 0, 0, _widget->g.w, 0); @@ -276,7 +276,27 @@ int eve_textw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {      EVEPage *page = _widget->page;      EVETextCursor *t_cursor = NULL;      short dx, dl; -    int ret = 0; +    int rv = 0; + +    /* widget received non-touch event */ +    if (evt & EVE_TOUCH_ETYPE_EXT) { +        evt &= ~EVE_TOUCH_ETYPE_EXT; +        switch (evt) { +            case EVE_UIEVT_WIDGET_FOCUS_IN: { +                if (widget->cursor1.on) show_rect(widget, &widget->cursor1); +                break; +            } + +            case EVE_UIEVT_WIDGET_FOCUS_OUT: { +                if (widget->cursor1.on) eve_textw_cursor_clear(widget, &widget->cursor1); +                if (widget->cursor2.on) eve_textw_cursor_clear(widget, &widget->cursor2); +                break; +            } +        } + +        /* always return 0 for non-touch events */ +        return 0; +    }      if (evt & (EVE_TOUCH_ETYPE_LPRESS | EVE_TOUCH_ETYPE_TRACK_START)) {          if (widget->cursor2.on) { @@ -294,7 +314,7 @@ int eve_textw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {      if (widget->track.cursor) {          if (evt & EVE_TOUCH_ETYPE_TRACK) eve_textw_cursor_set(widget, widget->track.cursor, touch->tag + widget->track.dl, eve_page_x(page, touch->x) + widget->track.dx); -        ret = 1; +        rv = 1;      } else {          if (evt & EVE_TOUCH_ETYPE_LPRESS) {              if (widget->cursor2.on) { @@ -308,13 +328,12 @@ int eve_textw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {              } else {                  // select              } -            ret = 1; +            rv = 1;          } -        if ((evt & EVE_TOUCH_ETYPE_TAG_UP) && !(touch->eevt & (EVE_TOUCH_EETYPE_TRACK_XY | EVE_TOUCH_EETYPE_ABORT | EVE_TOUCH_EETYPE_LPRESS))) { +        if ((evt & EVE_TOUCH_ETYPE_TAG_UP) && !(touch->eevt & (EVE_TOUCH_EETYPE_TRACK_XY | EVE_TOUCH_EETYPE_TRACK_ABORT | EVE_TOUCH_EETYPE_LPRESS))) {              eve_textw_cursor_set(widget, &widget->cursor1, touch->tag_up, eve_page_x(page, touch->x0));              if (widget->cursor2.on) eve_textw_cursor_clear(widget, &widget->cursor2); -            show_rect(widget, &widget->cursor1); -            ret = 1; +            rv = 1;          }      } @@ -324,7 +343,7 @@ int eve_textw_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {          widget->track.dl = 0;      } -    return ret; +    return rv;  }  void eve_textw_putc(void *w, int c) { @@ -334,16 +353,10 @@ void eve_textw_putc(void *w, int c) {      EVETextCursor *cursor2 = &widget->cursor2;      utf8_t *text;      utf8_t *clipb = NULL; -    int i, r; +    int i, line;      int ins_c = 0, del_c = 0;      int ch_w = 0; -    if (c == EVE_PAGE_KBDCH_CLOSE) { -        if (cursor1->on) eve_textw_cursor_clear(widget, cursor1); -        if (cursor2->on) eve_textw_cursor_clear(widget, cursor2); -        return; -    } -      if (!cursor1->on) return;      if (!cursor2->on && ((c == CH_BS) || (c == CH_DEL))) { @@ -401,9 +414,8 @@ void eve_textw_putc(void *w, int c) {              clipb = eve_clipb_get();              if (clipb) { -                rv = utf8_verify(clipb, EVE_CLIPB_SIZE_BUF, &clipb_len); -                if (!rv) ch_w = eve_font_str_w(widget->font, clipb); -                if (rv || (ch_w < 0)) { +                rv = eve_font_verify(widget->font, clipb, EVE_CLIPB_SIZE_BUF, &ch_w, &clipb_len); +                if (rv) {                      clipb = NULL;                      clipb_len = 0;                      ch_w = 0; @@ -437,9 +449,9 @@ void eve_textw_putc(void *w, int c) {          widget->line[i] += ins_c - del_c;      } -    r = cursor1->line; -    if (cursor1->line) r = eve_textw_text_update(widget, cursor1->line - 1, 1); -    if (r == cursor1->line) eve_textw_text_update(widget, cursor1->line, 1); +    line = cursor1->line; +    if (cursor1->line) line = eve_textw_text_update(widget, cursor1->line - 1, 1); +    if (line == cursor1->line) eve_textw_text_update(widget, cursor1->line, 1);      if (cursor1->line && (cursor1->ch < LINE_START(widget, cursor1->line))) {          while (cursor1->line && (cursor1->ch < LINE_START(widget, cursor1->line))) cursor1->line--; @@ -449,7 +461,7 @@ void eve_textw_putc(void *w, int c) {          while ((cursor1->line != widget->line_len - 1) && (cursor1->ch > LINE_END(widget, cursor1->line))) cursor1->line++;          eve_textw_cursor_update(widget, cursor1);          show_rect(widget, cursor1); -    } else if ((cursor1->line) && (r != cursor1->line)) { +    } else if ((cursor1->line) && (line != cursor1->line)) {          eve_textw_cursor_update(widget, cursor1);      } else {          cursor1->x += ch_w; diff --git a/fw/fe310/eos/eve/widget/textw.h b/fw/fe310/eos/eve/widget/textw.h index 0fb3505..d3d544b 100644 --- a/fw/fe310/eos/eve/widget/textw.h +++ b/fw/fe310/eos/eve/widget/textw.h @@ -34,7 +34,7 @@ typedef struct EVETextSpec {      uint16_t line_size;  } EVETextSpec; -void eve_textw_init(EVETextWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *text, uint16_t text_size, uint16_t *line, uint16_t line_size); +int eve_textw_init(EVETextWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, utf8_t *text, uint16_t text_size, uint16_t *line, uint16_t line_size);  int eve_textw_update(EVETextWidget *widget);  int eve_textw_create(EVEWidget *_widget, struct EVEWidgetSpec *spec, EVEPage *page); diff --git a/fw/fe310/eos/eve/widget/togglew.c b/fw/fe310/eos/eve/widget/togglew.c index c68e191..06d5fc3 100644 --- a/fw/fe310/eos/eve/widget/togglew.c +++ b/fw/fe310/eos/eve/widget/togglew.c @@ -10,7 +10,7 @@  #include "widget.h" -void eve_togglew_init(EVEToggleWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *labels) { +int eve_togglew_init(EVEToggleWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *labels) {      EVEWidget *_widget = &widget->w;      memset(widget, 0, sizeof(EVEToggleWidget)); @@ -18,16 +18,18 @@ void eve_togglew_init(EVEToggleWidget *widget, EVERect *g, EVEPage *page, EVEFon      widget->font = font;      widget->labels = labels;      if (_widget->g.h == 0) _widget->g.h = eve_font_h(widget->font); + +    return EVE_OK;  }  int eve_togglew_create(EVEWidget *_widget, EVEWidgetSpec *spec, EVEPage *page) {      EVEToggleWidget *widget = (EVEToggleWidget *)_widget;      EVEToggleSpec *tspec = &spec->tspec.toggle;      EVEFont *font = tspec->font ? tspec->font : eve_window_font(page->v.window); +    int rv; -    eve_togglew_init(widget, &spec->g, page, font, tspec->labels); - -    return EVE_OK; +    rv = eve_togglew_init(widget, &spec->g, page, font, tspec->labels); +    return rv;  }  uint8_t eve_togglew_draw(EVEWidget *_widget, uint8_t tag0) { @@ -46,23 +48,30 @@ uint8_t eve_togglew_draw(EVEWidget *_widget, uint8_t tag0) {  int eve_togglew_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt) {      EVEToggleWidget *widget = (EVEToggleWidget *)_widget; +    EVEPage *page = _widget->page; + +    /* widget received non-touch event, always return 0 */ +    if (evt & EVE_TOUCH_ETYPE_EXT) return 0;      if (evt & EVE_TOUCH_ETYPE_TAG_UP) {          widget->state = !widget->state; + +        eve_view_uievt_push(&page->v, EVE_UIEVT_WIDGET_UPDATE, _widget); +          return 1;      }      return 0;  } +uint8_t eve_togglew_get(EVEToggleWidget *widget) { +    return widget->state; +} +  void eve_togglew_set(EVEToggleWidget *widget) {      widget->state = 1;  } -void eve_togglew_clr(EVEToggleWidget *widget) { +void eve_togglew_clear(EVEToggleWidget *widget) {      widget->state = 0;  } - -uint8_t eve_togglew_get(EVEToggleWidget *widget) { -    return widget->state; -}
\ No newline at end of file diff --git a/fw/fe310/eos/eve/widget/togglew.h b/fw/fe310/eos/eve/widget/togglew.h index aa5485d..af37672 100644 --- a/fw/fe310/eos/eve/widget/togglew.h +++ b/fw/fe310/eos/eve/widget/togglew.h @@ -17,12 +17,12 @@ typedef struct EVEToggleSpec {      uint8_t state;  } EVEToggleSpec; -void eve_togglew_init(EVEToggleWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *labels); +int eve_togglew_init(EVEToggleWidget *widget, EVERect *g, EVEPage *page, EVEFont *font, char *labels);  int eve_togglew_create(EVEWidget *_widget, struct EVEWidgetSpec *spec, EVEPage *page);  uint8_t eve_togglew_draw(EVEWidget *_widget, uint8_t tag0);  int eve_togglew_touch(EVEWidget *_widget, EVETouch *touch, uint16_t evt); +uint8_t eve_togglew_get(EVEToggleWidget *widget);  void eve_togglew_set(EVEToggleWidget *widget); -void eve_togglew_clr(EVEToggleWidget *widget); -uint8_t eve_togglew_get(EVEToggleWidget *widget);
\ No newline at end of file +void eve_togglew_clear(EVEToggleWidget *widget); diff --git a/fw/fe310/eos/eve/widget/widget.c b/fw/fe310/eos/eve/widget/widget.c index 88b90a9..8b0a2e4 100644 --- a/fw/fe310/eos/eve/widget/widget.c +++ b/fw/fe310/eos/eve/widget/widget.c @@ -49,16 +49,10 @@ void eve_widget_destroy(EVEWidget *widget) {      if (_eve_widget_destroy[widget->type]) _eve_widget_destroy[widget->type](widget);  } -void eve_widget_set_focus(EVEWidget *widget) { -    EVEPage *page = widget->page; - -    eve_page_set_focus(page, widget); -} -  void eve_widget_set_flags(EVEWidget *widget, uint8_t flags) {      widget->flags |= flags;  } -void eve_widget_clr_flags(EVEWidget *widget, uint8_t flags) { +void eve_widget_clear_flags(EVEWidget *widget, uint8_t flags) {      widget->flags &= ~flags;  } diff --git a/fw/fe310/eos/eve/widget/widget.h b/fw/fe310/eos/eve/widget/widget.h index a565b53..e7ab2f2 100644 --- a/fw/fe310/eos/eve/widget/widget.h +++ b/fw/fe310/eos/eve/widget/widget.h @@ -45,6 +45,5 @@ size_t eve_widget_size(uint8_t type);  void eve_widget_set_label(EVEWidget *widget, EVELabel *label);  EVEWidget *eve_widget_next(EVEWidget *widget); -void eve_widget_set_focus(EVEWidget *widget);  void eve_widget_set_flags(EVEWidget *widget, uint8_t flags); -void eve_widget_clr_flags(EVEWidget *widget, uint8_t flags);
\ No newline at end of file +void eve_widget_clear_flags(EVEWidget *widget, uint8_t flags);
\ No newline at end of file  | 
