| 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..d3be9dcb48a44ac17de9d0651c0a680b30112304 100644
|
| --- a/xfa/fgas/font/fgas_gefont.cpp
|
| +++ b/xfa/fgas/font/fgas_gefont.cpp
|
| @@ -77,26 +77,29 @@ CFGAS_GEFont::CFGAS_GEFont(IFGAS_FontMgr* pFontMgr)
|
| m_dwLogFontStyle(0),
|
| #endif
|
| m_pFont(nullptr),
|
| + m_pSrcFont(nullptr),
|
| m_pFontMgr(pFontMgr),
|
| m_iRefCount(1),
|
| m_bExtFont(FALSE),
|
| m_pProvider(nullptr) {
|
| }
|
|
|
| -CFGAS_GEFont::CFGAS_GEFont(const CFGAS_GEFont& src, uint32_t dwFontStyles)
|
| +CFGAS_GEFont::CFGAS_GEFont(CFGAS_GEFont* src, uint32_t dwFontStyles)
|
| :
|
| #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
|
| m_bUseLogFontStyle(FALSE),
|
| m_dwLogFontStyle(0),
|
| #endif
|
| m_pFont(nullptr),
|
| - m_pFontMgr(src.m_pFontMgr),
|
| + m_pSrcFont(src),
|
| + m_pFontMgr(src->m_pFontMgr),
|
| m_iRefCount(1),
|
| m_bExtFont(FALSE),
|
| m_pProvider(nullptr) {
|
| - ASSERT(src.m_pFont);
|
| + ASSERT(m_pSrcFont->m_pFont);
|
| + m_pSrcFont->Retain();
|
| m_pFont = new CFX_Font;
|
| - m_pFont->LoadClone(src.m_pFont);
|
| + m_pFont->LoadClone(m_pSrcFont->m_pFont);
|
| CFX_SubstFont* pSubst = m_pFont->GetSubstFont();
|
| if (!pSubst) {
|
| pSubst = new CFX_SubstFont;
|
| @@ -119,6 +122,11 @@ CFGAS_GEFont::~CFGAS_GEFont() {
|
|
|
| if (!m_bExtFont)
|
| delete m_pFont;
|
| +
|
| + // If it is a shallow copy of another source font,
|
| + // decrease the refcount of the source font.
|
| + if (m_pSrcFont)
|
| + m_pSrcFont->Release();
|
| }
|
|
|
| void CFGAS_GEFont::Release() {
|
| @@ -239,7 +247,7 @@ FX_BOOL CFGAS_GEFont::InitFont() {
|
| CFGAS_GEFont* CFGAS_GEFont::Derive(uint32_t dwFontStyles, uint16_t wCodePage) {
|
| if (GetFontStyles() == dwFontStyles)
|
| return Retain();
|
| - return new CFGAS_GEFont(*this, dwFontStyles);
|
| + return new CFGAS_GEFont(this, dwFontStyles);
|
| }
|
|
|
| void CFGAS_GEFont::GetFamilyName(CFX_WideString& wsFamily) const {
|
|
|