view_port.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "view_port_i.h"
  2. #include <furi.h>
  3. #include "gui.h"
  4. #include "gui_i.h"
  5. // TODO add mutex to view_port ops
  6. ViewPort* view_port_alloc(ViewPortDrawCallback callback, void* callback_context) {
  7. ViewPort* view_port = furi_alloc(sizeof(ViewPort));
  8. view_port->is_enabled = true;
  9. return view_port;
  10. }
  11. void view_port_free(ViewPort* view_port) {
  12. furi_assert(view_port);
  13. furi_check(view_port->gui == NULL);
  14. free(view_port);
  15. }
  16. void view_port_set_width(ViewPort* view_port, uint8_t width) {
  17. assert(view_port);
  18. view_port->width = width;
  19. }
  20. uint8_t view_port_get_width(ViewPort* view_port) {
  21. assert(view_port);
  22. return view_port->width;
  23. }
  24. void view_port_set_height(ViewPort* view_port, uint8_t height) {
  25. assert(view_port);
  26. view_port->height = height;
  27. }
  28. uint8_t view_port_get_height(ViewPort* view_port) {
  29. assert(view_port);
  30. return view_port->height;
  31. }
  32. void view_port_enabled_set(ViewPort* view_port, bool enabled) {
  33. furi_assert(view_port);
  34. if(view_port->is_enabled != enabled) {
  35. view_port->is_enabled = enabled;
  36. if(view_port->gui) gui_update(view_port->gui);
  37. }
  38. }
  39. bool view_port_is_enabled(ViewPort* view_port) {
  40. furi_assert(view_port);
  41. return view_port->is_enabled;
  42. }
  43. void view_port_draw_callback_set(ViewPort* view_port, ViewPortDrawCallback callback, void* context) {
  44. furi_assert(view_port);
  45. view_port->draw_callback = callback;
  46. view_port->draw_callback_context = context;
  47. }
  48. void view_port_input_callback_set(
  49. ViewPort* view_port,
  50. ViewPortInputCallback callback,
  51. void* context) {
  52. furi_assert(view_port);
  53. view_port->input_callback = callback;
  54. view_port->input_callback_context = context;
  55. }
  56. void view_port_update(ViewPort* view_port) {
  57. furi_assert(view_port);
  58. if(view_port->gui && view_port->is_enabled) gui_update(view_port->gui);
  59. }
  60. void view_port_gui_set(ViewPort* view_port, Gui* gui) {
  61. furi_assert(view_port);
  62. view_port->gui = gui;
  63. }
  64. void view_port_draw(ViewPort* view_port, Canvas* canvas) {
  65. furi_assert(view_port);
  66. furi_assert(canvas);
  67. furi_check(view_port->gui);
  68. if(view_port->draw_callback) {
  69. view_port->draw_callback(canvas, view_port->draw_callback_context);
  70. }
  71. }
  72. void view_port_input(ViewPort* view_port, InputEvent* event) {
  73. furi_assert(view_port);
  74. furi_assert(event);
  75. furi_check(view_port->gui);
  76. if(view_port->input_callback) {
  77. view_port->input_callback(event, view_port->input_callback_context);
  78. }
  79. }