Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

310 lines
9.5 KiB

/******************************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;
if(phg)
gp.hg = *phg;
else
return 0;
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******************************\
*
* 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 );
}