widget_element_string.c 1.6 KB

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