diff options
author | tsepez <tsepez@chromium.org> | 2017-01-05 12:57:00 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2017-01-05 12:57:00 -0800 |
commit | e647799f6a2f7f747c9f55d9f0ce08dcdfbd53f4 (patch) | |
tree | 282c502bd9f807f385d0cbcc1692bb475c8a4df1 /xfa/fxfa/xfa_fontmgr.h | |
parent | 6bb3b894488fd6f38c096b708980a9f08286ac5c (diff) | |
download | pdfium-e647799f6a2f7f747c9f55d9f0ce08dcdfbd53f4.tar.xz |
Properly ref-count CFGAS_GEFont with CFX_RetainPtr.
We worry about cyclical references, but no leaks found.
Review-Url: https://codereview.chromium.org/2609423003
Diffstat (limited to 'xfa/fxfa/xfa_fontmgr.h')
-rw-r--r-- | xfa/fxfa/xfa_fontmgr.h | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/xfa/fxfa/xfa_fontmgr.h b/xfa/fxfa/xfa_fontmgr.h index a6a5822e0d..f00b069ef0 100644 --- a/xfa/fxfa/xfa_fontmgr.h +++ b/xfa/fxfa/xfa_fontmgr.h @@ -9,7 +9,9 @@ #include <map> #include <memory> +#include <vector> +#include "core/fxcrt/cfx_retain_ptr.h" #include "core/fxcrt/fx_ext.h" #include "core/fxcrt/fx_system.h" #include "xfa/fgas/font/cfgas_fontmgr.h" @@ -30,17 +32,18 @@ class CXFA_DefFontMgr { CXFA_DefFontMgr(); ~CXFA_DefFontMgr(); - CFGAS_GEFont* GetFont(CXFA_FFDoc* hDoc, - const CFX_WideStringC& wsFontFamily, - uint32_t dwFontStyles, - uint16_t wCodePage = 0xFFFF); - CFGAS_GEFont* GetDefaultFont(CXFA_FFDoc* hDoc, - const CFX_WideStringC& wsFontFamily, - uint32_t dwFontStyles, - uint16_t wCodePage = 0xFFFF); + CFX_RetainPtr<CFGAS_GEFont> GetFont(CXFA_FFDoc* hDoc, + const CFX_WideStringC& wsFontFamily, + uint32_t dwFontStyles, + uint16_t wCodePage = 0xFFFF); + CFX_RetainPtr<CFGAS_GEFont> GetDefaultFont( + CXFA_FFDoc* hDoc, + const CFX_WideStringC& wsFontFamily, + uint32_t dwFontStyles, + uint16_t wCodePage = 0xFFFF); protected: - CFX_ArrayTemplate<CFGAS_GEFont*> m_CacheFonts; + std::vector<CFX_RetainPtr<CFGAS_GEFont>> m_CacheFonts; }; class CXFA_PDFFontMgr { @@ -48,22 +51,22 @@ class CXFA_PDFFontMgr { explicit CXFA_PDFFontMgr(CXFA_FFDoc* pDoc); ~CXFA_PDFFontMgr(); - CFGAS_GEFont* GetFont(const CFX_WideStringC& wsFontFamily, - uint32_t dwFontStyles, - CPDF_Font** pPDFFont, - bool bStrictMatch); - bool GetCharWidth(const CFGAS_GEFont* pFont, + CFX_RetainPtr<CFGAS_GEFont> GetFont(const CFX_WideStringC& wsFontFamily, + uint32_t dwFontStyles, + CPDF_Font** pPDFFont, + bool bStrictMatch); + bool GetCharWidth(const CFX_RetainPtr<CFGAS_GEFont>& pFont, FX_WCHAR wUnicode, bool bCharCode, int32_t* pWidth); - void SetFont(const CFGAS_GEFont* pFont, CPDF_Font* pPDFFont); + void SetFont(const CFX_RetainPtr<CFGAS_GEFont>& pFont, CPDF_Font* pPDFFont); protected: - CFGAS_GEFont* FindFont(const CFX_ByteString& strFamilyName, - bool bBold, - bool bItalic, - CPDF_Font** pPDFFont, - bool bStrictMatch); + CFX_RetainPtr<CFGAS_GEFont> FindFont(const CFX_ByteString& strFamilyName, + bool bBold, + bool bItalic, + CPDF_Font** pPDFFont, + bool bStrictMatch); CFX_ByteString PsNameToFontName(const CFX_ByteString& strPsName, bool bBold, bool bItalic); @@ -74,8 +77,8 @@ class CXFA_PDFFontMgr { bool bStrictMatch); CXFA_FFDoc* const m_pDoc; - std::map<const CFGAS_GEFont*, CPDF_Font*> m_FDE2PDFFont; - std::map<CFX_ByteString, CFGAS_GEFont*> m_FontMap; + std::map<CFX_RetainPtr<CFGAS_GEFont>, CPDF_Font*> m_FDE2PDFFont; + std::map<CFX_ByteString, CFX_RetainPtr<CFGAS_GEFont>> m_FontMap; }; class CXFA_FontMgr { @@ -83,10 +86,10 @@ class CXFA_FontMgr { CXFA_FontMgr(); ~CXFA_FontMgr(); - CFGAS_GEFont* GetFont(CXFA_FFDoc* hDoc, - const CFX_WideStringC& wsFontFamily, - uint32_t dwFontStyles, - uint16_t wCodePage = 0xFFFF); + CFX_RetainPtr<CFGAS_GEFont> GetFont(CXFA_FFDoc* hDoc, + const CFX_WideStringC& wsFontFamily, + uint32_t dwFontStyles, + uint16_t wCodePage = 0xFFFF); void LoadDocFonts(CXFA_FFDoc* hDoc); void ReleaseDocFonts(CXFA_FFDoc* hDoc); void SetDefFontMgr(std::unique_ptr<CXFA_DefFontMgr> pFontMgr); @@ -94,7 +97,7 @@ class CXFA_FontMgr { protected: std::unique_ptr<CXFA_DefFontMgr> m_pDefFontMgr; std::map<CXFA_FFDoc*, std::unique_ptr<CXFA_PDFFontMgr>> m_PDFFontMgrMap; - std::map<CFX_ByteString, CFGAS_GEFont*> m_FontMap; + std::map<CFX_ByteString, CFX_RetainPtr<CFGAS_GEFont>> m_FontMap; }; #endif // XFA_FXFA_XFA_FONTMGR_H_ |