GUI: view enter, exit callbacks. (#326)

This commit is contained in:
あく
2021-02-04 15:05:46 +03:00
committed by GitHub
parent cb4fb8e4ae
commit 2187dc7117
6 changed files with 72 additions and 6 deletions

View File

@@ -45,17 +45,14 @@ void view_dispatcher_add_view(ViewDispatcher* view_dispatcher, uint32_t view_id,
void view_dispatcher_switch_to_view(ViewDispatcher* view_dispatcher, uint32_t view_id) {
furi_assert(view_dispatcher);
if(view_id == VIEW_NONE) {
view_dispatcher->current_view = NULL;
view_port_enabled_set(view_dispatcher->view_port, false);
view_dispatcher_set_current_view(view_dispatcher, NULL);
} else if(view_id == VIEW_IGNORE) {
} else if(view_id == VIEW_DESTROY) {
view_dispatcher_free(view_dispatcher);
} else {
View** view_pp = ViewDict_get(view_dispatcher->views, view_id);
furi_check(view_pp != NULL);
view_dispatcher->current_view = *view_pp;
view_port_enabled_set(view_dispatcher->view_port, true);
view_port_update(view_dispatcher->view_port);
view_dispatcher_set_current_view(view_dispatcher, *view_pp);
}
}
@@ -103,6 +100,24 @@ void view_dispatcher_input_callback(InputEvent* event, void* context) {
}
}
void view_dispatcher_set_current_view(ViewDispatcher* view_dispatcher, View* view) {
furi_assert(view_dispatcher);
// Dispatch view exit event
if(view_dispatcher->current_view) {
view_exit(view_dispatcher->current_view);
}
// Set current view
view_dispatcher->current_view = view;
// Dispatch view enter event
if(view_dispatcher->current_view) {
view_enter(view_dispatcher->current_view);
view_port_enabled_set(view_dispatcher->view_port, true);
view_port_update(view_dispatcher->view_port);
} else {
view_port_enabled_set(view_dispatcher->view_port, false);
}
}
void view_dispatcher_update(ViewDispatcher* view_dispatcher, View* view) {
furi_assert(view_dispatcher);
furi_assert(view);