scene_manager.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. /**
  2. * @file scene_manager.h
  3. * GUI: SceneManager API
  4. */
  5. #pragma once
  6. #include <stdint.h>
  7. #include <stdbool.h>
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11. /** Scene Manager events type */
  12. typedef enum {
  13. SceneManagerEventTypeCustom,
  14. SceneManagerEventTypeBack,
  15. SceneManagerEventTypeTick,
  16. } SceneManagerEventType;
  17. /** Scene Manager event
  18. */
  19. typedef struct {
  20. SceneManagerEventType type;
  21. uint32_t event;
  22. } SceneManagerEvent;
  23. /** Prototype for Scene on_enter handler */
  24. typedef void (*AppSceneOnEnterCallback)(void* context);
  25. /** Prototype for Scene on_event handler */
  26. typedef bool (*AppSceneOnEventCallback)(void* context, SceneManagerEvent event);
  27. /** Prototype for Scene on_exit handler */
  28. typedef void (*AppSceneOnExitCallback)(void* context);
  29. /** Scene Manager configuration structure
  30. * Contains array of Scene handlers
  31. */
  32. typedef struct {
  33. const AppSceneOnEnterCallback* on_enter_handlers;
  34. const AppSceneOnEventCallback* on_event_handlers;
  35. const AppSceneOnExitCallback* on_exit_handlers;
  36. const uint32_t scene_num;
  37. } SceneManagerHandlers;
  38. typedef struct SceneManager SceneManager;
  39. /** Set Scene state
  40. *
  41. * @param scene_manager SceneManager instance
  42. * @param scene_id Scene ID
  43. * @param state Scene new state
  44. */
  45. void scene_manager_set_scene_state(SceneManager* scene_manager, uint32_t scene_id, uint32_t state);
  46. /** Get Scene state
  47. *
  48. * @param scene_manager SceneManager instance
  49. * @param scene_id Scene ID
  50. *
  51. * @return Scene state
  52. */
  53. uint32_t scene_manager_get_scene_state(SceneManager* scene_manager, uint32_t scene_id);
  54. /** Scene Manager allocation and configuration
  55. *
  56. * Scene Manager allocates all scenes internally
  57. *
  58. * @param app_scene_handlers SceneManagerHandlers instance
  59. * @param context context to be set on Scene handlers calls
  60. *
  61. * @return SceneManager instance
  62. */
  63. SceneManager* scene_manager_alloc(const SceneManagerHandlers* app_scene_handlers, void* context);
  64. /** Free Scene Manager with allocated Scenes
  65. *
  66. * @param scene_manager SceneManager instance
  67. */
  68. void scene_manager_free(SceneManager* scene_manager);
  69. /** Custom event handler
  70. *
  71. * Calls Scene event handler with Custom event parameter
  72. *
  73. * @param scene_manager SceneManager instance
  74. * @param custom_event Custom event code
  75. *
  76. * @return true if event was consumed, false otherwise
  77. */
  78. bool scene_manager_handle_custom_event(SceneManager* scene_manager, uint32_t custom_event);
  79. /** Back event handler
  80. *
  81. * Calls Scene event handler with Back event parameter
  82. *
  83. * @param scene_manager SceneManager instance
  84. *
  85. * @return true if event was consumed, false otherwise
  86. */
  87. bool scene_manager_handle_back_event(SceneManager* scene_manager);
  88. /** Tick event handler
  89. *
  90. * Calls Scene event handler with Tick event parameter
  91. *
  92. * @param scene_manager SceneManager instance
  93. * @return true if event was consumed, false otherwise
  94. */
  95. void scene_manager_handle_tick_event(SceneManager* scene_manager);
  96. /** Add and run next Scene
  97. *
  98. * @param scene_manager SceneManager instance
  99. * @param next_scene_id next Scene ID
  100. */
  101. void scene_manager_next_scene(SceneManager* scene_manager, uint32_t next_scene_id);
  102. /** Run previous Scene
  103. *
  104. * @param scene_manager SceneManager instance
  105. *
  106. * @return true if previous scene was found, false otherwise
  107. */
  108. bool scene_manager_previous_scene(SceneManager* scene_manager);
  109. /** Search previous Scene
  110. *
  111. * @param scene_manager SceneManager instance
  112. * @param scene_id Scene ID
  113. *
  114. * @return true if previous scene was found, false otherwise
  115. */
  116. bool scene_manager_has_previous_scene(SceneManager* scene_manager, uint32_t scene_id);
  117. /** Search and switch to previous Scene
  118. *
  119. * @param scene_manager SceneManager instance
  120. * @param scene_id Scene ID
  121. *
  122. * @return true if previous scene was found, false otherwise
  123. */
  124. bool scene_manager_search_and_switch_to_previous_scene(
  125. SceneManager* scene_manager,
  126. uint32_t scene_id);
  127. /** Clear Scene stack and switch to another Scene
  128. *
  129. * @param scene_manager SceneManager instance
  130. * @param scene_id Scene ID
  131. *
  132. * @return true if previous scene was found, false otherwise
  133. */
  134. bool scene_manager_search_and_switch_to_another_scene(
  135. SceneManager* scene_manager,
  136. uint32_t scene_id);
  137. /** Exit from current scene
  138. *
  139. * @param scene_manager SceneManager instance
  140. */
  141. void scene_manager_stop(SceneManager* scene_manager);
  142. #ifdef __cplusplus
  143. }
  144. #endif