| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- /**
- * @file scene_manager.h
- * GUI: SceneManager API
- */
- #pragma once
- #include <stdint.h>
- #include <stdbool.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** Scene Manager events type */
- typedef enum {
- SceneManagerEventTypeCustom,
- SceneManagerEventTypeBack,
- SceneManagerEventTypeTick,
- } SceneManagerEventType;
- /** Scene Manager event
- */
- typedef struct {
- SceneManagerEventType type;
- uint32_t event;
- } SceneManagerEvent;
- /** Prototype for Scene on_enter handler */
- typedef void (*AppSceneOnEnterCallback)(void* context);
- /** Prototype for Scene on_event handler */
- typedef bool (*AppSceneOnEventCallback)(void* context, SceneManagerEvent event);
- /** Prototype for Scene on_exit handler */
- typedef void (*AppSceneOnExitCallback)(void* context);
- /** Scene Manager configuration structure
- * Contains array of Scene handlers
- */
- typedef struct {
- const AppSceneOnEnterCallback* on_enter_handlers;
- const AppSceneOnEventCallback* on_event_handlers;
- const AppSceneOnExitCallback* on_exit_handlers;
- const uint32_t scene_num;
- } SceneManagerHandlers;
- typedef struct SceneManager SceneManager;
- /** Set Scene state
- *
- * @param scene_manager SceneManager instance
- * @param scene_id Scene ID
- * @param state Scene new state
- */
- void scene_manager_set_scene_state(SceneManager* scene_manager, uint32_t scene_id, uint32_t state);
- /** Get Scene state
- *
- * @param scene_manager SceneManager instance
- * @param scene_id Scene ID
- *
- * @return Scene state
- */
- uint32_t scene_manager_get_scene_state(SceneManager* scene_manager, uint32_t scene_id);
- /** Scene Manager allocation and configuration
- *
- * Scene Manager allocates all scenes internally
- *
- * @param app_scene_handlers SceneManagerHandlers instance
- * @param context context to be set on Scene handlers calls
- *
- * @return SceneManager instance
- */
- SceneManager* scene_manager_alloc(const SceneManagerHandlers* app_scene_handlers, void* context);
- /** Free Scene Manager with allocated Scenes
- *
- * @param scene_manager SceneManager instance
- */
- void scene_manager_free(SceneManager* scene_manager);
- /** Custom event handler
- *
- * Calls Scene event handler with Custom event parameter
- *
- * @param scene_manager SceneManager instance
- * @param custom_event Custom event code
- *
- * @return true if event was consumed, false otherwise
- */
- bool scene_manager_handle_custom_event(SceneManager* scene_manager, uint32_t custom_event);
- /** Back event handler
- *
- * Calls Scene event handler with Back event parameter
- *
- * @param scene_manager SceneManager instance
- *
- * @return true if event was consumed, false otherwise
- */
- bool scene_manager_handle_back_event(SceneManager* scene_manager);
- /** Tick event handler
- *
- * Calls Scene event handler with Tick event parameter
- *
- * @param scene_manager SceneManager instance
- * @return true if event was consumed, false otherwise
- */
- void scene_manager_handle_tick_event(SceneManager* scene_manager);
- /** Add and run next Scene
- *
- * @param scene_manager SceneManager instance
- * @param next_scene_id next Scene ID
- */
- void scene_manager_next_scene(SceneManager* scene_manager, uint32_t next_scene_id);
- /** Run previous Scene
- *
- * @param scene_manager SceneManager instance
- *
- * @return true if previous scene was found, false otherwise
- */
- bool scene_manager_previous_scene(SceneManager* scene_manager);
- /** Search previous Scene
- *
- * @param scene_manager SceneManager instance
- * @param scene_id Scene ID
- *
- * @return true if previous scene was found, false otherwise
- */
- bool scene_manager_has_previous_scene(SceneManager* scene_manager, uint32_t scene_id);
- /** Search and switch to previous Scene
- *
- * @param scene_manager SceneManager instance
- * @param scene_id Scene ID
- *
- * @return true if previous scene was found, false otherwise
- */
- bool scene_manager_search_and_switch_to_previous_scene(
- SceneManager* scene_manager,
- uint32_t scene_id);
- /** Clear Scene stack and switch to another Scene
- *
- * @param scene_manager SceneManager instance
- * @param scene_id Scene ID
- *
- * @return true if previous scene was found, false otherwise
- */
- bool scene_manager_search_and_switch_to_another_scene(
- SceneManager* scene_manager,
- uint32_t scene_id);
- /** Exit from current scene
- *
- * @param scene_manager SceneManager instance
- */
- void scene_manager_stop(SceneManager* scene_manager);
- #ifdef __cplusplus
- }
- #endif
|