Index: xfa/fgas/font/cfgas_fontmgr.h |
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h |
index 0da84fd6e9301534afed78f9b26a76d3f3145ce1..c4030e76eeca752a10819d4930dd5552d5ba30e9 100644 |
--- a/xfa/fgas/font/cfgas_fontmgr.h |
+++ b/xfa/fgas/font/cfgas_fontmgr.h |
@@ -9,15 +9,16 @@ |
#include <map> |
#include <memory> |
+#include <set> |
#include <vector> |
+#include "core/fxcrt/cfx_retain_ptr.h" |
#include "core/fxcrt/fx_ext.h" |
#include "core/fxge/cfx_fontmapper.h" |
#include "core/fxge/fx_freetype.h" |
#include "core/fxge/ifx_systemfontinfo.h" |
#include "third_party/freetype/include/freetype/fttypes.h" |
#include "xfa/fgas/crt/fgas_stream.h" |
-#include "xfa/fgas/font/cfgas_fontmgr.h" |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
#include "xfa/fgas/crt/fgas_memory.h" |
@@ -35,9 +36,9 @@ |
#define FX_FONTSTYLE_ExactMatch 0x80000000 |
class CFX_FontSourceEnum_File; |
-class CFGAS_GEFont; |
class CXFA_PDFFontMgr; |
class CFGAS_FontMgr; |
+class CFGAS_GEFont; |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
#define FX_FONTMATCHPARA_MatchStyle 0x01 |
@@ -90,28 +91,30 @@ FX_LPEnumAllFonts FX_GetDefFontEnumerator(); |
class CFGAS_FontMgr { |
public: |
+ static std::unique_ptr<CFGAS_FontMgr> Create(FX_LPEnumAllFonts pEnumerator); |
+ |
explicit CFGAS_FontMgr(FX_LPEnumAllFonts pEnumerator); |
~CFGAS_FontMgr(); |
- static std::unique_ptr<CFGAS_FontMgr> Create(FX_LPEnumAllFonts pEnumerator); |
- |
- CFGAS_GEFont* GetFontByCodePage(uint16_t wCodePage, |
- uint32_t dwFontStyles, |
- const FX_WCHAR* pszFontFamily); |
- CFGAS_GEFont* GetFontByUnicode(FX_WCHAR wUnicode, |
- uint32_t dwFontStyles, |
- const FX_WCHAR* pszFontFamily); |
- CFGAS_GEFont* LoadFont(const FX_WCHAR* pszFontFamily, |
- uint32_t dwFontStyles, |
- uint16_t wCodePage); |
- void RemoveFont(CFGAS_GEFont* pFont); |
+ CFX_RetainPtr<CFGAS_GEFont> GetFontByCodePage(uint16_t wCodePage, |
+ uint32_t dwFontStyles, |
+ const FX_WCHAR* pszFontFamily); |
+ CFX_RetainPtr<CFGAS_GEFont> GetFontByUnicode(FX_WCHAR wUnicode, |
+ uint32_t dwFontStyles, |
+ const FX_WCHAR* pszFontFamily); |
+ CFX_RetainPtr<CFGAS_GEFont> LoadFont(const FX_WCHAR* pszFontFamily, |
+ uint32_t dwFontStyles, |
+ uint16_t wCodePage); |
+ void RemoveFont(const CFX_RetainPtr<CFGAS_GEFont>& pFont); |
private: |
- CFGAS_GEFont* LoadFont(CFGAS_GEFont* pSrcFont, |
- uint32_t dwFontStyles, |
- uint16_t wCodePage); |
- void RemoveFont(CFX_MapPtrToPtr& fontMap, CFGAS_GEFont* pFont); |
- FX_FONTDESCRIPTOR const* FindFont(const FX_WCHAR* pszFontFamily, |
+ CFX_RetainPtr<CFGAS_GEFont> LoadFont( |
+ const CFX_RetainPtr<CFGAS_GEFont>& pSrcFont, |
+ uint32_t dwFontStyles, |
+ uint16_t wCodePage); |
+ void RemoveFont(std::map<uint32_t, CFX_RetainPtr<CFGAS_GEFont>>* pFontMap, |
+ const CFX_RetainPtr<CFGAS_GEFont>& pFont); |
+ const FX_FONTDESCRIPTOR* FindFont(const FX_WCHAR* pszFontFamily, |
uint32_t dwFontStyles, |
uint32_t dwMatchFlags, |
uint16_t wCodePage, |
@@ -120,13 +123,13 @@ class CFGAS_FontMgr { |
FX_LPEnumAllFonts m_pEnumerator; |
CFX_FontDescriptors m_FontFaces; |
- CFX_ArrayTemplate<CFGAS_GEFont*> m_Fonts; |
- CFX_MapPtrToPtr m_CPFonts; |
- CFX_MapPtrToPtr m_FamilyFonts; |
- CFX_MapPtrToPtr m_UnicodeFonts; |
- CFX_MapPtrToPtr m_BufferFonts; |
- CFX_MapPtrToPtr m_StreamFonts; |
- CFX_MapPtrToPtr m_DeriveFonts; |
+ std::vector<CFX_RetainPtr<CFGAS_GEFont>> m_Fonts; |
+ std::map<uint32_t, CFX_RetainPtr<CFGAS_GEFont>> m_CPFonts; |
+ std::map<uint32_t, CFX_RetainPtr<CFGAS_GEFont>> m_FamilyFonts; |
+ std::map<uint32_t, CFX_RetainPtr<CFGAS_GEFont>> m_UnicodeFonts; |
+ std::map<uint32_t, CFX_RetainPtr<CFGAS_GEFont>> m_BufferFonts; |
+ std::map<uint32_t, CFX_RetainPtr<CFGAS_GEFont>> m_StreamFonts; |
+ std::map<uint32_t, CFX_RetainPtr<CFGAS_GEFont>> m_DeriveFonts; |
}; |
#else // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
@@ -191,24 +194,22 @@ class CFX_FontSourceEnum_File { |
class CFGAS_FontMgr { |
public: |
- explicit CFGAS_FontMgr(CFX_FontSourceEnum_File* pFontEnum); |
- ~CFGAS_FontMgr(); |
static std::unique_ptr<CFGAS_FontMgr> Create( |
CFX_FontSourceEnum_File* pFontEnum); |
- CFGAS_GEFont* GetFontByCodePage(uint16_t wCodePage, |
- uint32_t dwFontStyles, |
- const FX_WCHAR* pszFontFamily); |
- CFGAS_GEFont* GetFontByUnicode(FX_WCHAR wUnicode, |
- uint32_t dwFontStyles, |
- const FX_WCHAR* pszFontFamily); |
- void RemoveFont(CFGAS_GEFont* pFont); |
- |
- inline CFGAS_GEFont* LoadFont(const FX_WCHAR* pszFontFamily, |
- uint32_t dwFontStyles, |
- uint16_t wCodePage) { |
- return GetFontByCodePage(wCodePage, dwFontStyles, pszFontFamily); |
- } |
+ explicit CFGAS_FontMgr(CFX_FontSourceEnum_File* pFontEnum); |
+ ~CFGAS_FontMgr(); |
+ |
+ CFX_RetainPtr<CFGAS_GEFont> GetFontByCodePage(uint16_t wCodePage, |
+ uint32_t dwFontStyles, |
+ const FX_WCHAR* pszFontFamily); |
+ CFX_RetainPtr<CFGAS_GEFont> GetFontByUnicode(FX_WCHAR wUnicode, |
+ uint32_t dwFontStyles, |
+ const FX_WCHAR* pszFontFamily); |
+ CFX_RetainPtr<CFGAS_GEFont> LoadFont(const FX_WCHAR* pszFontFamily, |
+ uint32_t dwFontStyles, |
+ uint16_t wCodePage); |
+ void RemoveFont(const CFX_RetainPtr<CFGAS_GEFont>& pFont); |
dsinclair
2017/01/05 17:01:20
This signature is a bit confusing. Will the retain
Tom Sepez
2017/01/05 17:35:49
RemoveFont removes the font from the Manager. Sin
|
private: |
bool EnumFonts(); |
@@ -222,7 +223,8 @@ class CFGAS_FontMgr { |
void GetUSBCSB(FXFT_Face pFace, uint32_t* USB, uint32_t* CSB); |
uint32_t GetFlags(FXFT_Face pFace); |
bool VerifyUnicode(CFX_FontDescriptor* pDesc, FX_WCHAR wcUnicode); |
- bool VerifyUnicode(CFGAS_GEFont* pFont, FX_WCHAR wcUnicode); |
+ bool VerifyUnicode(const CFX_RetainPtr<CFGAS_GEFont>& pFont, |
+ FX_WCHAR wcUnicode); |
int32_t IsPartName(const CFX_WideString& Name1, const CFX_WideString& Name2); |
int32_t MatchFonts(CFX_FontDescriptorInfos& MatchedFonts, |
uint16_t wCodePage, |
@@ -234,9 +236,9 @@ class CFGAS_FontMgr { |
uint32_t dwFontStyles, |
const CFX_WideString& FontName, |
FX_WCHAR wcUnicode = 0xFFFE); |
- CFGAS_GEFont* LoadFont(const CFX_WideString& wsFaceName, |
- int32_t iFaceIndex, |
- int32_t* pFaceCount); |
+ CFX_RetainPtr<CFGAS_GEFont> LoadFont(const CFX_WideString& wsFaceName, |
+ int32_t iFaceIndex, |
+ int32_t* pFaceCount); |
FXFT_Face LoadFace(const CFX_RetainPtr<IFX_SeekableReadStream>& pFontStream, |
int32_t iFaceIndex); |
CFX_RetainPtr<IFX_SeekableReadStream> CreateFontStream( |
@@ -248,12 +250,12 @@ class CFGAS_FontMgr { |
CFX_FontDescriptors m_InstalledFonts; |
CFX_MapPtrTemplate<uint32_t, CFX_FontDescriptorInfos*> m_Hash2CandidateList; |
- CFX_MapPtrTemplate<uint32_t, CFX_ArrayTemplate<CFGAS_GEFont*>*> m_Hash2Fonts; |
- std::map<CFGAS_GEFont*, CFX_RetainPtr<IFX_SeekableReadStream> > |
+ std::map<uint32_t, std::vector<CFX_RetainPtr<CFGAS_GEFont>>> m_Hash2Fonts; |
+ std::map<CFX_RetainPtr<CFGAS_GEFont>, CFX_RetainPtr<IFX_SeekableReadStream>> |
m_IFXFont2FileRead; |
- CFX_MapPtrTemplate<FX_WCHAR, CFGAS_GEFont*> m_FailedUnicodes2Nullptr; |
+ std::set<FX_WCHAR> m_FailedUnicodesSet; |
CFX_FontSourceEnum_File* const m_pFontSource; |
}; |
-#endif |
+#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
#endif // XFA_FGAS_FONT_CFGAS_FONTMGR_H_ |