From c130381fd038893c1ee62a34648764d39d138b2c Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Thu, 2 Nov 2017 21:14:48 +0000 Subject: Encapsulate CPDF_FormObject members. Also remove a conditional in the CPDF_Form ctor that cannot be true. Change-Id: Icd00233969cea33e9c63d0d6a9d07226c2b173f2 Reviewed-on: https://pdfium-review.googlesource.com/17070 Reviewed-by: dsinclair Commit-Queue: Lei Zhang --- core/fpdfapi/page/cpdf_form.cpp | 3 +-- core/fpdfapi/page/cpdf_formobject.cpp | 6 +++++- core/fpdfapi/page/cpdf_formobject.h | 6 ++++-- core/fpdfapi/page/cpdf_pageobjectholder.cpp | 5 ++++- core/fpdfapi/page/cpdf_pageobjectholder.h | 2 +- core/fpdfapi/page/cpdf_streamcontentparser.cpp | 17 +++++++++-------- 6 files changed, 24 insertions(+), 15 deletions(-) (limited to 'core/fpdfapi/page') diff --git a/core/fpdfapi/page/cpdf_form.cpp b/core/fpdfapi/page/cpdf_form.cpp index e4334016b4..ae06cb2f7e 100644 --- a/core/fpdfapi/page/cpdf_form.cpp +++ b/core/fpdfapi/page/cpdf_form.cpp @@ -17,8 +17,7 @@ CPDF_Form::CPDF_Form(CPDF_Document* pDoc, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream, CPDF_Dictionary* pParentResources) - : CPDF_PageObjectHolder(pDoc, - pFormStream ? pFormStream->GetDict() : nullptr) { + : CPDF_PageObjectHolder(pDoc, pFormStream->GetDict()) { m_pFormStream = pFormStream; m_pResources = m_pFormDict->GetDictFor("Resources"); m_pPageResources = pPageResources; diff --git a/core/fpdfapi/page/cpdf_formobject.cpp b/core/fpdfapi/page/cpdf_formobject.cpp index c0cdd3e950..eca92ca0ff 100644 --- a/core/fpdfapi/page/cpdf_formobject.cpp +++ b/core/fpdfapi/page/cpdf_formobject.cpp @@ -6,9 +6,13 @@ #include "core/fpdfapi/page/cpdf_formobject.h" +#include + #include "core/fpdfapi/page/cpdf_form.h" -CPDF_FormObject::CPDF_FormObject() {} +CPDF_FormObject::CPDF_FormObject(std::unique_ptr pForm, + const CFX_Matrix& matrix) + : m_pForm(std::move(pForm)), m_FormMatrix(matrix) {} CPDF_FormObject::~CPDF_FormObject() {} diff --git a/core/fpdfapi/page/cpdf_formobject.h b/core/fpdfapi/page/cpdf_formobject.h index b13cb5fbe4..c723cc0eaf 100644 --- a/core/fpdfapi/page/cpdf_formobject.h +++ b/core/fpdfapi/page/cpdf_formobject.h @@ -16,7 +16,7 @@ class CPDF_Form; class CPDF_FormObject : public CPDF_PageObject { public: - CPDF_FormObject(); + CPDF_FormObject(std::unique_ptr pForm, const CFX_Matrix& matrix); ~CPDF_FormObject() override; // CPDF_PageObject: @@ -28,8 +28,10 @@ class CPDF_FormObject : public CPDF_PageObject { void CalcBoundingBox(); const CPDF_Form* form() const { return m_pForm.get(); } + const CFX_Matrix& form_matrix() const { return m_FormMatrix; } - std::unique_ptr m_pForm; + private: + const std::unique_ptr m_pForm; CFX_Matrix m_FormMatrix; }; diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.cpp b/core/fpdfapi/page/cpdf_pageobjectholder.cpp index 5de911513f..4e9da63dea 100644 --- a/core/fpdfapi/page/cpdf_pageobjectholder.cpp +++ b/core/fpdfapi/page/cpdf_pageobjectholder.cpp @@ -22,7 +22,10 @@ CPDF_PageObjectHolder::CPDF_PageObjectHolder(CPDF_Document* pDoc, m_pResources(nullptr), m_iTransparency(0), m_bBackgroundAlphaNeeded(false), - m_ParseState(CONTENT_NOT_PARSED) {} + m_ParseState(CONTENT_NOT_PARSED) { + // TODO(thestig): Check if |m_pFormDict| is never a nullptr and simplify + // callers that checks for that. +} CPDF_PageObjectHolder::~CPDF_PageObjectHolder() {} diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.h b/core/fpdfapi/page/cpdf_pageobjectholder.h index 1a8b1aae38..f649ef7b62 100644 --- a/core/fpdfapi/page/cpdf_pageobjectholder.h +++ b/core/fpdfapi/page/cpdf_pageobjectholder.h @@ -71,7 +71,7 @@ class CPDF_PageObjectHolder { void Transform(const CFX_Matrix& matrix); CFX_FloatRect CalcBoundingBox() const; - UnownedPtr m_pFormDict; + const UnownedPtr m_pFormDict; UnownedPtr m_pFormStream; UnownedPtr m_pDocument; UnownedPtr m_pPageResources; diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp index 4ba1d2a44e..9e9c450c7d 100644 --- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp +++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp @@ -767,20 +767,21 @@ void CPDF_StreamContentParser::Handle_ExecuteXObject() { } void CPDF_StreamContentParser::AddForm(CPDF_Stream* pStream) { - auto pFormObj = pdfium::MakeUnique(); - pFormObj->m_pForm = pdfium::MakeUnique( - m_pDocument.Get(), m_pPageResources.Get(), pStream, m_pResources.Get()); - pFormObj->m_FormMatrix = m_pCurStates->m_CTM; - pFormObj->m_FormMatrix.Concat(m_mtContentToUser); CPDF_AllStates status; status.m_GeneralState = m_pCurStates->m_GeneralState; status.m_GraphState = m_pCurStates->m_GraphState; status.m_ColorState = m_pCurStates->m_ColorState; status.m_TextState = m_pCurStates->m_TextState; - pFormObj->m_pForm->ParseContentWithParams(&status, nullptr, nullptr, - m_ParsedSet.Get()); + auto form = pdfium::MakeUnique( + m_pDocument.Get(), m_pPageResources.Get(), pStream, m_pResources.Get()); + form->ParseContentWithParams(&status, nullptr, nullptr, m_ParsedSet.Get()); + + CFX_Matrix matrix = m_pCurStates->m_CTM; + matrix.Concat(m_mtContentToUser); + + auto pFormObj = pdfium::MakeUnique(std::move(form), matrix); if (!m_pObjectHolder->BackgroundAlphaNeeded() && - pFormObj->m_pForm->BackgroundAlphaNeeded()) { + pFormObj->form()->BackgroundAlphaNeeded()) { m_pObjectHolder->SetBackgroundAlphaNeeded(true); } pFormObj->CalcBoundingBox(); -- cgit v1.2.3