diff --git a/include/lv_conf_v7.h b/include/lv_conf_v7.h index c6b4a3ed..857f5001 100644 --- a/include/lv_conf_v7.h +++ b/include/lv_conf_v7.h @@ -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*/ diff --git a/include/lv_conf_v8.h b/include/lv_conf_v8.h index 0534d9ff..afaa51ea 100644 --- a/include/lv_conf_v8.h +++ b/include/lv_conf_v8.h @@ -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 diff --git a/src/hasp/hasp.cpp b/src/hasp/hasp.cpp index ada116c0..6351a112 100644 --- a/src/hasp/hasp.cpp +++ b/src/hasp/hasp.cpp @@ -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); } /********************** diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp index 6cbfe8d3..7208de34 100644 --- a/src/hasp/hasp_attribute.cpp +++ b/src/hasp/hasp_attribute.cpp @@ -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: diff --git a/src/hasp/hasp_attribute.h b/src/hasp/hasp_attribute.h index 8eac5816..21543959 100644 --- a/src/hasp/hasp_attribute.h +++ b/src/hasp/hasp_attribute.h @@ -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 diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp index 1c7d2efa..0bbdfed1 100644 --- a/src/hasp/hasp_dispatch.cpp +++ b/src/hasp/hasp_dispatch.cpp @@ -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); } diff --git a/src/hasp/hasp_dispatch.h b/src/hasp/hasp_dispatch.h index a12f492c..07312081 100644 --- a/src/hasp/hasp_dispatch.h +++ b/src/hasp/hasp_dispatch.h @@ -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); diff --git a/src/hasp/hasp_object.cpp b/src/hasp/hasp_object.cpp index ac0b853b..b94de5d5 100644 --- a/src/hasp/hasp_object.cpp +++ b/src/hasp/hasp_object.cpp @@ -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 diff --git a/src/hasp/hasp_page.cpp b/src/hasp/hasp_page.cpp index 41285997..7a36b9eb 100644 --- a/src/hasp/hasp_page.cpp +++ b/src/hasp/hasp_page.cpp @@ -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() diff --git a/src/hasp/hasp_page.h b/src/hasp/hasp_page.h index 60f3c382..1e2bfaa4 100644 --- a/src/hasp/hasp_page.h +++ b/src/hasp/hasp_page.h @@ -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); diff --git a/src/log/hasp_debug.cpp b/src/log/hasp_debug.cpp index 514b24d0..7a5dbfd6 100644 --- a/src/log/hasp_debug.cpp +++ b/src/log/hasp_debug.cpp @@ -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); diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp index 04492f3a..1148127a 100644 --- a/src/sys/svc/hasp_http.cpp +++ b/src/sys/svc/hasp_http.cpp @@ -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