summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/eve/screen/form.c
diff options
context:
space:
mode:
authorUros Majstorovic <majstor@majstor.org>2020-08-23 22:37:16 +0200
committerUros Majstorovic <majstor@majstor.org>2020-08-23 22:37:16 +0200
commit1e5eb7cb910e6f23c69c2c986b6373e9f9abb980 (patch)
tree5e8ed0ad6b2fcba747c626c1c51afebbf76b3b9d /fw/fe310/eos/eve/screen/form.c
parent57c1824affca858023c65c84e188ea7dc6c0a5f2 (diff)
dynamic memory alloc for gui added; page navigation added
Diffstat (limited to 'fw/fe310/eos/eve/screen/form.c')
-rw-r--r--fw/fe310/eos/eve/screen/form.c28
1 files changed, 22 insertions, 6 deletions
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; i<form->widget_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);
}