gui_extensions.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include <gui/canvas.h>
  2. #include <gui/icon_i.h>
  3. #include "metronome_icons.h"
  4. #include <assets_icons.h>
  5. //lib can only do bottom left/right
  6. void elements_button_top_left(Canvas* canvas, const char* str) {
  7. const uint8_t button_height = 12;
  8. const uint8_t vertical_offset = 3;
  9. const uint8_t horizontal_offset = 3;
  10. uint16_t string_width = canvas_string_width(canvas, str);
  11. const Icon* icon = &I_ButtonUp_7x4;
  12. const uint8_t icon_h_offset = 3;
  13. const uint8_t icon_width_with_offset = icon->width + icon_h_offset;
  14. const uint8_t icon_v_offset = icon->height + vertical_offset;
  15. const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
  16. const uint8_t x = 0;
  17. const uint8_t y = 0 + button_height;
  18. canvas_draw_box(canvas, x, y - button_height, button_width, button_height);
  19. canvas_draw_line(canvas, x + button_width + 0, y - button_height, x + button_width + 0, y - 1);
  20. canvas_draw_line(canvas, x + button_width + 1, y - button_height, x + button_width + 1, y - 2);
  21. canvas_draw_line(canvas, x + button_width + 2, y - button_height, x + button_width + 2, y - 3);
  22. canvas_invert_color(canvas);
  23. canvas_draw_icon(canvas, x + horizontal_offset, y - icon_v_offset, icon);
  24. canvas_draw_str(
  25. canvas, x + horizontal_offset + icon_width_with_offset, y - vertical_offset, str);
  26. canvas_invert_color(canvas);
  27. }
  28. void elements_button_top_right(Canvas* canvas, const char* str) {
  29. const uint8_t button_height = 12;
  30. const uint8_t vertical_offset = 3;
  31. const uint8_t horizontal_offset = 3;
  32. uint16_t string_width = canvas_string_width(canvas, str);
  33. const Icon* icon = &I_ButtonUp_7x4;
  34. const uint8_t icon_h_offset = 3;
  35. const uint8_t icon_width_with_offset = icon->width + icon_h_offset;
  36. const uint8_t icon_v_offset = icon->height + vertical_offset;
  37. const uint8_t button_width = string_width + horizontal_offset * 2 + icon_width_with_offset;
  38. const uint8_t x = canvas_width(canvas);
  39. const uint8_t y = 0 + button_height;
  40. canvas_draw_box(canvas, x - button_width, y - button_height, button_width, button_height);
  41. canvas_draw_line(canvas, x - button_width - 1, y - button_height, x - button_width - 1, y - 1);
  42. canvas_draw_line(canvas, x - button_width - 2, y - button_height, x - button_width - 2, y - 2);
  43. canvas_draw_line(canvas, x - button_width - 3, y - button_height, x - button_width - 3, y - 3);
  44. canvas_invert_color(canvas);
  45. canvas_draw_str(canvas, x - button_width + horizontal_offset, y - vertical_offset, str);
  46. canvas_draw_icon(canvas, x - horizontal_offset - icon->width, y - icon_v_offset, icon);
  47. canvas_invert_color(canvas);
  48. }