Refactor code in CXFA_ItemLayoutProcessor::DoLayoutFlowedContainer(). DoLayoutFlowedContainer() is over 400 lines long. Move some of the code at the beginning into their own functions. - Create functions like GetMarginInset() and use them in more places in the same file. - Use structs from fx_coordinates.h as appropriate. - Move some variables closer to where declared. Change-Id: I53a38ca0175a22ce92d3f8ec71a66bed6a578bba Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/52179 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 dd5bf40..d0bfa10 100644 --- a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp +++ b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.cpp
@@ -171,6 +171,22 @@ return componentSize; } +CFX_FloatRect GetMarginInset(const CXFA_Margin* pMargin) { + CFX_FloatRect inset; + if (!pMargin) + return inset; + + inset.left = pMargin->JSObject()->GetMeasureInUnit(XFA_Attribute::LeftInset, + XFA_Unit::Pt); + inset.top = pMargin->JSObject()->GetMeasureInUnit(XFA_Attribute::TopInset, + XFA_Unit::Pt); + inset.right = pMargin->JSObject()->GetMeasureInUnit(XFA_Attribute::RightInset, + XFA_Unit::Pt); + inset.bottom = pMargin->JSObject()->GetMeasureInUnit( + XFA_Attribute::BottomInset, XFA_Unit::Pt); + return inset; +} + void RelocateTableRowCells(CXFA_ContentLayoutItem* pLayoutRow, const std::vector<float>& rgSpecifiedColumnWidths, XFA_AttributeValue eLayout) { @@ -179,29 +195,15 @@ CFX_SizeF containerSize = CalculateContainerSpecifiedSize( pLayoutRow->GetFormNode(), &bContainerWidthAutoSize, &bContainerHeightAutoSize); - CXFA_Margin* pMarginNode = + CXFA_Margin* pMargin = pLayoutRow->GetFormNode()->GetFirstChildByClass<CXFA_Margin>( XFA_Element::Margin); - float fLeftInset = 0; - float fTopInset = 0; - float fRightInset = 0; - float fBottomInset = 0; - if (pMarginNode) { - fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::LeftInset, XFA_Unit::Pt); - fTopInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::TopInset, XFA_Unit::Pt); - fRightInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::RightInset, XFA_Unit::Pt); - fBottomInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::BottomInset, XFA_Unit::Pt); - } - + CFX_FloatRect inset = GetMarginInset(pMargin); float fContentWidthLimit = bContainerWidthAutoSize ? FLT_MAX - : containerSize.width - fLeftInset - fRightInset; + : containerSize.width - inset.left - inset.right; float fContentCurrentHeight = - pLayoutRow->m_sSize.height - fTopInset - fBottomInset; + pLayoutRow->m_sSize.height - inset.top - inset.bottom; float fContentCalculatedWidth = 0; float fContentCalculatedHeight = 0; float fCurrentColX = 0; @@ -308,7 +310,7 @@ fContentCalculatedWidth = std::max(fContentCalculatedWidth, fChildSuppliedWidth); } else { - fContentCalculatedWidth = containerSize.width - fLeftInset - fRightInset; + fContentCalculatedWidth = containerSize.width - inset.left - inset.right; } if (pLayoutRow->GetFormNode()->JSObject()->GetEnum(XFA_Attribute::Layout) == @@ -1504,102 +1506,36 @@ CXFA_LayoutContext* pContext, bool bRootForceTb) { m_bHasAvailHeight = true; - bool bBreakDone = false; - bool bContainerWidthAutoSize = true; - bool bContainerHeightAutoSize = true; - bool bForceEndPage = false; - bool bIsManualBreak = false; if (m_pCurChildPreprocessor) m_pCurChildPreprocessor->m_ePreProcessRs = Result::kDone; - CFX_SizeF containerSize = CalculateContainerSpecifiedSize( + bool bContainerWidthAutoSize = true; + bool bContainerHeightAutoSize = true; + CFX_SizeF container_size = CalculateContainerSpecifiedSize( GetFormNode(), &bContainerWidthAutoSize, &bContainerHeightAutoSize); - if (pContext && pContext->m_fCurColumnWidth.has_value()) { - containerSize.width = pContext->m_fCurColumnWidth.value(); - bContainerWidthAutoSize = false; - } - if (!bContainerHeightAutoSize) - containerSize.height -= m_fUsedSize; + AdjustContainerSpecifiedSize(pContext, &container_size, + &bContainerWidthAutoSize, + &bContainerHeightAutoSize); - if (!bContainerHeightAutoSize) { - CXFA_Node* pParentNode = GetFormNode()->GetParent(); - bool bFocrTb = false; - if (pParentNode && - GetLayout(pParentNode, &bFocrTb) == XFA_AttributeValue::Row) { - CXFA_Node* pChildContainer = GetFormNode()->GetFirstContainerChild(); - if (pChildContainer && pChildContainer->GetNextContainerSibling()) { - containerSize.height = 0; - bContainerHeightAutoSize = true; - } - } - } - - CXFA_Margin* pMarginNode = + CXFA_Margin* pMargin = GetFormNode()->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin); - float fLeftInset = 0; - float fTopInset = 0; - float fRightInset = 0; - float fBottomInset = 0; - if (pMarginNode) { - fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::LeftInset, XFA_Unit::Pt); - fTopInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::TopInset, XFA_Unit::Pt); - fRightInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::RightInset, XFA_Unit::Pt); - fBottomInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::BottomInset, XFA_Unit::Pt); - } + CFX_FloatRect inset = GetMarginInset(pMargin); float fContentWidthLimit = bContainerWidthAutoSize ? FLT_MAX - : containerSize.width - fLeftInset - fRightInset; - float fContentCalculatedWidth = 0; - float fContentCalculatedHeight = 0; - float fAvailHeight = fHeightLimit - fTopInset - fBottomInset; + : container_size.width - inset.left - inset.right; + float fAvailHeight = fHeightLimit - inset.top - inset.bottom; if (fAvailHeight < 0) m_bHasAvailHeight = false; - fRealHeight = fRealHeight - fTopInset - fBottomInset; + fRealHeight = fRealHeight - inset.top - inset.bottom; + CFX_SizeF calculated_size; float fContentCurRowY = 0; - CXFA_ContentLayoutItem* pLayoutChild = nullptr; + CXFA_ContentLayoutItem* pLastChild = nullptr; if (m_pLayoutItem) { - if (m_nCurChildNodeStage != Stage::kDone && - eFlowStrategy != XFA_AttributeValue::Tb) { - pLayoutChild = ToContentLayoutItem(m_pLayoutItem->GetFirstChild()); - for (CXFA_LayoutItem* pLayoutNext = pLayoutChild; pLayoutNext; - pLayoutNext = pLayoutNext->GetNextSibling()) { - CXFA_ContentLayoutItem* pContentNext = - pLayoutNext->AsContentLayoutItem(); - if (!pContentNext) - continue; - - if (pContentNext->m_sPos.y != pLayoutChild->m_sPos.y) - pLayoutChild = pContentNext; - } - } - - for (CXFA_LayoutItem* pTempChild = m_pLayoutItem->GetFirstChild(); - pTempChild != pLayoutChild; - pTempChild = pTempChild->GetNextSibling()) { - CXFA_ContentLayoutItem* pLayoutTempChild = - pTempChild->AsContentLayoutItem(); - if (!pLayoutTempChild) - continue; - if (!pLayoutTempChild->GetFormNode()->PresenceRequiresSpace()) - continue; - - fContentCalculatedWidth = std::max( - fContentCalculatedWidth, - pLayoutTempChild->m_sPos.x + pLayoutTempChild->m_sSize.width); - fContentCalculatedHeight = std::max( - fContentCalculatedHeight, - pLayoutTempChild->m_sPos.y + pLayoutTempChild->m_sSize.height); - } - - if (pLayoutChild) - fContentCurRowY = pLayoutChild->m_sPos.y; - else - fContentCurRowY = fContentCalculatedHeight; + pLastChild = FindLastContentLayoutItem(eFlowStrategy); + calculated_size = CalculateLayoutItemSize(pLastChild); + fContentCurRowY = + pLastChild ? pLastChild->m_sPos.y : calculated_size.height; } fContentCurRowY += InsertKeepLayoutItems(); @@ -1615,6 +1551,9 @@ } } + bool bForceEndPage = false; + bool bBreakDone = false; + bool bIsManualBreak = false; while (m_nCurChildNodeStage != Stage::kDone) { float fContentCurRowHeight = 0; float fContentCurRowAvailWidth = fContentWidthLimit; @@ -1622,8 +1561,8 @@ std::vector<CXFA_ContentLayoutItem*> rgCurLineLayoutItems[3]; uint8_t uCurHAlignState = (eFlowStrategy != XFA_AttributeValue::Rl_tb ? 0 : 2); - if (pLayoutChild) { - for (CXFA_LayoutItem* pNext = pLayoutChild; pNext; + if (pLastChild) { + for (CXFA_LayoutItem* pNext = pLastChild; pNext; pNext = pNext->GetNextSibling()) { CXFA_ContentLayoutItem* pLayoutNext = pNext->AsContentLayoutItem(); if (!pLayoutNext) @@ -1653,21 +1592,20 @@ } } - if (ToContentLayoutItem(m_pLayoutItem->GetFirstChild()) == pLayoutChild) { + if (ToContentLayoutItem(m_pLayoutItem->GetFirstChild()) == pLastChild) { m_pLayoutItem->SetFirstChild(nullptr); } else { for (CXFA_LayoutItem* pLayoutNext = m_pLayoutItem->GetFirstChild(); pLayoutNext; pLayoutNext = pLayoutNext->GetNextSibling()) { if (ToContentLayoutItem(pLayoutNext->GetNextSibling()) == - pLayoutChild) { + pLastChild) { pLayoutNext->SetNextSibling(nullptr); break; } } } - CXFA_ContentLayoutItem* pLayoutNextTemp = - ToContentLayoutItem(pLayoutChild); + CXFA_ContentLayoutItem* pLayoutNextTemp = ToContentLayoutItem(pLastChild); while (pLayoutNextTemp) { pLayoutNextTemp->SetParent(nullptr); CXFA_ContentLayoutItem* pSaveLayoutNext = @@ -1675,7 +1613,7 @@ pLayoutNextTemp->SetNextSibling(nullptr); pLayoutNextTemp = pSaveLayoutNext; } - pLayoutChild = nullptr; + pLastChild = nullptr; } while (m_pCurChildNode) { @@ -1689,7 +1627,7 @@ case Stage::kBreakBefore: { for (auto* item : m_arrayKeepItems) { m_pLayoutItem->RemoveChild(item); - fContentCalculatedHeight -= item->m_sSize.height; + calculated_size.height -= item->m_sSize.height; } if (!bUseBreakControl || !m_pPageMgr) @@ -1718,9 +1656,9 @@ nullptr); InsertFlowedItem( pTempProcessor.get(), bContainerWidthAutoSize, - bContainerHeightAutoSize, containerSize.height, eFlowStrategy, - &uCurHAlignState, rgCurLineLayoutItems, false, FLT_MAX, - FLT_MAX, fContentWidthLimit, &fContentCurRowY, + bContainerHeightAutoSize, container_size.height, + eFlowStrategy, &uCurHAlignState, rgCurLineLayoutItems, false, + FLT_MAX, FLT_MAX, fContentWidthLimit, &fContentCurRowY, &fContentCurRowAvailWidth, &fContentCurRowHeight, &bAddedItemInRow, &bForceEndPage, pContext, false); } @@ -1748,7 +1686,7 @@ auto pTempProcessor = pdfium::MakeUnique<CXFA_ItemLayoutProcessor>( pTrailerNode, nullptr); InsertFlowedItem(pTempProcessor.get(), bContainerWidthAutoSize, - bContainerHeightAutoSize, containerSize.height, + bContainerHeightAutoSize, container_size.height, eFlowStrategy, &uCurHAlignState, rgCurLineLayoutItems, false, FLT_MAX, FLT_MAX, fContentWidthLimit, &fContentCurRowY, @@ -1759,8 +1697,8 @@ if (JudgeLeaderOrTrailerForOccur(pLeaderNode)) { CalculateRowChildPosition( rgCurLineLayoutItems, eFlowStrategy, bContainerHeightAutoSize, - bContainerWidthAutoSize, &fContentCalculatedWidth, - &fContentCalculatedHeight, &fContentCurRowY, + bContainerWidthAutoSize, &calculated_size.width, + &calculated_size.height, &fContentCurRowY, fContentCurRowHeight, fContentWidthLimit, false); rgCurLineLayoutItems->clear(); auto pTempProcessor = @@ -1768,9 +1706,9 @@ nullptr); InsertFlowedItem( pTempProcessor.get(), bContainerWidthAutoSize, - bContainerHeightAutoSize, containerSize.height, eFlowStrategy, - &uCurHAlignState, rgCurLineLayoutItems, false, FLT_MAX, - FLT_MAX, fContentWidthLimit, &fContentCurRowY, + bContainerHeightAutoSize, container_size.height, + eFlowStrategy, &uCurHAlignState, rgCurLineLayoutItems, false, + FLT_MAX, FLT_MAX, fContentWidthLimit, &fContentCurRowY, &fContentCurRowAvailWidth, &fContentCurRowHeight, &bAddedItemInRow, &bForceEndPage, pContext, false); } @@ -1801,15 +1739,15 @@ } if (pProcessor) { - if (InsertFlowedItem(pProcessor.get(), bContainerWidthAutoSize, - bContainerHeightAutoSize, containerSize.height, - eFlowStrategy, &uCurHAlignState, - rgCurLineLayoutItems, bUseBreakControl, - fAvailHeight, fRealHeight, fContentWidthLimit, - &fContentCurRowY, &fContentCurRowAvailWidth, - &fContentCurRowHeight, &bAddedItemInRow, - &bForceEndPage, pContext, - false) != Result::kDone) { + if (InsertFlowedItem( + pProcessor.get(), bContainerWidthAutoSize, + bContainerHeightAutoSize, container_size.height, + eFlowStrategy, &uCurHAlignState, rgCurLineLayoutItems, + bUseBreakControl, fAvailHeight, fRealHeight, + fContentWidthLimit, &fContentCurRowY, + &fContentCurRowAvailWidth, &fContentCurRowHeight, + &bAddedItemInRow, &bForceEndPage, pContext, + false) != Result::kDone) { goto SuspendAndCreateNewRow; } pProcessor.reset(); @@ -1828,15 +1766,15 @@ } } if (pProcessor) { - if (InsertFlowedItem(pProcessor.get(), bContainerWidthAutoSize, - bContainerHeightAutoSize, containerSize.height, - eFlowStrategy, &uCurHAlignState, - rgCurLineLayoutItems, bUseBreakControl, - fAvailHeight, fRealHeight, fContentWidthLimit, - &fContentCurRowY, &fContentCurRowAvailWidth, - &fContentCurRowHeight, &bAddedItemInRow, - &bForceEndPage, pContext, - false) != Result::kDone) { + if (InsertFlowedItem( + pProcessor.get(), bContainerWidthAutoSize, + bContainerHeightAutoSize, container_size.height, + eFlowStrategy, &uCurHAlignState, rgCurLineLayoutItems, + bUseBreakControl, fAvailHeight, fRealHeight, + fContentWidthLimit, &fContentCurRowY, + &fContentCurRowAvailWidth, &fContentCurRowHeight, + &bAddedItemInRow, &bForceEndPage, pContext, + false) != Result::kDone) { goto SuspendAndCreateNewRow; } pProcessor.reset(); @@ -1867,7 +1805,7 @@ pProcessor->InsertPendingItems(m_pCurChildNode); Result rs = InsertFlowedItem( pProcessor.get(), bContainerWidthAutoSize, - bContainerHeightAutoSize, containerSize.height, eFlowStrategy, + bContainerHeightAutoSize, container_size.height, eFlowStrategy, &uCurHAlignState, rgCurLineLayoutItems, bUseBreakControl, fAvailHeight, fRealHeight, fContentWidthLimit, &fContentCurRowY, &fContentCurRowAvailWidth, &fContentCurRowHeight, @@ -1905,11 +1843,11 @@ break; } - CalculateRowChildPosition( - rgCurLineLayoutItems, eFlowStrategy, bContainerHeightAutoSize, - bContainerWidthAutoSize, &fContentCalculatedWidth, - &fContentCalculatedHeight, &fContentCurRowY, fContentCurRowHeight, - fContentWidthLimit, bRootForceTb); + CalculateRowChildPosition(rgCurLineLayoutItems, eFlowStrategy, + bContainerHeightAutoSize, bContainerWidthAutoSize, + &calculated_size.width, &calculated_size.height, + &fContentCurRowY, fContentCurRowHeight, + fContentWidthLimit, bRootForceTb); m_fWidthLimit = fContentCurRowAvailWidth; if (bForceEndPage) break; @@ -1920,26 +1858,26 @@ if (bBreakDone) bRetValue = false; - containerSize = CalculateContainerComponentSizeFromContentSize( - GetFormNode(), bContainerWidthAutoSize, fContentCalculatedWidth, - bContainerHeightAutoSize, fContentCalculatedHeight, containerSize); + container_size = CalculateContainerComponentSizeFromContentSize( + GetFormNode(), bContainerWidthAutoSize, calculated_size.width, + bContainerHeightAutoSize, calculated_size.height, container_size); - if (containerSize.height >= kXFALayoutPrecision || m_pLayoutItem || + if (container_size.height >= kXFALayoutPrecision || m_pLayoutItem || bRetValue) { if (!m_pLayoutItem) m_pLayoutItem = CreateContentLayoutItem(GetFormNode()); - containerSize.height = std::max(containerSize.height, 0.f); + container_size.height = std::max(container_size.height, 0.f); - SetCurrentComponentSize(containerSize); + SetCurrentComponentSize(container_size); if (bForceEndPage) m_fUsedSize = 0; else m_fUsedSize += m_pLayoutItem->m_sSize.height; } - return bRetValue - ? Result::kDone - : (bIsManualBreak ? Result::kManualBreak : Result::kPageFullBreak); + if (bRetValue) + return Result::kDone; + return bIsManualBreak ? Result::kManualBreak : Result::kPageFullBreak; } bool CXFA_ItemLayoutProcessor::CalculateRowChildPosition( @@ -2226,23 +2164,9 @@ } UpdatePendingItemLayout(pTrailerLayoutItem); - CXFA_Margin* pMarginNode = + CXFA_Margin* pMargin = GetFormNode()->GetFirstChildByClass<CXFA_Margin>(XFA_Element::Margin); - float fLeftInset = 0; - float fTopInset = 0; - float fRightInset = 0; - float fBottomInset = 0; - if (pMarginNode) { - fLeftInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::LeftInset, XFA_Unit::Pt); - fTopInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::TopInset, XFA_Unit::Pt); - fRightInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::RightInset, XFA_Unit::Pt); - fBottomInset = pMarginNode->JSObject()->GetMeasureInUnit( - XFA_Attribute::BottomInset, XFA_Unit::Pt); - } - + CFX_FloatRect inset = GetMarginInset(pMargin); if (!IsAddNewRowForTrailer(pTrailerLayoutItem)) { pTrailerLayoutItem->m_sPos.y = m_fLastRowY; pTrailerLayoutItem->m_sPos.x = m_fLastRowWidth; @@ -2257,27 +2181,27 @@ if (fNewSplitPos > kXFALayoutPrecision) { SplitLayoutItem(fNewSplitPos); - pTrailerLayoutItem->m_sPos.y = fNewSplitPos - fTopInset - fBottomInset; + pTrailerLayoutItem->m_sPos.y = fNewSplitPos - inset.top - inset.bottom; } else { - pTrailerLayoutItem->m_sPos.y = fSplitPos - fTopInset - fBottomInset; + pTrailerLayoutItem->m_sPos.y = fSplitPos - inset.top - inset.bottom; } switch (pTrailerLayoutItem->GetFormNode()->JSObject()->GetEnum( XFA_Attribute::HAlign)) { case XFA_AttributeValue::Right: pTrailerLayoutItem->m_sPos.x = m_pLayoutItem->m_sSize.width - - fRightInset - + inset.right - pTrailerLayoutItem->m_sSize.width; break; case XFA_AttributeValue::Center: pTrailerLayoutItem->m_sPos.x = - (m_pLayoutItem->m_sSize.width - fLeftInset - fRightInset - + (m_pLayoutItem->m_sSize.width - inset.left - inset.right - pTrailerLayoutItem->m_sSize.width) / 2; break; case XFA_AttributeValue::Left: default: - pTrailerLayoutItem->m_sPos.x = fLeftInset; + pTrailerLayoutItem->m_sPos.x = inset.left; break; } m_pLayoutItem->m_sSize.height += fHeight; @@ -2815,3 +2739,66 @@ m_pKeepTailNode = nullptr; m_bIsProcessKeep = false; } + +void CXFA_ItemLayoutProcessor::AdjustContainerSpecifiedSize( + CXFA_LayoutContext* pContext, + CFX_SizeF* pSize, + bool* pContainerWidthAutoSize, + bool* pContainerHeightAutoSize) { + if (pContext && pContext->m_fCurColumnWidth.has_value()) { + pSize->width = pContext->m_fCurColumnWidth.value(); + *pContainerWidthAutoSize = false; + } + if (*pContainerHeightAutoSize) + return; + + pSize->height -= m_fUsedSize; + CXFA_Node* pParentNode = GetFormNode()->GetParent(); + bool bFocrTb = false; + if (!pParentNode || + GetLayout(pParentNode, &bFocrTb) != XFA_AttributeValue::Row) { + return; + } + + CXFA_Node* pChildContainer = GetFormNode()->GetFirstContainerChild(); + if (!pChildContainer || !pChildContainer->GetNextContainerSibling()) + return; + + pSize->height = 0; + *pContainerHeightAutoSize = true; +} + +CXFA_ContentLayoutItem* CXFA_ItemLayoutProcessor::FindLastContentLayoutItem( + XFA_AttributeValue eFlowStrategy) { + if (m_nCurChildNodeStage == Stage::kDone || + eFlowStrategy == XFA_AttributeValue::Tb) { + return nullptr; + } + + CXFA_ContentLayoutItem* pLastChild = + ToContentLayoutItem(m_pLayoutItem->GetFirstChild()); + for (CXFA_LayoutItem* pNext = pLastChild; pNext; + pNext = pNext->GetNextSibling()) { + CXFA_ContentLayoutItem* pContentNext = pNext->AsContentLayoutItem(); + if (pContentNext && pContentNext->m_sPos.y != pLastChild->m_sPos.y) + pLastChild = pContentNext; + } + return pLastChild; +} + +CFX_SizeF CXFA_ItemLayoutProcessor::CalculateLayoutItemSize( + const CXFA_ContentLayoutItem* pLastChild) { + CFX_SizeF size; + for (CXFA_LayoutItem* pChild = m_pLayoutItem->GetFirstChild(); + pChild != pLastChild; pChild = pChild->GetNextSibling()) { + CXFA_ContentLayoutItem* pLayout = pChild->AsContentLayoutItem(); + if (!pLayout || !pLayout->GetFormNode()->PresenceRequiresSpace()) + continue; + + float fWidth = pLayout->m_sPos.x + pLayout->m_sSize.width; + float fHeight = pLayout->m_sPos.y + pLayout->m_sSize.height; + size.width = std::max(size.width, fWidth); + size.height = std::max(size.height, fHeight); + } + return size; +}
diff --git a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.h b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.h index 5cfd8a2..6fdf25b 100644 --- a/xfa/fxfa/layout/cxfa_itemlayoutprocessor.h +++ b/xfa/fxfa/layout/cxfa_itemlayoutprocessor.h
@@ -176,6 +176,13 @@ Optional<Stage> HandleBookendTrailer(CXFA_Node* pParentContainer, CXFA_Node** pCurActionNode); void ProcessKeepNodesEnd(); + void AdjustContainerSpecifiedSize(CXFA_LayoutContext* pContext, + CFX_SizeF* pSize, + bool* pContainerWidthAutoSize, + bool* pContainerHeightAutoSize); + CXFA_ContentLayoutItem* FindLastContentLayoutItem( + XFA_AttributeValue eFlowStrategy); + CFX_SizeF CalculateLayoutItemSize(const CXFA_ContentLayoutItem* pLayoutChild); Stage m_nCurChildNodeStage = Stage::kNone; Result m_ePreProcessRs = Result::kDone;