X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Ffont_config.cc;h=40b9770c76062069af9ece55c5bd7fe30b7a6d3c;hb=67fa57cc3b626fd111582f4954fd848981c792d9;hp=c7361bc04823e7547a74b5117c5dfdbd732bd252;hpb=9a7b67aee32a40539f29bc2d7017edd4a4f65f11;p=dcpomatic.git diff --git a/src/lib/font_config.cc b/src/lib/font_config.cc index c7361bc04..40b9770c7 100644 --- a/src/lib/font_config.cc +++ b/src/lib/font_config.cc @@ -20,8 +20,10 @@ #include "dcpomatic_assert.h" +#include "dcpomatic_log.h" #include "font_config.h" #include +#include #include @@ -85,6 +87,44 @@ FontConfig::make_font_available(boost::filesystem::path font_file) } +optional +FontConfig::system_font_with_name(string name) +{ + optional path; + + LOG_GENERAL("Searching system for font %1", name); + auto pattern = FcNameParse(reinterpret_cast(name.c_str())); + auto object_set = FcObjectSetBuild(FC_FILE, nullptr); + auto font_set = FcFontList(_config, pattern, object_set); + if (font_set) { + LOG_GENERAL("%1 candidate fonts found", font_set->nfont); + for (int i = 0; i < font_set->nfont; ++i) { + auto font = font_set->fonts[i]; + FcChar8* file; + if (FcPatternGetString(font, FC_FILE, 0, &file) == FcResultMatch) { + path = boost::filesystem::path(reinterpret_cast(file)); + LOG_GENERAL("Found %1", *path); + break; + } + } + FcFontSetDestroy(font_set); + } else { + LOG_GENERAL_NC("No candidate fonts found"); + } + + FcObjectSetDestroy(object_set); + FcPatternDestroy(pattern); + + if (path) { + LOG_GENERAL("Searched system for font %1, found %2", name, *path); + } else { + LOG_GENERAL("Searched system for font %1; nothing found", name); + } + + return path; +} + + FontConfig * FontConfig::instance() {