From 1e5eb7cb910e6f23c69c2c986b6373e9f9abb980 Mon Sep 17 00:00:00 2001 From: Uros Majstorovic Date: Sun, 23 Aug 2020 22:37:16 +0200 Subject: dynamic memory alloc for gui added; page navigation added --- fw/fe310/eos/eve/screen/form.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'fw/fe310/eos/eve/screen/form.c') diff --git a/fw/fe310/eos/eve/screen/form.c b/fw/fe310/eos/eve/screen/form.c index f7d37ee..52cfdc6 100644 --- a/fw/fe310/eos/eve/screen/form.c +++ b/fw/fe310/eos/eve/screen/form.c @@ -8,15 +8,18 @@ #include "screen.h" #include "window.h" #include "page.h" -#include "font.h" #include "form.h" +#include "widget/font.h" #include "widget/label.h" #include "widget/widget.h" -int eve_form_init(EVEForm *form, EVEWindow *window, EVEWidget *widget, uint16_t widget_size, eve_page_open_t open, eve_page_close_t close) { +#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) +#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y)) + +int eve_form_init(EVEForm *form, EVEWindow *window, EVEPageStack *stack, EVEWidget *widget, uint16_t widget_size, eve_page_destructor_t destructor) { memset(form, 0, sizeof(EVEForm)); - eve_page_init(&form->p, window, eve_form_touch, eve_form_draw, open, close, eve_form_handle_evt, eve_form_update_g); + eve_page_init(&form->p, window, stack, eve_form_touch, eve_form_draw, eve_form_handle_evt, eve_form_update_g, destructor); form->widget = widget; form->widget_size = widget_size; eve_form_update_g(&form->p, NULL); @@ -80,7 +83,7 @@ uint8_t eve_form_draw(EVEView *v, uint8_t tag0) { return tagN; } -void eve_form_handle_evt(EVEPage *page, EVEWidget *widget, EVETouch *touch, uint16_t evt, uint8_t tag0, int touch_idx) { +int eve_form_handle_evt(EVEPage *page, EVEWidget *widget, EVETouch *touch, uint16_t evt, uint8_t tag0, int touch_idx) { /* if (evt & EVE_TOUCH_ETYPE_TRACK_Y) { // do scroll @@ -94,15 +97,28 @@ void eve_form_update_g(EVEPage *page, EVEWidget *_widget) { EVEForm *form = (EVEForm *)page; EVEWidget *widget = form->widget; int i; + uint16_t w = 0; uint16_t h = 0; + uint16_t _h = 0; for (i=0; iwidget_size; i++) { if (widget->label) { + h += _h; + w = widget->label->g.w; + _h = widget->label->g.h; + widget->label->g.x = 0; widget->label->g.y = h; - if (widget->label->g.w + widget->g.w > form->p.v.window->g.w) h += widget->label->g.h; } + if (w + widget->g.w >= form->p.v.window->g.w) { + h += _h; + w = 0; + _h = 0; + } + widget->g.x = w; widget->g.y = h; - h += widget->g.h; + + w += widget->g.w; + _h = MAX(_h, widget->g.h); widget = eve_widget_next(widget); } -- cgit v1.2.3