fcfg.c 958 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fontconfig/fontconfig.h>
  4. #include "fcfg.h"
  5. static FcConfig* config = NULL;
  6. void initFontConfig() {
  7. config = FcInitLoadConfigAndFonts();
  8. }
  9. char* getFontFile(char* fontName) {
  10. return getFontFile2(fontName, 0, 0);
  11. }
  12. char* getFontFile2(char* fontName, char bold, char italic) {
  13. FcPattern* pattern, *font;
  14. FcResult result;
  15. char* fileName = NULL;
  16. if(!config) initFontConfig();
  17. pattern = FcNameParse((const FcChar8*)fontName);
  18. if(bold) FcPatternAddInteger(pattern, "weight", 200);
  19. if(italic) FcPatternAddInteger(pattern, "slant", 100);
  20. FcConfigSubstitute(config, pattern, FcMatchPattern);
  21. FcDefaultSubstitute(pattern);
  22. font = FcFontMatch(config, pattern, &result);
  23. if(!(font && FcPatternGetString(font, FC_FILE, 0, (FcChar8**)&fileName) == FcResultMatch)) {
  24. fprintf(stderr, "Could not find a font file for '%s'\n", fontName);
  25. }
  26. FcPatternDestroy(pattern);
  27. return fileName;
  28. }