view_dispatcher.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /**
  2. * @file view_dispatcher.h
  3. * GUI: ViewDispatcher API
  4. */
  5. #pragma once
  6. #include "view.h"
  7. #include "gui.h"
  8. #include "scene_manager.h"
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. /** ViewDispatcher view_port placement */
  13. typedef enum {
  14. ViewDispatcherTypeDesktop, /**< Desktop layer: fullscreen with status bar on top of it. For internal usage. */
  15. ViewDispatcherTypeWindow, /**< Window layer: with status bar */
  16. ViewDispatcherTypeFullscreen /**< Fullscreen layer: without status bar */
  17. } ViewDispatcherType;
  18. typedef struct ViewDispatcher ViewDispatcher;
  19. /** Prototype for custom event callback */
  20. typedef bool (*ViewDispatcherCustomEventCallback)(void* context, uint32_t event);
  21. /** Prototype for navigation event callback */
  22. typedef bool (*ViewDispatcherNavigationEventCallback)(void* context);
  23. /** Prototype for tick event callback */
  24. typedef void (*ViewDispatcherTickEventCallback)(void* context);
  25. /** Allocate ViewDispatcher instance
  26. *
  27. * @return pointer to ViewDispatcher instance
  28. */
  29. ViewDispatcher* view_dispatcher_alloc();
  30. /** Free ViewDispatcher instance
  31. *
  32. * @param view_dispatcher pointer to ViewDispatcher
  33. */
  34. void view_dispatcher_free(ViewDispatcher* view_dispatcher);
  35. /** Enable queue support
  36. *
  37. * If queue enabled all input and custom events will be dispatched throw
  38. * internal queue
  39. *
  40. * @param view_dispatcher ViewDispatcher instance
  41. */
  42. void view_dispatcher_enable_queue(ViewDispatcher* view_dispatcher);
  43. /** Send custom event
  44. *
  45. * @param view_dispatcher ViewDispatcher instance
  46. * @param[in] event The event
  47. */
  48. void view_dispatcher_send_custom_event(ViewDispatcher* view_dispatcher, uint32_t event);
  49. /** Set custom event handler
  50. *
  51. * Called on Custom Event, if it is not consumed by view
  52. *
  53. * @param view_dispatcher ViewDispatcher instance
  54. * @param callback ViewDispatcherCustomEventCallback instance
  55. */
  56. void view_dispatcher_set_custom_event_callback(
  57. ViewDispatcher* view_dispatcher,
  58. ViewDispatcherCustomEventCallback callback);
  59. /** Set navigation event handler
  60. *
  61. * Called on Input Short Back Event, if it is not consumed by view
  62. *
  63. * @param view_dispatcher ViewDispatcher instance
  64. * @param callback ViewDispatcherNavigationEventCallback instance
  65. */
  66. void view_dispatcher_set_navigation_event_callback(
  67. ViewDispatcher* view_dispatcher,
  68. ViewDispatcherNavigationEventCallback callback);
  69. /** Set tick event handler
  70. *
  71. * @param view_dispatcher ViewDispatcher instance
  72. * @param callback ViewDispatcherTickEventCallback
  73. * @param tick_period callback call period
  74. */
  75. void view_dispatcher_set_tick_event_callback(
  76. ViewDispatcher* view_dispatcher,
  77. ViewDispatcherTickEventCallback callback,
  78. uint32_t tick_period);
  79. /** Set event callback context
  80. *
  81. * @param view_dispatcher ViewDispatcher instance
  82. * @param context pointer to context
  83. */
  84. void view_dispatcher_set_event_callback_context(ViewDispatcher* view_dispatcher, void* context);
  85. /** Run ViewDispatcher
  86. *
  87. * Use only after queue enabled
  88. *
  89. * @param view_dispatcher ViewDispatcher instance
  90. */
  91. void view_dispatcher_run(ViewDispatcher* view_dispatcher);
  92. /** Stop ViewDispatcher
  93. *
  94. * Use only after queue enabled
  95. *
  96. * @param view_dispatcher ViewDispatcher instance
  97. */
  98. void view_dispatcher_stop(ViewDispatcher* view_dispatcher);
  99. /** Add view to ViewDispatcher
  100. *
  101. * @param view_dispatcher ViewDispatcher instance
  102. * @param view_id View id to register
  103. * @param view View instance
  104. */
  105. void view_dispatcher_add_view(ViewDispatcher* view_dispatcher, uint32_t view_id, View* view);
  106. /** Remove view from ViewDispatcher
  107. *
  108. * @param view_dispatcher ViewDispatcher instance
  109. * @param view_id View id to remove
  110. */
  111. void view_dispatcher_remove_view(ViewDispatcher* view_dispatcher, uint32_t view_id);
  112. /** Switch to View
  113. *
  114. * @param view_dispatcher ViewDispatcher instance
  115. * @param view_id View id to register
  116. * @warning switching may be delayed till input events complementarity
  117. * reached
  118. */
  119. void view_dispatcher_switch_to_view(ViewDispatcher* view_dispatcher, uint32_t view_id);
  120. /** Send ViewPort of this ViewDispatcher instance to front
  121. *
  122. * @param view_dispatcher ViewDispatcher instance
  123. */
  124. void view_dispatcher_send_to_front(ViewDispatcher* view_dispatcher);
  125. /** Send ViewPort of this ViewDispatcher instance to back
  126. *
  127. * @param view_dispatcher ViewDispatcher instance
  128. */
  129. void view_dispatcher_send_to_back(ViewDispatcher* view_dispatcher);
  130. /** Attach ViewDispatcher to GUI
  131. *
  132. * @param view_dispatcher ViewDispatcher instance
  133. * @param gui GUI instance to attach to
  134. * @param[in] type The type
  135. */
  136. void view_dispatcher_attach_to_gui(
  137. ViewDispatcher* view_dispatcher,
  138. Gui* gui,
  139. ViewDispatcherType type);
  140. #ifdef __cplusplus
  141. }
  142. #endif