widget_element_icon.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "widget_element_i.h"
  2. #include <m-string.h>
  3. typedef struct {
  4. uint8_t x;
  5. uint8_t y;
  6. const Icon* icon;
  7. } GuiIconModel;
  8. static void gui_icon_draw(Canvas* canvas, WidgetElement* element) {
  9. furi_assert(canvas);
  10. furi_assert(element);
  11. GuiIconModel* model = element->model;
  12. if(model->icon) {
  13. canvas_draw_icon(canvas, model->x, model->y, model->icon);
  14. }
  15. }
  16. static void gui_icon_free(WidgetElement* gui_icon) {
  17. furi_assert(gui_icon);
  18. free(gui_icon->model);
  19. free(gui_icon);
  20. }
  21. WidgetElement* widget_element_icon_create(uint8_t x, uint8_t y, const Icon* icon) {
  22. furi_assert(icon);
  23. // Allocate and init model
  24. GuiIconModel* model = furi_alloc(sizeof(GuiIconModel));
  25. model->x = x;
  26. model->y = y;
  27. model->icon = icon;
  28. // Allocate and init Element
  29. WidgetElement* gui_icon = furi_alloc(sizeof(WidgetElement));
  30. gui_icon->parent = NULL;
  31. gui_icon->input = NULL;
  32. gui_icon->draw = gui_icon_draw;
  33. gui_icon->free = gui_icon_free;
  34. gui_icon->model = model;
  35. return gui_icon;
  36. }