home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
- #ifndef __NSFONT_H__
- #define __NSFONT_H__
-
- #include "nf.h"
-
- /*
- * Uses:
- * FontBrokerInterfaces (nffbc, nffbp, nffbu)
- */
- #include "Mnffbc.h"
- #include "Mnffbp.h"
- #include "Mnffbu.h"
- #include "Mnffp.h"
-
- #include "Mnffmi.h" // for nffmi_GetValue() nffmi_release()
-
- #include "Mwinfp.h" // in ns\modules\libfont\src\_jmc
- #include <windows.h> // for CDC
-
- enum FontModuleReturnCode {
- FONTERR_OK = 0 ,
- FONTERR_ConvertDCFailed,
- FONTERR_CreateFontMatchInfoFailed,
- FONTERR_CreateObjectFail,
- FONTERR_GetInterfacesFail,
- FONTERR_nffbc_LookupFontFailed,
- FONTERR_NotInitiated,
- FONTERR_RegisterFontDisplayerFail,
-
- };
-
-
-
- class CNetscapeFontModule : public CObject
- {
- public :
- CNetscapeFontModule::CNetscapeFontModule();
- CNetscapeFontModule::~CNetscapeFontModule();
-
- // must be called first
- int CNetscapeFontModule::InitFontModule();
-
- // error handling
- int getLastError() { return(m_lastError); }
-
- // general service functions
- struct nfrc *CNetscapeFontModule::convertDC( HDC hDC );
- struct nffbu *getBrokerUtilityInterface() { return( m_pFontBrokerUtilityInterface ); }
- struct nffbc *getFontBrokerConsumerInterface(){ return(m_FontBrokerConsumerInterface); }
-
- struct nffmi **CNetscapeFontModule::CreateFMIList(HDC hDC );
- int CNetscapeFontModule::FreeFMIList( struct nffmi ** fmiList);
-
- int CNetscapeFontModule::releaseAllFontResource(MWContext *pContext);
- int CNetscapeFontModule::LookupFailed(MWContext *pContext, struct nfrc *prc, struct nffmi * pfmi);
- int CNetscapeFontModule::WebfontsNeedReload( MWContext *pContext );
-
-
- private :
- int createObjects();
- int getInterfaces();
- int CNetscapeFontModule::registerFontDisplayer();
- int CNetscapeFontModule::releaseDisplayer();
- int CNetscapeFontModule::UpdateWorkingRC( HDC hDC );
-
- int m_fontModuleStatus;
- int m_lastError;
- enum fontModuleStatus {
- FMSTATUS_NULL = 0,
- FMSTATUS_IntialOK,
- };
-
- // helpers
- public :
- struct nffmi* CNetscapeFontModule::createFMIfromLOGFONTWithAttr( LOGFONT *pLogFont,
- int pixelPerPoint, int extraAttributes );
-
- // the following 3 helpers are identical as in producers\win\winfp.c
- char * CNetscapeFontModule::convertToFmiCharset( BYTE charSetID ); // used to be LOGFONT *pLogFont
- int CNetscapeFontModule::convertToFmiStyle( LOGFONT *pLogFont );
- int CNetscapeFontModule::convertToFmiPitch( LOGFONT *pLogFont );
- char *CNetscapeFontModule::converGenericFont(char *pExtracted);
-
- public :
- struct cfb *m_pGlobalFontBrokerObject; /* The global FontBroker Object */
-
- struct nffbp *m_pFontBrokerDisplayerInterface; /* The FontBroker Displayer interface */
- struct nffbc *m_FontBrokerConsumerInterface; /* The FontBroker Consumer interface */
- struct nffbu *m_pFontBrokerUtilityInterface; /* The FontBroker Utility interface */
-
- //struct cfp *m_pDisplayerObj; /* The global FontDisplayer Object */
- struct nffp *m_pFontDisplayerInterface; /* The FontDisplayer interface */
-
- private :
- struct nfrc *m_workingRC; // avoid creating rc every time
-
- }; // class CNetscapeFontModule
-
-
- ///////////////////////////////////////////////////////////////////////////////////
- // class Cyafont : yet another font class
- class CyaFont : public CObject
- {
- public :
- // the standard stuff
- CyaFont::CyaFont();
- CyaFont::~CyaFont();
- BOOL CyaFont::IsEmptyFont() { return( m_pRenderableFont==NULL?TRUE:FALSE ); }
-
- // initializer
- int CyaFont::CreateNetscapeFontWithFMI(
- MWContext *pContext,
- HDC hDC, struct nffmi *pWantedFmi, double fontHeight );
- int CyaFont::CreateNetscapeFont(
- MWContext *pContext,
- HDC hDC,
- const char *FmiName,
- const char *FmiCharset,
- const char *FmiEncoding,
- int FmiWeight,
- int FmiPitch,
- int FmiStyle,
- int FmiUnderline,
- int FmiOverstrike,
- int FmiPixelPerPointX,
- int FmiPixelPerPointY,
- double fontHeight // not fmi field
- );
-
- // the following 2 interfaces are for a quick integration with Navigator
- // new code should use lower level interface.
- int CyaFont::CreateNetscapeFontWithLOGFONT(
- MWContext *pContext,
- HDC hDC, LOGFONT *pLogFont, int extraAttributes = 0 );
-
- // service
- int CyaFont::PrepareDrawText( HDC hDC );
- int CyaFont::EndDrawText( HDC hDC );
- int drawText( HDC hDC,int xx, int yy, char *str, int strLen);
-
- // attributes
- int CyaFont::IsFixedFont() { return( m_pitch == nfSpacingProportional )? 0 : 1; } // return 1 for nfSpacingDontCare
- int CyaFont::GetAscent();
- int CyaFont::GetDescent();
- int CyaFont::GetMeanWidth();
- int CyaFont::GetMaxWidth();
- int CyaFont::GetHeight();
- jint CyaFont::MeasureTextWidth( HDC hDC, jbyte *str, jsize strLen, jint *charLocs, jsize charLoc_len );
- BOOL MeasureTextSize( HDC hDC, jbyte *str, jsize strLen, jint *charLocs, jsize charLoc_len, LPSIZE lpSize);
- int CyaFont::CalculateMeanWidth( HDC hDC, BOOL bFixed );
-
-
- private :
- // helper functions
- int CyaFont::UpdateDisplayRC( HDC hDC );
-
-
- private :
- struct nfrf *m_pRenderableFont;
- struct nfrc *m_displayRC; // avoid creating rc every time.
- #ifndef NO_PERFORMANCE_HACK
- struct rc_data *m_displayRCData; // For performance of measure and draw
- #endif /* NO_PERFORMANCE_HACK */
- int m_iMeanWidth;
- int m_pitch;
-
- #ifdef DEBUG_aliu
- int selectFlag;
- #endif
-
- }; // class CyaFont
-
- #endif
-