Do early returns in CXFA_LayoutPageMgr.
Also convert some switch-statements into if-statements.
Change-Id: I7768b57953cf32e721b325d1c019960f0668c2b1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/49430
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
index 5a8c3af..56c193b 100644
--- a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
@@ -1698,7 +1698,7 @@
if (!bUseBreakControl || !m_pPageMgr ||
!m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, true,
pLeaderNode, pTrailerNode,
- bCreatePage) ||
+ &bCreatePage) ||
GetFormNode()->GetElementType() == XFA_Element::Form ||
!bCreatePage) {
break;
@@ -1737,7 +1737,7 @@
if (!bUseBreakControl || !m_pPageMgr ||
!m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, false,
pLeaderNode, pTrailerNode,
- bCreatePage) ||
+ &bCreatePage) ||
GetFormNode()->GetElementType() == XFA_Element::Form) {
break;
}
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index 8188544..eb7fe70 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -282,10 +282,10 @@
pPageSetLayoutItem->GetFirstChild();
pPageAreaLayoutItem;
pPageAreaLayoutItem = pPageAreaLayoutItem->GetNextSibling()) {
- if (pPageAreaLayoutItem->GetFormNode()->GetElementType() !=
- XFA_Element::PageArea) {
+ XFA_Element type = pPageAreaLayoutItem->GetFormNode()->GetElementType();
+ if (type != XFA_Element::PageArea)
continue;
- }
+
++nCount;
pLast = pPageAreaLayoutItem;
}
@@ -383,11 +383,13 @@
int32_t iCount = 0;
for (pPageArea = m_pTemplatePageSetRoot->GetFirstChild(); pPageArea;
pPageArea = pPageArea->GetNextSibling()) {
- if (pPageArea->GetElementType() == XFA_Element::PageArea) {
- iCount++;
- if (pPageArea->GetFirstChildByClass<CXFA_ContentArea>(
- XFA_Element::ContentArea))
- return true;
+ if (pPageArea->GetElementType() != XFA_Element::PageArea)
+ continue;
+
+ iCount++;
+ if (pPageArea->GetFirstChildByClass<CXFA_ContentArea>(
+ XFA_Element::ContentArea)) {
+ return true;
}
}
if (iCount > 0)
@@ -835,15 +837,15 @@
bool bBefore,
CXFA_Node*& pBreakLeaderNode,
CXFA_Node*& pBreakTrailerNode,
- bool& bCreatePage) {
+ bool* pCreatePage) {
CXFA_Node* pLeaderTemplate = nullptr;
CXFA_Node* pTrailerTemplate = nullptr;
CXFA_Node* pFormNode = pBreakNode->GetContainerParent();
if (!pFormNode->PresenceRequiresSpace())
return false;
- bCreatePage = ExecuteBreakBeforeOrAfter(pBreakNode, bBefore, pLeaderTemplate,
- pTrailerTemplate);
+ *pCreatePage = ExecuteBreakBeforeOrAfter(pBreakNode, bBefore, pLeaderTemplate,
+ pTrailerTemplate);
CXFA_Document* pDocument = pBreakNode->GetDocument();
CXFA_Node* pDataScope = nullptr;
pFormNode = pFormNode->GetContainerParent();
@@ -1053,20 +1055,20 @@
if (pBookendNode->GetElementType() == XFA_Element::Break) {
WideString leader = pBookendNode->JSObject()->GetCData(
bLeader ? XFA_Attribute::BookendLeader : XFA_Attribute::BookendTrailer);
- if (!leader.IsEmpty()) {
- pBookendAppendTemplate = ResolveBreakTarget(pContainer, false, leader);
- return true;
- }
- return false;
- }
+ if (leader.IsEmpty())
+ return false;
- if (pBookendNode->GetElementType() == XFA_Element::Bookend) {
- WideString leader = pBookendNode->JSObject()->GetCData(
- bLeader ? XFA_Attribute::Leader : XFA_Attribute::Trailer);
- pBookendAppendTemplate = ResolveBreakTarget(pContainer, true, leader);
+ pBookendAppendTemplate = ResolveBreakTarget(pContainer, false, leader);
return true;
}
- return false;
+
+ if (pBookendNode->GetElementType() != XFA_Element::Bookend)
+ return false;
+
+ WideString leader = pBookendNode->JSObject()->GetCData(
+ bLeader ? XFA_Attribute::Leader : XFA_Attribute::Trailer);
+ pBookendAppendTemplate = ResolveBreakTarget(pContainer, true, leader);
+ return true;
}
bool CXFA_LayoutPageMgr::FindPageAreaFromPageSet(CXFA_Node* pPageSet,
@@ -1380,13 +1382,12 @@
return false;
}
if (pContentAreaLayout) {
- if (pContentAreaLayout->GetFormNode() != pCurContentNode) {
- CXFA_ContainerRecord* pNewRecord =
- CreateContainerRecord(nullptr, false);
- pNewRecord->pCurContentArea = pContentAreaLayout;
- return true;
- }
- return false;
+ if (pContentAreaLayout->GetFormNode() == pCurContentNode)
+ return false;
+
+ CXFA_ContainerRecord* pNewRecord = CreateContainerRecord(nullptr, false);
+ pNewRecord->pCurContentArea = pContentAreaLayout;
+ return true;
}
}
@@ -1573,11 +1574,8 @@
float fNextContentHeight = pContentArea->JSObject()->GetMeasureInUnit(
XFA_Attribute::H, XFA_Unit::Pt);
- if (fNextContentHeight < kXFALayoutPrecision)
- return true;
- if (fNextContentHeight > fChildHeight)
- return true;
- return false;
+ return fNextContentHeight < kXFALayoutPrecision ||
+ fNextContentHeight > fChildHeight;
}
void CXFA_LayoutPageMgr::ClearData() {
@@ -1867,15 +1865,12 @@
iterator(pRootLayoutItem);
for (CXFA_ContainerLayoutItem* pContainerItem = iterator.GetCurrent();
pContainerItem; pContainerItem = iterator.MoveToNext()) {
- CXFA_Node* pNode = pContainerItem->GetFormNode();
- switch (pNode->GetElementType()) {
- case XFA_Element::PageArea:
- m_pLayoutProcessor->GetRootRootItemLayoutProcessor()
- ->DoLayoutPageArea(pContainerItem);
- break;
- default:
- break;
- }
+ XFA_Element type = pContainerItem->GetFormNode()->GetElementType();
+ if (type != XFA_Element::PageArea)
+ continue;
+
+ m_pLayoutProcessor->GetRootRootItemLayoutProcessor()->DoLayoutPageArea(
+ pContainerItem);
}
}
}
@@ -1894,39 +1889,36 @@
iteratorParent(pRootLayoutItem);
for (CXFA_ContainerLayoutItem* pContainerItem = iteratorParent.GetCurrent();
pContainerItem; pContainerItem = iteratorParent.MoveToNext()) {
- switch (pContainerItem->GetFormNode()->GetElementType()) {
- case XFA_Element::PageArea: {
- nPageIdx++;
- uint32_t dwRelevant =
- XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
- CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
- CXFA_TraverseStrategy_LayoutItem>
- iterator(pContainerItem);
- CXFA_LayoutItem* pChildLayoutItem = iterator.GetCurrent();
- while (pChildLayoutItem) {
- CXFA_ContentLayoutItem* pContentItem =
- pChildLayoutItem->AsContentLayoutItem();
- if (!pContentItem) {
- pChildLayoutItem = iterator.MoveToNext();
- continue;
- }
+ XFA_Element type = pContainerItem->GetFormNode()->GetElementType();
+ if (type != XFA_Element::PageArea)
+ continue;
- XFA_AttributeValue presence =
- pContentItem->GetFormNode()
- ->JSObject()
- ->TryEnum(XFA_Attribute::Presence, true)
- .value_or(XFA_AttributeValue::Visible);
- bool bVisible = presence == XFA_AttributeValue::Visible;
- uint32_t dwRelevantChild =
- GetRelevant(pContentItem->GetFormNode(), dwRelevant);
- SyncContainer(pNotify, m_pLayoutProcessor, pContentItem,
- dwRelevantChild, bVisible, nPageIdx);
- pChildLayoutItem = iterator.SkipChildrenAndMoveToNext();
- }
- break;
+ nPageIdx++;
+ uint32_t dwRelevant =
+ XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
+ CXFA_NodeIteratorTemplate<CXFA_LayoutItem,
+ CXFA_TraverseStrategy_LayoutItem>
+ iterator(pContainerItem);
+ CXFA_LayoutItem* pChildLayoutItem = iterator.GetCurrent();
+ while (pChildLayoutItem) {
+ CXFA_ContentLayoutItem* pContentItem =
+ pChildLayoutItem->AsContentLayoutItem();
+ if (!pContentItem) {
+ pChildLayoutItem = iterator.MoveToNext();
+ continue;
}
- default:
- break;
+
+ XFA_AttributeValue presence =
+ pContentItem->GetFormNode()
+ ->JSObject()
+ ->TryEnum(XFA_Attribute::Presence, true)
+ .value_or(XFA_AttributeValue::Visible);
+ bool bVisible = presence == XFA_AttributeValue::Visible;
+ uint32_t dwRelevantChild =
+ GetRelevant(pContentItem->GetFormNode(), dwRelevant);
+ SyncContainer(pNotify, m_pLayoutProcessor, pContentItem,
+ dwRelevantChild, bVisible, nPageIdx);
+ pChildLayoutItem = iterator.SkipChildrenAndMoveToNext();
}
}
}
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.h b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
index 90ac7d9..e41f73a 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.h
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.h
@@ -41,7 +41,7 @@
bool bBefore,
CXFA_Node*& pBreakLeaderNode,
CXFA_Node*& pBreakTrailerNode,
- bool& bCreatePage);
+ bool* pCreatePage);
bool ProcessOverflow(CXFA_Node* pFormNode,
CXFA_Node*& pLeaderNode,
CXFA_Node*& pTrailerNode,