logo
Литература_1 / photon_old

Запрос доступных шрифтов

В приведенном выше примере используется сокращённое наименование жёстко прописанного имени основы (helv14). И, как любое приближение, оно допускает компромиссы. Прежде всего имена основы являются объектами для изменений. Что более важно, все версии Photon'овского микроGUI, вплоть до версии 1.13 включительно, позволяют использовать для имени основы не более 16 символов. Этого не всегда достаточно, чтобы дать каждому шрифту уникальную основу. Текущая версия микроGUI Photon'а допускает до 80 символов.

Чтобы обойти эту проблему, Вы можете использовать функцию PfQueryFonts(), чтобы определить, какие шрифты доступны, и обеспечить информацию, требующуюся для построения имени основы. Эта функция запрашивает сервер шрифтов Photon'а и защищает Вас от будущих изменений. Давайте начнём с параметров функции PfQueryFonts() – а затем рассмотрим образец программного кода, в котором из данных, возвращаемых функцией, извлекается имя основы. Сама функция выглядит подобным образом:

PfQueryFonts (long symbol,

unsigned flags,

FontDetails list[],

int n );

Её аргументами являются:

symbol

Ключ поиска для Photon'овского меенджера шрифтов. Функция ищет шрифты, которые включают этот символ, и отбрасывает те, которые его не имеют. Например, символ пробела в Unicode (0x0020) доступен почти во всех шрифтах. С другой стороны, задание символа "é" (в Unicode код символа 0х00С9) существенно сужает выбор шрифтов. И конечно, задание японского символа приведёт к отбору только японских шрифтов. Список символов см. в PkKeyDef.h или в ISO/EIC 10646-1. Чтобы включить все доступные шрифты, используйте константу PHFONT_ALL_SYMBOLS.

flags

Предлагает другой способ сужения круга поиска. Возможными значениями этого параметра являются:

  • PHFONT_SCALABLE – эти шрифты используют наборы векторов для описания каждого символа, делая возможным отображение шрифта различного размера.

  • PHFONT_BITMAP – эти шрифты хранят в качестве своих символов настоящие картинки.

  • PHFONT_PROP – эти шрифты являются пропорциональными. В пропорциональных шрифтах символ, например, "w" шире, чем символ "i".

  • PHFONT_FIXED – эти шрифты делают все символы одной ширины.

  • PHFONT_ALL_FONTS [Почему-то ничего не написано, но полагаю, означает включение всех доступных шрифтов – Прим. пер.]

  • PHFONT_DONT_SHOW_LEGACY – исключаются унаследованные шрифты из более ранних версий микроGUI Photon'а. Этот флаг перекрывает флаг PHFONT_ALL_FONTS.

list[]

Массив, который Photon'овский менеджер шрифтов заполняет для Вас. Вы должны объявить структуру FontDetails, описанную ниже.

n

Число элементов, доступных в списочном массиве.

Если функция PfQueryFonts() завершилась успешно, она возвращает число доступных шрифтов, совпавших с заданным критерием отбора. В противном случае она возвращает -1.

 Если n равно 0 и list равен NULL, функция PfQueryFonts() возвращает число совпавших шрифтов, но не пытается заполнять список. Вы можете использовать эту возможность для определения количества элементов при выделении памяти под список.

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4