Add local page transitions

This commit is contained in:
fvanroie 2021-03-08 04:30:59 +01:00
parent cc6ce5c4f8
commit 27e7c95cef
12 changed files with 68 additions and 55 deletions

View File

@ -517,10 +517,11 @@ typedef void* lv_font_user_data_t;
/*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/
typedef struct {
uint8_t objid:8;
uint8_t pageaction:8;
uint8_t groupid:8;
uint8_t id:8;
uint8_t objid:8;
uint8_t transitionid:4;
uint8_t actionid:4;
uint8_t groupid:4;
} lv_obj_user_data_t;
/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/

View File

@ -582,9 +582,11 @@ typedef void * lv_font_user_data_t;
*==================*/
typedef struct {
uint8_t id:8;
uint8_t objid:8;
uint8_t groupid:8;
uint8_t id;
uint8_t transitionid:4;
uint8_t actionid:4;
uint8_t groupid:4;
} lv_obj_user_data_t;
#if LV_USE_USER_DATA

View File

@ -425,7 +425,7 @@ void haspSetup(void)
haspPages.init(haspStartPage);
haspPages.load_jsonl(haspPagesPath);
haspPages.set(haspStartPage);
haspPages.set(haspStartPage, LV_SCR_LOAD_ANIM_NONE);
}
/**********************

View File

@ -1407,8 +1407,12 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attr_p, const char* p
break; // attribute_found
case ATTR_ACTION:
update ? (void)(obj->user_data.pageaction = (uint8_t)val)
: hasp_out_int(obj, attr, obj->user_data.pageaction);
update ? (void)(obj->user_data.actionid = (uint8_t)val) : hasp_out_int(obj, attr, obj->user_data.actionid);
break; // attribute_found
case ATTR_TRANSITION:
update ? (void)(obj->user_data.transitionid = (uint8_t)val)
: hasp_out_int(obj, attr, obj->user_data.transitionid);
break; // attribute_found
case ATTR_OBJID:

View File

@ -313,6 +313,7 @@ _HASP_ATTRIBUTE(SCALE_END_LINE_WIDTH, scale_end_line_width, lv_style_int_t)
/* hasp user data */
#define ATTR_ACTION 42102
#define ATTR_TRANSITION 10933
#define ATTR_GROUPID 48986
#define ATTR_OBJID 41010

View File

@ -819,27 +819,32 @@ void dispatch_output_current_page()
}
// Dispatch Page Get or Set
void dispatch_page_next()
void dispatch_page_next(lv_scr_load_anim_t animation)
{
haspPages.next();
haspPages.next(animation);
dispatch_output_current_page();
}
void dispatch_page_prev()
void dispatch_page_prev(lv_scr_load_anim_t animation)
{
haspPages.prev();
haspPages.prev(animation);
dispatch_output_current_page();
}
void dispatch_page_back()
void dispatch_page_back(lv_scr_load_anim_t animation)
{
haspPages.back();
haspPages.back(animation);
dispatch_output_current_page();
}
void dispatch_set_page(uint8_t pageid)
{
haspPages.set(pageid);
dispatch_set_page(pageid, LV_SCR_LOAD_ANIM_NONE);
}
void dispatch_set_page(uint8_t pageid, lv_scr_load_anim_t animation)
{
haspPages.set(pageid, animation);
dispatch_output_current_page();
}
@ -850,15 +855,16 @@ void dispatch_page(const char*, const char* page)
return;
}
lv_scr_load_anim_t animation = LV_SCR_LOAD_ANIM_NONE;
if(Utilities::is_only_digits(page)) {
uint8_t pageid = atoi(page);
dispatch_set_page(pageid);
dispatch_set_page(pageid, animation);
} else if(!strcasecmp_P(page, PSTR("prev"))) {
dispatch_page_prev();
dispatch_page_prev(animation);
} else if(!strcasecmp_P(page, PSTR("next"))) {
dispatch_page_next();
dispatch_page_next(animation);
} else if(!strcasecmp_P(page, PSTR("back"))) {
dispatch_page_back();
dispatch_page_back(animation);
} else {
LOG_WARNING(TAG_MSGR, PSTR(D_DISPATCH_INVALID_PAGE), page);
}

View File

@ -47,10 +47,11 @@ void dispatch_parse_jsonl(std::istringstream& stream);
void dispatch_clear_page(const char* page);
void dispatch_json_error(uint8_t tag, DeserializationError& jsonError);
void dispatch_set_page(uint8_t pageid);
void dispatch_page_next();
void dispatch_page_prev();
void dispatch_page_back();
// void dispatch_set_page(uint8_t pageid);
void dispatch_set_page(uint8_t pageid, lv_scr_load_anim_t effectid);
void dispatch_page_next(lv_scr_load_anim_t effectid);
void dispatch_page_prev(lv_scr_load_anim_t effectid);
void dispatch_page_back(lv_scr_load_anim_t effectid);
void dispatch_dim(const char* level);
void dispatch_backlight(const char* payload);

View File

