gui_element_icon.c 1.1 KB

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