view_dispatcher.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #pragma once
  2. #include "view.h"
  3. #include "gui.h"
  4. #include "scene_manager.h"
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. /** ViewDispatcher view_port placement
  9. */
  10. typedef enum {
  11. ViewDispatcherTypeNone, /**< Special layer for internal use only */
  12. ViewDispatcherTypeWindow, /**< Main view_port layer, status bar is shown */
  13. ViewDispatcherTypeFullscreen /**< Fullscreen view_port layer */
  14. } ViewDispatcherType;
  15. typedef struct ViewDispatcher ViewDispatcher;
  16. /** Prototype for custom event callback
  17. */
  18. typedef bool (*ViewDispatcherCustomEventCallback)(void* context, uint32_t event);
  19. /** Prototype for navigation event callback
  20. */
  21. typedef bool (*ViewDispatcherNavigationEventCallback)(void* context);
  22. /** Prototype for tick event callback
  23. */
  24. typedef void (*ViewDispatcherTickEventCallback)(void* context);
  25. /** Allocate ViewDispatcher instance
  26. * @return pointer to ViewDispatcher instance
  27. */
  28. ViewDispatcher* view_dispatcher_alloc();
  29. /** Free ViewDispatcher instance
  30. * @param view_dispatcher pointer to ViewDispatcher
  31. */
  32. void view_dispatcher_free(ViewDispatcher* view_dispatcher);
  33. /** Enable queue support
  34. * If queue enabled all input and custom events will be dispatched throw internal queue
  35. * @param view_dispatcher ViewDispatcher instance
  36. */
  37. void view_dispatcher_enable_queue(ViewDispatcher* view_dispatcher);
  38. /** Send custom event
  39. * @param view_dispatcher ViewDispatcher instance
  40. */
  41. void view_dispatcher_send_custom_event(ViewDispatcher* view_dispatcher, uint32_t event);
  42. /** Set custom event handler
  43. * Called on Custom Event, if it is not consumed by view
  44. * @param view_dispatcher ViewDispatcher instance
  45. * @param callback ViewDispatcherCustomEventCallback instance
  46. */
  47. void view_dispatcher_set_custom_event_callback(
  48. ViewDispatcher* view_dispatcher,
  49. ViewDispatcherCustomEventCallback callback);
  50. /** Set navigation event handler
  51. * Called on Input Short Back Event, if it is not consumed by view
  52. * @param view_dispatcher ViewDispatcher instance
  53. * @param callback ViewDispatcherNavigationEventCallback instance
  54. */
  55. void view_dispatcher_set_navigation_event_callback(
  56. ViewDispatcher* view_dispatcher,
  57. ViewDispatcherNavigationEventCallback callback);
  58. /** Set tick event handler
  59. * @param view_dispatcher ViewDispatcher instance
  60. * @param callback ViewDispatcherTickEventCallback
  61. * @param tick_period callback call period
  62. */
  63. void view_dispatcher_set_tick_event_callback(
  64. ViewDispatcher* view_dispatcher,
  65. ViewDispatcherTickEventCallback callback,
  66. uint32_t tick_period);
  67. /** Set event callback context
  68. * @param view_dispatcher ViewDispatcher instance
  69. * @param context pointer to context
  70. */
  71. void view_dispatcher_set_event_callback_context(ViewDispatcher* view_dispatcher, void* context);
  72. /** Run ViewDispatcher
  73. * Use only after queue enabled
  74. * @param view_dispatcher ViewDispatcher instance
  75. */
  76. void view_dispatcher_run(ViewDispatcher* view_dispatcher);
  77. /** Stop ViewDispatcher
  78. * Use only after queue enabled
  79. * @param view_dispatcher ViewDispatcher instance
  80. */
  81. void view_dispatcher_stop(ViewDispatcher* view_dispatcher);
  82. /** Add view to ViewDispatcher
  83. * @param view_dispatcher, ViewDispatcher instance
  84. * @param view_id View id to register
  85. * @param view View instance
  86. */
  87. void view_dispatcher_add_view(ViewDispatcher* view_dispatcher, uint32_t view_id, View* view);
  88. /** Remove view from ViewDispatcher
  89. * @param view_dispatcher ViewDispatcher instance
  90. * @param view_id View id to remove
  91. */
  92. void view_dispatcher_remove_view(ViewDispatcher* view_dispatcher, uint32_t view_id);
  93. /** Switch to View
  94. * @param view_dispatcher ViewDispatcher instance
  95. * @param view_id View id to register
  96. */
  97. void view_dispatcher_switch_to_view(ViewDispatcher* view_dispatcher, uint32_t view_id);
  98. /** Attach ViewDispatcher to GUI
  99. * @param view_dispatcher ViewDispatcher instance
  100. * @param gui GUI instance to attach to
  101. */
  102. void view_dispatcher_attach_to_gui(
  103. ViewDispatcher* view_dispatcher,
  104. Gui* gui,
  105. ViewDispatcherType type);
  106. #ifdef __cplusplus
  107. }
  108. #endif