summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/app
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/app')
-rw-r--r--fw/fe310/eos/app/root.c15
-rw-r--r--fw/fe310/eos/app/root.h17
2 files changed, 11 insertions, 21 deletions
diff --git a/fw/fe310/eos/app/root.c b/fw/fe310/eos/app/root.c
index 43bab11..ec0e4ea 100644
--- a/fw/fe310/eos/app/root.c
+++ b/fw/fe310/eos/app/root.c
@@ -5,6 +5,7 @@
#include "eve/eve.h"
#include "eve/eve_kbd.h"
+#include "eve/eve_font.h"
#include "eve/screen/screen.h"
#include "eve/screen/window.h"
@@ -17,8 +18,6 @@
#include "status.h"
#include "root.h"
-EVEFont *_app_font_default;
-
static EVEKbd kbd;
static EVEFont font;
static EVEScreen screen;
@@ -49,7 +48,6 @@ static uint8_t kbd_draw(EVEView *v, uint8_t tag0) {
void app_screen_init(eve_view_constructor_t home_page) {
EVERect g;
- _app_font_default = &font;
eve_spi_start();
eve_brightness(0x40);
@@ -107,11 +105,12 @@ static void widgets_destroy(EVEWidget *widget, uint16_t widget_size) {
}
}
-EVEForm *app_form_create(EVEWindow *window, EVEViewStack *stack, APPWidgetSpec spec[], uint16_t spec_size, eve_form_action_t action, eve_form_destructor_t destructor) {
+EVEForm *app_form_create(EVEWindow *window, EVEViewStack *stack, EVEWidgetSpec spec[], uint16_t spec_size, eve_form_action_t action, eve_form_destructor_t destructor) {
EVEWidget *widgets;
EVEWidget *widget;
EVELabel *label;
EVEForm *form;
+ EVEFont *_font;
int w_size = 0;
int i, r;
@@ -131,7 +130,8 @@ EVEForm *app_form_create(EVEWindow *window, EVEViewStack *stack, APPWidgetSpec s
widget = widgets;
for (i=0; i<spec_size; i++) {
- r = eve_widget_create(widget, spec[i].widget.type, &spec[i].widget.g, &spec[i].widget.spec);
+ _font = spec[i].widget.font ? spec[i].widget.font : &font;
+ r = eve_widget_create(widget, spec[i].widget.type, &spec[i].widget.g, _font, &spec[i].widget.spec);
if (r) {
widgets_destroy(widgets, i);
eve_free(widgets);
@@ -139,6 +139,7 @@ EVEForm *app_form_create(EVEWindow *window, EVEViewStack *stack, APPWidgetSpec s
return NULL;
}
if (spec[i].label.title) {
+ _font = spec[i].label.font ? spec[i].label.font : &font;
label = eve_malloc(sizeof(EVELabel));
if (label == NULL) {
eve_widget_destroy(widget);
@@ -147,9 +148,11 @@ EVEForm *app_form_create(EVEWindow *window, EVEViewStack *stack, APPWidgetSpec s
eve_free(form);
return NULL;
}
- eve_label_init(label, &spec[i].label.g, spec[i].label.font, spec[i].label.title);
+ eve_label_init(label, &spec[i].label.g, _font, spec[i].label.title);
eve_widget_set_label(widget, label);
}
+ if (widget->label && (widget->label->g.w == 0)) eve_font_str_w(label->font, label->title) + APP_LABEL_MARGIN;
+ if (widget->g.w == 0) widget->g.w = APP_SCREEN_W - (widget->label ? widget->label->g.w : 0);
widget = eve_widget_next(widget);
}
diff --git a/fw/fe310/eos/app/root.h b/fw/fe310/eos/app/root.h
index 69624e7..9468e6e 100644
--- a/fw/fe310/eos/app/root.h
+++ b/fw/fe310/eos/app/root.h
@@ -6,24 +6,11 @@
#define APP_FONT_HANDLE 31
-typedef struct APPLabelSpec {
- EVERect g;
- EVEFont *font;
- char *title;
-} APPLabelSpec;
-
-typedef struct APPWidgetSpec {
- APPLabelSpec label;
- struct {
- EVERect g;
- EVEWidgetSpec spec;
- uint8_t type;
- } widget;
-} APPWidgetSpec;
+#define APP_LABEL_MARGIN 10
EVEScreen *app_screen(void);
void app_screen_init(eve_view_constructor_t home_page);
void app_screen_refresh(void);
-EVEForm *app_form_create(EVEWindow *window, EVEViewStack *stack, APPWidgetSpec spec[], uint16_t spec_size, eve_form_action_t action, eve_form_destructor_t destructor);
+EVEForm *app_form_create(EVEWindow *window, EVEViewStack *stack, EVEWidgetSpec spec[], uint16_t spec_size, eve_form_action_t action, eve_form_destructor_t destructor);
void app_form_destroy(EVEForm *form);