/*++

Copyright (c) 2000  Microsoft Corporation

Module Name:

    font.cpp

Abstract:

    PCL XL minidriver plug-in font managing header file

Environment:

    Windows Whistler

Revision History:

    08/23/99 
      Created it.

--*/

tyedef enum {
    eXLNull,
    eXLTrueType,
    eXLDevice,
    eXLSubstitution
} XLFontType;

typedef enum {
    eXLTTNull,
    eXLTTBitmap,
    eXLTTTrueType
} XLTrueTypeFontType;

class XLFont
{
public:
    XLFont:
    XLFont();

    XLFont::
    ~XLFont();

    HRESULT SetFont(FONTOBJ *pfo, STROBJ *pstro);
    HRESULT SetSubstitutionTable(TTSUBST_TABLE* pTable);
    HRESULT SetTTDownloadType(XLTrueTypeFontType TTType);
    HRESULT SetUFM(UNIFM_HDR *pUFM);
    HRESULT SetGTT(UNI_GLYPHSETDATA *pGTT);

    //
    // Functions to emit commands
    //
    HRESULT DownloadFont();
    HRESULT SelectFont();
    HRESULT SendString();

private:
    //
    // DDI parameters
    //
    STROBJ            *m_pstro;
    FONTOBJ           *m_pfo;
    IFIMETRICS        *m_pifi;

    //
    // font info
    //
    XLFontType         m_FontType;
    XLTrueTypeFontType m_TrueTypeType;
    DWORD              m_dwFlags;
    CHAR               m_ubFontName[17];
    FLOATOBJ           m_floHeight;
    FLOATOBJ           m_floWidth;
    UNIFM_HDR         *m_pUFM;
    UNI_GLYPHSETDATA  *m_pGTT;

    TTSUBST_TABLE      m_pTTSubTbl;
};


XLFont::
XLFont()
{
    m_FontType = eXLNull;
    m_TrueTypeType = eXLTTNull;
    m_dwFlags = 0;
}

XLFont::
~XLFont()
{
}

HRESULT
XLFont::
SetFont(
    FONTOBJ *pfo,
    STROBJ  *pstro)
{
    m_pstro = pstro;
    m_pfo   = pfo;
    m_pifi  = FONTOBJ_pifi(pfo);

    if (pfo->flFontType & DEVICEFONT_FONTTYPE)
    {
        m_FontType = eXLDevice;
    }
    else
    {
        // !!Need to consider font substitution.
        m_FontType = eXLTrueType;
    }
    return S_OK;
}

HRESULT
XLFont::
SetTTDownloadType(
    XLTrueTypeFontType TTType)
{
    m_TrueTypeType = TTType;
    return S_OK;
}

HRESULT
XLFont::
SetSubstitutionTable(
    TTSUBST_TABLE* pTable)
{
    m_pTTSUbTbl = pTable;
    return S_OK;
}


HRESULT
XLFont::
SetUFM(
    UNIFM_HDR *pUFM)
{
    m_pUFM = pUFM;
    return S_OK;
}

HRESULT
XLFont::
SetGTT(
    UNI_GLYPHSETDATA *pGTT)
{
    m_pGTT = pGTT;
    return S_OK;
}