canvas_extensions.c 854 B

123456789101112131415161718192021222324252627282930313233
  1. #include "canvas_extensions.h"
  2. void canvas_draw_str_ex(
  3. Canvas* canvas,
  4. uint8_t x,
  5. uint8_t y,
  6. const char* text,
  7. size_t text_length,
  8. const FontInfo* const font) {
  9. const char* p_ch = text;
  10. char ch;
  11. size_t i = 0;
  12. uint8_t offset_x = x;
  13. uint8_t char_width = font->char_info[0].width;
  14. uint8_t offset_x_inc = char_width + font->space_width;
  15. while(i < text_length && (ch = *p_ch) != 0) {
  16. if(ch >= font->start_char && ch <= font->end_char) {
  17. uint8_t char_index = ch - font->start_char;
  18. canvas_draw_xbm(
  19. canvas,
  20. offset_x,
  21. y,
  22. char_width,
  23. font->height,
  24. &font->data[font->char_info[char_index].offset]);
  25. }
  26. offset_x += offset_x_inc;
  27. p_ch++;
  28. i++;
  29. }
  30. }