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,