Структура FONTOBJ (winddi.h)
Структура FONTOBJ используется для предоставления драйверу доступа к сведениям о конкретном экземпляре шрифта.
typedef struct _FONTOBJ {
ULONG iUniq;
ULONG iFace;
ULONG cxMax;
FLONG flFontType;
ULONG_PTR iTTUniq;
ULONG_PTR iFile;
SIZE sizLogResPpi;
ULONG ulStyleSize;
PVOID pvConsumer;
PVOID pvProducer;
} FONTOBJ;
iUniq
Задает отдельную реализацию шрифта. Это значение может использоваться драйвером для определения шрифта GDI, который он мог кэшировать, или для определения реализации драйвером собственного шрифта. Если этот элемент равен нулю для шрифта GDI, он не должен кэшироваться.
iFace
Указывает индекс устройства для шрифта устройства, зарегистрированного при вызове DrvQueryFont. Если шрифт является шрифтом GDI, этот элемент имеет значение только для GDI, и драйвер должен игнорировать его.
cxMax
Задает ширину (в пикселях) самого большого глифа в указанном шрифте.
flFontType
Значение, указывающее тип шрифта. Этот элемент может быть сочетанием флагов, перечисленных в следующей таблице. (Обратите внимание, что FO_GRAY16 и FO_NOGRAY16 являются взаимоисключающими.)
Flag | Значение |
---|---|
FO_CFF | Шрифт Postscript OpenType. |
FO_DBCS_FONT | Шрифт поддерживает кодовую страницу DBCS. |
FO_EM_HEIGHT | Внутренний флаг драйвера TrueType. |
FO_GRAY16 | Точечные рисунки шрифта представляют собой значения альфа-наложения четырех битов на пиксель. |
FO_MULTIPLEMASTER | Несколько основных шрифтов (Type1 или OpenType). |
FO_NOGRAY16 | Указывает, что драйвер шрифта не может (или не будет) использовать оттенки серого для определенной реализации шрифта. |
FO_POSTSCRIPT | Шрифт Postscript (Type1 или OpenType). |
FO_SIM_BOLD | Полужирный шрифт, смоделированный драйвером. |
FO_SIM_ITALIC | Смоделированный драйвером курсив. |
FO_TYPE_DEVICE | Шрифт для конкретного устройства. |
FO_TYPE_OPENTYPE | Шрифт OpenType. |
FO_TYPE_RASTER | Точечный шрифт. |
FO_TYPE_TRUETYPE | Шрифт TrueType. |
FO_VERT_FACE | Вертикальный шрифт. |
Если установлен флаг FO_RASTER, глифы, записанные в указанную структуру STROBJ, являются растровыми изображениями, в противном случае они являются указателями на структуры PATHOBJ. Если изображения глифов возвращаются в виде структур PATHOBJ, драйвер должен проверить флаг FM_INFO_TECH_STROKE элемента flInfo связанной структуры IFIMETRICS . Если этот флаг установлен, пути следует обводить, в противном случае пути должны быть заполнены с помощью соглашения о режиме чередования.
Если установлен флаг FO_GRAY16, то растровые изображения шрифта представляют собой четыре бита на пиксель (альфа-значения). Нулевое значение означает, что результирующий пиксель должен иметь тот же цвет, что и фон. Если альфа-значение равно k, то в следующей таблице описаны атрибуты результирующего пикселя с использованием линейного альфа-смешения или гамма-исправленного альфа-смешения. В обоих методах цветами переднего плана и фона являются соответственно cf и cb.
Атрибут пикселя | Описание |
---|---|
|
Линейное альфа-смешивание создает смешанный цвет, представляющий собой линейное сочетание цветов переднего плана и фона.
c = b * cf + (1 - b) * cb Доля смеси, b, получается следующим образом: b = k / 15, для k = 0, 1, 2, ..., 15 Примечание. Цвета переднего плана и фона включают все три цветовых канала (R, G, B). |
|
Гамма-исправленное альфа-смешение создает смешанный цвет путем повышения переменной, которая зависит от альфа-значения до фиксированной мощности.
Приведены две формулы: одна должна использоваться, если цвет переднего плана численно превышает цвет фона; другой следует использовать в обратном случае. (Если цвета переднего плана и фона равны, обе формулы упрощаются до c = cb.)
В этих формулах гамма = 2,33, а b[k] — этоk-я доля смешения, полученная следующим образом:
Примечание. В отличие от линейного альфа-смешивания эти формулы должны применяться к каждому из трех цветовых каналов (R, G, B). |
GDI устанавливает флаг FO_GRAY16 при входе в функцию DrvQueryFontData , когда запрашивает одно из 16 значений шрифта серого. Если драйвер шрифта не может изменить оттенки серого для определенной реализации шрифта, поставщик шрифтов снимает флаг FO_GRAY16 и устанавливает флаг FO_NOGRAY16, чтобы сообщить GDI о том, что запрос на масштабирование серого не будет удовлетворен.
iTTUniq
Указывает связанный файл TrueType. Две реализации размера отдельных точек шрифта TrueType будут иметь структуры FONTOBJ, которые используют одно и то же значение iTTUniq , но будут иметь разные значения iUniq . Только типы шрифтов TrueType могут иметь ненулевой элемент iTTUniq . Дополнительные сведения см. в разделе flFontType.
iFile
Указатель на определенное драйвером значение для уже загруженных шрифтов устройств. Если шрифт является шрифтом GDI, то этот элемент используется внутри организации для идентификации шрифта и должен игнорироваться.
sizLogResPpi
Указывает разрешение устройства, для которого реализован этот шрифт.
ulStyleSize
Задает размер стиля экземпляра шрифта в пунктах.
pvConsumer
Указатель на данные, выделенные потребителем, связанные с этим экземпляром шрифта. Потребитель — это драйвер, который принимает сведения о глифах в качестве входных данных для создания выходных данных текста. Изменить этот элемент может только потребитель шрифта. Потребитель этого шрифта может хранить любую информацию в расположении, на которое указывает данный элемент. Подсистема не будет изменять этот элемент. Элемент pvConsumer гарантированно будет иметь значение NULL при первой передаче структуры FONTOBJ потребителю.
pvProducer
Указатель на данные, выделенные производителем, связанные с этим экземпляром шрифта. Производитель — это драйвер, который может создавать сведения о глифах в качестве выходных данных; к ним относятся метрики глифов, растровые изображения и контуры. Изменять этот элемент может только производитель шрифта. Производитель этого шрифта может хранить любую информацию в расположении, на которое указывает данный элемент. Подсистема не будет изменять этот элемент. Элемент pvProducer гарантированно будет иметь значение NULL при первой передаче структуры FONTOBJ производителю.
В качестве ускорителя драйверу разрешен доступ к открытым членам структуры FONTOBJ.
Драйвер может быть как производителем, так и потребителем. Например, драйвер принтера может выступать в качестве производителя при обработке вызова предоставленной драйвером функции DrvQueryFontData для предоставления метрик глифа, а затем выполнять роль потребителя при обработке вызова функции DrvTextOut , предоставленной драйвером.
Требование | Значение |
---|---|
Заголовок | winddi.h (включая Winddi.h) |