|
|
|
@@ -2,6 +2,8 @@
|
|
|
|
|
|
|
|
|
|
#include "ui.h"
|
|
|
|
|
|
|
|
|
|
static const char* M_VAL_TIME = "VAL TIME?";
|
|
|
|
|
|
|
|
|
|
static const lv_font_t *font_normal = &lv_font_montserrat_24;
|
|
|
|
|
|
|
|
|
|
static lv_color_t color_primary, color_secondary;
|
|
|
|
@@ -13,6 +15,7 @@ static lv_obj_t *o_container = NULL;
|
|
|
|
|
|
|
|
|
|
static lv_anim_timeline_t *at_active = NULL;
|
|
|
|
|
static lv_obj_t *o_active = NULL;
|
|
|
|
|
static bool state_ready = true;
|
|
|
|
|
|
|
|
|
|
static const void* imgfont_get_path(
|
|
|
|
|
const lv_font_t *font, uint32_t unicode, uint32_t unicode_next, int32_t *offset_y, void *user_data) {
|
|
|
|
@@ -26,6 +29,8 @@ static const void* imgfont_get_path(
|
|
|
|
|
return &ui_img_moon;
|
|
|
|
|
case 0x2B50:
|
|
|
|
|
return &ui_img_star;
|
|
|
|
|
case 0x1F634:
|
|
|
|
|
return &ui_img_sleep;
|
|
|
|
|
default:
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
@@ -39,6 +44,9 @@ static void b_cfg_cb(lv_event_t *e) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void setup_next_state() {
|
|
|
|
|
assert(state_ready);
|
|
|
|
|
state_ready = false;
|
|
|
|
|
|
|
|
|
|
if (at_active) {
|
|
|
|
|
lv_anim_timeline_delete(at_active);
|
|
|
|
|
at_active = NULL;
|
|
|
|
@@ -57,6 +65,16 @@ static void setup_next_state() {
|
|
|
|
|
at_active = lv_anim_timeline_create();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool val_ui_state_ready() {
|
|
|
|
|
return state_ready;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void anim_state_ready_cb(lv_anim_t *anim) {
|
|
|
|
|
state_ready = true;
|
|
|
|
|
}
|
|
|
|
|
static void anim_x_cb(void *var, int32_t v) {
|
|
|
|
|
lv_obj_set_x(var, v);
|
|
|
|
|
}
|
|
|
|
|
static void anim_y_cb(void *var, int32_t v) {
|
|
|
|
|
lv_obj_set_y(var, v);
|
|
|
|
|
}
|
|
|
|
@@ -64,16 +82,17 @@ static void anim_opa_cb(void *var, int32_t v) {
|
|
|
|
|
lv_obj_set_style_opa(var, v, 0);
|
|
|
|
|
}
|
|
|
|
|
static void anim_val_time_text(lv_anim_t *anim) {
|
|
|
|
|
lv_label_set_text_static(anim->var, "VAL TIME?");
|
|
|
|
|
lv_label_set_text_static(anim->var, M_VAL_TIME);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void val_ui_none() {
|
|
|
|
|
setup_next_state();
|
|
|
|
|
|
|
|
|
|
// Widgets
|
|
|
|
|
lv_obj_t *l_main = lv_label_create(o_active);
|
|
|
|
|
lv_obj_add_style(l_main, &s_hero, 0);
|
|
|
|
|
lv_obj_center(l_main);
|
|
|
|
|
lv_label_set_text_static(l_main, "HELLO \U0001F319\u2B50!");
|
|
|
|
|
lv_label_set_text_static(l_main, M_VAL_TIME);
|
|
|
|
|
|
|
|
|
|
lv_obj_t *l_subtitle = lv_label_create(o_active);
|
|
|
|
|
lv_obj_add_style(l_subtitle, &s_subtitle, 0);
|
|
|
|
@@ -82,7 +101,12 @@ void val_ui_none() {
|
|
|
|
|
|
|
|
|
|
lv_obj_update_layout(o_active);
|
|
|
|
|
lv_obj_set_pos(
|
|
|
|
|
l_subtitle, -(lv_obj_get_width(l_main) - lv_obj_get_width(l_subtitle)) / 2, lv_obj_get_height(l_main) / 2);
|
|
|
|
|
l_subtitle,
|
|
|
|
|
-(lv_obj_get_width(l_main) - lv_obj_get_width(l_subtitle)) / 2,
|
|
|
|
|
(lv_obj_get_height(l_main) + lv_obj_get_height(l_subtitle)) / 2 + 5);
|
|
|
|
|
|
|
|
|
|
lv_label_set_text_static(l_main, "HELLO \U0001F319\u2B50!");
|
|
|
|
|
lv_obj_update_layout(o_active);
|
|
|
|
|
|
|
|
|
|
// Animations
|
|
|
|
|
lv_anim_t a_hello_in;
|
|
|
|
@@ -95,14 +119,6 @@ void val_ui_none() {
|
|
|
|
|
lv_anim_set_path_cb(&a_hello_in, lv_anim_path_ease_in);
|
|
|
|
|
lv_anim_set_duration(&a_hello_in, 500);
|
|
|
|
|
|
|
|
|
|
lv_anim_t a_sub;
|
|
|
|
|
lv_anim_init(&a_sub);
|
|
|
|
|
lv_anim_set_var(&a_sub, l_subtitle);
|
|
|
|
|
lv_anim_set_values(&a_sub, 0, 255);
|
|
|
|
|
lv_anim_set_exec_cb(&a_sub, anim_opa_cb);
|
|
|
|
|
lv_anim_set_path_cb(&a_sub, lv_anim_path_linear);
|
|
|
|
|
lv_anim_set_duration(&a_sub, 750);
|
|
|
|
|
|
|
|
|
|
lv_anim_t a_hello_out;
|
|
|
|
|
lv_anim_init(&a_hello_out);
|
|
|
|
|
lv_anim_set_var(&a_hello_out, l_main);
|
|
|
|
@@ -121,11 +137,101 @@ void val_ui_none() {
|
|
|
|
|
lv_anim_set_path_cb(&a_val, lv_anim_path_linear);
|
|
|
|
|
lv_anim_set_duration(&a_val, 500);
|
|
|
|
|
|
|
|
|
|
lv_anim_t a_sub;
|
|
|
|
|
lv_anim_init(&a_sub);
|
|
|
|
|
lv_anim_set_var(&a_sub, l_subtitle);
|
|
|
|
|
lv_anim_set_values(&a_sub, 0, 255);
|
|
|
|
|
lv_anim_set_exec_cb(&a_sub, anim_opa_cb);
|
|
|
|
|
lv_anim_set_path_cb(&a_sub, lv_anim_path_linear);
|
|
|
|
|
lv_anim_set_completed_cb(&a_sub, anim_state_ready_cb);
|
|
|
|
|
lv_anim_set_duration(&a_sub, 750);
|
|
|
|
|
|
|
|
|
|
lv_anim_timeline_add(at_active, 0, &a_hello_in);
|
|
|
|
|
lv_anim_timeline_add(at_active, 3000, &a_hello_out);
|
|
|
|
|
lv_anim_timeline_add(at_active, 3250, &a_val);
|
|
|
|
|
lv_anim_timeline_add(at_active, 3750, &a_sub);
|
|
|
|
|
lv_anim_timeline_start(at_active);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void val_ui_menu(bool was_idle) {
|
|
|
|
|
setup_next_state();
|
|
|
|
|
|
|
|
|
|
// Widgets
|
|
|
|
|
lv_obj_t *l_main = lv_label_create(o_active);
|
|
|
|
|
lv_obj_add_style(l_main, &s_hero, 0);
|
|
|
|
|
lv_obj_center(l_main);
|
|
|
|
|
lv_label_set_text_static(l_main, "LET'S GO");
|
|
|
|
|
|
|
|
|
|
lv_obj_t *l_subtitle = lv_label_create(o_active);
|
|
|
|
|
lv_obj_add_style(l_subtitle, &s_subtitle, 0);
|
|
|
|
|
lv_obj_center(l_subtitle);
|
|
|
|
|
lv_label_set_text_static(l_subtitle, was_idle ? "WELCOME BACK!" : "GET QUEUEING!");
|
|
|
|
|
|
|
|
|
|
lv_obj_update_layout(o_active);
|
|
|
|
|
|
|
|
|
|
// Animations
|
|
|
|
|
lv_anim_t a_title;
|
|
|
|
|
lv_anim_init(&a_title);
|
|
|
|
|
lv_anim_set_var(&a_title, l_main);
|
|
|
|
|
lv_anim_set_values(
|
|
|
|
|
&a_title,
|
|
|
|
|
-(lv_obj_get_height(o_container) - lv_obj_get_height(l_main)) / 2, 0);
|
|
|
|
|
lv_anim_set_exec_cb(&a_title, anim_y_cb);
|
|
|
|
|
lv_anim_set_path_cb(&a_title, lv_anim_path_ease_in);
|
|
|
|
|
lv_anim_set_duration(&a_title, 500);
|
|
|
|
|
|
|
|
|
|
lv_anim_t a_sub;
|
|
|
|
|
lv_anim_init(&a_sub);
|
|
|
|
|
lv_anim_set_var(&a_sub, l_subtitle);
|
|
|
|
|
lv_anim_set_values(
|
|
|
|
|
&a_sub,
|
|
|
|
|
(lv_obj_get_height(o_container) - lv_obj_get_height(l_main)) / 2,
|
|
|
|
|
(lv_obj_get_height(l_main) + lv_obj_get_height(l_subtitle)) / 2 + 5);
|
|
|
|
|
lv_anim_set_exec_cb(&a_sub, anim_y_cb);
|
|
|
|
|
lv_anim_set_path_cb(&a_sub, lv_anim_path_ease_in);
|
|
|
|
|
lv_anim_set_completed_cb(&a_sub, anim_state_ready_cb);
|
|
|
|
|
lv_anim_set_duration(&a_sub, 500);
|
|
|
|
|
|
|
|
|
|
lv_anim_timeline_add(at_active, 0, &a_title);
|
|
|
|
|
lv_anim_timeline_add(at_active, 0, &a_sub);
|
|
|
|
|
lv_anim_timeline_add(at_active, 750, &a_hello_out);
|
|
|
|
|
lv_anim_timeline_add(at_active, 1000, &a_val);
|
|
|
|
|
// lv_anim_timeline_start(at_active);
|
|
|
|
|
lv_anim_timeline_start(at_active);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void val_ui_idle() {
|
|
|
|
|
setup_next_state();
|
|
|
|
|
|
|
|
|
|
// Widgets
|
|
|
|
|
lv_obj_t *l_main = lv_label_create(o_active);
|
|
|
|
|
lv_obj_add_style(l_main, &s_hero, 0);
|
|
|
|
|
lv_obj_center(l_main);
|
|
|
|
|
lv_label_set_text_static(l_main, "\U0001F634");
|
|
|
|
|
|
|
|
|
|
lv_obj_t *l_subtitle = lv_label_create(o_active);
|
|
|
|
|
lv_obj_add_style(l_subtitle, &s_subtitle, 0);
|
|
|
|
|
lv_obj_center(l_subtitle);
|
|
|
|
|
lv_label_set_text_static(l_subtitle, "COME BACK SOON...");
|
|
|
|
|
|
|
|
|
|
lv_obj_update_layout(o_active);
|
|
|
|
|
lv_obj_set_y(
|
|
|
|
|
l_subtitle,
|
|
|
|
|
(lv_obj_get_height(l_main) + lv_obj_get_height(l_subtitle)) / 2 + 5);
|
|
|
|
|
|
|
|
|
|
// Animations
|
|
|
|
|
lv_anim_t a_fade_in;
|
|
|
|
|
lv_anim_init(&a_fade_in);
|
|
|
|
|
lv_anim_set_values(&a_fade_in, 0, 255);
|
|
|
|
|
lv_anim_set_exec_cb(&a_fade_in, anim_opa_cb);
|
|
|
|
|
lv_anim_set_path_cb(&a_fade_in, lv_anim_path_ease_in);
|
|
|
|
|
lv_anim_set_duration(&a_fade_in, 1000);
|
|
|
|
|
|
|
|
|
|
lv_anim_set_var(&a_fade_in, l_main);
|
|
|
|
|
lv_anim_timeline_add(at_active, 0, &a_fade_in);
|
|
|
|
|
|
|
|
|
|
lv_anim_set_var(&a_fade_in, l_subtitle);
|
|
|
|
|
lv_anim_set_completed_cb(&a_fade_in, anim_state_ready_cb);
|
|
|
|
|
lv_anim_timeline_add(at_active, 0, &a_fade_in);
|
|
|
|
|
|
|
|
|
|
lv_anim_timeline_start(at_active);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void val_lvgl_ui(lv_display_t *disp) {
|
|
|
|
@@ -142,7 +248,7 @@ void val_lvgl_ui(lv_display_t *disp) {
|
|
|
|
|
font_normal);
|
|
|
|
|
// lv_sysmon_hide_performance(disp);
|
|
|
|
|
|
|
|
|
|
lv_font_t *f_hero_emoji = lv_imgfont_create(180, imgfont_get_path, NULL);
|
|
|
|
|
lv_font_t *f_hero_emoji = lv_imgfont_create(120, imgfont_get_path, NULL);
|
|
|
|
|
assert(f_hero_emoji);
|
|
|
|
|
f_hero_emoji->fallback = &lv_font_tungsten_180;
|
|
|
|
|
|
|
|
|
@@ -174,5 +280,7 @@ void val_lvgl_ui(lv_display_t *disp) {
|
|
|
|
|
lv_label_set_text(l_cfg, LV_SYMBOL_SETTINGS);
|
|
|
|
|
lv_obj_center(l_cfg);
|
|
|
|
|
|
|
|
|
|
val_ui_none();
|
|
|
|
|
// val_ui_none();
|
|
|
|
|
// val_ui_menu(true);
|
|
|
|
|
val_ui_idle();
|
|
|
|
|
}
|
|
|
|
|