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,