Make CPDF_Font member variables protected. Change-Id: I5d452ea907f4d243645ddae3512776096a827522 Reviewed-on: https://pdfium-review.googlesource.com/4872 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Nicolás Peña <npm@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp index 53186da..193ee4a 100644 --- a/core/fpdfapi/font/cpdf_font.cpp +++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -290,6 +290,7 @@ return width; } +// static CPDF_Font* CPDF_Font::GetStockFont(CPDF_Document* pDoc, const CFX_ByteStringC& name) { CFX_ByteString fontname(name); @@ -469,3 +470,9 @@ return glyph; } + +CFX_Font* CPDF_Font::GetFontFallback(int position) { + if (position < 0 || static_cast<size_t>(position) >= m_FontFallbacks.size()) + return nullptr; + return m_FontFallbacks[position].get(); +}
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h index de29db6..be1d913 100644 --- a/core/fpdfapi/font/cpdf_font.h +++ b/core/fpdfapi/font/cpdf_font.h
@@ -78,9 +78,10 @@ virtual int GetCharWidthF(uint32_t charcode) = 0; virtual FX_RECT GetCharBBox(uint32_t charcode) = 0; - CPDF_Document* m_pDocument; - CFX_Font m_Font; - std::vector<std::unique_ptr<CFX_Font>> m_FontFallbacks; + CPDF_Document* GetDocument() { return m_pDocument; } + CFX_Font* GetFont() { return &m_Font; } + const CFX_Font* GetFont() const { return &m_Font; } + CFX_Font* GetFontFallback(int position); protected: CPDF_Font(); @@ -100,6 +101,9 @@ const std::vector<CFX_ByteString>& charnames, int charcode); + CPDF_Document* m_pDocument; + CFX_Font m_Font; + std::vector<std::unique_ptr<CFX_Font>> m_FontFallbacks; CFX_ByteString m_BaseFont; CFX_RetainPtr<CPDF_StreamAcc> m_pFontFile; CPDF_Dictionary* m_pFontDict;
diff --git a/core/fpdfapi/page/cpdf_textstate.cpp b/core/fpdfapi/page/cpdf_textstate.cpp index ed90bd3..6dbad55 100644 --- a/core/fpdfapi/page/cpdf_textstate.cpp +++ b/core/fpdfapi/page/cpdf_textstate.cpp
@@ -134,7 +134,7 @@ if (pPageData && m_pFont && !pPageData->IsForceClear()) pPageData->ReleaseFont(m_pFont->GetFontDict()); - m_pDocument = pFont ? pFont->m_pDocument : nullptr; + m_pDocument = pFont ? pFont->GetDocument() : nullptr; m_pFont = pFont; }
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index d41561c..0b30474 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -66,7 +66,7 @@ namespace { void ReleaseCachedType3(CPDF_Type3Font* pFont) { - CPDF_Document* pDoc = pFont->m_pDocument; + CPDF_Document* pDoc = pFont->GetDocument(); if (!pDoc) return; @@ -1799,7 +1799,7 @@ CFX_RetainPtr<CPDF_Type3Cache> CPDF_RenderStatus::GetCachedType3( CPDF_Type3Font* pFont) { - CPDF_Document* pDoc = pFont->m_pDocument; + CPDF_Document* pDoc = pFont->GetDocument(); if (!pDoc) return nullptr; @@ -2000,10 +2000,9 @@ CharPosList.Load(textobj->m_CharCodes, textobj->m_CharPos, pFont, font_size); for (uint32_t i = 0; i < CharPosList.m_nChars; i++) { FXTEXT_CHARPOS& charpos = CharPosList.m_pCharPos[i]; - auto* font = - charpos.m_FallbackFontPosition == -1 - ? &pFont->m_Font - : pFont->m_FontFallbacks[charpos.m_FallbackFontPosition].get(); + auto* font = charpos.m_FallbackFontPosition == -1 + ? pFont->GetFont() + : pFont->GetFontFallback(charpos.m_FallbackFontPosition); const CFX_PathData* pPath = font->LoadGlyphPath(charpos.m_GlyphIndex, charpos.m_FontCharWidth); if (!pPath)
diff --git a/core/fpdfapi/render/cpdf_textrenderer.cpp b/core/fpdfapi/render/cpdf_textrenderer.cpp index c45c1ef..83e6147 100644 --- a/core/fpdfapi/render/cpdf_textrenderer.cpp +++ b/core/fpdfapi/render/cpdf_textrenderer.cpp
@@ -15,6 +15,14 @@ #include "core/fxge/cfx_pathdata.h" #include "core/fxge/cfx_renderdevice.h" +namespace { + +CFX_Font* GetFont(CPDF_Font* pFont, int32_t position) { + return position == -1 ? pFont->GetFont() : pFont->GetFontFallback(position); +} + +} // namespace + // static bool CPDF_TextRenderer::DrawTextPath(CFX_RenderDevice* pDevice, const std::vector<uint32_t>& charCodes, @@ -40,9 +48,8 @@ int32_t curFontPosition = CharPosList.m_pCharPos[i].m_FallbackFontPosition; if (fontPosition == curFontPosition) continue; - auto* font = fontPosition == -1 - ? &pFont->m_Font - : pFont->m_FontFallbacks[fontPosition].get(); + + CFX_Font* font = GetFont(pFont, fontPosition); if (!pDevice->DrawTextPath(i - startIndex, CharPosList.m_pCharPos + startIndex, font, font_size, pText2User, pUser2Device, pGraphState, @@ -52,8 +59,7 @@ fontPosition = curFontPosition; startIndex = i; } - auto* font = fontPosition == -1 ? &pFont->m_Font - : pFont->m_FontFallbacks[fontPosition].get(); + CFX_Font* font = GetFont(pFont, fontPosition); if (!pDevice->DrawTextPath(CharPosList.m_nChars - startIndex, CharPosList.m_pCharPos + startIndex, font, font_size, pText2User, pUser2Device, pGraphState, @@ -145,9 +151,8 @@ int32_t curFontPosition = CharPosList.m_pCharPos[i].m_FallbackFontPosition; if (fontPosition == curFontPosition) continue; - auto* font = fontPosition == -1 - ? &pFont->m_Font - : pFont->m_FontFallbacks[fontPosition].get(); + + CFX_Font* font = GetFont(pFont, fontPosition); if (!pDevice->DrawNormalText( i - startIndex, CharPosList.m_pCharPos + startIndex, font, font_size, pText2Device, fill_argb, FXGE_flags)) { @@ -156,8 +161,7 @@ fontPosition = curFontPosition; startIndex = i; } - auto* font = fontPosition == -1 ? &pFont->m_Font - : pFont->m_FontFallbacks[fontPosition].get(); + CFX_Font* font = GetFont(pFont, fontPosition); if (!pDevice->DrawNormalText(CharPosList.m_nChars - startIndex, CharPosList.m_pCharPos + startIndex, font, font_size, pText2Device, fill_argb,