widget_element_text_box.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. uint8_t width;
  8. uint8_t height;
  9. Align horizontal;
  10. Align vertical;
  11. string_t text;
  12. bool strip_to_dots;
  13. } GuiTextBoxModel;
  14. static void gui_text_box_draw(Canvas* canvas, WidgetElement* element) {
  15. furi_assert(canvas);
  16. furi_assert(element);
  17. GuiTextBoxModel* model = element->model;
  18. if(string_size(model->text)) {
  19. elements_text_box(
  20. canvas,
  21. model->x,
  22. model->y,
  23. model->width,
  24. model->height,
  25. model->horizontal,
  26. model->vertical,
  27. string_get_cstr(model->text),
  28. model->strip_to_dots);
  29. }
  30. }
  31. static void gui_text_box_free(WidgetElement* gui_string) {
  32. furi_assert(gui_string);
  33. GuiTextBoxModel* model = gui_string->model;
  34. string_clear(model->text);
  35. free(gui_string->model);
  36. free(gui_string);
  37. }
  38. WidgetElement* widget_element_text_box_create(
  39. uint8_t x,
  40. uint8_t y,
  41. uint8_t width,
  42. uint8_t height,
  43. Align horizontal,
  44. Align vertical,
  45. const char* text,
  46. bool strip_to_dots) {
  47. furi_assert(text);
  48. // Allocate and init model
  49. GuiTextBoxModel* model = malloc(sizeof(GuiTextBoxModel));
  50. model->x = x;
  51. model->y = y;
  52. model->width = width;
  53. model->height = height;
  54. model->horizontal = horizontal;
  55. model->vertical = vertical;
  56. string_init_set_str(model->text, text);
  57. model->strip_to_dots = strip_to_dots;
  58. // Allocate and init Element
  59. WidgetElement* gui_string = malloc(sizeof(WidgetElement));
  60. gui_string->parent = NULL;
  61. gui_string->input = NULL;
  62. gui_string->draw = gui_text_box_draw;
  63. gui_string->free = gui_text_box_free;
  64. gui_string->model = model;
  65. return gui_string;
  66. }