summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/eve/widget
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/eve/widget')
-rw-r--r--fw/fe310/eos/eve/widget/freew.c60
-rw-r--r--fw/fe310/eos/eve/widget/freew.h11
-rw-r--r--fw/fe310/eos/eve/widget/label.c19
-rw-r--r--fw/fe310/eos/eve/widget/label.h4
-rw-r--r--fw/fe310/eos/eve/widget/pagew.c18
-rw-r--r--fw/fe310/eos/eve/widget/pagew.h2
-rw-r--r--fw/fe310/eos/eve/widget/selectw.c78
-rw-r--r--fw/fe310/eos/eve/widget/selectw.h3
-rw-r--r--fw/fe310/eos/eve/widget/spacerw.c9
-rw-r--r--fw/fe310/eos/eve/widget/spacerw.h2
-rw-r--r--fw/fe310/eos/eve/widget/strw.c104
-rw-r--r--fw/fe310/eos/eve/widget/strw.h2
-rw-r--r--fw/fe310/eos/eve/widget/textw.c90
-rw-r--r--fw/fe310/eos/eve/widget/textw.h2
-rw-r--r--fw/fe310/eos/eve/widget/togglew.c27
-rw-r--r--fw/fe310/eos/eve/widget/togglew.h6
-rw-r--r--fw/fe310/eos/eve/widget/widget.c8
-rw-r--r--fw/fe310/eos/eve/widget/widget.h3
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