Struttura FONTOBJ (winddi.h)

La struttura FONTOBJ viene usata per concedere a un driver l'accesso alle informazioni su una determinata istanza di un tipo di carattere.

Sintassi

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;

Members

iUniq

Specifica una realizzazione distinta del tipo di carattere. Questo valore può essere usato dal driver per identificare un tipo di carattere GDI che potrebbe avere memorizzato nella cache o identificare la realizzazione del proprio carattere di un driver. Se questo membro è zero per un tipo di carattere GDI, il tipo di carattere non deve essere memorizzato nella cache.

iFace

Specifica l'indice del dispositivo per un tipo di carattere del dispositivo registrato da una chiamata a DrvQueryFont. Se il tipo di carattere è un tipo di carattere GDI, questo membro ha significato solo per GDI e il driver deve ignorarlo.

cxMax

Specifica la larghezza, in pixel, del glifo più grande nel tipo di carattere specificato.

flFontType

Valore che specifica il tipo del tipo di carattere. Questo membro può essere una combinazione dei flag elencati nella tabella seguente. Si noti tuttavia che FO_GRAY16 e FO_NOGRAY16 si escludono a vicenda.

Contrassegno Significato
FO_CFF Tipo di carattere OpenType postscript.
FO_DBCS_FONT Il tipo di carattere supporta le pagine codici DBCS.
FO_EM_HEIGHT Flag interno del driver TrueType.
FO_GRAY16 Le bitmap del tipo di carattere sono quattro bit per pixel con valori di fusione (alfa).
FO_MULTIPLEMASTER Tipo di carattere Multi Master (Type1 o OpenType).
FO_NOGRAY16 Indica che il driver del tipo di carattere non può (o non) scalare di grigio una particolare realizzazione del tipo di carattere.
FO_POSTSCRIPT Carattere Postscript (Type1 o OpenType).
FO_SIM_BOLD Carattere grassetto simulato dal driver.
FO_SIM_ITALIC Carattere corsivo simulato dal driver.
FO_TYPE_DEVICE Carattere specifico del dispositivo.
FO_TYPE_OPENTYPE Tipo di carattere OpenType.
FO_TYPE_RASTER Tipo di carattere bitmap.
FO_TYPE_TRUETYPE Carattere TrueType.
FO_VERT_FACE Carattere verticale.
 

Se il flag FO_RASTER è impostato, i glifi scritti nella struttura STROBJ specificata sono bitmap, altrimenti sono puntatori alle strutture PATHOBJ. Se le immagini glifi vengono restituite sotto forma di strutture PATHOBJ, il driver deve controllare il flag di FM_INFO_TECH_STROKE del membro flInfo della struttura IFIMETRICS associata. Se tale flag è impostato, i percorsi devono essere tratti, altrimenti i percorsi devono essere riempiti usando la convenzione di modalità alternata.

Se il flag di FO_GRAY16 è impostato, le bitmap del tipo di carattere sono quattro bit per pixel di fusione (alfa). Un valore pari a zero indica che il pixel risultante deve avere lo stesso colore dello sfondo. Se il valore alfa è k, la tabella seguente descrive gli attributi del pixel risultante, usando la fusione alfa lineare o la fusione alfa gamma corretta. In entrambi i metodi, i colori di primopiano e sfondo sono rispettivamente c e cb.

Attributo Pixel Descrizione
Colore miscelato
(fusione alfa lineare)
La fusione alfa lineare produce un colore misto che è una combinazione lineare dei colori di primo piano e di sfondo.

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

La frazione di blend, b, viene ottenuta come segue:

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

Nota: i colori di primo piano e sfondo includono tutti e tre i canali di colore (R, G, B).

Colore miscelato
(fusione alfa corretta gamma)
La fusione alfa corretta gamma produce un colore misto aumentando una variabile che dipende dal valore alfa a una potenza fissa.

Vengono fornite due formule: una deve essere usata quando il colore di primo piano è numericamente maggiore del colore di sfondo; l'altro deve essere usato nel caso opposto. Quando i colori di primo piano e sfondo sono uguali, entrambe le formule semplificano c = c.

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

In queste formule, gamma = 2,33 e b[k] è lafrazione k th blending, ottenuta come indicato di seguito:

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

Nota: a differenza della fusione alfa lineare, queste formule devono essere applicate a ognuno dei tre canali di colore (R, G, B).

 

GDI imposta il flag di FO_GRAY16 sulla voce sulla funzione DrvQueryFontData quando richiede che un tipo di carattere venga ridimensionato su uno dei 16 valori. Se il driver di tipo di carattere non può ridimensionare un tipo di carattere specifico, il provider di caratteri cancella il flag di FO_GRAY16 e imposta il flag FO_NOGRAY16 per informare GDI che la richiesta di scalabilità grigia non verrà soddisfatta.

iTTUniq

Specifica il file TrueType associato. Due distribuzioni di dimensioni del punto separate di un viso carattere TrueType avranno strutture FONTOBJ che condividono lo stesso valore iTTUniq , ma avranno valori iUniq diversi. Solo i tipi di carattere TrueType possono avere un membro iTTUniq diverso da zero. Per altre informazioni, vedere flFontType.

iFile

Puntatore a un valore definito dal driver per i tipi di carattere del dispositivo già caricati. Se il tipo di carattere è un carattere GDI, questo membro viene usato internamente per identificare il tipo di carattere e deve essere ignorato.

sizLogResPpi

Specifica la risoluzione del dispositivo per cui viene realizzato questo tipo di carattere.

ulStyleSize

Specifica le dimensioni dello stile dell'istanza del tipo di carattere, in punti.

pvConsumer

Puntatore ai dati allocati dal consumer associati a questa istanza del tipo di carattere. Un consumer è un driver che accetta le informazioni sul glifo come input per generare l'output di testo. Solo un consumer di tipi di carattere può modificare questo membro. Il consumer di questo tipo di carattere può archiviare tutte le informazioni nella posizione a cui punta questo membro. Il motore non modifica questo membro. Il membro pvConsumer è garantito che sia null la prima volta che viene passata una struttura FONTOBJ al consumer.

pvProducer

Puntatore ai dati allocati dal produttore associati a questa istanza del tipo di carattere. Un produttore è un driver che può produrre informazioni sul glifo come output; sono incluse le metriche del glifo, le bitmap e i contorni. Solo un produttore di caratteri può modificare questo membro. Il produttore di questo tipo di carattere può archiviare qualsiasi informazione nella posizione a cui punta questo membro. Il motore non modifica questo membro. Il membro pvProducer è garantito che sia null la prima volta che una struttura FONTOBJ viene passata al produttore.

Commenti

Come acceleratore, il driver è autorizzato ad accedere ai membri pubblici della struttura FONTOBJ.

Un driver può essere sia un produttore che un consumer. Ad esempio, un driver della stampante può fungere da producer durante l'elaborazione di una chiamata alla funzione DrvQueryFontData fornita dal driver per fornire le metriche del glifo e successivamente agire come consumer durante l'elaborazione di una chiamata alla funzione DrvTextOut fornita dal driver.

Requisiti

Requisito Valore
Intestazione winddi.h (include Winddi.h)

Vedi anche

DrvDestroyFont

DrvGetGlyphMode

DrvQueryFont

DrvQueryTrueTypeOutline

FONTOBJ_cGetAllGlyphHandles

FONTOBJ_cGetGlyphs

FONTOBJ_pifi

FONTOBJ_pxoGetXform

FONTOBJ_vGetInfo

IFIMETRICS