widget_element_string.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #include "widget_element_i.h"
  2. typedef struct {
  3. uint8_t x;
  4. uint8_t y;
  5. Align horizontal;
  6. Align vertical;
  7. Font font;
  8. FuriString* text;
  9. } GuiStringModel;
  10. static void gui_string_draw(Canvas* canvas, WidgetElement* element) {
  11. furi_assert(canvas);
  12. furi_assert(element);
  13. GuiStringModel* model = element->model;
  14. if(furi_string_size(model->text)) {
  15. canvas_set_font(canvas, model->font);
  16. canvas_draw_str_aligned(
  17. canvas,
  18. model->x,
  19. model->y,
  20. model->horizontal,
  21. model->vertical,
  22. furi_string_get_cstr(model->text));
  23. }
  24. }
  25. static void gui_string_free(WidgetElement* gui_string) {
  26. furi_assert(gui_string);
  27. GuiStringModel* model = gui_string->model;
  28. furi_string_free(model->text);
  29. free(gui_string->model);
  30. free(gui_string);
  31. }
  32. WidgetElement* widget_element_string_create(
  33. uint8_t x,
  34. uint8_t y,
  35. Align horizontal,
  36. Align vertical,
  37. Font font,
  38. const char* text) {
  39. furi_assert(text);
  40. // Allocate and init model
  41. GuiStringModel* model = malloc(sizeof(GuiStringModel));
  42. model->x = x;
  43. model->y = y;
  44. model->horizontal = horizontal;
  45. model->vertical = vertical;
  46. model->font = font;
  47. model->text = furi_string_alloc_set(text);
  48. // Allocate and init Element
  49. WidgetElement* gui_string = malloc(sizeof(WidgetElement));
  50. gui_string->parent = NULL;
  51. gui_string->input = NULL;
  52. gui_string->draw = gui_string_draw;
  53. gui_string->free = gui_string_free;
  54. gui_string->model = model;
  55. return gui_string;
  56. } //-V773