From 58232586e1ed65fc8a8e382796628aa087b5dc4c Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Thu, 25 Mar 2021 19:58:43 +0100 Subject: uievt added to view --- fw/fe310/eos/eve/screen/form.c | 22 +++++++++++++--------- fw/fe310/eos/eve/screen/form.h | 5 +++-- fw/fe310/eos/eve/screen/page.c | 17 +++++++++-------- fw/fe310/eos/eve/screen/page.h | 6 +++++- fw/fe310/eos/eve/screen/view.c | 10 ++++++++-- fw/fe310/eos/eve/screen/view.h | 12 +++++++++--- fw/fe310/eos/eve/screen/window.c | 12 ++++++++++-- fw/fe310/eos/eve/screen/window.h | 4 +++- 8 files changed, 60 insertions(+), 28 deletions(-) (limited to 'fw/fe310/eos/eve/screen') diff --git a/fw/fe310/eos/eve/screen/form.c b/fw/fe310/eos/eve/screen/form.c index d3707fc..8ea53c8 100644 --- a/fw/fe310/eos/eve/screen/form.c +++ b/fw/fe310/eos/eve/screen/form.c @@ -1,8 +1,6 @@ #include #include -#include "unicode.h" - #include "eve.h" #include "eve_kbd.h" #include "eve_font.h" @@ -45,6 +43,7 @@ static void form_update_g(EVEForm *form, EVEWidget *_widget) { widget = eve_widget_next(widget); } + form->w = form->p.v.window->g.w; form->h = h + l_h; } @@ -121,13 +120,18 @@ static int form_handle_evt(EVEForm *form, EVEWidget *widget, EVETouch *touch, ui return ret; } -int eve_form_init(EVEForm *form, EVEWindow *window, EVEViewStack *stack, EVEWidget *widget, uint16_t widget_size, eve_form_action_t action, eve_form_destructor_t destructor) { +void eve_form_init(EVEForm *form, EVEWindow *window, EVEViewStack *stack, EVEWidget *widget, uint16_t widget_size, eve_form_action_t action, eve_form_destructor_t destructor) { memset(form, 0, sizeof(EVEForm)); - eve_page_init(&form->p, window, stack, eve_form_draw, eve_form_touch, (eve_page_destructor_t)destructor); + eve_page_init(&form->p, window, stack, eve_form_draw, eve_form_touch, NULL, (eve_page_destructor_t)destructor); + eve_form_update(form, widget, widget_size, action); +} - form->widget = widget; - form->widget_size = widget_size; - form->action = action; +void eve_form_update(EVEForm *form, EVEWidget *widget, uint16_t widget_size, eve_form_action_t action) { + if (widget) { + form->widget = widget; + form->widget_size = widget_size; + } + if (action) form->action = action; form_update_g(form, NULL); } @@ -152,7 +156,7 @@ uint8_t eve_form_draw(EVEView *view, uint8_t tag0) { } if (eve_page_rect_visible(&form->p, &widget->g)) { uint16_t h = widget->g.h; - tagN = widget->draw(widget, &form->p, tagN); + tagN = widget->draw(widget, tagN); if (h != widget->g.h) form_update_g(form, widget); } widget = eve_widget_next(widget); @@ -186,7 +190,7 @@ int eve_form_touch(EVEView *view, EVETouch *touch, uint16_t evt, uint8_t tag0) { _evt = eve_touch_evt(touch, evt, tag0, widget->tag0, widget->tagN - widget->tag0); if (_evt) { if (!form->evt_lock) { - ret = widget->touch(widget, &form->p, touch, _evt); + ret = widget->touch(widget, touch, _evt); if (ret) return 1; } ret = form_handle_evt(form, widget, touch, _evt, tag0); diff --git a/fw/fe310/eos/eve/screen/form.h b/fw/fe310/eos/eve/screen/form.h index 96c5930..eb817e5 100644 --- a/fw/fe310/eos/eve/screen/form.h +++ b/fw/fe310/eos/eve/screen/form.h @@ -20,10 +20,11 @@ typedef struct EVEForm { uint64_t lho_t0; } EVEForm; -int eve_form_init(EVEForm *form, EVEWindow *window, EVEViewStack *stack, struct EVEWidget *widget, uint16_t widget_size, eve_form_action_t action, eve_form_destructor_t destructor); +void eve_form_init(EVEForm *form, EVEWindow *window, EVEViewStack *stack, struct EVEWidget *widget, uint16_t widget_size, eve_form_action_t action, eve_form_destructor_t destructor); +void eve_form_update(EVEForm *form, struct EVEWidget *widget, uint16_t widget_size, eve_form_action_t action); -int eve_form_touch(EVEView *view, EVETouch *touch, uint16_t evt, uint8_t tag0); uint8_t eve_form_draw(EVEView *view, uint8_t tag0); +int eve_form_touch(EVEView *view, EVETouch *touch, uint16_t evt, uint8_t tag0); void eve_form_update_g(EVEForm *form, struct EVEWidget *widget); int eve_form_handle_evt(EVEForm *form, struct EVEWidget *widget, EVETouch *touch, uint16_t evt); diff --git a/fw/fe310/eos/eve/screen/page.c b/fw/fe310/eos/eve/screen/page.c index 0951b1b..4b8799c 100644 --- a/fw/fe310/eos/eve/screen/page.c +++ b/fw/fe310/eos/eve/screen/page.c @@ -1,8 +1,6 @@ #include #include -#include "unicode.h" - #include "eve.h" #include "eve_kbd.h" #include "eve_font.h" @@ -13,11 +11,9 @@ #include "widget/label.h" #include "widget/widget.h" -#define CH_EOF 0x1a - -void eve_page_init(EVEPage *page, EVEWindow *window, EVEViewStack *stack, eve_view_draw_t draw, eve_view_touch_t touch, eve_page_destructor_t destructor) { +void eve_page_init(EVEPage *page, EVEWindow *window, EVEViewStack *stack, eve_view_draw_t draw, eve_view_touch_t touch, eve_view_uievt_t uievt, eve_page_destructor_t destructor) { memset(page, 0, sizeof(EVEPage)); - eve_view_init(&page->v, window, draw, touch, NULL); + eve_view_init(&page->v, window, draw, touch, uievt, NULL); page->destructor = destructor; page->stack = stack; page->widget_f = NULL; @@ -67,13 +63,13 @@ void eve_page_set_focus(EVEPage *page, EVEWidget *widget, EVERect *f) { if (widget_f && widget_f->putc) { eve_window_kbd_detach(window); - widget_f->putc(page, CH_EOF); + widget_f->putc(widget_f, EVE_PAGE_KBDCH_CLOSE); } if (widget && widget->putc) { EVEKbd *kbd = eve_window_kbd(window); if (kbd) { - eve_kbd_set_handler(kbd, widget->putc, page); + eve_kbd_set_handler(kbd, widget->putc, widget); eve_window_kbd_attach(window); } } @@ -113,3 +109,8 @@ int eve_page_rect_visible(EVEPage *page, EVERect *g) { if (((g->x + g->w) >= page->win_x) && ((g->y + g->h) >= page->win_y) && (g->x <= (page->win_x + w)) && (g->y <= (page->win_y + h))) return 1; return 0; } + +void eve_page_uievt_push(EVEPage *page, uint16_t evt, void *param) { + EVEView *view = &page->v; + eve_view_uievt_push(view, evt, param ? param : page); +} diff --git a/fw/fe310/eos/eve/screen/page.h b/fw/fe310/eos/eve/screen/page.h index cf6b8be..ded7185 100644 --- a/fw/fe310/eos/eve/screen/page.h +++ b/fw/fe310/eos/eve/screen/page.h @@ -1,5 +1,7 @@ #include +#define EVE_PAGE_KBDCH_CLOSE 0x1a + struct EVEWidget; struct EVEPage; @@ -14,7 +16,7 @@ typedef struct EVEPage { struct EVEWidget *widget_f; } EVEPage; -void eve_page_init(EVEPage *page, EVEWindow *window, EVEViewStack *stack, eve_view_draw_t draw, eve_view_touch_t touch, eve_page_destructor_t destructor); +void eve_page_init(EVEPage *page, EVEWindow *window, EVEViewStack *stack, eve_view_draw_t draw, eve_view_touch_t touch, eve_view_uievt_t uievt, eve_page_destructor_t destructor); void eve_page_open(EVEPage *parent, eve_view_constructor_t constructor); void eve_page_close(EVEPage *page); @@ -26,3 +28,5 @@ int16_t eve_page_scr_y(EVEPage *page, int16_t y); void eve_page_set_focus(EVEPage *page, struct EVEWidget *widget, EVERect *focus); struct EVEWidget *eve_page_get_focus(EVEPage *page); int eve_page_rect_visible(EVEPage *page, EVERect *g); + +void eve_page_uievt_push(EVEPage *page, uint16_t evt, void *param); \ No newline at end of file diff --git a/fw/fe310/eos/eve/screen/view.c b/fw/fe310/eos/eve/screen/view.c index ce4101f..3f93c2f 100644 --- a/fw/fe310/eos/eve/screen/view.c +++ b/fw/fe310/eos/eve/screen/view.c @@ -3,12 +3,14 @@ #include "eve.h" #include "eve_kbd.h" +#include "eve_font.h" #include "window.h" -void eve_view_init(EVEView *view, EVEWindow *window, eve_view_draw_t draw, eve_view_touch_t touch, void *param) { - view->touch = touch; +void eve_view_init(EVEView *view, EVEWindow *window, eve_view_draw_t draw, eve_view_touch_t touch, eve_view_uievt_t uievt, void *param) { view->draw = draw; + view->touch = touch; + view->uievt = uievt; view->param = param; view->window = window; view->color_bg = 0x000000; @@ -57,3 +59,7 @@ void eve_view_destroy(EVEWindow *window, EVEViewStack *stack) { constructor(window, stack); } } + +void eve_view_uievt_push(EVEView *view, uint16_t evt, void *param) { + if (view->uievt) view->uievt(view, evt, param); +} \ No newline at end of file diff --git a/fw/fe310/eos/eve/screen/view.h b/fw/fe310/eos/eve/screen/view.h index f0e2eb0..527282b 100644 --- a/fw/fe310/eos/eve/screen/view.h +++ b/fw/fe310/eos/eve/screen/view.h @@ -1,6 +1,8 @@ #include -#define EVE_VIEW_SIZE_STACK 16 +#include "uievt.h" + +#define EVE_VIEW_SIZE_STACK 16 struct EVEView; struct EVEViewStack; @@ -8,11 +10,13 @@ struct EVEWindow; typedef uint8_t (*eve_view_draw_t) (struct EVEView *, uint8_t); typedef int (*eve_view_touch_t) (struct EVEView *, EVETouch *, uint16_t, uint8_t); +typedef void (*eve_view_uievt_t) (struct EVEView *, uint16_t, void *); typedef void (*eve_view_constructor_t) (struct EVEWindow *window, struct EVEViewStack *); typedef struct EVEView { eve_view_draw_t draw; eve_view_touch_t touch; + eve_view_uievt_t uievt; struct EVEWindow *window; void *param; uint32_t color_bg; @@ -25,11 +29,13 @@ typedef struct EVEViewStack { uint8_t level; } EVEViewStack; -void eve_view_init(EVEView *view, struct EVEWindow *window, eve_view_draw_t draw, eve_view_touch_t touch, void *param); +void eve_view_init(EVEView *view, struct EVEWindow *window, eve_view_draw_t draw, eve_view_touch_t touch, eve_view_uievt_t uievt, void *param); void eve_view_set_color_bg(EVEView *view, uint8_t r, uint8_t g, uint8_t b); void eve_view_set_color_fg(EVEView *view, uint8_t r, uint8_t g, uint8_t b); uint8_t eve_view_clear(EVEView *view, uint8_t tag0); void eve_view_stack_init(EVEViewStack *stack); void eve_view_create(struct EVEWindow *window, EVEViewStack *stack, eve_view_constructor_t constructor); -void eve_view_destroy(struct EVEWindow *window, EVEViewStack *stack); \ No newline at end of file +void eve_view_destroy(struct EVEWindow *window, EVEViewStack *stack); + +void eve_view_uievt_push(EVEView *view, uint16_t evt, void *param); \ No newline at end of file diff --git a/fw/fe310/eos/eve/screen/window.c b/fw/fe310/eos/eve/screen/window.c index 369c134..2971ab5 100644 --- a/fw/fe310/eos/eve/screen/window.c +++ b/fw/fe310/eos/eve/screen/window.c @@ -3,6 +3,7 @@ #include "eve.h" #include "eve_kbd.h" +#include "eve_font.h" #include "window.h" @@ -17,12 +18,13 @@ void eve_window_init(EVEWindow *window, EVERect *g, EVEWindow *parent, char *nam window->name = name; } -void eve_window_init_root(EVEWindowRoot *window, EVERect *g, char *name) { +void eve_window_init_root(EVEWindowRoot *window, EVERect *g, char *name, EVEFont *font) { EVEWindow *_window = &window->w; eve_window_init(_window, g, NULL, name); _window->root = _window; window->mem_next = EVE_RAM_G; + window->font = font; window->win_kbd = NULL; eve_touch_set_handler(eve_window_root_touch, window); } @@ -49,7 +51,7 @@ void eve_window_init_kbd(EVEWindowKbd *window, EVERect *g, EVEWindowRoot *root, _window->root = (EVEWindow *)root; window->kbd = kbd; root->win_kbd = window; - eve_view_init(&window->v, _window, kbd_draw, kbd_touch, kbd); + eve_view_init(&window->v, _window, kbd_draw, kbd_touch, NULL, kbd); } void eve_window_set_parent(EVEWindow *window, EVEWindow *parent) { @@ -264,3 +266,9 @@ void eve_window_kbd_detach(EVEWindow *window) { eve_kbd_close(kbd); } } + +EVEFont *eve_window_font(EVEWindow *window) { + EVEWindowRoot *win_root = (EVEWindowRoot *)window->root; + + return win_root->font; +} diff --git a/fw/fe310/eos/eve/screen/window.h b/fw/fe310/eos/eve/screen/window.h index 3e082d4..76ccee9 100644 --- a/fw/fe310/eos/eve/screen/window.h +++ b/fw/fe310/eos/eve/screen/window.h @@ -23,11 +23,12 @@ typedef struct EVEWindowKbd { typedef struct EVEWindowRoot { EVEWindow w; uint32_t mem_next; + EVEFont *font; EVEWindowKbd *win_kbd; } EVEWindowRoot; void eve_window_init(EVEWindow *window, EVERect *g, EVEWindow *parent, char *name); -void eve_window_init_root(EVEWindowRoot *window, EVERect *g, char *name); +void eve_window_init_root(EVEWindowRoot *window, EVERect *g, char *name, EVEFont *font); void eve_window_init_kbd(EVEWindowKbd *window, EVERect *g, EVEWindowRoot *root, char *name, EVEKbd *kbd); void eve_window_set_parent(EVEWindow *window, EVEWindow *parent); @@ -48,3 +49,4 @@ void eve_window_root_touch(EVETouch *touch, uint16_t evt, uint8_t tag0, void *wi EVEKbd *eve_window_kbd(EVEWindow *window); void eve_window_kbd_attach(EVEWindow *window); void eve_window_kbd_detach(EVEWindow *window); +EVEFont *eve_window_font(EVEWindow *window); \ No newline at end of file -- cgit v1.2.3