view_port.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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() {
  7. ViewPort* view_port = furi_alloc(sizeof(ViewPort));
  8. view_port->orientation = ViewPortOrientationHorizontal;
  9. view_port->is_enabled = true;
  10. return view_port;
  11. }
  12. void view_port_free(ViewPort* view_port) {
  13. furi_assert(view_port);
  14. furi_check(view_port->gui == NULL);
  15. free(view_port);
  16. }
  17. void view_port_set_width(ViewPort* view_port, uint8_t width) {
  18. furi_assert(view_port);
  19. view_port->width = width;
  20. }
  21. uint8_t view_port_get_width(ViewPort* view_port) {
  22. furi_assert(view_port);
  23. return view_port->width;
  24. }
  25. void view_port_set_height(ViewPort* view_port, uint8_t height) {
  26. furi_assert(view_port);
  27. view_port->height = height;
  28. }
  29. uint8_t view_port_get_height(ViewPort* view_port) {
  30. furi_assert(view_port);
  31. return view_port->height;
  32. }
  33. void view_port_enabled_set(ViewPort* view_port, bool enabled) {
  34. furi_assert(view_port);
  35. if(view_port->is_enabled != enabled) {
  36. view_port->is_enabled = enabled;
  37. if(view_port->gui) gui_update(view_port->gui);
  38. }
  39. }
  40. bool view_port_is_enabled(ViewPort* view_port) {
  41. furi_assert(view_port);
  42. return view_port->is_enabled;
  43. }
  44. void view_port_draw_callback_set(ViewPort* view_port, ViewPortDrawCallback callback, void* context) {
  45. furi_assert(view_port);
  46. view_port->draw_callback = callback;
  47. view_port->draw_callback_context = context;
  48. }
  49. void view_port_input_callback_set(
  50. ViewPort* view_port,
  51. ViewPortInputCallback callback,
  52. void* context) {
  53. furi_assert(view_port);
  54. view_port->input_callback = callback;
  55. view_port->input_callback_context = context;
  56. }
  57. void view_port_update(ViewPort* view_port) {
  58. furi_assert(view_port);
  59. if(view_port->gui && view_port->is_enabled) gui_update(view_port->gui);
  60. }
  61. void view_port_gui_set(ViewPort* view_port, Gui* gui) {
  62. furi_assert(view_port);
  63. view_port->gui = gui;
  64. }
  65. void view_port_draw(ViewPort* view_port, Canvas* canvas) {
  66. furi_assert(view_port);
  67. furi_assert(canvas);
  68. furi_check(view_port->gui);
  69. if(view_port->draw_callback) {
  70. view_port->draw_callback(canvas, view_port->draw_callback_context);
  71. }
  72. }
  73. void view_port_input(ViewPort* view_port, InputEvent* event) {
  74. furi_assert(view_port);
  75. furi_assert(event);
  76. furi_check(view_port->gui);
  77. if(view_port->input_callback) {
  78. view_port->input_callback(event, view_port->input_callback_context);
  79. }
  80. }
  81. void view_port_set_orientation(ViewPort* view_port, ViewPortOrientation orientation) {
  82. furi_assert(view_port);
  83. view_port->orientation = orientation;
  84. }
  85. ViewPortOrientation view_port_get_orientation(const ViewPort* view_port) {
  86. return view_port->orientation;
  87. }