luat_ufont_lvgl.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "luat_base.h"
  2. #include "luat_ufont.h"
  3. #define LUAT_LOG_TAG "ufont"
  4. #include "luat_log.h"
  5. #include "lvgl.h"
  6. #include "lv_font.h"
  7. /** Get a glyph's descriptor from a font*/
  8. bool luat_fonts_lvgl_get_glyph_dsc(const struct _lv_font_struct * lfont, lv_font_glyph_dsc_t * ldsc, uint32_t letter, uint32_t letter_next) {
  9. luat_font_char_desc_t dsc_out = {0};
  10. luat_font_header_t *font = (luat_font_header_t *)lfont->dsc;
  11. int ret = luat_font_get_bitmap(font, &dsc_out, letter);
  12. if (ret != 0) {
  13. ldsc->data_ready = 0;
  14. return false;
  15. }
  16. ldsc->adv_w = dsc_out.char_w;
  17. ldsc->box_h = font->line_height;
  18. ldsc->box_w = dsc_out.char_w;
  19. ldsc->bpp = 1;
  20. ldsc->ofs_x = 0;
  21. ldsc->ofs_y = 0;
  22. uint32_t ptr_value = (uint32_t)ldsc->data;
  23. // LLOGD("copy bitmap %p %p %04X", ldsc->data, dsc_out.data, (ldsc->box_h * ldsc->box_w + 7) / 8);
  24. //LLOGD("get_glyph_dsc->data %p data_ready %d", ldsc->data, ldsc->data_ready);
  25. if (ldsc->data && ldsc->data_ready == 0 && font->line_height <= 64) {
  26. //LLOGD("memcpy %p %p %04X", ldsc->data, dsc_out.data, (ldsc->box_h * ldsc->box_w + 7) / 8);
  27. memcpy(ldsc->data, dsc_out.data, (ldsc->box_h * ldsc->box_w + 7) / 8);
  28. ldsc->data_ready = 1;
  29. }
  30. return true;
  31. }
  32. /** Get a glyph's bitmap from a font*/
  33. const uint8_t * luat_fonts_lvgl_get_glyph_bitmap(const struct _lv_font_struct *lfont, uint32_t letter) {
  34. luat_font_char_desc_t dsc_out = {0};
  35. luat_font_header_t *font = (luat_font_header_t *)lfont->dsc;
  36. int ret = luat_font_get_bitmap(font, &dsc_out, letter);
  37. if (ret != 0) {
  38. return NULL;
  39. }
  40. return dsc_out.data;
  41. }