зеркало из https://github.com/mozilla/gecko-dev.git
192 строки
5.9 KiB
C++
192 строки
5.9 KiB
C++
/* -*- 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
|