Introduce CPDF_Document::{Page,Render}DataIface interfaces.
Another step closer to separating the Page, Render, and Parser
layers. Allows the document to manage objects about which it
otherwise need not have much knowledge.
Change-Id: Icf105c7fda61d0427ca319160a5763155ff1b2aa
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55670
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index 2ccd0c9..7eb1012 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -345,8 +345,8 @@
ByteString name = RealizeResource(pStream, "XObject");
if (bWasInline) {
- pImageObj->SetImage(
- m_pDocument->GetPageData()->GetImage(pStream->GetObjNum()));
+ auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
+ pImageObj->SetImage(pPageData->GetImage(pStream->GetObjNum()));
}
*buf << "/" << PDF_NameEncode(name) << " Do Q\n";
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 789656c..af712af 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -318,7 +318,8 @@
pDict->SetNewFor<CPDF_Reference>("FontDescriptor", pDoc.get(),
pDesc->GetObjNum());
- CPDF_Font* loadedFont = pDoc->GetPageData()->GetFont(pDict);
+ CPDF_Font* loadedFont =
+ CPDF_DocPageData::FromDocument(pDoc.get())->GetFont(pDict);
pTextObj->m_TextState.SetFont(loadedFont);
pTextObj->m_TextState.SetFontSize(15.5f);
pTextObj->SetText("I am indirect");
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index fa68614..3bcc522 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -53,7 +53,7 @@
CPDF_Font::~CPDF_Font() {
if (m_pFontFile) {
- auto* pPageData = m_pDocument->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
if (pPageData) {
pPageData->MaybePurgeFontFileStreamAcc(
m_pFontFile->GetStream()->AsStream());
@@ -209,13 +209,13 @@
if (!pFontFile)
return;
- m_pFontFile = m_pDocument->LoadFontFile(pFontFile);
+ auto* pData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
+ m_pFontFile = pData->GetFontFileStreamAcc(pFontFile);
if (!m_pFontFile)
return;
if (!m_Font.LoadEmbedded(m_pFontFile->GetSpan())) {
- m_pDocument->GetPageData()->MaybePurgeFontFileStreamAcc(
- m_pFontFile->GetStream()->AsStream());
+ pData->MaybePurgeFontFileStreamAcc(m_pFontFile->GetStream()->AsStream());
m_pFontFile = nullptr;
}
}
diff --git a/core/fpdfapi/page/cpdf_color.cpp b/core/fpdfapi/page/cpdf_color.cpp
index 6fbfae4..96804dc 100644
--- a/core/fpdfapi/page/cpdf_color.cpp
+++ b/core/fpdfapi/page/cpdf_color.cpp
@@ -35,7 +35,7 @@
CPDF_Pattern* pPattern =
pvalue->m_pCountedPattern ? pvalue->m_pCountedPattern->get() : nullptr;
if (pPattern) {
- CPDF_DocPageData* pPageData = pPattern->document()->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(pPattern->document());
if (pPageData)
pPageData->ReleasePattern(pPattern->pattern_obj());
}
@@ -85,7 +85,8 @@
CPDF_DocPageData* pDocPageData = nullptr;
PatternValue* pvalue = reinterpret_cast<PatternValue*>(m_pBuffer);
if (pvalue->m_pPattern) {
- pDocPageData = pvalue->m_pPattern->document()->GetPageData();
+ pDocPageData =
+ CPDF_DocPageData::FromDocument(pvalue->m_pPattern->document());
pDocPageData->ReleasePattern(pvalue->m_pPattern->pattern_obj());
}
pvalue->m_nComps = values.size();
@@ -96,7 +97,7 @@
pvalue->m_pCountedPattern = nullptr;
if (pPattern) {
if (!pDocPageData)
- pDocPageData = pPattern->document()->GetPageData();
+ pDocPageData = CPDF_DocPageData::FromDocument(pPattern->document());
pvalue->m_pCountedPattern =
pDocPageData->FindPatternPtr(pPattern->pattern_obj());
@@ -115,7 +116,7 @@
CPDF_Document* pDoc = m_pCS->GetDocument();
const CPDF_Array* pArray = m_pCS->GetArray();
if (pDoc && pArray) {
- m_pCS = pDoc->GetPageData()->GetCopiedColorSpace(pArray);
+ m_pCS = CPDF_DocPageData::FromDocument(pDoc)->GetCopiedColorSpace(pArray);
if (!m_pCS)
return *this;
}
@@ -129,8 +130,9 @@
if (!pPattern)
return *this;
- pValue->m_pPattern = pPattern->document()->GetPageData()->GetPattern(
- pPattern->pattern_obj(), false, pPattern->parent_matrix());
+ pValue->m_pPattern = CPDF_DocPageData::FromDocument(pPattern->document())
+ ->GetPattern(pPattern->pattern_obj(), false,
+ pPattern->parent_matrix());
return *this;
}
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index dcfd59d..a1497bd 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -854,7 +854,7 @@
if (m_pProfile && m_pDocument) {
const CPDF_Stream* pStream = m_pProfile->GetStream();
m_pProfile.Reset(); // Give up our reference first.
- auto* pPageData = m_pDocument->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
if (pPageData)
pPageData->MaybePurgeIccProfile(pStream);
}
@@ -876,7 +876,7 @@
return 0;
uint32_t nComponents = static_cast<uint32_t>(nDictComponents);
- m_pProfile = pDoc->GetPageData()->GetIccProfile(pStream);
+ m_pProfile = CPDF_DocPageData::FromDocument(pDoc)->GetIccProfile(pStream);
if (!m_pProfile)
return 0;
@@ -1090,7 +1090,7 @@
if (pBaseObj == m_pArray)
return 0;
- CPDF_DocPageData* pDocPageData = pDoc->GetPageData();
+ auto* pDocPageData = CPDF_DocPageData::FromDocument(pDoc);
m_pBaseCS = pDocPageData->GetColorSpaceGuarded(pBaseObj, nullptr, pVisited);
if (!m_pBaseCS)
return 0;
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index eb67fe1..8fe9250 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -23,7 +23,6 @@
#include "core/fpdfapi/page/cpdf_tilingpattern.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
-#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fpdfapi/parser/cpdf_name.h"
#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_reference.h"
@@ -157,11 +156,13 @@
} // namespace
-CPDF_DocPageData::CPDF_DocPageData(CPDF_Document* pPDFDoc)
- : m_bForceClear(false), m_pPDFDoc(pPDFDoc) {
- ASSERT(m_pPDFDoc);
+// static
+CPDF_DocPageData* CPDF_DocPageData::FromDocument(const CPDF_Document* pDoc) {
+ return static_cast<CPDF_DocPageData*>(pDoc->GetPageData());
}
+CPDF_DocPageData::CPDF_DocPageData() = default;
+
CPDF_DocPageData::~CPDF_DocPageData() {
Clear(false);
Clear(true);
@@ -249,7 +250,7 @@
}
}
std::unique_ptr<CPDF_Font> pFont =
- CPDF_Font::Create(m_pPDFDoc.Get(), pFontDict);
+ CPDF_Font::Create(GetDocument(), pFontDict);
if (!pFont)
return nullptr;
@@ -289,16 +290,16 @@
return fontData->AddRef();
}
- CPDF_Dictionary* pDict = m_pPDFDoc->NewIndirect<CPDF_Dictionary>();
+ CPDF_Dictionary* pDict = GetDocument()->NewIndirect<CPDF_Dictionary>();
pDict->SetNewFor<CPDF_Name>("Type", "Font");
pDict->SetNewFor<CPDF_Name>("Subtype", "Type1");
pDict->SetNewFor<CPDF_Name>("BaseFont", fontName);
if (pEncoding) {
pDict->SetFor("Encoding",
- pEncoding->Realize(m_pPDFDoc->GetByteStringPool()));
+ pEncoding->Realize(GetDocument()->GetByteStringPool()));
}
- std::unique_ptr<CPDF_Font> pFont = CPDF_Font::Create(m_pPDFDoc.Get(), pDict);
+ std::unique_ptr<CPDF_Font> pFont = CPDF_Font::Create(GetDocument(), pDict);
if (!pFont)
return nullptr;
@@ -406,7 +407,7 @@
return pdfium::WrapRetain(it->second.Get());
RetainPtr<CPDF_ColorSpace> pCS =
- CPDF_ColorSpace::Load(m_pPDFDoc.Get(), pArray, pVisited);
+ CPDF_ColorSpace::Load(GetDocument(), pArray, pVisited);
if (!pCS)
return nullptr;
@@ -443,7 +444,7 @@
std::unique_ptr<CPDF_Pattern> pPattern;
if (bShading) {
pPattern = pdfium::MakeUnique<CPDF_ShadingPattern>(
- m_pPDFDoc.Get(), pPatternObj, true, matrix);
+ GetDocument(), pPatternObj, true, matrix);
} else {
CPDF_Dictionary* pDict = pPatternObj->GetDict();
if (!pDict)
@@ -451,11 +452,11 @@
int type = pDict->GetIntegerFor("PatternType");
if (type == CPDF_Pattern::kTiling) {
- pPattern = pdfium::MakeUnique<CPDF_TilingPattern>(m_pPDFDoc.Get(),
+ pPattern = pdfium::MakeUnique<CPDF_TilingPattern>(GetDocument(),
pPatternObj, matrix);
} else if (type == CPDF_Pattern::kShading) {
pPattern = pdfium::MakeUnique<CPDF_ShadingPattern>(
- m_pPDFDoc.Get(), pPatternObj, false, matrix);
+ GetDocument(), pPatternObj, false, matrix);
} else {
return nullptr;
}
@@ -496,7 +497,7 @@
if (it != m_ImageMap.end())
return it->second;
- auto pImage = pdfium::MakeRetain<CPDF_Image>(m_pPDFDoc.Get(), dwStreamObjNum);
+ auto pImage = pdfium::MakeRetain<CPDF_Image>(GetDocument(), dwStreamObjNum);
m_ImageMap[dwStreamObjNum] = pImage;
return pImage;
}
@@ -620,7 +621,7 @@
CalculateFlags(pFont->IsBold(), pFont->IsItalic(), pFont->IsFixedWidth(),
false, false, charset == FX_CHARSET_Symbol);
- CPDF_Dictionary* pBaseDict = m_pPDFDoc->NewIndirect<CPDF_Dictionary>();
+ CPDF_Dictionary* pBaseDict = GetDocument()->NewIndirect<CPDF_Dictionary>();
pBaseDict->SetNewFor<CPDF_Name>("Type", "Font");
auto pEncoding = pdfium::MakeUnique<CFX_UnicodeEncoding>(pFont);
CPDF_Dictionary* pFontDict = pBaseDict;
@@ -684,10 +685,10 @@
}
}
CPDF_Dictionary* pFontDesc =
- ToDictionary(m_pPDFDoc->AddIndirectObject(CalculateFontDesc(
- m_pPDFDoc.Get(), basefont, flags, italicangle, pFont->GetAscent(),
+ ToDictionary(GetDocument()->AddIndirectObject(CalculateFontDesc(
+ GetDocument(), basefont, flags, italicangle, pFont->GetAscent(),
pFont->GetDescent(), std::move(pBBox), nStemV)));
- pFontDict->SetNewFor<CPDF_Reference>("FontDescriptor", m_pPDFDoc.Get(),
+ pFontDict->SetNewFor<CPDF_Reference>("FontDescriptor", GetDocument(),
pFontDesc->GetObjNum());
return GetFont(pBaseDict);
}
@@ -732,7 +733,7 @@
ptm->otmrcFontBox.right, ptm->otmrcFontBox.top};
FX_Free(tm_buf);
basefont.Replace(" ", "");
- CPDF_Dictionary* pBaseDict = m_pPDFDoc->NewIndirect<CPDF_Dictionary>();
+ CPDF_Dictionary* pBaseDict = GetDocument()->NewIndirect<CPDF_Dictionary>();
pBaseDict->SetNewFor<CPDF_Name>("Type", "Font");
CPDF_Dictionary* pFontDict = pBaseDict;
if (!bCJK) {
@@ -761,12 +762,13 @@
for (int i = 0; i < 4; i++)
pBBox->AddNew<CPDF_Number>(bbox[i]);
RetainPtr<CPDF_Dictionary> pFontDesc =
- CalculateFontDesc(m_pPDFDoc.Get(), basefont, flags, italicangle, ascend,
+ CalculateFontDesc(GetDocument(), basefont, flags, italicangle, ascend,
descend, std::move(pBBox), pLogFont->lfWeight / 5);
pFontDesc->SetNewFor<CPDF_Number>("CapHeight", capheight);
pFontDict->SetFor("FontDescriptor",
- m_pPDFDoc->AddIndirectObject(std::move(pFontDesc))
- ->MakeReference(m_pPDFDoc.Get()));
+ GetDocument()
+ ->AddIndirectObject(std::move(pFontDesc))
+ ->MakeReference(GetDocument()));
hFont = SelectObject(hDC, hFont);
DeleteObject(hFont);
DeleteDC(hDC);
@@ -784,7 +786,8 @@
if (i == FX_ArraySize(g_FX_CharsetUnicodes))
return i;
- CPDF_Dictionary* pEncodingDict = m_pPDFDoc->NewIndirect<CPDF_Dictionary>();
+ CPDF_Dictionary* pEncodingDict =
+ GetDocument()->NewIndirect<CPDF_Dictionary>();
pEncodingDict->SetNewFor<CPDF_Name>("BaseEncoding", "WinAnsiEncoding");
CPDF_Array* pArray = pEncodingDict->SetNewFor<CPDF_Array>("Differences");
@@ -795,7 +798,7 @@
ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
pArray->AddNew<CPDF_Name>(name.IsEmpty() ? ".notdef" : name);
}
- pBaseDict->SetNewFor<CPDF_Reference>("Encoding", m_pPDFDoc.Get(),
+ pBaseDict->SetNewFor<CPDF_Reference>("Encoding", GetDocument(),
pEncodingDict->GetObjNum());
return i;
}
@@ -805,7 +808,7 @@
int charset,
ByteString basefont,
std::function<void(wchar_t, wchar_t, CPDF_Array*)> Insert) {
- CPDF_Dictionary* pFontDict = m_pPDFDoc->NewIndirect<CPDF_Dictionary>();
+ CPDF_Dictionary* pFontDict = GetDocument()->NewIndirect<CPDF_Dictionary>();
ByteString cmap;
ByteString ordering;
int supplement = 0;
@@ -862,6 +865,6 @@
pCIDSysInfo->SetNewFor<CPDF_Number>("Supplement", supplement);
CPDF_Array* pArray = pBaseDict->SetNewFor<CPDF_Array>("DescendantFonts");
- pArray->AddNew<CPDF_Reference>(m_pPDFDoc.Get(), pFontDict->GetObjNum());
+ pArray->AddNew<CPDF_Reference>(GetDocument(), pFontDict->GetObjNum());
return pFontDict;
}
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h
index ff4b88b..674aa1f 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.h
+++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -11,6 +11,7 @@
#include <set>
#include "core/fpdfapi/page/cpdf_colorspace.h"
+#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/retain_ptr.h"
@@ -18,7 +19,6 @@
class CFX_Font;
class CPDF_Dictionary;
-class CPDF_Document;
class CPDF_Font;
class CPDF_FontEncoding;
class CPDF_IccProfile;
@@ -28,10 +28,12 @@
class CPDF_Stream;
class CPDF_StreamAcc;
-class CPDF_DocPageData {
+class CPDF_DocPageData : public CPDF_Document::PageDataIface {
public:
- explicit CPDF_DocPageData(CPDF_Document* pPDFDoc);
- ~CPDF_DocPageData();
+ static CPDF_DocPageData* FromDocument(const CPDF_Document* pDoc);
+
+ CPDF_DocPageData();
+ ~CPDF_DocPageData() override;
void Clear(bool bRelease);
bool IsForceClear() const { return m_bForceClear; }
@@ -101,8 +103,7 @@
ByteString basefont,
std::function<void(wchar_t, wchar_t, CPDF_Array*)> Insert);
- bool m_bForceClear;
- UnownedPtr<CPDF_Document> const m_pPDFDoc;
+ bool m_bForceClear = false;
std::map<ByteString, const CPDF_Stream*> m_HashProfileMap;
std::map<const CPDF_Object*, CPDF_ColorSpace::ObservedPtr> m_ColorSpaceMap;
std::map<const CPDF_Stream*, RetainPtr<CPDF_StreamAcc>> m_FontFileMap;
diff --git a/core/fpdfapi/page/cpdf_generalstate.cpp b/core/fpdfapi/page/cpdf_generalstate.cpp
index 7b9ea36..8d3bb7e 100644
--- a/core/fpdfapi/page/cpdf_generalstate.cpp
+++ b/core/fpdfapi/page/cpdf_generalstate.cpp
@@ -284,8 +284,8 @@
m_SMaskMatrix = that.m_SMaskMatrix;
if (that.m_pTransferFunc && that.m_pTransferFunc->GetDocument()) {
- CPDF_DocRenderData* pDocCache =
- that.m_pTransferFunc->GetDocument()->GetRenderData();
+ auto* pDocCache =
+ CPDF_DocRenderData::FromDocument(that.m_pTransferFunc->GetDocument());
if (pDocCache)
m_pTransferFunc = pDocCache->GetTransferFunc(m_pTR.Get());
}
@@ -293,8 +293,8 @@
CPDF_GeneralState::StateData::~StateData() {
if (m_pTransferFunc && m_pTransferFunc->GetDocument()) {
- CPDF_DocRenderData* pDocCache =
- m_pTransferFunc->GetDocument()->GetRenderData();
+ auto* pDocCache =
+ CPDF_DocRenderData::FromDocument(m_pTransferFunc->GetDocument());
if (pDocCache) {
m_pTransferFunc.Reset(); // Give up our reference first.
pDocCache->MaybePurgeTransferFunc(m_pTR.Get());
diff --git a/core/fpdfapi/page/cpdf_imageobject.cpp b/core/fpdfapi/page/cpdf_imageobject.cpp
index 2e98afc..ed12465 100644
--- a/core/fpdfapi/page/cpdf_imageobject.cpp
+++ b/core/fpdfapi/page/cpdf_imageobject.cpp
@@ -58,7 +58,7 @@
if (!m_pImage)
return;
- CPDF_DocPageData* pPageData = m_pImage->GetDocument()->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(m_pImage->GetDocument());
if (!pPageData)
return;
diff --git a/core/fpdfapi/page/cpdf_patterncs.cpp b/core/fpdfapi/page/cpdf_patterncs.cpp
index 312c9e9..cd8a921 100644
--- a/core/fpdfapi/page/cpdf_patterncs.cpp
+++ b/core/fpdfapi/page/cpdf_patterncs.cpp
@@ -26,7 +26,7 @@
if (pBaseCS == m_pArray)
return 0;
- CPDF_DocPageData* pDocPageData = pDoc->GetPageData();
+ auto* pDocPageData = CPDF_DocPageData::FromDocument(pDoc);
m_pBaseCS = pDocPageData->GetColorSpaceGuarded(pBaseCS, nullptr, pVisited);
if (!m_pBaseCS)
return 1;
diff --git a/core/fpdfapi/page/cpdf_shadingpattern.cpp b/core/fpdfapi/page/cpdf_shadingpattern.cpp
index b2d3957..f3da1ac 100644
--- a/core/fpdfapi/page/cpdf_shadingpattern.cpp
+++ b/core/fpdfapi/page/cpdf_shadingpattern.cpp
@@ -71,7 +71,7 @@
if (!pCSObj)
return false;
- CPDF_DocPageData* pDocPageData = document()->GetPageData();
+ auto* pDocPageData = CPDF_DocPageData::FromDocument(document());
m_pCS = pDocPageData->GetColorSpace(pCSObj, nullptr);
// The color space is required and cannot be a Pattern space, according to the
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 9d6f5c4..b3f36af 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -807,13 +807,16 @@
pdfium::MakeUnique<CPDF_ImageObject>(GetCurrentStreamIndex());
pImageObj->SetImage(
pdfium::MakeRetain<CPDF_Image>(m_pDocument.Get(), std::move(pStream)));
+
return AddImageObject(std::move(pImageObj));
}
CPDF_ImageObject* CPDF_StreamContentParser::AddImage(uint32_t streamObjNum) {
auto pImageObj =
pdfium::MakeUnique<CPDF_ImageObject>(GetCurrentStreamIndex());
- pImageObj->SetImage(m_pDocument->GetPageData()->GetImage(streamObjNum));
+ pImageObj->SetImage(CPDF_DocPageData::FromDocument(m_pDocument.Get())
+ ->GetImage(streamObjNum));
+
return AddImageObject(std::move(pImageObj));
}
@@ -824,8 +827,8 @@
auto pImageObj =
pdfium::MakeUnique<CPDF_ImageObject>(GetCurrentStreamIndex());
- pImageObj->SetImage(
- m_pDocument->GetPageData()->GetImage(pImage->GetStream()->GetObjNum()));
+ pImageObj->SetImage(CPDF_DocPageData::FromDocument(m_pDocument.Get())
+ ->GetImage(pImage->GetStream()->GetObjNum()));
return AddImageObject(std::move(pImageObj));
}
@@ -1159,8 +1162,8 @@
return CPDF_Font::GetStockFont(m_pDocument.Get(),
CFX_Font::kDefaultAnsiFontName);
}
-
- CPDF_Font* pFont = m_pDocument->GetPageData()->GetFont(pFontDict);
+ CPDF_Font* pFont =
+ CPDF_DocPageData::FromDocument(m_pDocument.Get())->GetFont(pFontDict);
if (pFont && pFont->IsType3Font()) {
pFont->AsType3Font()->SetPageResources(m_pResources.Get());
pFont->AsType3Font()->CheckType3FontMetrics();
@@ -1186,14 +1189,16 @@
return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK);
}
- return m_pDocument->GetPageData()->GetColorSpace(pDefObj, nullptr);
+ return CPDF_DocPageData::FromDocument(m_pDocument.Get())
+ ->GetColorSpace(pDefObj, nullptr);
}
const CPDF_Object* pCSObj = FindResourceObj("ColorSpace", name);
if (!pCSObj) {
m_bResourceMissing = true;
return nullptr;
}
- return m_pDocument->GetPageData()->GetColorSpace(pCSObj, nullptr);
+ return CPDF_DocPageData::FromDocument(m_pDocument.Get())
+ ->GetColorSpace(pCSObj, nullptr);
}
CPDF_Pattern* CPDF_StreamContentParser::FindPattern(const ByteString& name,
@@ -1204,8 +1209,8 @@
m_bResourceMissing = true;
return nullptr;
}
- return m_pDocument->GetPageData()->GetPattern(pPattern, bShading,
- m_pCurStates->m_ParentMatrix);
+ return CPDF_DocPageData::FromDocument(m_pDocument.Get())
+ ->GetPattern(pPattern, bShading, m_pCurStates->m_ParentMatrix);
}
void CPDF_StreamContentParser::AddTextObject(const ByteString* pStrs,
diff --git a/core/fpdfapi/page/cpdf_streamparser.cpp b/core/fpdfapi/page/cpdf_streamparser.cpp
index a949a44..590020a 100644
--- a/core/fpdfapi/page/cpdf_streamparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamparser.cpp
@@ -156,7 +156,7 @@
uint32_t nComponents = 1;
if (pCSObj) {
RetainPtr<CPDF_ColorSpace> pCS =
- pDoc->GetPageData()->GetColorSpace(pCSObj, nullptr);
+ CPDF_DocPageData::FromDocument(pDoc)->GetColorSpace(pCSObj, nullptr);
nComponents = pCS ? pCS->CountComponents() : 3;
bpc = pDict->GetIntegerFor("BitsPerComponent");
}
diff --git a/core/fpdfapi/page/cpdf_textstate.cpp b/core/fpdfapi/page/cpdf_textstate.cpp
index bd236a2..2810659 100644
--- a/core/fpdfapi/page/cpdf_textstate.cpp
+++ b/core/fpdfapi/page/cpdf_textstate.cpp
@@ -115,8 +115,10 @@
for (int i = 0; i < 4; ++i)
m_CTM[i] = that.m_CTM[i];
- if (m_pDocument && m_pFont)
- m_pFont = m_pDocument->GetPageData()->GetFont(m_pFont->GetFontDict());
+ if (m_pDocument && m_pFont) {
+ auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
+ m_pFont = pPageData->GetFont(m_pFont->GetFontDict());
+ }
}
CPDF_TextState::TextData::~TextData() {
@@ -149,7 +151,7 @@
if (!m_pDocument || !m_pFont)
return;
- CPDF_DocPageData* pPageData = m_pDocument->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
if (pPageData && !pPageData->IsForceClear())
pPageData->ReleaseFont(m_pFont->GetFontDict());
}
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 5b0314d..3200884 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -66,9 +66,12 @@
} // namespace
CPDF_Document::CPDF_Document()
- : m_pDocRender(pdfium::MakeUnique<CPDF_DocRenderData>(this)),
- m_pDocPage(pdfium::MakeUnique<CPDF_DocPageData>(this)),
- m_StockFontClearer(this) {}
+ : m_pDocRender(pdfium::MakeUnique<CPDF_DocRenderData>()),
+ m_pDocPage(pdfium::MakeUnique<CPDF_DocPageData>()),
+ m_StockFontClearer(this) {
+ m_pDocRender->SetDocument(this);
+ m_pDocPage->SetDocument(this);
+}
CPDF_Document::~CPDF_Document() = default;
@@ -346,12 +349,6 @@
return m_pExtension ? m_pExtension->GetUserPermissions() : 0;
}
-RetainPtr<CPDF_StreamAcc> CPDF_Document::LoadFontFile(
- const CPDF_Stream* pStream) {
- return m_pDocPage->GetFontFileStreamAcc(pStream);
-}
-
-
void CPDF_Document::CreateNewDoc() {
ASSERT(!m_pRootDict);
ASSERT(!m_pInfoDict);
@@ -486,3 +483,11 @@
CPDF_Document::StockFontClearer::~StockFontClearer() {
CPDF_PageModule::GetInstance()->ClearStockFont(m_pDoc.Get());
}
+
+CPDF_Document::PageDataIface::PageDataIface() = default;
+
+CPDF_Document::PageDataIface::~PageDataIface() = default;
+
+CPDF_Document::RenderDataIface::RenderDataIface() = default;
+
+CPDF_Document::RenderDataIface::~RenderDataIface() = default;
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index 97c75f6..3d9196c 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -18,11 +18,10 @@
#include "core/fpdfapi/parser/cpdf_parser.h"
#include "core/fxcrt/observable.h"
#include "core/fxcrt/retain_ptr.h"
+#include "core/fxcrt/unowned_ptr.h"
class CFX_Font;
class CFX_Matrix;
-class CPDF_DocPageData;
-class CPDF_DocRenderData;
class CPDF_LinearizedHeader;
class CPDF_Object;
class CPDF_ReadValidator;
@@ -54,6 +53,30 @@
virtual ~LinkListIface() = default;
};
+ class PageDataIface {
+ public:
+ PageDataIface();
+ virtual ~PageDataIface();
+
+ void SetDocument(CPDF_Document* pDoc) { m_pDoc = pDoc; }
+ CPDF_Document* GetDocument() const { return m_pDoc.Get(); }
+
+ private:
+ UnownedPtr<CPDF_Document> m_pDoc;
+ };
+
+ class RenderDataIface {
+ public:
+ RenderDataIface();
+ virtual ~RenderDataIface();
+
+ void SetDocument(CPDF_Document* pDoc) { m_pDoc = pDoc; }
+ CPDF_Document* GetDocument() const { return m_pDoc.Get(); }
+
+ private:
+ UnownedPtr<CPDF_Document> m_pDoc;
+ };
+
static const int kPageMaxNum = 0xFFFFF;
CPDF_Document();
@@ -76,7 +99,8 @@
uint32_t GetUserPermissions() const;
// Returns a valid pointer, unless it is called during destruction.
- CPDF_DocPageData* GetPageData() const { return m_pDocPage.get(); }
+ PageDataIface* GetPageData() const { return m_pDocPage.get(); }
+ RenderDataIface* GetRenderData() const { return m_pDocRender.get(); }
void SetPageObjNum(int iPage, uint32_t objNum);
@@ -88,10 +112,6 @@
m_pLinksContext = std::move(pContext);
}
- CPDF_DocRenderData* GetRenderData() const { return m_pDocRender.get(); }
-
- RetainPtr<CPDF_StreamAcc> LoadFontFile(const CPDF_Stream* pStream);
-
// CPDF_Parser::ParsedObjectsHolder overrides:
bool TryInit() override;
@@ -163,10 +183,8 @@
int m_iNextPageToTraverse = 0;
uint32_t m_ParsedPageCount = 0;
- std::unique_ptr<CPDF_DocRenderData> m_pDocRender;
- // Must be after |m_pDocRender|.
- std::unique_ptr<CPDF_DocPageData> m_pDocPage;
-
+ std::unique_ptr<RenderDataIface> m_pDocRender;
+ std::unique_ptr<PageDataIface> m_pDocPage; // Must be after |m_pDocRender|.
std::unique_ptr<JBig2_DocumentContext> m_pCodecContext;
std::unique_ptr<LinkListIface> m_pLinksContext;
std::vector<uint32_t> m_PageList; // Page number to page's dict objnum.
diff --git a/core/fpdfapi/render/cpdf_dibbase.cpp b/core/fpdfapi/render/cpdf_dibbase.cpp
index 72d7ad9..101580d 100644
--- a/core/fpdfapi/render/cpdf_dibbase.cpp
+++ b/core/fpdfapi/render/cpdf_dibbase.cpp
@@ -379,7 +379,7 @@
if (!pCSObj)
return false;
- CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData();
+ auto* pDocPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
if (pFormResources)
m_pColorSpace = pDocPageData->GetColorSpace(pCSObj, pFormResources);
if (!m_pColorSpace)
diff --git a/core/fpdfapi/render/cpdf_docrenderdata.cpp b/core/fpdfapi/render/cpdf_docrenderdata.cpp
index ce4085a..483ad87 100644
--- a/core/fpdfapi/render/cpdf_docrenderdata.cpp
+++ b/core/fpdfapi/render/cpdf_docrenderdata.cpp
@@ -25,8 +25,13 @@
} // namespace
-CPDF_DocRenderData::CPDF_DocRenderData(CPDF_Document* pPDFDoc)
- : m_pPDFDoc(pPDFDoc) {}
+// static
+CPDF_DocRenderData* CPDF_DocRenderData::FromDocument(
+ const CPDF_Document* pDoc) {
+ return static_cast<CPDF_DocRenderData*>(pDoc->GetRenderData());
+}
+
+CPDF_DocRenderData::CPDF_DocRenderData() = default;
CPDF_DocRenderData::~CPDF_DocRenderData() = default;
@@ -121,6 +126,6 @@
}
return pdfium::MakeRetain<CPDF_TransferFunc>(
- m_pPDFDoc.Get(), bIdentity, std::move(samples_r), std::move(samples_g),
+ GetDocument(), bIdentity, std::move(samples_r), std::move(samples_g),
std::move(samples_b));
}
diff --git a/core/fpdfapi/render/cpdf_docrenderdata.h b/core/fpdfapi/render/cpdf_docrenderdata.h
index de127f8..696b758 100644
--- a/core/fpdfapi/render/cpdf_docrenderdata.h
+++ b/core/fpdfapi/render/cpdf_docrenderdata.h
@@ -10,21 +10,23 @@
#include <map>
#include "core/fpdfapi/page/cpdf_countedobject.h"
+#include "core/fpdfapi/parser/cpdf_document.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/retain_ptr.h"
#include "core/fxcrt/unowned_ptr.h"
-class CPDF_Document;
class CPDF_Font;
class CPDF_Object;
class CPDF_TransferFunc;
class CPDF_Type3Cache;
class CPDF_Type3Font;
-class CPDF_DocRenderData {
+class CPDF_DocRenderData : public CPDF_Document::RenderDataIface {
public:
- explicit CPDF_DocRenderData(CPDF_Document* pPDFDoc);
- ~CPDF_DocRenderData();
+ static CPDF_DocRenderData* FromDocument(const CPDF_Document* pDoc);
+
+ CPDF_DocRenderData();
+ ~CPDF_DocRenderData() override;
CPDF_DocRenderData(const CPDF_DocRenderData&) = delete;
CPDF_DocRenderData& operator=(const CPDF_DocRenderData&) = delete;
@@ -41,7 +43,6 @@
const CPDF_Object* pObj) const;
private:
- UnownedPtr<CPDF_Document> const m_pPDFDoc;
std::map<CPDF_Font*, RetainPtr<CPDF_Type3Cache>> m_Type3FaceMap;
std::map<const CPDF_Object*, RetainPtr<CPDF_TransferFunc>> m_TransferFuncMap;
};
diff --git a/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp b/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp
index 69162f0..2f24785 100644
--- a/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp
+++ b/core/fpdfapi/render/cpdf_docrenderdata_unittest.cpp
@@ -158,7 +158,7 @@
class TestDocRenderData : public CPDF_DocRenderData {
public:
- TestDocRenderData() : CPDF_DocRenderData(nullptr) {}
+ TestDocRenderData() : CPDF_DocRenderData() {}
RetainPtr<CPDF_TransferFunc> CreateTransferFuncForTesting(
const CPDF_Object* pObj) const {
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 1f7e4d9..2355068 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -147,8 +147,9 @@
CPDF_Object* pCSObj =
m_pImageObject->GetImage()->GetStream()->GetDict()->GetDirectObjectFor(
"ColorSpace");
+ auto* pData = CPDF_DocPageData::FromDocument(pDocument);
RetainPtr<CPDF_ColorSpace> pColorSpace =
- pDocument->GetPageData()->GetColorSpace(pCSObj, pPageResources);
+ pData->GetColorSpace(pCSObj, pPageResources);
if (pColorSpace) {
int format = pColorSpace->GetFamily();
if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION ||
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index ee2a9d1..6ec26f1 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -82,21 +82,21 @@
void ReleaseCachedType3(CPDF_Type3Font* pFont) {
CPDF_Document* pDoc = pFont->GetDocument();
- pDoc->GetRenderData()->MaybePurgeCachedType3(pFont);
- pDoc->GetPageData()->ReleaseFont(pFont->GetFontDict());
+ CPDF_DocRenderData::FromDocument(pDoc)->MaybePurgeCachedType3(pFont);
+ CPDF_DocPageData::FromDocument(pDoc)->ReleaseFont(pFont->GetFontDict());
}
class CPDF_RefType3Cache {
public:
explicit CPDF_RefType3Cache(CPDF_Type3Font* pType3Font)
- : m_dwCount(0), m_pType3Font(pType3Font) {}
+ : m_pType3Font(pType3Font) {}
~CPDF_RefType3Cache() {
while (m_dwCount--)
ReleaseCachedType3(m_pType3Font.Get());
}
- uint32_t m_dwCount;
+ uint32_t m_dwCount = 0;
UnownedPtr<CPDF_Type3Font> const m_pType3Font;
};
@@ -1284,7 +1284,7 @@
RetainPtr<CPDF_TransferFunc> CPDF_RenderStatus::GetTransferFunc(
const CPDF_Object* pObj) const {
ASSERT(pObj);
- CPDF_DocRenderData* pDocCache = m_pContext->GetDocument()->GetRenderData();
+ auto* pDocCache = CPDF_DocRenderData::FromDocument(m_pContext->GetDocument());
return pDocCache ? pDocCache->GetTransferFunc(pObj) : nullptr;
}
@@ -1483,7 +1483,8 @@
->GetDict()
->GetDirectObjectFor("ColorSpace");
RetainPtr<CPDF_ColorSpace> pColorSpace =
- pDocument->GetPageData()->GetColorSpace(pCSObj, pPageResources);
+ CPDF_DocPageData::FromDocument(pDocument)->GetColorSpace(
+ pCSObj, pPageResources);
if (pColorSpace) {
int format = pColorSpace->GetFamily();
if (format == PDFCS_DEVICECMYK || format == PDFCS_SEPARATION ||
@@ -1781,8 +1782,8 @@
RetainPtr<CPDF_Type3Cache> CPDF_RenderStatus::GetCachedType3(
CPDF_Type3Font* pFont) {
CPDF_Document* pDoc = pFont->GetDocument();
- pDoc->GetPageData()->GetFont(pFont->GetFontDict());
- return pDoc->GetRenderData()->GetCachedType3(pFont);
+ CPDF_DocPageData::FromDocument(pDoc)->GetFont(pFont->GetFontDict());
+ return CPDF_DocRenderData::FromDocument(pDoc)->GetCachedType3(pFont);
}
// TODO(npm): Font fallback for type 3 fonts? (Completely separate code!!)
@@ -2622,7 +2623,8 @@
if (pGroup)
pCSObj = pGroup->GetDirectObjectFor(pdfium::transparency::kCS);
RetainPtr<CPDF_ColorSpace> pCS =
- m_pContext->GetDocument()->GetPageData()->GetColorSpace(pCSObj, nullptr);
+ CPDF_DocPageData::FromDocument(m_pContext->GetDocument())
+ ->GetColorSpace(pCSObj, nullptr);
if (!pCS)
return kDefaultColor;
diff --git a/core/fpdfdoc/cba_fontmap.cpp b/core/fpdfdoc/cba_fontmap.cpp
index 994648f..de12ca3 100644
--- a/core/fpdfdoc/cba_fontmap.cpp
+++ b/core/fpdfdoc/cba_fontmap.cpp
@@ -62,7 +62,7 @@
auto pFXFont = pdfium::MakeUnique<CFX_Font>();
pFXFont->LoadSubst(sFontFaceName, true, 0, 0, 0,
FX_GetCodePageFromCharset(nCharset), false);
- return pDoc->GetPageData()->AddFont(pFXFont.get(), nCharset);
+ return CPDF_DocPageData::FromDocument(pDoc)->AddFont(pFXFont.get(), nCharset);
}
} // namespace
@@ -243,17 +243,18 @@
continue;
CPDF_Dictionary* pElement = ToDictionary(it.second->GetDirect());
- if (!pElement)
- continue;
- if (pElement->GetStringFor("Type") != "Font")
+ if (!pElement || pElement->GetStringFor("Type") != "Font")
continue;
- CPDF_Font* pFont = m_pDocument->GetPageData()->GetFont(pElement);
+ auto* pData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
+ CPDF_Font* pFont = pData->GetFont(pElement);
if (!pFont)
continue;
+
const CFX_SubstFont* pSubst = pFont->GetSubstFont();
if (!pSubst)
continue;
+
if (pSubst->m_Charset == nCharset) {
*sFontAlias = csKey;
pFind = pFont;
@@ -308,7 +309,10 @@
pFontDict = pDRFontDict->GetDictFor(*sAlias);
}
}
- return pFontDict ? m_pDocument->GetPageData()->GetFont(pFontDict) : nullptr;
+ if (!pFontDict)
+ return nullptr;
+
+ return CPDF_DocPageData::FromDocument(m_pDocument.Get())->GetFont(pFontDict);
}
void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont,
@@ -484,7 +488,7 @@
return nullptr;
CPDF_Font* pFont = nullptr;
- CPDF_DocPageData* pPageData = pDoc->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(pDoc);
if (sFontName == "ZapfDingbats") {
pFont = pPageData->AddStandardFont(sFontName.c_str(), nullptr);
} else {
diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index be6b732..6ecd0bc 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -214,8 +214,8 @@
if (pFonts) {
CPDF_Dictionary* pElement = pFonts->GetDictFor(*csFontNameTag);
if (pElement) {
- CPDF_Font* pFont =
- m_pForm->GetDocument()->GetPageData()->GetFont(pElement);
+ auto* pData = CPDF_DocPageData::FromDocument(m_pForm->GetDocument());
+ CPDF_Font* pFont = pData->GetFont(pElement);
if (pFont)
return pFont;
}
@@ -231,8 +231,8 @@
if (pFonts) {
CPDF_Dictionary* pElement = pFonts->GetDictFor(*csFontNameTag);
if (pElement) {
- CPDF_Font* pFont =
- m_pForm->GetDocument()->GetPageData()->GetFont(pElement);
+ auto* pData = CPDF_DocPageData::FromDocument(m_pForm->GetDocument());
+ CPDF_Font* pFont = pData->GetFont(pElement);
if (pFont)
return pFont;
}
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index 666d502..cb43042 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -912,7 +912,8 @@
if (!pFontDict)
return;
- m_pFont = m_pForm->GetDocument()->GetPageData()->GetFont(pFontDict);
+ auto* pData = CPDF_DocPageData::FromDocument(m_pForm->GetDocument());
+ m_pFont = pData->GetFont(pFontDict);
}
bool CPDF_FormField::NotifyBeforeSelectionChange(const WideString& value) {
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp
index 175bf00..4b03b51 100644
--- a/core/fpdfdoc/cpdf_interactiveform.cpp
+++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -134,13 +134,10 @@
return nullptr;
CPDF_Dictionary* pElement = pFonts->GetDictFor(csAlias);
- if (!pElement)
+ if (!pElement || pElement->GetStringFor("Type") != "Font")
return nullptr;
- if (pElement->GetStringFor("Type") != "Font")
- return nullptr;
-
- return pDocument->GetPageData()->GetFont(pElement);
+ return CPDF_DocPageData::FromDocument(pDocument)->GetFont(pElement);
}
CPDF_Font* GetNativeFont(CPDF_Dictionary* pFormDict,
@@ -165,11 +162,11 @@
continue;
CPDF_Dictionary* pElement = ToDictionary(it.second->GetDirect());
- if (!pElement)
+ if (!pElement || pElement->GetStringFor("Type") != "Font")
continue;
- if (pElement->GetStringFor("Type") != "Font")
- continue;
- CPDF_Font* pFind = pDocument->GetPageData()->GetFont(pElement);
+
+ auto* pData = CPDF_DocPageData::FromDocument(pDocument);
+ CPDF_Font* pFind = pData->GetFont(pElement);
if (!pFind)
continue;
@@ -243,11 +240,10 @@
continue;
CPDF_Dictionary* pElement = ToDictionary(it.second->GetDirect());
- if (!pElement)
+ if (!pElement || pElement->GetStringFor("Type") != "Font")
continue;
- if (pElement->GetStringFor("Type") != "Font")
- continue;
- pFont = pDocument->GetPageData()->GetFont(pElement);
+
+ pFont = CPDF_DocPageData::FromDocument(pDocument)->GetFont(pElement);
if (!pFont)
continue;
@@ -620,7 +616,7 @@
if (!pDocument || csFontName.IsEmpty())
return nullptr;
- CPDF_DocPageData* pPageData = pDocument->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(pDocument);
if (csFontName == "ZapfDingbats")
return pPageData->AddStandardFont(csFontName.c_str(), nullptr);
@@ -678,7 +674,7 @@
if (!csFontName.IsEmpty()) {
if (csFontName == CFX_Font::kDefaultAnsiFontName)
return AddStandardFont(pDocument, csFontName);
- return pDocument->GetPageData()->AddWindowsFont(&lf);
+ return CPDF_DocPageData::FromDocument(pDocument)->AddWindowsFont(&lf);
}
#endif
return nullptr;
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index af1685e..81f4e08 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -764,7 +764,8 @@
ByteString sFontName = "FONT";
auto pResourceFontDict = GenerateResourceFontDict(pDoc, sFontName);
- CPDF_Font* pDefFont = pDoc->GetPageData()->GetFont(pResourceFontDict.Get());
+ auto* pData = CPDF_DocPageData::FromDocument(pDoc);
+ CPDF_Font* pDefFont = pData->GetFont(pResourceFontDict.Get());
if (!pDefFont)
return false;
@@ -956,7 +957,8 @@
pDRFontDict->SetNewFor<CPDF_Reference>(font_name, pDoc,
pFontDict->GetObjNum());
}
- CPDF_Font* pDefFont = pDoc->GetPageData()->GetFont(pFontDict);
+ auto* pData = CPDF_DocPageData::FromDocument(pDoc);
+ CPDF_Font* pDefFont = pData->GetFont(pFontDict);
if (!pDefFont)
return;
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index f8fb78c..5d9841a 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -305,7 +305,7 @@
pFontDict->SetNewFor<CPDF_Reference>("FontDescriptor", pDoc,
pFontDesc->GetObjNum());
- return pDoc->GetPageData()->GetFont(pFontDict);
+ return CPDF_DocPageData::FromDocument(pDoc)->GetFont(pFontDict);
}
CPDF_Font* LoadCompositeFont(CPDF_Document* pDoc,
@@ -424,7 +424,7 @@
CPDF_Stream* toUnicodeStream = LoadUnicode(pDoc, to_unicode);
pFontDict->SetNewFor<CPDF_Reference>("ToUnicode", pDoc,
toUnicodeStream->GetObjNum());
- return pDoc->GetPageData()->GetFont(pFontDict);
+ return CPDF_DocPageData::FromDocument(pDoc)->GetFont(pFontDict);
}
CPDF_TextObject* CPDFTextObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object) {
@@ -577,7 +577,7 @@
if (!pDoc)
return;
- CPDF_DocPageData* pPageData = pDoc->GetPageData();
+ auto* pPageData = CPDF_DocPageData::FromDocument(pDoc);
if (!pPageData->IsForceClear())
pPageData->ReleaseFont(pFont->GetFontDict());
}
@@ -593,7 +593,7 @@
auto pTextObj = pdfium::MakeUnique<CPDF_TextObject>();
pTextObj->m_TextState.SetFont(
- pDoc->GetPageData()->GetFont(pFont->GetFontDict()));
+ CPDF_DocPageData::FromDocument(pDoc)->GetFont(pFont->GetFontDict()));
pTextObj->m_TextState.SetFontSize(font_size);
pTextObj->DefaultStates();
return FPDFPageObjectFromCPDFPageObject(pTextObj.release());
diff --git a/xfa/fgas/font/cfgas_pdffontmgr.cpp b/xfa/fgas/font/cfgas_pdffontmgr.cpp
index 2704cb3..1b2a09e 100644
--- a/xfa/fgas/font/cfgas_pdffontmgr.cpp
+++ b/xfa/fgas/font/cfgas_pdffontmgr.cpp
@@ -63,7 +63,8 @@
if (!pFontDict || pFontDict->GetStringFor("Type") != "Font")
return nullptr;
- CPDF_Font* pPDFFont = m_pDoc->GetPageData()->GetFont(pFontDict);
+ auto* pData = CPDF_DocPageData::FromDocument(m_pDoc.Get());
+ CPDF_Font* pPDFFont = pData->GetFont(pFontDict);
if (!pPDFFont)
return nullptr;