gui_i.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /**
  2. * @file gui_i.h
  3. * GUI: main API internals
  4. */
  5. #pragma once
  6. #include <gui/gui.h>
  7. #include <furi.h>
  8. #include <furi_hal_rtc.h>
  9. #include <m-array.h>
  10. #include <stdio.h>
  11. #include <gui/canvas.h>
  12. #include <gui/view_port.h>
  13. #include "view_port_i.h"
  14. #define GUI_DISPLAY_WIDTH 128
  15. #define GUI_DISPLAY_HEIGHT 64
  16. #define GUI_STATUS_BAR_X 0
  17. #define GUI_STATUS_BAR_Y 0
  18. #define GUI_STATUS_BAR_WIDTH GUI_DISPLAY_WIDTH
  19. /* 0-1 pixels for upper thin frame
  20. * 2-9 pixels for icons (battery, sd card, etc)
  21. * 10-12 pixels for lower bold line */
  22. #define GUI_STATUS_BAR_HEIGHT 13
  23. /* icon itself area (battery, sd card, etc) excluding frame.
  24. * painted 2 pixels below GUI_STATUS_BAR_X.
  25. */
  26. #define GUI_STATUS_BAR_WORKAREA_HEIGHT 8
  27. #define GUI_WINDOW_X 0
  28. #define GUI_WINDOW_Y GUI_STATUS_BAR_HEIGHT
  29. #define GUI_WINDOW_WIDTH GUI_DISPLAY_WIDTH
  30. #define GUI_WINDOW_HEIGHT (GUI_DISPLAY_HEIGHT - GUI_WINDOW_Y)
  31. #define GUI_THREAD_FLAG_DRAW (1 << 0)
  32. #define GUI_THREAD_FLAG_INPUT (1 << 1)
  33. #define GUI_THREAD_FLAG_ALL (GUI_THREAD_FLAG_DRAW | GUI_THREAD_FLAG_INPUT)
  34. ARRAY_DEF(ViewPortArray, ViewPort*, M_PTR_OPLIST);
  35. /** Gui structure */
  36. struct Gui {
  37. // Thread and lock
  38. FuriThreadId thread_id;
  39. FuriMutex* mutex;
  40. // Layers and Canvas
  41. bool lockdown;
  42. bool direct_draw;
  43. ViewPortArray_t layers[GuiLayerMAX];
  44. //Canvas* canvas;
  45. // Input
  46. FuriMessageQueue* input_queue;
  47. FuriPubSub* input_events;
  48. uint8_t ongoing_input;
  49. ViewPort* ongoing_input_view_port;
  50. };
  51. /** Find enabled ViewPort in ViewPortArray
  52. *
  53. * @param[in] array The ViewPortArray instance
  54. *
  55. * @return ViewPort instance or NULL
  56. */
  57. ViewPort* gui_view_port_find_enabled(ViewPortArray_t array);
  58. /** Update GUI, request redraw
  59. *
  60. * @param gui Gui instance
  61. */
  62. void gui_update(Gui* gui);
  63. /** Input event callback
  64. *
  65. * Used to receive input from input service or to inject new input events
  66. *
  67. * @param[in] value The value pointer (InputEvent*)
  68. * @param ctx The context (Gui instance)
  69. */
  70. void gui_input_events_callback(const void* value, void* ctx);
  71. /** Get count of view ports in layer
  72. *
  73. * @param gui The Gui instance
  74. * @param[in] layer GuiLayer that we want to get count of view ports
  75. */
  76. size_t gui_active_view_port_count(Gui* gui, GuiLayer layer);
  77. /** Lock GUI
  78. *
  79. * @param gui The Gui instance
  80. */
  81. void gui_lock(Gui* gui);
  82. /** Unlock GUI
  83. *
  84. * @param gui The Gui instance
  85. */
  86. void gui_unlock(Gui* gui);