Index: xfa/fgas/font/fgas_gefont.cpp |
diff --git a/xfa/fgas/font/fgas_gefont.cpp b/xfa/fgas/font/fgas_gefont.cpp |
index 1507fa4840a22c21e6ff185c22d390490ae77554..33d17489fa77012eadcf936ff87e88f6c8684419 100644 |
--- a/xfa/fgas/font/fgas_gefont.cpp |
+++ b/xfa/fgas/font/fgas_gefont.cpp |
@@ -34,10 +34,21 @@ CFGAS_GEFont* CFGAS_GEFont::LoadFont(const FX_WCHAR* pszFontFamily, |
} |
// static |
-CFGAS_GEFont* CFGAS_GEFont::LoadFont(CFX_Font* pExtFont, |
+CFGAS_GEFont* CFGAS_GEFont::LoadFont(CFX_Font* pExternalFont, |
IFGAS_FontMgr* pFontMgr) { |
CFGAS_GEFont* pFont = new CFGAS_GEFont(pFontMgr); |
- if (!pFont->LoadFontInternal(pExtFont)) { |
+ if (!pFont->LoadFontInternal(pExternalFont)) { |
+ pFont->Release(); |
+ return nullptr; |
+ } |
+ return pFont; |
+} |
+ |
+// static |
+CFGAS_GEFont* CFGAS_GEFont::LoadFont(std::unique_ptr<CFX_Font> pInternalFont, |
+ IFGAS_FontMgr* pFontMgr) { |
+ CFGAS_GEFont* pFont = new CFGAS_GEFont(pFontMgr); |
+ if (!pFont->LoadFontInternal(std::move(pInternalFont))) { |
pFont->Release(); |
return nullptr; |
} |
@@ -79,7 +90,7 @@ CFGAS_GEFont::CFGAS_GEFont(IFGAS_FontMgr* pFontMgr) |
m_pFont(nullptr), |
m_pFontMgr(pFontMgr), |
m_iRefCount(1), |
- m_bExtFont(FALSE), |
+ m_bExternalFont(false), |
m_pProvider(nullptr) { |
} |
@@ -92,7 +103,7 @@ CFGAS_GEFont::CFGAS_GEFont(const CFGAS_GEFont& src, uint32_t dwFontStyles) |
m_pFont(nullptr), |
m_pFontMgr(src.m_pFontMgr), |
m_iRefCount(1), |
- m_bExtFont(FALSE), |
+ m_bExternalFont(false), |
m_pProvider(nullptr) { |
ASSERT(src.m_pFont); |
m_pFont = new CFX_Font; |
@@ -117,7 +128,7 @@ CFGAS_GEFont::~CFGAS_GEFont() { |
m_SubstFonts.RemoveAll(); |
m_FontMapper.clear(); |
- if (!m_bExtFont) |
+ if (!m_bExternalFont) |
delete m_pFont; |
} |
@@ -209,12 +220,22 @@ FX_BOOL CFGAS_GEFont::LoadFontInternal(IFX_Stream* pFontStream, |
} |
#endif // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
-FX_BOOL CFGAS_GEFont::LoadFontInternal(CFX_Font* pExtFont) { |
- if (m_pFont || !pExtFont) { |
+FX_BOOL CFGAS_GEFont::LoadFontInternal(CFX_Font* pExternalFont) { |
+ if (m_pFont || !pExternalFont) |
return FALSE; |
- } |
- m_pFont = pExtFont; |
- m_bExtFont = TRUE; |
+ |
+ m_pFont = pExternalFont; |
+ m_bExternalFont = true; |
+ return InitFont(); |
+} |
+ |
+FX_BOOL CFGAS_GEFont::LoadFontInternal( |
+ std::unique_ptr<CFX_Font> pInternalFont) { |
+ if (m_pFont || !pInternalFont) |
+ return FALSE; |
+ |
+ m_pFont = pInternalFont.release(); |
+ m_bExternalFont = false; |
return InitFont(); |
} |