widget_element_string_multiline.c 1.7 KB

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