Share via


Structure FONTOBJ (winddi.h)

La structure FONTOBJ permet à un pilote d’accéder aux informations relatives à un instance particulier d’une police.

Syntaxe

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;

Membres

iUniq

Spécifie une réalisation distincte de la police. Cette valeur peut être utilisée par le pilote pour identifier une police GDI qu’il a peut-être mise en cache ou pour identifier la réalisation par un pilote de sa propre police. Si ce membre est égal à zéro pour une police GDI, la police ne doit pas être mise en cache.

iFace

Spécifie l’index d’appareil pour une police d’appareil, qui a été inscrite par un appel à DrvQueryFont. Si la police est une police GDI, ce membre a une signification uniquement pour GDI, et le pilote doit l’ignorer.

cxMax

Spécifie la largeur, en pixels, du plus grand glyphe de la police spécifiée.

flFontType

Valeur spécifiant le type de la police. Ce membre peut être une combinaison des indicateurs répertoriés dans le tableau suivant. (Notez toutefois que FO_GRAY16 et FO_NOGRAY16 s’excluent mutuellement.)

Indicateur Signification
FO_CFF Police OpenType Postscript.
FO_DBCS_FONT Police prend en charge les pages de codes DBCS.
FO_EM_HEIGHT Indicateur interne du pilote TrueType.
FO_GRAY16 Les bitmaps de police sont des valeurs de fusion (alpha) de quatre bits par pixel.
FO_MULTIPLEMASTER Police multimaître (Type1 ou OpenType).
FO_NOGRAY16 Indique que le pilote de police ne peut pas (ou ne va pas) mettre à l’échelle de gris une réalisation de police particulière.
FO_POSTSCRIPT Police Postscript (Type1 ou OpenType).
FO_SIM_BOLD Police en gras simulée par le pilote.
FO_SIM_ITALIC Police italique simulée par le pilote.
FO_TYPE_DEVICE Police spécifique à l’appareil.
FO_TYPE_OPENTYPE Police OpenType.
FO_TYPE_RASTER Police bitmap.
FO_TYPE_TRUETYPE Police TrueType.
FO_VERT_FACE Police verticale.
 

Si l’indicateur FO_RASTER est défini, les glyphes écrits dans la structure STROBJ spécifiée sont des bitmaps, sinon ils sont des pointeurs vers des structures PATHOBJ. Si les images de glyphe sont retournées sous la forme de structures PATHOBJ, le pilote doit inspecter l’indicateur FM_INFO_TECH_STROKE du membre flInfo de la structure IFIMETRICS associée. Si cet indicateur est défini, les chemins d’accès doivent être tracés, sinon ils doivent être remplis à l’aide de la convention de mode alternatif.

Si l’indicateur FO_GRAY16 est défini, les bitmaps de police sont des valeurs de fusion (alpha) de quatre bits par pixel. La valeur zéro signifie que le pixel résultant doit avoir la même couleur que l’arrière-plan. Si la valeur alpha est k, le tableau suivant décrit les attributs du pixel obtenu, à l’aide d’un mélange alpha linéaire ou d’un mélange alpha corrigé par gamma. Dans les deux méthodes, les couleurs de premier plan et d’arrière-plan sont, respectivement, cf et cb.

Attribut pixel Description
Couleur mixte
(fusion alpha linéaire)
La fusion alpha linéaire produit une couleur fusionnée qui est une combinaison linéaire des couleurs de premier plan et d’arrière-plan.

c = b * cf + (1 - b) * cb

La fraction de mélange, b, est obtenue comme suit :

b = k / 15, pour k = 0, 1, 2, ..., 15

Remarque : les couleurs de premier plan et d’arrière-plan incluent les trois canaux de couleur (R, G, B).

Couleur mixte
(mélange alpha corrigé gamma)
Le mélange alpha corrigé par gamma produit une couleur fusionnée en faisant passer une variable qui dépend de la valeur alpha à une puissance fixe.

