Use early returns in CXFA_LayoutPageMgr::CreateViewRecord().
Remove many levels of nested ifs. Add an AppendNewRecord() helper
method to support this.
Change-Id: I23589b0fd14550996b85870ea60cd4a7df8c1a5a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/53050
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index e2f4a74..e953840 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -591,48 +591,7 @@
bool bCreateNew) {
ASSERT(pPageNode);
CXFA_ViewRecord* pNewRecord = new CXFA_ViewRecord();
- if (HasCurrentViewRecord()) {
- if (!IsPageSetRootOrderedOccurrence()) {
- *pNewRecord = *GetCurrentViewRecord();
- m_ProposedViewRecords.push_back(pNewRecord);
- return pNewRecord;
- }
- CXFA_Node* pPageSet = pPageNode->GetParent();
- if (!bCreateNew) {
- if (pPageSet == m_pTemplatePageSetRoot) {
- pNewRecord->pCurPageSet = m_pPageSetCurRoot;
- } else {
- CXFA_ViewLayoutItem* pParentLayoutItem =
- ToViewLayoutItem(pPageSet->JSObject()->GetLayoutItem());
- if (!pParentLayoutItem)
- pParentLayoutItem = m_pPageSetCurRoot;
-
- pNewRecord->pCurPageSet = pParentLayoutItem;
- }
- } else {
- CXFA_ViewLayoutItem* pParentPageSetLayout = nullptr;
- if (pPageSet == GetCurrentViewRecord()->pCurPageSet->GetFormNode()) {
- pParentPageSetLayout =
- ToViewLayoutItem(GetCurrentViewRecord()->pCurPageSet->GetParent());
- } else {
- pParentPageSetLayout = ToViewLayoutItem(
- pPageSet->GetParent()->JSObject()->GetLayoutItem());
- }
- auto* pPageSetLayoutItem = new CXFA_ViewLayoutItem(pPageSet);
- pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
- if (!pParentPageSetLayout) {
- CXFA_ViewLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot;
- while (pPrePageSet->GetNextSibling()) {
- pPrePageSet = pPrePageSet->GetNextSibling()->AsViewLayoutItem();
- }
- pPrePageSet->SetNextSibling(pPageSetLayoutItem);
- m_pPageSetCurRoot = pPageSetLayoutItem;
- } else {
- pParentPageSetLayout->AddChild(pPageSetLayoutItem);
- }
- pNewRecord->pCurPageSet = pPageSetLayoutItem;
- }
- } else {
+ if (!HasCurrentViewRecord()) {
CXFA_Node* pPageSet = pPageNode->GetParent();
if (pPageSet == m_pTemplatePageSetRoot) {
pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot;
@@ -643,9 +602,51 @@
m_pPageSetLayoutItemRoot->AddChild(pPageSetLayoutItem);
pNewRecord->pCurPageSet = pPageSetLayoutItem;
}
+ return AppendNewRecord(pNewRecord);
}
- m_ProposedViewRecords.push_back(pNewRecord);
- return pNewRecord;
+
+ if (!IsPageSetRootOrderedOccurrence()) {
+ *pNewRecord = *GetCurrentViewRecord();
+ return AppendNewRecord(pNewRecord);
+ }
+
+ CXFA_Node* pPageSet = pPageNode->GetParent();
+ if (!bCreateNew) {
+ if (pPageSet == m_pTemplatePageSetRoot) {
+ pNewRecord->pCurPageSet = m_pPageSetCurRoot;
+ } else {
+ CXFA_ViewLayoutItem* pParentLayoutItem =
+ ToViewLayoutItem(pPageSet->JSObject()->GetLayoutItem());
+ if (!pParentLayoutItem)
+ pParentLayoutItem = m_pPageSetCurRoot;
+
+ pNewRecord->pCurPageSet = pParentLayoutItem;
+ }
+ return AppendNewRecord(pNewRecord);
+ }
+
+ CXFA_ViewLayoutItem* pParentPageSetLayout = nullptr;
+ if (pPageSet == GetCurrentViewRecord()->pCurPageSet->GetFormNode()) {
+ pParentPageSetLayout =
+ ToViewLayoutItem(GetCurrentViewRecord()->pCurPageSet->GetParent());
+ } else {
+ pParentPageSetLayout =
+ ToViewLayoutItem(pPageSet->GetParent()->JSObject()->GetLayoutItem());
+ }
+ auto* pPageSetLayoutItem = new CXFA_ViewLayoutItem(pPageSet);
+ pPageSet->JSObject()->SetLayoutItem(pPageSetLayoutItem);
+ if (!pParentPageSetLayout) {
+ CXFA_ViewLayoutItem* pPrePageSet = m_pPageSetLayoutItemRoot;
+ while (pPrePageSet->GetNextSibling()) {
+ pPrePageSet = pPrePageSet->GetNextSibling()->AsViewLayoutItem();
+ }
+ pPrePageSet->SetNextSibling(pPageSetLayoutItem);
+ m_pPageSetCurRoot = pPageSetLayoutItem;
+ } else {
+ pParentPageSetLayout->AddChild(pPageSetLayoutItem);
+ }
+ pNewRecord->pCurPageSet = pPageSetLayoutItem;
+ return AppendNewRecord(pNewRecord);
}
CXFA_ViewRecord* CXFA_LayoutPageMgr::CreateViewRecordSimple() {
@@ -654,8 +655,7 @@
*pNewRecord = *GetCurrentViewRecord();
else
pNewRecord->pCurPageSet = m_pPageSetLayoutItemRoot;
- m_ProposedViewRecords.push_back(pNewRecord);
- return pNewRecord;
+ return AppendNewRecord(pNewRecord);
}
void CXFA_LayoutPageMgr::AddPageAreaLayoutItem(CXFA_ViewRecord* pNewRecord,
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.h b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
index 55aeb91..d91816a 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.h
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
@@ -77,6 +77,10 @@
auto iter = m_ProposedViewRecords.end();
return !m_ProposedViewRecords.empty() ? std::prev(iter) : iter;
}
+ CXFA_ViewRecord* AppendNewRecord(CXFA_ViewRecord* pNewRecord) {
+ m_ProposedViewRecords.push_back(pNewRecord);
+ return pNewRecord;
+ }
CXFA_ViewRecord* CreateViewRecord(CXFA_Node* pPageNode, bool bCreateNew);
CXFA_ViewRecord* CreateViewRecordSimple();
void AddPageAreaLayoutItem(CXFA_ViewRecord* pNewRecord,