326 lines
9.9 KiB
C++
326 lines
9.9 KiB
C++
/******************************Module*Header*******************************\
|
||
* Module Name: fontddi.cxx
|
||
*
|
||
* Text and font DDI callback routines.
|
||
*
|
||
* Tue 06-Jun-1995 -by- Andre Vachon [andreva]
|
||
* update: removed a whole bunch of dead stubs.
|
||
*
|
||
* Fri 25-Jan-1991 -by- Bodin Dresevic [BodinD]
|
||
* update: filled out all stubs
|
||
*
|
||
* Copyright (c) 1991-1999 Microsoft Corporation
|
||
\**************************************************************************/
|
||
|
||
#include "precomp.hxx"
|
||
|
||
/******************************Public*Routine******************************\
|
||
* ULONG FONTOBJ_cGetAllGlyphHandles (pfo,phgly) *
|
||
* *
|
||
* phgly Buffer for glyph handles. *
|
||
* *
|
||
* Used by the driver to download the whole font from the graphics engine. *
|
||
* *
|
||
* Warning: The device driver must ensure that the buffer is big enough *
|
||
* to receive all glyph handles for a particular realized font. *
|
||
* *
|
||
* History: *
|
||
* 25-Jan-1991 -by- Bodin Dresevic [BodinD] *
|
||
* Wrote it. *
|
||
\**************************************************************************/
|
||
|
||
ULONG
|
||
FONTOBJ_cGetAllGlyphHandles(
|
||
FONTOBJ *pfo,
|
||
PHGLYPH phg)
|
||
{
|
||
RFONTTMPOBJ rfto(PFO_TO_PRF(pfo));
|
||
ASSERTGDI(rfto.bValid(), "gdisrv!FONTOBJ_cGetAllGlyphHandles(): bad pfo\n");
|
||
|
||
return(rfto.chglyGetAllHandles(phg));
|
||
}
|
||
|
||
/******************************Public*Routine******************************\
|
||
* VOID FONTOBJ_vGetInfo (pfo,cjSize,pfoi) *
|
||
* *
|
||
* cjSize Don't write more than this many bytes to the buffer. *
|
||
* pfoi Buffer with FO_INFO structure provided by the driver. *
|
||
* *
|
||
* Returns the info about the font to the driver's buffer. *
|
||
* *
|
||
* History: *
|
||
* 25-Jan-1991 -by- Bodin Dresevic [BodinD] *
|
||
* Wrote it. *
|
||
\**************************************************************************/
|
||
|
||
VOID
|
||
FONTOBJ_vGetInfo(
|
||
FONTOBJ *pfo,
|
||
ULONG cjSize,
|
||
PFONTINFO pfi)
|
||
{
|
||
RFONTTMPOBJ rfto(PFO_TO_PRF(pfo));
|
||
ASSERTGDI(rfto.bValid(), "gdisrv!FONTOBJ_vGetInfo(): bad pfo\n");
|
||
|
||
FONTINFO fi; // RFONTOBJ will write into this buffer
|
||
|
||
rfto.vGetInfo(&fi);
|
||
|
||
RtlCopyMemory((PVOID) pfi, (PVOID) &fi, (UINT) cjSize);
|
||
}
|
||
|
||
/******************************Public*Routine******************************\
|
||
* PXFORMOBJ FONTOBJ_pxoGetXform (pfo) *
|
||
* *
|
||
* History: *
|
||
* 25-Mar-1991 -by- Bodin Dresevic [BodinD] *
|
||
* Wrote it. *
|
||
\**************************************************************************/
|
||
|
||
XFORMOBJ
|
||
*FONTOBJ_pxoGetXform(
|
||
FONTOBJ *pfo)
|
||
{
|
||
return ((XFORMOBJ *) (PVOID) &(PFO_TO_PRF(pfo))->xoForDDI);
|
||
}
|
||
|
||
/******************************Public*Routine******************************\
|
||
* FONTOBJ_pifi *
|
||
* *
|
||
* Returns pointer to associated font metrics. *
|
||
* *
|
||
* History: *
|
||
* Wed 04-Mar-1992 10:49:53 by Kirk Olynyk [kirko] *
|
||
* Wrote it. *
|
||
\**************************************************************************/
|
||
|
||
IFIMETRICS* FONTOBJ_pifi(FONTOBJ *pfo)
|
||
{
|
||
RFONTTMPOBJ rfto(PFO_TO_PRF(pfo));
|
||
ASSERTGDI(rfto.bValid(), "gdisrv!FONTOBJ_pifi(): bad pfo\n");
|
||
|
||
PFEOBJ pfeo(rfto.ppfe());
|
||
return(pfeo.bValid() ? pfeo.pifi() : (IFIMETRICS*) NULL);
|
||
}
|
||
|
||
/******************************Public*Routine******************************\
|
||
*
|
||
* APIENTRY FONTOBJ_pfdg
|
||
*
|
||
* returns pointer to pfdg
|
||
*
|
||
* History:
|
||
* 09-Jun-1997 -by- Bodin Dresevic [BodinD]
|
||
* Wrote it.
|
||
\**************************************************************************/
|
||
|
||
FD_GLYPHSET * APIENTRY FONTOBJ_pfdg(FONTOBJ *pfo)
|
||
{
|
||
return (PFO_TO_PRF(pfo)->pfdg);
|
||
}
|
||
|
||
|
||
|
||
/******************************Public*Routine******************************\
|
||
* FONTOBJ_cGetGlyphs
|
||
*
|
||
*
|
||
* History:
|
||
* 05-Jan-1993 -by- Gilman Wong [gilmanw]
|
||
* Wrote it.
|
||
\**************************************************************************/
|
||
|
||
ULONG FONTOBJ_cGetGlyphs (
|
||
FONTOBJ *pfo,
|
||
ULONG iMode,
|
||
ULONG cGlyph, // requested # of hglyphs to be converted to ptrs
|
||
PHGLYPH phg, // array of hglyphs to be converted
|
||
PVOID *ppvGlyph // driver's buffer receiving the pointers
|
||
)
|
||
{
|
||
DONTUSE(cGlyph);
|
||
|
||
GLYPHPOS gp;
|
||
gp.hg = *phg;
|
||
|
||
RFONTTMPOBJ rfto(PFO_TO_PRF(pfo));
|
||
ASSERTGDI(rfto.bValid(), "gdisrv!FONTOBJ_cGetGlyphs(): bad pfo\n");
|
||
|
||
if ( !rfto.bInsertGlyphbitsLookaside(&gp, iMode))
|
||
return 0;
|
||
|
||
*ppvGlyph = (VOID *)(gp.pgdf);
|
||
return 1;
|
||
}
|
||
|
||
/******************************Public*Routine******************************\
|
||
* FONTOBJ_pGetGammaTables
|
||
*
|
||
* History:
|
||
* Thu 09-Feb-1995 06:54:54 by Kirk Olynyk [kirko]
|
||
* Wrote it.
|
||
\**************************************************************************/
|
||
|
||
GAMMA_TABLES*
|
||
FONTOBJ_pGetGammaTables(
|
||
FONTOBJ *pfo)
|
||
{
|
||
RFONTTMPOBJ rfo(PFO_TO_PRF(pfo));
|
||
ASSERTGDI(rfo.bValid(), "FONTOBJ_pGetGammaTables bad pfo\n");
|
||
return(&(rfo.gTables));
|
||
}
|
||
|
||
|
||
/******************************Public*Routine******************************\
|
||
*
|
||
* Routine Name:
|
||
*
|
||
* FONTOBJ_pvTrueTypeFontFile
|
||
*
|
||
* Routine Description:
|
||
*
|
||
* This routine returns a kernel mode pointer to the start of a
|
||
* font file. Despite the name of the routine, the font need not be
|
||
* in the TrueType format.
|
||
*
|
||
* GDI passes this call onto the font driver to do the detailed work.
|
||
* The reason for this is that the file image can have the font file
|
||
* image embedded in it in a non trivial way. An example of this would
|
||
* be the *.ttc format for Far East Fonts. It is not reasonable to
|
||
* expect this routine to be able to parse all file formats so that
|
||
* resposibility is left to the font drivers.
|
||
*
|
||
* Arguments:
|
||
*
|
||
* pfo - a 32-bit pointer to a FONTOBJ structure associated with a font
|
||
* file.
|
||
*
|
||
* pcjFile - the address of a 32-bit unsigend number that receives the
|
||
* size of the view of the font file.
|
||
*
|
||
* Called by:
|
||
*
|
||
* Printer Drivers in the context of a call to DrvTextOut
|
||
*
|
||
* Return Value:
|
||
*
|
||
* If successful, this routine will return a kernel mode view of
|
||
* a TrueType font file. If unsuccessful this routine returns NULL.
|
||
*
|
||
\**************************************************************************/
|
||
|
||
PVOID FONTOBJ_pvTrueTypeFontFile(
|
||
FONTOBJ *pfo,
|
||
ULONG *pcjFile
|
||
)
|
||
{
|
||
void *pvRet = 0;
|
||
*pcjFile = 0;
|
||
|
||
RFONTTMPOBJ rfo(PFO_TO_PRF(pfo));
|
||
if ( rfo.bValid() )
|
||
{
|
||
pvRet = rfo.pvFile( pcjFile );
|
||
}
|
||
return( pvRet );
|
||
}
|
||
|
||
|
||
PVOID
|
||
FONTOBJ_pvTrueTypeFontFileUMPD(
|
||
FONTOBJ *pfo,
|
||
ULONG *pcjFile,
|
||
PVOID *ppBase
|
||
)
|
||
|
||
{
|
||
*ppBase = NULL;
|
||
*pcjFile = 0;
|
||
|
||
RFONTTMPOBJ rfo(PFO_TO_PRF(pfo));
|
||
|
||
return rfo.bValid() ? rfo.pvFileUMPD(pcjFile, ppBase) : NULL;
|
||
}
|
||
|
||
|
||
/******************************Public*Routine******************************\
|
||
*
|
||
* Routine Name:
|
||
*
|
||
* FONTOBJ_pjOpenTypeTablePointer
|
||
*
|
||
* Routine Description:
|
||
*
|
||
* Arguments:
|
||
*
|
||
* Called by:
|
||
*
|
||
* Return Value:
|
||
*
|
||
* A pointer to a view of the table.
|
||
*
|
||
\**************************************************************************/
|
||
|
||
PBYTE FONTOBJ_pjOpenTypeTablePointer (
|
||
FONTOBJ *pfo,
|
||
ULONG ulTag,
|
||
ULONG *pcjTable
|
||
)
|
||
{
|
||
PBYTE pjTable = 0;
|
||
|
||
RFONTTMPOBJ rfo(PFO_TO_PRF(pfo));
|
||
if ( rfo.bValid() )
|
||
{
|
||
pjTable = rfo.pjTable( ulTag, pcjTable );
|
||
}
|
||
return( pjTable );
|
||
}
|
||
|
||
LPWSTR FONTOBJ_pwszFontFilePaths (FONTOBJ *pfo, ULONG *pcwc)
|
||
{
|
||
LPWSTR pwsz = NULL;
|
||
*pcwc = 0;
|
||
RFONTTMPOBJ rfo(PFO_TO_PRF(pfo));
|
||
if ( rfo.bValid() )
|
||
{
|
||
// return 0 for memory fonts and temporary fonts added to dc's for printing
|
||
|
||
if (!(rfo.prfnt->ppfe->pPFF->flState & (PFF_STATE_MEMORY_FONT | PFF_STATE_DCREMOTE_FONT)))
|
||
{
|
||
pwsz = rfo.prfnt->ppfe->pPFF->pwszPathname_;
|
||
*pcwc = rfo.prfnt->ppfe->pPFF->cwc;
|
||
}
|
||
}
|
||
return pwsz;
|
||
}
|
||
|
||
/******************************Public*Routine******************************\
|
||
* FONTOBJ_bQueryGlyphAttrs
|
||
*
|
||
* History:
|
||
* Thu 21-May-1998 by Yung-Jen Tony Tsai [YungT]
|
||
* Wrote it.
|
||
\**************************************************************************/
|
||
|
||
PFD_GLYPHATTR APIENTRY FONTOBJ_pQueryGlyphAttrs(
|
||
FONTOBJ *pfo,
|
||
ULONG iMode
|
||
)
|
||
{
|
||
|
||
RFONTTMPOBJ rfo(PFO_TO_PRF(pfo));
|
||
if ( rfo.bValid() )
|
||
{
|
||
PDEVOBJ pdo( rfo.hdevProducer() );
|
||
|
||
if (pdo.bValid() && PPFNVALID(pdo, QueryGlyphAttrs) )
|
||
{
|
||
|
||
return pdo.QueryGlyphAttrs(pfo, iMode);
|
||
}
|
||
}
|
||
|
||
return( NULL );
|
||
}
|