| Index: xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp
|
| diff --git a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp
|
| index f3b1276797d2debcab7103f8171d111231f87c7a..6f2a5010a1facf5bbf8024d7c60698cb751fdbd3 100644
|
| --- a/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp
|
| +++ b/xfa/src/fxfa/src/parser/xfa_layout_itemlayout.cpp
|
| @@ -5,6 +5,7 @@
|
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
|
| #include <algorithm>
|
| +#include <memory>
|
|
|
| #include "xfa/src/foxitlib.h"
|
| #include "xfa/src/fxfa/src/common/xfa_utils.h"
|
| @@ -1752,14 +1753,14 @@ static void XFA_ItemLayoutProcessor_AddPendingNode(
|
| CXFA_ItemLayoutProcessor* pProcessor,
|
| CXFA_Node* pPendingNode,
|
| FX_BOOL bBreakPending) {
|
| - pProcessor->m_rgPendingNodes.AddTail(pPendingNode);
|
| + pProcessor->m_PendingNodes.push_back(pPendingNode);
|
| pProcessor->m_bBreakPending = bBreakPending;
|
| }
|
| static FX_FLOAT XFA_ItemLayoutProcessor_InsertPendingItems(
|
| CXFA_ItemLayoutProcessor* pProcessor,
|
| CXFA_Node* pCurChildNode) {
|
| FX_FLOAT fTotalHeight = 0;
|
| - if (pProcessor->m_rgPendingNodes.GetCount() < 1) {
|
| + if (pProcessor->m_PendingNodes.empty()) {
|
| return fTotalHeight;
|
| }
|
| if (pProcessor->m_pLayoutItem == NULL) {
|
| @@ -1767,22 +1768,19 @@ static FX_FLOAT XFA_ItemLayoutProcessor_InsertPendingItems(
|
| pProcessor->CreateContentLayoutItem(pCurChildNode);
|
| pProcessor->m_pLayoutItem->m_sSize.Set(0, 0);
|
| }
|
| - while (pProcessor->m_rgPendingNodes.GetCount() > 0) {
|
| - FX_POSITION pos = pProcessor->m_rgPendingNodes.GetHeadPosition();
|
| - CXFA_Node* pPendingNode =
|
| - reinterpret_cast<CXFA_Node*>(pProcessor->m_rgPendingNodes.GetAt(pos));
|
| - pProcessor->m_rgPendingNodes.RemoveAt(pos);
|
| - CXFA_ContentLayoutItem* pPendingLayoutItem = NULL;
|
| - CXFA_ItemLayoutProcessor* pPendingProcessor =
|
| - new CXFA_ItemLayoutProcessor(pPendingNode, NULL);
|
| + while (!pProcessor->m_PendingNodes.empty()) {
|
| + std::unique_ptr<CXFA_ItemLayoutProcessor> pPendingProcessor(
|
| + new CXFA_ItemLayoutProcessor(pProcessor->m_PendingNodes.front(),
|
| + nullptr));
|
| + pProcessor->m_PendingNodes.pop_front();
|
| #ifndef _XFA_LAYOUTITEM_ProcessCACHE_
|
| pPendingProcessor->m_pPageMgrCreateItem = pProcessor->m_pPageMgrCreateItem;
|
| #endif
|
| pPendingProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX);
|
| - pPendingLayoutItem = pPendingProcessor->HasLayoutItem()
|
| - ? pPendingProcessor->ExtractLayoutItem()
|
| - : NULL;
|
| - delete pPendingProcessor;
|
| + CXFA_ContentLayoutItem* pPendingLayoutItem =
|
| + pPendingProcessor->HasLayoutItem()
|
| + ? pPendingProcessor->ExtractLayoutItem()
|
| + : nullptr;
|
| if (pPendingLayoutItem) {
|
| XFA_ItemLayoutProcessor_AddLeaderAfterSplit(pProcessor,
|
| pPendingLayoutItem);
|
| @@ -2715,8 +2713,8 @@ XFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayoutFlowedContainer(
|
| }
|
| }
|
| FX_BOOL bRetValue =
|
| - (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done &&
|
| - m_rgPendingNodes.GetCount() == 0);
|
| + m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done &&
|
| + m_PendingNodes.empty();
|
| if (bBreakDone) {
|
| bRetValue = FALSE;
|
| }
|
|
|