Использование несистемных файлов шрифтов в Pango - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь использовать Pan go с определенным набором c шрифтов в каталоге /..../fonts. Когда я использую FcConfigAppFontAddDir в текущей конфигурации шрифта, ничего не происходит (и FcConfigAppFontAddFile в текущей конфигурации не работает), но когда я создаю новую конфигурацию со следующим кодом, я вижу, что шрифты добавлены в FCSetApplication, а FCSetSystem пуста.

    FcConfig *theNewConfig = FcConfigCreate ();
    if (!FcConfigAppFontAddDir (theNewConfig, (const FcChar8 *)"/.../fonts")) {
        printf ("failed to FcConfigAppFontAddDir\n");
    }
    FcFontSet *theNewApplicationFontSet = FcConfigGetFonts (theNewConfig, FcSetApplication);
    printf ("FcSetApplication: nfont: %d, sfont: %d\n", theNewApplicationFontSet->nfont, theNewApplicationFontSet->sfont);
    for (int i = 0 ; theNewApplicationFontSet->fonts[i] != 0 && i < theNewApplicationFontSet->nfont ; i++) {
        FcPattern *theFontPattern = theNewApplicationFontSet->fonts[i];
        printf ("%s\n", (const char *)FcPatternFormat (theFontPattern, (const FcChar8 *)"%{family} %{style} %{weight}"));
    }
    FcConfigSetCurrent (theNewConfig);

Затем я создаю карту шрифтов и перечисляю ее семейства шрифтов.

    mFontMap = pango_ft2_font_map_new ();
    PangoFontFamily **theFamilies = 0;
    int theCount = 0;
    pango_font_map_list_families (mFontMap, &theFamilies, &theCount);
    for (int i = 0 ; i < theCount ; i++) {
        printf ("%s\n", pango_font_family_get_name (theFamilies[i]));
    }

Это список длинный список системных шрифтов, но не шрифтов, которые я добавил, хотя я ожидал увидеть только последнее, поэтому кажется, что Pan go не использует текущую конфигурацию, хотя pango_fc_font_map_get_config (PANGO_FC_FONT_MAP (mFontMap)) возвращает конфигурацию шрифта с желаемыми шрифтами.

Я также попытался установить конфигурацию шрифта на карте шрифтов:

    pango_fc_font_map_set_config (PANGO_FC_FONT_MAP (mFontMap), theNewConfig);

Но тогда список семейств сокращается до 'Sans', 'Serif', 'Monospaced', 'System-ui'. Что я делаю не так? Как я могу заставить Pan go использовать конфигурацию шрифта со шрифтами из /.../fonts?

Я видел Как установить шрифт из файла в Pan go и Mono , но интересная ссылка в комментариях, похоже, больше не доступна.

Я также видел Загрузка шрифта из файла для панорамирования go ? , но ответ не сработал.

Изменить: я попробовал свой код с pango_fc_font_map_set_config на Ubuntu 20.04, и он работал, как ожидалось. Таким образом, проблема возникла в MacOS с Pan go 1.44.7 через Homebrew . Я проверил Pan go из ветки 1.44 из git и взломал соответствующие файлы в свой проект, и он работал, как ожидалось. Так что это действительно проблема с конкретной версией c Pan go, которая поставляется с Homebrew. Я просмотрел коммиты между коммитом 1.44.7 и заголовком ветви 1.44, но не нашел ничего, что могло бы объяснить эту проблему.

...