gui_element_string.c 1.7 KB

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