// Copyright 2014 PDFium Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
#ifndef XFA_FONTMGR_H_ | |
#define XFA_FONTMGR_H_ | |
#include <map> | |
struct XFA_FONTINFO { | |
FX_DWORD dwFontNameHash; | |
const FX_WCHAR* pPsName; | |
const FX_WCHAR* pReplaceFont; | |
FX_WORD dwStyles; | |
FX_WORD wCodePage; | |
}; | |
class CXFA_DefFontMgr : public IXFA_FontMgr { | |
public: | |
CXFA_DefFontMgr() {} | |
~CXFA_DefFontMgr() override; | |
// IXFA_FontMgr: | |
IFX_Font* GetFont(IXFA_Doc* hDoc, | |
const CFX_WideStringC& wsFontFamily, | |
FX_DWORD dwFontStyles, | |
FX_WORD wCodePage = 0xFFFF) override; | |
IFX_Font* GetDefaultFont(IXFA_Doc* hDoc, | |
const CFX_WideStringC& wsFontFamily, | |
FX_DWORD dwFontStyles, | |
FX_WORD wCodePage = 0xFFFF) override; | |
protected: | |
CFX_PtrArray m_CacheFonts; | |
}; | |
class CXFA_PDFFontMgr : public IFX_FontProvider { | |
public: | |
CXFA_PDFFontMgr(CXFA_FFDoc* pDoc); | |
~CXFA_PDFFontMgr(); | |
IFX_Font* GetFont(const CFX_WideStringC& wsFontFamily, | |
FX_DWORD dwFontStyles, | |
CPDF_Font** pPDFFont, | |
FX_BOOL bStrictMatch = TRUE); | |
FX_BOOL GetCharWidth(IFX_Font* pFont, | |
FX_WCHAR wUnicode, | |
int32_t& iWidth, | |
FX_BOOL bCharCode); | |
CFX_MapPtrToPtr m_FDE2PDFFont; | |
protected: | |
IFX_Font* FindFont(CFX_ByteString strFamilyName, | |
FX_BOOL bBold, | |
FX_BOOL bItalic, | |
CPDF_Font** pPDFFont, | |
FX_BOOL bStrictMatch = TRUE); | |
CFX_ByteString PsNameToFontName(const CFX_ByteString& strPsName, | |
FX_BOOL bBold, | |
FX_BOOL bItalic); | |
FX_BOOL PsNameMatchDRFontName(const CFX_ByteStringC& bsPsName, | |
FX_BOOL bBold, | |
FX_BOOL bItalic, | |
const CFX_ByteString& bsDRFontName, | |
FX_BOOL bStrictMatch = TRUE); | |
CXFA_FFDoc* m_pDoc; | |
std::map<CFX_ByteString, IFX_Font*> m_FontMap; | |
}; | |
class CXFA_FontMgr { | |
public: | |
CXFA_FontMgr(); | |
~CXFA_FontMgr(); | |
IFX_Font* GetFont(IXFA_Doc* hDoc, | |
const CFX_WideStringC& wsFontFamily, | |
FX_DWORD dwFontStyles, | |
FX_WORD wCodePage = 0xFFFF); | |
void LoadDocFonts(IXFA_Doc* hDoc); | |
void ReleaseDocFonts(IXFA_Doc* hDoc); | |
void SetDefFontMgr(IXFA_FontMgr* pFontMgr); | |
protected: | |
void DelAllMgrMap(); | |
CFX_MapPtrToPtr m_PDFFontMgrArray; | |
IXFA_FontMgr* m_pDefFontMgr; | |
std::map<CFX_ByteString, IFX_Font*> m_FontMap; | |
}; | |
#endif // XFA_FONTMGR_H_ |