widget.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "widget_i.h"
  2. #include <furi.h>
  3. #include "gui.h"
  4. #include "gui_i.h"
  5. // TODO add mutex to widget ops
  6. Widget* widget_alloc(WidgetDrawCallback callback, void* callback_context) {
  7. Widget* widget = furi_alloc(sizeof(Widget));
  8. widget->is_enabled = true;
  9. return widget;
  10. }
  11. void widget_free(Widget* widget) {
  12. furi_assert(widget);
  13. furi_check(widget->gui == NULL);
  14. free(widget);
  15. }
  16. void widget_set_width(Widget* widget, uint8_t width) {
  17. assert(widget);
  18. widget->width = width;
  19. }
  20. uint8_t widget_get_width(Widget* widget) {
  21. assert(widget);
  22. return widget->width;
  23. }
  24. void widget_set_height(Widget* widget, uint8_t height) {
  25. assert(widget);
  26. widget->height = height;
  27. }
  28. uint8_t widget_get_height(Widget* widget) {
  29. assert(widget);
  30. return widget->height;
  31. }
  32. void widget_enabled_set(Widget* widget, bool enabled) {
  33. furi_assert(widget);
  34. if(widget->is_enabled != enabled) {
  35. widget->is_enabled = enabled;
  36. widget_update(widget);
  37. }
  38. }
  39. bool widget_is_enabled(Widget* widget) {
  40. furi_assert(widget);
  41. return widget->is_enabled;
  42. }
  43. void widget_draw_callback_set(Widget* widget, WidgetDrawCallback callback, void* context) {
  44. furi_assert(widget);
  45. widget->draw_callback = callback;
  46. widget->draw_callback_context = context;
  47. }
  48. void widget_input_callback_set(Widget* widget, WidgetInputCallback callback, void* context) {
  49. furi_assert(widget);
  50. widget->input_callback = callback;
  51. widget->input_callback_context = context;
  52. }
  53. void widget_update(Widget* widget) {
  54. furi_assert(widget);
  55. if(widget->gui) gui_update(widget->gui);
  56. }
  57. void widget_gui_set(Widget* widget, Gui* gui) {
  58. furi_assert(widget);
  59. widget->gui = gui;
  60. }
  61. void widget_draw(Widget* widget, Canvas* canvas) {
  62. furi_assert(widget);
  63. furi_assert(canvas);
  64. furi_check(widget->gui);
  65. if(widget->draw_callback) {
  66. widget->draw_callback(canvas, widget->draw_callback_context);
  67. }
  68. }
  69. void widget_input(Widget* widget, InputEvent* event) {
  70. furi_assert(widget);
  71. furi_assert(event);
  72. furi_check(widget->gui);
  73. if(widget->input_callback) {
  74. widget->input_callback(event, widget->input_callback_context);
  75. }
  76. }