Deux formules sont fournies : une doit être utilisée lorsque la couleur de premier plan est numériquement supérieure à la couleur d’arrière-plan ; l’autre doit être utilisé dans le cas contraire. (Lorsque les couleurs de premier plan et d’arrière-plan sont égales, les deux formules se simplifient en c = cb.)

Si cf> cb,
c = cb + pow(b[k], (1 / gamma)) * (cf - cb)
Si cf< cb,
c = cb + (1 - pow(1 - b[k], 1 / gamma)) * (cf - cb)

Dans ces formules, gamma = 2,33, et b[k] est lakième fraction de fusion, obtenue comme suit :

b[k] = 0, pour k = 0, et
b[k] = (k + 1) / 16, pour k = 1, 2, ..., 15

Remarque : contrairement au mélange alpha linéaire, ces formules doivent être appliquées à chacun des trois canaux de couleur (R, G, B).

 

GDI définit l’indicateur FO_GRAY16 lors de l’entrée à la fonction DrvQueryFontData lorsqu’il demande qu’une police soit mise en nuances de gris sur l’une des 16 valeurs. Si le pilote de police ne peut pas mettre en gris une réalisation de police particulière, le fournisseur de polices efface l’indicateur de FO_GRAY16 et définit l’indicateur de FO_NOGRAY16 pour informer GDI que la demande de mise à l’échelle des gris ne sera pas satisfaite.

iTTUniq

Spécifie le fichier TrueType associé. Deux réalisations de taille de point distinctes d’une police TrueType ont des structures FONTOBJ qui partagent la même valeur iTTUniq , mais ont des valeurs iUniq différentes. Seuls les types de police TrueType peuvent avoir un membre iTTUniq différent de zéro. Pour plus d’informations, consultez flFontType.

iFile

Pointeur vers une valeur définie par le pilote pour les polices de périphérique déjà chargées. Si la police est une police GDI, ce membre est utilisé en interne pour identifier la police et doit être ignoré.

sizLogResPpi

Spécifie la résolution de l’appareil pour lequel cette police est réalisée.

ulStyleSize

Spécifie la taille de style de la police instance, en points.

pvConsumer

Pointeur vers les données allouées par le consommateur associées à cette police instance. Un consommateur est un pilote qui accepte les informations de glyphe comme entrée pour générer une sortie de texte. Seul un consommateur de polices peut modifier ce membre. Le consommateur de cette police peut stocker toutes les informations à l’emplacement désigné par ce membre. Le moteur ne modifiera pas ce membre. Le membre pvConsumer est garanti comme null la première fois qu’une structure FONTOBJ est passée au consommateur.

pvProducer

Pointeur vers les données allouées par le producteur associées à cette police instance. Un producteur est un pilote qui peut produire des informations sur les glyphes en tant que sortie ; cela inclut les métriques de glyphes, les bitmaps et les contours. Seul un producteur de polices peut modifier ce membre. Le producteur de cette police peut stocker toutes les informations à l’emplacement désigné par ce membre. Le moteur ne modifiera pas ce membre. Le membre pvProducer est garanti comme null la première fois qu’une structure FONTOBJ est passée au producteur.

Remarques

En tant qu’accélérateur, le pilote est autorisé à accéder aux membres publics de la structure FONTOBJ.

Un pilote peut être à la fois producteur et consommateur. Par exemple, un pilote d’imprimante peut agir en tant que producteur lors du traitement d’un appel à la fonction DrvQueryFontData fournie par le pilote pour fournir des métriques de glyphes, puis agir comme un consommateur lors du traitement d’un appel à la fonction DrvTextOut fournie par le pilote.

Configuration requise

Condition requise Valeur
En-tête winddi.h (inclure Winddi.h)

Voir aussi

DrvDestroyFont

DrvGetGlyphMode

DrvQueryFont

DrvQueryTrueTypeOutline

FONTOBJ_cGetAllGlyphHandles

FONTOBJ_cGetGlyphs

FONTOBJ_pifi

FONTOBJ_pxoGetXform

FONTOBJ_vGetInfo

IFIMETRICS