@ -352,14 +352,12 @@ void generic_event_handler(lv_obj_t* obj, lv_event_t event)
hasp_update_sleep_state(); // wakeup?
/* If a pageaction is attached, perform that action on UP event only */
if(obj->user_data.pageaction) {
if(eventid == HASP_EVENT_UP) {
lv_scr_load_anim_t effectid = LV_SCR_LOAD_ANIM_NONE;
if(obj->user_data.pageaction >> 4 <= LV_SCR_LOAD_ANIM_FADE_ON)
effectid = (lv_scr_load_anim_t)(obj->user_data.pageaction >> 4);
uint8_t pageid = obj->user_data.pageaction & 0x0F;
haspPages.set(pageid, effectid);
/* If an actionid is attached, perform that action on UP event only */
if(obj->user_data.actionid) {
if(eventid == HASP_EVENT_UP || eventid == HASP_EVENT_SHORT) {
lv_scr_load_anim_t transitionid = (lv_scr_load_anim_t)obj->user_data.transitionid;
haspPages.set(obj->user_data.actionid, transitionid);
dispatch_set_page(obj->user_data.actionid, transitionid);
}
} else {
dispatch_object_generic_event(obj, eventid); // send object event

View File

@ -43,12 +43,12 @@ void Page::clear(uint16_t pageid)
}
}
void Page::set(uint8_t pageid)
{
set(pageid, LV_SCR_LOAD_ANIM_NONE);
}
// void Page::set(uint8_t pageid)
// {
// set(pageid, LV_SCR_LOAD_ANIM_NONE);
// }
void Page::set(uint8_t pageid, lv_scr_load_anim_t effectid)
void Page::set(uint8_t pageid, lv_scr_load_anim_t animation)
{
lv_obj_t* page = get_obj(pageid);
if(!page || pageid == 0 || pageid > HASP_NUM_PAGES) {
@ -56,24 +56,24 @@ void Page::set(uint8_t pageid, lv_scr_load_anim_t effectid)
} else {
LOG_TRACE(TAG_HASP, F(D_HASP_CHANGE_PAGE), pageid);
_current_page = pageid;
lv_scr_load_anim(page, effectid, 1000, 0, false);
lv_scr_load_anim(page, animation, 1000, 0, false);
hasp_object_tree(page, pageid, 0);
}
}
void Page::next()
void Page::next(lv_scr_load_anim_t animation)
{
set(_meta_data[_current_page - PAGE_START_INDEX].next);
set(_meta_data[_current_page - PAGE_START_INDEX].next, animation);
}
void Page::prev()
void Page::prev(lv_scr_load_anim_t animation)
{
set(_meta_data[_current_page - PAGE_START_INDEX].prev);
set(_meta_data[_current_page - PAGE_START_INDEX].prev, animation);
}
void Page::back()
void Page::back(lv_scr_load_anim_t animation)
{
set(_meta_data[_current_page - PAGE_START_INDEX].back);
set(_meta_data[_current_page - PAGE_START_INDEX].back, animation);
}
uint8_t Page::get()

View File

@ -36,11 +36,11 @@ class Page {
size_t count();
void init(uint8_t start_page);
void clear(uint16_t pageid);
void set(uint8_t pageid);
void set(uint8_t pageid, lv_scr_load_anim_t effectid);
void next();
void prev();
void back();
// void set(uint8_t pageid);
void set(uint8_t pageid, lv_scr_load_anim_t animation);
void next(lv_scr_load_anim_t animation);
void prev(lv_scr_load_anim_t animation);
void back(lv_scr_load_anim_t animation);
uint8_t get();
void load_jsonl(const char* pagesfile);
lv_obj_t* get_obj(uint8_t pageid);

View File

@ -698,15 +698,15 @@ void debugLoop(void)
switch(keypress = debugConsole.readKey()) {
case ConsoleInput::KEY_PAGE_UP:
dispatch_page_next();
dispatch_page_next(LV_SCR_LOAD_ANIM_NONE);
break;
case ConsoleInput::KEY_PAGE_DOWN:
dispatch_page_prev();
dispatch_page_prev(LV_SCR_LOAD_ANIM_NONE);
break;
case(ConsoleInput::KEY_FN)...(ConsoleInput::KEY_FN + 12):
dispatch_set_page(keypress - ConsoleInput::KEY_FN);
dispatch_set_page(keypress - ConsoleInput::KEY_FN, LV_SCR_LOAD_ANIM_NONE);
break;
}
} while(keypress != 0);

View File

@ -376,11 +376,11 @@ void webHandleScreenshot()
if(webServer.hasArg(F("a"))) {
if(webServer.arg(F("a")) == F("next")) {
dispatch_page_next();
dispatch_page_next(LV_SCR_LOAD_ANIM_NONE);
} else if(webServer.arg(F("a")) == F("prev")) {
dispatch_page_prev();
dispatch_page_prev(LV_SCR_LOAD_ANIM_NONE);
} else if(webServer.arg(F("a")) == F("back")) {
dispatch_page_back();
dispatch_page_back(LV_SCR_LOAD_ANIM_NONE);
}
}
@ -1962,7 +1962,7 @@ void httpSetup()
webServer.on(F("/page/"), []() {
String pageid = webServer.arg(F("page"));
webServer.send(200, PSTR("text/plain"), "Page: '" + pageid + "'");
dispatch_set_page(pageid.toInt());
dispatch_set_page(pageid.toInt(), LV_SCR_LOAD_ANIM_NONE);
});
#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0