|
|
/*++
Copyright (c) 1996 - 1999 Microsoft Corporation
Module Name:
fontmap.h
Abstract:
Unidrv FONTMAP and related info header file.
Environment:
Windows NT Unidrv driver
Revision History:
05-19-97 -eigos- Created
dd-mm-yy -author- description
--*/
#ifndef _FONTMAP_
#define _FONMTAP_
//
// CD - Command Descriptor is used in many of the following structures to
// reference a particular set of printer command/escape codes
// used to select paper sizes, graphics resolutions, character attributes,
// etc. If CD.wType = CMD_FTYPE_EXTENDED, the CD is followed by CD.sCount
// EXTCD structures.
//
#define NOOCD -1 // command does not exist
typedef struct _CD { BYTE fType; // type of command
BYTE bCmdCbId; // command callback ID, as in 95
short sCount; WORD wLength; // length of the command
char rgchCmd[2]; // Actual Command String, variable length
} CD, *PCD;
//
// FINVOCATION data structure is in printoem.h at public\oak\inc
//
//
// FONTMAP structure for NT 5.0
//
typedef struct _FONTMAP *PFONTMAP;
//
// _________________
// | |
// | Font Main |
// | module |
// -----------------
// | | |
// ____|__ ___|___ __|_____
// |Device ||TT | |TT |
// | font || Bitmap| | Outline|
// | sub || sub | | sub |
// | module|| Module| | Module |
// ------- -------- --------
//
//
//
//
// Glyph output function
//
// TO_DATA structure is in fmtxtout.h
//
typedef DWORD (*PFNGLYPHOUT) (TO_DATA *pTod);
//
// Font selection/deselection function
// UNIDRV
//
typedef BOOL (*PFNSELFONT) (PDEV *pdev, PFONTMAP pFM, POINTL* pptl); typedef BOOL (*PFNDESELFONT) (PDEV *pdev, PFONTMAP pFM); typedef BOOL (*PFNFREEPFM) (PFONTMAP pFM);
//
// font download functions
//
// Header download function
// This function returns the memory used to download this font.
// If this function fails, this function has to return 0,
//
typedef DWORD (*PFNDLHEADER) (PDEV *pdev, PFONTMAP pFM);
//
// Character glyph download function
// This function returns the memory used to download this character.
// If this function fails, this function has to return 0. The optional
// parameter is width. This function should fill in the width of the
// Glyph downloaded. This value is save in DLGLYPH.wWidth field.
//
typedef DWORD (*PFNDLGLYPH) ( PDEV *pdev, PFONTMAP pFM, HGLYPH hGlyph, WORD wDLGlyphId, WORD *pwWidth); //
// Before downnloading this font a font main calls this function
// to determine if this font can be downloaded with this font and the current
// condition.
// Sub module checks if this font is appropriate to download with FONTMAP.
// And checks if the remaining memory is enough to download this font.
//
typedef BOOL (*PFNCHECKCOND) ( PDEV *pdev, FONTOBJ *pfo, STROBJ *pstro, IFIMETRICS *pifi);
typedef struct _FONTMAP { DWORD dwSignature; // FONTMAP Signature
DWORD dwSize; // FONTMAP Size.
DWORD dwFontType; // Device/TTBitmap//TTOutline/..
LONG flFlags; // Flags listed below
IFIMETRICS *pIFIMet; // The IFIMETRICS for this font
WCHAR wFirstChar; // First char available
WCHAR wLastChar; // Last one available - inclusive
ULONG ulDLIndex; // Currently selected DL index.
WORD wXRes; // X Res used for font metrics numbers
WORD wYRes; // Ditto for the y coordinates
SHORT syAdj; // Y position adjustment during printing
//
// Font specific data structure
//
PVOID pSubFM; // Pointer to the font specific data structure
// dwFontType represents this FONTMAP font type.
// FMTYPE_DEVICE
// FMTYPE_TTBITMAP
// FMTYPE_TTOUTLINE
// FMTYPE_TTOEM
//
// Font specific drawing functions' pointers
// These pointers varies according to the dwFontType.
//
PFNGLYPHOUT pfnGlyphOut; // Glyph drawing function
PFNSELFONT pfnSelectFont; // Font selection function
PFNDESELFONT pfnDeSelectFont; // Font deselection function
PFNDLHEADER pfnDownloadFontHeader; // Download font header
PFNDLGLYPH pfnDownloadGlyph; // Download glyph
PFNCHECKCOND pfnCheckCondition; // Condition check function
PFNFREEPFM pfnFreePFM; // To Free the pfm
} FONTMAP, *PFONTMAP;
//
// Values for dwFontType
//
#define FMTYPE_DEVICE 1 // Set for Device font.
#define FMTYPE_TTBITMAP 2 // Set for True Type Bitmap font.
#define FMTYPE_TTOUTLINE 3 // Set for True Type Outline font.
#define FMTYPE_TTOEM 4 // Set for True Type download OEM callback.
//
// FONTMAP_DEV
// Device font sub part of FONTMAP
//
typedef BOOL (*PFNDEVSELFONT) (PDEV *pdev, BYTE *pbCmd, INT iCmdLength, POINTL *pptl);
typedef struct _FONTMAP_DEV { WORD wDevFontType; // Type of Device font
SHORT sCTTid; // It's value as ID in resource data
// Assume that RLE/GTT must be in the same
// DLL as IFI/UFM is in.
SHORT fCaps; // Capabilities flags
SHORT sYAdjust; // Position adjustment amount before print
SHORT sYMoved; // Position adjustment amount after print
SHORT sPadding; // For Padding
union { DWORD dwResID; // Resource ID for this font
QUALNAMEEX QualName; // Fully qualified resource ID.
};
EXTTEXTMETRIC *pETM; // Pointer to ETM for this font
FWORD fwdFOAveCharWidth; // TrueType IFI Average char width
FWORD fwdFOMaxCharInc ; // TrueType IFI Max char width.
FWORD fwdFOUnitsPerEm; // TrueType IFI units per em
FWORD fwdFOWinAscender; // TrueType IFI Win Ascender
ULONG ulCodepage; // default codepage
ULONG ulCodepageID; // current codepage
VOID *pUCTree; // UNICODE glyph handle tree
VOID *pUCKernTree; // UNICODE Kernpair table
VOID *pvMapTable; // Allocated MAPTABLE. This is a merged
// MAPTABLE from predefined and mini def.
PUFF_FONTDIRECTORY pFontDir; // UFF font directory of this font.
//
// Font selection function pointer
//
PFNDEVSELFONT pfnDevSelFont; // Device font selection command
//
// File resource pointer
//
VOID *pvNTGlyph; // The GLYPH TRANS data for this font
VOID *pvFontRes; // Font Matrics(IFI) Resource Pointer
VOID *pvPredefGTT; // This is used for lPredefinedID
union { SHORT *psWidth; // Width vector (proportional font) else 0
PWIDTHTABLE pWidthTable; // pointer to WIDTHTABLE
} W;
//
// Font command
// If FM_IFIVER40 is set, pCDSelect and pCDDeselect are set.
// Otherwise, FInvSelect/FinvDeselect are set.
//
union { CD *pCD; // How to select/deselect this font
FINVOCATION FInv; }cmdFontSel; union { CD *pCD; FINVOCATION FInv; }cmdFontDesel;
} FONTMAP_DEV, *PFONTMAP_DEV;
//
// Values for device font flFlags
//
#define FM_SCALABLE 0x00000001 // Scalable font
#define FM_DEFAULT 0x00000002 // Set for the device's default font
#define FM_EXTCART 0x00000004 // Cartridge, in external font file
#define FM_FREE_GLYDATA 0x00000008 // we need to free GTT or CTT data
#define FM_FONTCMD 0x00000010 // Font select/deselect command in resource
#define FM_WIDTHRES 0x00000020 // Width tables are in a resource
#define FM_IFIRES 0x00000040 // IFIMETRICS are in a resource
#define FM_KERNRES 0x00000080 // FD_KERNINGPAIR is in a resource
#define FM_IFIVER40 0x00000100 // Old IFIMETRICS(NT 4.0) resource
#define FM_GLYVER40 0x00000200 // Old RLE(NT 4.0) resource
#define FM_FINVOC 0x00000400 // FINVOCATION is filled out
#define FM_SOFTFONT 0x00000800 // Soft font, downloaded or installed
#define FM_GEN_SFONT 0x00001000 // Internally generated soft font
#define FM_SENT 0x00002000 // Set if downloaded font downloaded
#define FM_TT_BOUND 0x00004000 // Bound TrueType font
#define FM_TO_PROP 0x00008000 // PROPORTIONAL font
#define FM_EXTERNAL 0x00010000 // External font
//
// FONTMAP_TTB
// TrueType as Bitmap font sub part of FONTMAP
//
typedef struct _FONTMAP_TTB { DWORD dwDLSize;
union { VOID *pvDLData; // Pointer to DL_MAP
ULONG ulOffset; } u; } FONTMAP_TTB, *PFONTMAP_TTB;
//
// FONTMAP_TTO
// TrueType as TrueType Outline font sub part of FONTMAP
//
typedef struct _FONTMAP_TTO { VOID *pvDLData; // Pointer to DL_MAP
LONG lCurrentPointSize; DWORD dwCurrentTextParseMode; //VOID *pTTFile;
ULONG ulGlyphTable; ULONG ulGlyphTabLength; USHORT usNumGlyphs; SHORT sIndexToLoc; // head.indexToLocFormat
ULONG ulLocaTable; PVOID pvGlyphData; //GLYPH_DATA GlyphData; // TT GlyphData
FLONG flFontType; // Font Type (bold/italic)
} FONTMAP_TTO, *PFONTMAP_TTO;
typedef struct _FONTMAP_TTOEM { DWORD dwDLSize; DWORD dwFlags; FLONG flFontType;
union { VOID *pvDLData; // Pointer to DL_MAP
ULONG ulOffset; } u; } FONTMAP_TTOEM, *PFONTMAP_TTOEM; #endif // !_FONTMAP_
|