widget_element_i.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /**
  2. * @file widget_element_i.h
  3. * GUI: internal Widget Element API
  4. */
  5. #pragma once
  6. #include <furi.h>
  7. #include <gui/view.h>
  8. #include <input/input.h>
  9. typedef enum {
  10. GuiButtonTypeLeft,
  11. GuiButtonTypeCenter,
  12. GuiButtonTypeRight,
  13. } GuiButtonType;
  14. typedef void (*ButtonCallback)(GuiButtonType result, InputType type, void* context);
  15. typedef struct WidgetElement WidgetElement;
  16. typedef struct Widget Widget;
  17. struct WidgetElement {
  18. // generic draw and input callbacks
  19. void (*draw)(Canvas* canvas, WidgetElement* element);
  20. bool (*input)(InputEvent* event, WidgetElement* element);
  21. // free callback
  22. void (*free)(WidgetElement* element);
  23. // generic model holder
  24. void* model;
  25. FuriMutex* model_mutex;
  26. // pointer to widget that hold our element
  27. Widget* parent;
  28. };
  29. /** Create multi string element */
  30. WidgetElement* widget_element_string_multiline_create(
  31. uint8_t x,
  32. uint8_t y,
  33. Align horizontal,
  34. Align vertical,
  35. Font font,
  36. const char* text);
  37. /** Create string element */
  38. WidgetElement* widget_element_string_create(
  39. uint8_t x,
  40. uint8_t y,
  41. Align horizontal,
  42. Align vertical,
  43. Font font,
  44. const char* text);
  45. /** Create text box element */
  46. WidgetElement* widget_element_text_box_create(
  47. uint8_t x,
  48. uint8_t y,
  49. uint8_t width,
  50. uint8_t height,
  51. Align horizontal,
  52. Align vertical,
  53. const char* text,
  54. bool strip_to_dots);
  55. /** Create button element */
  56. WidgetElement* widget_element_button_create(
  57. GuiButtonType button_type,
  58. const char* text,
  59. ButtonCallback callback,
  60. void* context);
  61. /** Create icon element */
  62. WidgetElement* widget_element_icon_create(uint8_t x, uint8_t y, const Icon* icon);
  63. /** Create frame element */
  64. WidgetElement* widget_element_frame_create(
  65. uint8_t x,
  66. uint8_t y,
  67. uint8_t width,
  68. uint8_t height,
  69. uint8_t radius);
  70. WidgetElement* widget_element_text_scroll_create(
  71. uint8_t x,
  72. uint8_t y,
  73. uint8_t width,
  74. uint8_t height,
  75. const char* text);