diff options
-rw-r--r-- | xfa/fgas/font/cfgas_gefont.cpp | 18 | ||||
-rw-r--r-- | xfa/fgas/font/cfgas_gefont.h | 7 |
2 files changed, 8 insertions, 17 deletions
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp index 1c3d88beab..6f33eb50fe 100644 --- a/xfa/fgas/font/cfgas_gefont.cpp +++ b/xfa/fgas/font/cfgas_gefont.cpp @@ -55,11 +55,7 @@ RetainPtr<CFGAS_GEFont> CFGAS_GEFont::LoadFont( CFGAS_GEFont::CFGAS_GEFont(CFGAS_FontMgr* pFontMgr) : m_pFontMgr(pFontMgr) {} -CFGAS_GEFont::~CFGAS_GEFont() { - m_pFontEncoding.reset(); // Has an UnownedPtr to |m_pFont|. - if (!m_bExternalFont) - delete m_pFont; -} +CFGAS_GEFont::~CFGAS_GEFont() = default; #if _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_ bool CFGAS_GEFont::LoadFontInternal(const wchar_t* pszFontFamily, @@ -73,7 +69,7 @@ bool CFGAS_GEFont::LoadFontInternal(const wchar_t* pszFontFamily, int32_t iWeight = FontStyleIsBold(dwFontStyles) ? FXFONT_FW_BOLD : FXFONT_FW_NORMAL; - m_pFont = new CFX_Font; + m_pFont = pdfium::MakeUnique<CFX_Font>(); if (FontStyleIsItalic(dwFontStyles) && FontStyleIsBold(dwFontStyles)) csFontFamily += ",BoldItalic"; else if (FontStyleIsBold(dwFontStyles)) @@ -83,9 +79,7 @@ bool CFGAS_GEFont::LoadFontInternal(const wchar_t* pszFontFamily, m_pFont->LoadSubst(csFontFamily, true, dwFontStyles, iWeight, 0, wCodePage, false); - if (!m_pFont->GetFace()) - return false; - return InitFont(); + return m_pFont->GetFace() && InitFont(); } #endif // _FX_PLATFORM_ == _FX_PLATFORM_WINDOWS_ @@ -94,7 +88,6 @@ bool CFGAS_GEFont::LoadFontInternal(CFX_Font* pExternalFont) { return false; m_pFont = pExternalFont; - m_bExternalFont = true; return InitFont(); } @@ -102,8 +95,7 @@ bool CFGAS_GEFont::LoadFontInternal(std::unique_ptr<CFX_Font> pInternalFont) { if (m_pFont || !pInternalFont) return false; - m_pFont = pInternalFont.release(); - m_bExternalFont = false; + m_pFont = std::move(pInternalFont); return InitFont(); } @@ -114,7 +106,7 @@ bool CFGAS_GEFont::InitFont() { if (m_pFontEncoding) return true; - m_pFontEncoding = FX_CreateFontEncodingEx(m_pFont, FXFM_ENCODING_NONE); + m_pFontEncoding = FX_CreateFontEncodingEx(m_pFont.Get(), FXFM_ENCODING_NONE); return !!m_pFontEncoding; } diff --git a/xfa/fgas/font/cfgas_gefont.h b/xfa/fgas/font/cfgas_gefont.h index 407a232595..08164f7d5f 100644 --- a/xfa/fgas/font/cfgas_gefont.h +++ b/xfa/fgas/font/cfgas_gefont.h @@ -13,8 +13,8 @@ #include <vector> #include "core/fxcrt/fx_memory.h" +#include "core/fxcrt/maybe_owned.h" #include "core/fxcrt/retain_ptr.h" -#include "core/fxcrt/unowned_ptr.h" #include "xfa/fgas/font/cfgas_fontmgr.h" #include "xfa/fgas/font/cfgas_pdffontmgr.h" @@ -45,7 +45,7 @@ class CFGAS_GEFont final : public Retainable { bool GetBBox(FX_RECT* bbox); RetainPtr<CFGAS_GEFont> GetSubstFont(int32_t iGlyphIndex); - CFX_Font* GetDevFont() const { return m_pFont; } + CFX_Font* GetDevFont() const { return m_pFont.Get(); } void SetLogicalFontStyle(uint32_t dwLogFontStyle) { m_bUseLogFontStyle = true; @@ -71,9 +71,8 @@ class CFGAS_GEFont final : public Retainable { WideString GetFamilyName() const; bool m_bUseLogFontStyle = false; - bool m_bExternalFont = false; uint32_t m_dwLogFontStyle = 0; - CFX_Font* m_pFont = nullptr; + MaybeOwned<CFX_Font> m_pFont; // Must come before |m_pFontEncoding|. CFGAS_FontMgr::ObservedPtr const m_pFontMgr; std::unique_ptr<CFX_UnicodeEncodingEx> m_pFontEncoding; std::map<wchar_t, int32_t> m_CharWidthMap; |