1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file.
4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <algorithm>
8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/foxitlib.h"
10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_utils.h"
11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_object.h"
12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_document.h"
13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_parser.h"
14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_script.h"
15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_docdata.h"
16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_doclayout.h"
17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_localemgr.h"
18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa/src/fxfa/src/common/xfa_fm2jsapi.h"
19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_document_layout_imp.h"
20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_layout_itemlayout.h"
21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_layout_pagemgr_new.h"
22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "xfa_layout_appadapter.h"
23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_ItemLayoutProcessor::CXFA_ItemLayoutProcessor(CXFA_Node* pNode,
24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                   CXFA_LayoutPageMgr* pPageMgr)
25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    : m_bKeepBreakFinish(FALSE),
26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bIsProcessKeep(FALSE),
27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pKeepHeadNode(nullptr),
28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pKeepTailNode(nullptr),
29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode(pNode),
30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem(nullptr),
31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef _XFA_LAYOUTITEM_ProcessCACHE_
32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pOldLayoutItem(nullptr),
33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else
34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pPageMgrCreateItem(nullptr),
35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pCurChildNode(XFA_LAYOUT_INVALIDNODE),
37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pCurChildPreprocessor(nullptr),
38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_nCurChildNodeStage(XFA_ItemLayoutProcessorStages_None),
39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fUsedSize(0),
40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pPageMgr(pPageMgr),
41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bBreakPending(TRUE),
42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowWidth(0),
43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowY(0),
44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fWidthLimite(0),
45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bUseInheriated(FALSE),
46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_ePreProcessRs(XFA_ItemLayoutProcessorResult_Done),
47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bHasAvailHeight(TRUE) {
48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FXSYS_assert(m_pFormNode && (m_pFormNode->IsContainerNode() ||
49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               m_pFormNode->GetClassID() == XFA_ELEMENT_Form));
50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef _XFA_LAYOUTITEM_ProcessCACHE_
51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pOldLayoutItem =
52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (CXFA_ContentLayoutItem*)m_pFormNode->GetUserData(XFA_LAYOUTITEMKEY);
53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_ContentLayoutItem* CXFA_ItemLayoutProcessor::CreateContentLayoutItem(
56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pFormNode) {
57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pFormNode) {
58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return NULL;
59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pLayoutItem = NULL;
61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef _XFA_LAYOUTITEM_ProcessCACHE_
62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pOldLayoutItem) {
63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutItem = m_pOldLayoutItem;
64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pOldLayoutItem = m_pOldLayoutItem->m_pNext;
65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return pLayoutItem;
66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pLayoutItem = (CXFA_ContentLayoutItem*)pFormNode->GetDocument()
68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    ->GetParser()
69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    ->GetNotify()
70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    ->OnCreateLayoutItem(pFormNode);
71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#else
72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pLayoutItem =
73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (CXFA_ContentLayoutItem*)m_pPageMgrCreateItem->FindOrCreateLayoutItem(
74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pFormNode);
75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pPrevLayoutItem =
77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (CXFA_ContentLayoutItem*)pFormNode->GetUserData(XFA_LAYOUTITEMKEY);
78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pPrevLayoutItem) {
79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (pPrevLayoutItem->m_pNext) {
80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pPrevLayoutItem = pPrevLayoutItem->m_pNext;
81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pPrevLayoutItem->m_pNext = pLayoutItem;
83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutItem->m_pPrev = pPrevLayoutItem;
84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pFormNode->SetUserData(XFA_LAYOUTITEMKEY, pLayoutItem);
86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pLayoutItem;
88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::FindLayoutItemSplitPos(
90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pLayoutItem,
91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fCurVerticalOffset,
92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fProposedSplitPos,
93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bAppChange,
94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bCalculateMargin) {
95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pFormNode = pLayoutItem->m_pFormNode;
96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (fProposedSplitPos > fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION &&
97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fProposedSplitPos <= fCurVerticalOffset + pLayoutItem->m_sSize.y -
98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               XFA_LAYOUT_FLOAT_PERCISION) {
99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    switch (pFormNode->GetIntact()) {
100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ATTRIBUTEENUM_None: {
101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_BOOL bAnyChanged = FALSE;
102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_Document* pDocument = pFormNode->GetDocument();
103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        IXFA_Notify* pNotify = pDocument->GetParser()->GetNotify();
104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fCurTopMargin = 0, fCurBottomMargin = 0;
105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_Node* pMarginNode =
106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pMarginNode && bCalculateMargin) {
108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fCurTopMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset)
109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              .ToUnit(XFA_UNIT_Pt);
110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fCurBottomMargin = pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset)
111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                 .ToUnit(XFA_UNIT_Pt);
112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_BOOL bChanged = TRUE;
114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        while (bChanged) {
115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bChanged = FALSE;
116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          {
117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            FX_FLOAT fRelSplitPos = fProposedSplitPos - fCurVerticalOffset;
118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pNotify->FindSplitPos(pFormNode, pLayoutItem->GetIndex(),
119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      fRelSplitPos)) {
120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bAnyChanged = TRUE;
121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bChanged = TRUE;
122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              fProposedSplitPos = fCurVerticalOffset + fRelSplitPos;
123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bAppChange = TRUE;
124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (fProposedSplitPos <=
125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION) {
126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                return TRUE;
127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FX_FLOAT fRelSplitPos = fProposedSplitPos - fCurBottomMargin;
131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (CXFA_ContentLayoutItem* pChildItem =
132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   (CXFA_ContentLayoutItem*)pLayoutItem->m_pFirstChild;
133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               pChildItem;
134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               pChildItem =
135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   (CXFA_ContentLayoutItem*)pChildItem->m_pNextSibling) {
136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            FX_FLOAT fChildOffset =
137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                fCurVerticalOffset + fCurTopMargin + pChildItem->m_sPos.y;
138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            FX_BOOL bAppChange = FALSE;
139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (FindLayoutItemSplitPos(pChildItem, fChildOffset, fRelSplitPos,
140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       bAppChange, bCalculateMargin)) {
141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (fRelSplitPos - fChildOffset < XFA_LAYOUT_FLOAT_PERCISION &&
142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  bAppChange) {
143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                fProposedSplitPos = fRelSplitPos - fCurTopMargin;
144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              } else {
145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                fProposedSplitPos = fRelSplitPos + fCurBottomMargin;
146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bAnyChanged = TRUE;
148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bChanged = TRUE;
149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (fProposedSplitPos <=
150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  fCurVerticalOffset + XFA_LAYOUT_FLOAT_PERCISION) {
151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                return TRUE;
152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (bAnyChanged) {
154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                break;
155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return bAnyChanged;
160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ATTRIBUTEENUM_ContentArea:
162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ATTRIBUTEENUM_PageArea: {
163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fProposedSplitPos = fCurVerticalOffset;
164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return TRUE;
165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      default:
167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return FALSE;
168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic XFA_ATTRIBUTEENUM XFA_ItemLayoutProcessor_GetLayout(
173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pFormNode,
174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bRootForceTb) {
175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bRootForceTb = FALSE;
176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM eLayoutMode;
177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFormNode->TryEnum(XFA_ATTRIBUTE_Layout, eLayoutMode, FALSE)) {
178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return eLayoutMode;
179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pParentNode = pFormNode->GetNodeItem(XFA_NODEITEM_Parent);
181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pParentNode && pParentNode->GetClassID() == XFA_ELEMENT_Form) {
182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bRootForceTb = TRUE;
183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return XFA_ATTRIBUTEENUM_Tb;
184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return XFA_ATTRIBUTEENUM_Position;
186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic FX_BOOL XFA_ExistContainerKeep(CXFA_Node* pCurNode, FX_BOOL bPreFind) {
188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pCurNode == NULL || !XFA_ItemLayoutProcessor_IsTakingSpace(pCurNode)) {
189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_NODEITEM eItemType = XFA_NODEITEM_PrevSibling;
192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bPreFind) {
193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    eItemType = XFA_NODEITEM_NextSibling;
194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pPreContainer =
196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pCurNode->GetNodeItem(eItemType, XFA_OBJECTTYPE_ContainerNode);
197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pPreContainer == NULL) {
198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pKeep = pCurNode->GetFirstChildByClass(XFA_ELEMENT_Keep);
201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pKeep) {
202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTEENUM ePrevious;
203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTE eKeepType = XFA_ATTRIBUTE_Previous;
204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!bPreFind) {
205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eKeepType = XFA_ATTRIBUTE_Next;
206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pKeep->TryEnum(eKeepType, ePrevious, FALSE)) {
208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (ePrevious == XFA_ATTRIBUTEENUM_ContentArea ||
209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          ePrevious == XFA_ATTRIBUTEENUM_PageArea) {
210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return TRUE;
211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pKeep = pPreContainer->GetFirstChildByClass(XFA_ELEMENT_Keep);
215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pKeep) {
216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM eNext;
219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTE eKeepType = XFA_ATTRIBUTE_Next;
220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bPreFind) {
221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    eKeepType = XFA_ATTRIBUTE_Previous;
222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pKeep->TryEnum(eKeepType, eNext, FALSE)) {
224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (eNext == XFA_ATTRIBUTEENUM_ContentArea ||
227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eNext == XFA_ATTRIBUTEENUM_PageArea) {
228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CXFA_ItemLayoutProcessor::FindSplitPos(FX_FLOAT fProposedSplitPos) {
233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pLayoutItem);
234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM eLayout = m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bCalculateMargin = TRUE;
236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (eLayout == XFA_ATTRIBUTEENUM_Position) {
237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bCalculateMargin = FALSE;
238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (fProposedSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bAppChange = FALSE;
241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!FindLayoutItemSplitPos(m_pLayoutItem, 0, fProposedSplitPos, bAppChange,
242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                bCalculateMargin)) {
243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return fProposedSplitPos;
247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::SplitLayoutItem(
249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pLayoutItem,
250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pSecondParent,
251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fSplitPos) {
252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fCurTopMargin = 0, fCurBottomMargin = 0;
253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM eLayout = m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bCalculateMargin = TRUE;
255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (eLayout == XFA_ATTRIBUTEENUM_Position) {
256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bCalculateMargin = FALSE;
257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMarginNode =
259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutItem->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pMarginNode && bCalculateMargin) {
261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurTopMargin =
262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt);
263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurBottomMargin =
264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt);
265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pSecondLayoutItem = NULL;
267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pCurChildPreprocessor &&
268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pCurChildPreprocessor->m_pFormNode == pLayoutItem->m_pFormNode) {
269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pSecondLayoutItem = m_pCurChildPreprocessor->CreateContentLayoutItem(
270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pLayoutItem->m_pFormNode);
271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pSecondLayoutItem = CreateContentLayoutItem(pLayoutItem->m_pFormNode);
273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pSecondLayoutItem->m_sPos.x = pLayoutItem->m_sPos.x;
275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pSecondLayoutItem->m_sSize.x = pLayoutItem->m_sSize.x;
276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pSecondLayoutItem->m_sPos.y = 0;
277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pSecondLayoutItem->m_sSize.y = pLayoutItem->m_sSize.y - fSplitPos;
278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pLayoutItem->m_sSize.y -= pSecondLayoutItem->m_sSize.y;
279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pLayoutItem->m_pFirstChild) {
280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pSecondLayoutItem->m_sSize.y += fCurTopMargin;
281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pSecondParent) {
283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pSecondParent->AddChild(pSecondLayoutItem);
284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fCurTopMargin > 0 && pLayoutItem->m_pFirstChild) {
285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pSecondParent->m_sSize.y += fCurTopMargin;
286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_ContentLayoutItem* pParentItem =
287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          (CXFA_ContentLayoutItem*)pSecondParent->m_pParent;
288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while (pParentItem) {
289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pParentItem->m_sSize.y += fCurTopMargin;
290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pParentItem = (CXFA_ContentLayoutItem*)pParentItem->m_pParent;
291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pSecondLayoutItem->m_pParent = pLayoutItem->m_pParent;
295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pSecondLayoutItem->m_pNextSibling = pLayoutItem->m_pNextSibling;
296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutItem->m_pNextSibling = pSecondLayoutItem;
297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pChildren =
299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (CXFA_ContentLayoutItem*)pLayoutItem->m_pFirstChild;
300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pLayoutItem->m_pFirstChild = NULL;
301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT lHeightForKeep = 0;
302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_ArrayTemplate<CXFA_ContentLayoutItem*> keepLayoutItems;
303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fAddMarginHeight = 0;
304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_ContentLayoutItem* pChildItem = pChildren, * pChildNext = NULL;
305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pChildItem; pChildItem = pChildNext) {
306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pChildNext = (CXFA_ContentLayoutItem*)pChildItem->m_pNextSibling;
307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pChildItem->m_pNextSibling = NULL;
308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fSplitPos <= fCurTopMargin + pChildItem->m_sPos.y + fCurBottomMargin +
309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         XFA_LAYOUT_FLOAT_PERCISION) {
310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!XFA_ExistContainerKeep(pChildItem->m_pFormNode, TRUE)) {
311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pChildItem->m_sPos.y -= fSplitPos - fCurBottomMargin;
312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pChildItem->m_sPos.y += lHeightForKeep;
313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pChildItem->m_sPos.y += fAddMarginHeight;
314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pSecondLayoutItem->AddChild(pChildItem);
315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (lHeightForKeep < XFA_LAYOUT_FLOAT_PERCISION) {
317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int32_t iIndex = 0; iIndex < keepLayoutItems.GetSize();
318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               iIndex++) {
319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CXFA_ContentLayoutItem* pPreItem = keepLayoutItems[iIndex];
320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pLayoutItem->RemoveChild(pPreItem);
321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pPreItem->m_sPos.y -= fSplitPos;
322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pPreItem->m_sPos.y < 0) {
323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pPreItem->m_sPos.y = 0;
324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pPreItem->m_sPos.y + pPreItem->m_sSize.y > lHeightForKeep) {
326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pPreItem->m_sPos.y = lHeightForKeep;
327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              lHeightForKeep += pPreItem->m_sSize.y;
328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pSecondLayoutItem->m_sSize.y += pPreItem->m_sSize.y;
329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (pSecondParent) {
330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pSecondParent->m_sSize.y += pPreItem->m_sSize.y;
331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pSecondLayoutItem->AddChild(pPreItem);
334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pChildItem->m_sPos.y -= fSplitPos;
337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pChildItem->m_sPos.y += lHeightForKeep;
338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pChildItem->m_sPos.y += fAddMarginHeight;
339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pSecondLayoutItem->AddChild(pChildItem);
340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else if (fSplitPos + XFA_LAYOUT_FLOAT_PERCISION >=
342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               fCurTopMargin + fCurBottomMargin + pChildItem->m_sPos.y +
343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   pChildItem->m_sSize.y) {
344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutItem->AddChild(pChildItem);
345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (XFA_ExistContainerKeep(pChildItem->m_pFormNode, FALSE)) {
346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        keepLayoutItems.Add(pChildItem);
347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        keepLayoutItems.RemoveAll();
349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fOldHeight = pSecondLayoutItem->m_sSize.y;
352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      SplitLayoutItem(
353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pChildItem, pSecondLayoutItem,
354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fSplitPos - fCurTopMargin - fCurBottomMargin - pChildItem->m_sPos.y);
355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fAddMarginHeight = pSecondLayoutItem->m_sSize.y - fOldHeight;
356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutItem->AddChild(pChildItem);
357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::SplitLayoutItem(FX_FLOAT fSplitPos) {
361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pLayoutItem);
362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  SplitLayoutItem(m_pLayoutItem, NULL, fSplitPos);
363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return;
364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannIXFA_LayoutPage* CXFA_LayoutItem::GetPage() const {
367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_LayoutItem* pCurNode = const_cast<CXFA_LayoutItem*>(this); pCurNode;
368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pCurNode = pCurNode->m_pParent) {
369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pCurNode->m_pFormNode->GetClassID() == XFA_ELEMENT_PageArea)
370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return static_cast<CXFA_ContainerLayoutItem*>(pCurNode);
371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return nullptr;
373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_LayoutItem::GetFormNode() const {
376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pFormNode;
377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_LayoutItem::GetRect(CFX_RectF& rtLayout, FX_BOOL bRelative) const {
380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CXFA_ContentLayoutItem* pThis =
382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<const CXFA_ContentLayoutItem*>(this);
383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_PointF sPos = pThis->m_sPos;
384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_SizeF sSize = pThis->m_sSize;
385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bRelative) {
386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (CXFA_LayoutItem* pLayoutItem = pThis->m_pParent; pLayoutItem;
387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutItem = pLayoutItem->m_pParent) {
388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CXFA_ContentLayoutItem* pContent =
389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pLayoutItem->AsContentLayoutItem()) {
390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        sPos += pContent->m_sPos;
391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (CXFA_Node* pMarginNode =
392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pLayoutItem->m_pFormNode->GetFirstChildByClass(
393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    XFA_ELEMENT_Margin)) {
394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sPos.Add(pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset)
395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       .ToUnit(XFA_UNIT_Pt),
396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset)
397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       .ToUnit(XFA_UNIT_Pt));
398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_ContentArea) {
401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          sPos.Add(pLayoutItem->m_pFormNode->GetMeasure(XFA_ATTRIBUTE_X)
402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       .ToUnit(XFA_UNIT_Pt),
403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   pLayoutItem->m_pFormNode->GetMeasure(XFA_ATTRIBUTE_Y)
404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       .ToUnit(XFA_UNIT_Pt));
405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else if (pLayoutItem->m_pFormNode->GetClassID() ==
407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   XFA_ELEMENT_PageArea) {
408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  rtLayout.Set(sPos.x, sPos.y, sSize.x, sSize.y);
414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_LayoutItem* CXFA_LayoutItem::GetParent() const {
417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return m_pParent;
418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst CXFA_LayoutItem* CXFA_LayoutItem::GetFirst() const {
421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CXFA_ContentLayoutItem* pCurNode =
423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<const CXFA_ContentLayoutItem*>(this);
424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pCurNode->m_pPrev) {
425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pCurNode = pCurNode->m_pPrev;
426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pCurNode;
428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_LayoutItem* CXFA_LayoutItem::GetFirst() {
431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pCurNode = static_cast<CXFA_ContentLayoutItem*>(this);
433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pCurNode->m_pPrev) {
434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pCurNode = pCurNode->m_pPrev;
435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pCurNode;
437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_LayoutItem* CXFA_LayoutItem::GetLast() {
440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pCurNode = static_cast<CXFA_ContentLayoutItem*>(this);
442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pCurNode->m_pNext) {
443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pCurNode = pCurNode->m_pNext;
444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pCurNode;
446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst CXFA_LayoutItem* CXFA_LayoutItem::GetLast() const {
449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CXFA_ContentLayoutItem* pCurNode =
451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<const CXFA_ContentLayoutItem*>(this);
452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pCurNode->m_pNext) {
453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pCurNode = pCurNode->m_pNext;
454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pCurNode;
456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_LayoutItem* CXFA_LayoutItem::GetPrev() const {
459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<const CXFA_ContentLayoutItem*>(this)->m_pPrev;
461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_LayoutItem* CXFA_LayoutItem::GetNext() const {
464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return static_cast<const CXFA_ContentLayoutItem*>(this)->m_pNext;
466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_LayoutItem::GetIndex() const {
469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iIndex = 0;
471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CXFA_ContentLayoutItem* pCurNode =
472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<const CXFA_ContentLayoutItem*>(this);
473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pCurNode->m_pPrev) {
474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pCurNode = pCurNode->m_pPrev;
475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    ++iIndex;
476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return iIndex;
478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CXFA_LayoutItem::GetCount() const {
481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_bIsContentLayoutItem);
482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iCount = GetIndex() + 1;
483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  const CXFA_ContentLayoutItem* pCurNode =
484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      static_cast<const CXFA_ContentLayoutItem*>(this);
485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pCurNode->m_pNext) {
486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pCurNode = pCurNode->m_pNext;
487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iCount++;
488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return iCount;
490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_LayoutItem::AddChild(CXFA_LayoutItem* pChildItem) {
493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pChildItem->m_pParent) {
494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pChildItem->m_pParent->RemoveChild(pChildItem);
495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pChildItem->m_pParent = this;
497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFirstChild == NULL) {
498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFirstChild = pChildItem;
499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutItem* pExistingChildItem = m_pFirstChild;
501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (pExistingChildItem->m_pNextSibling) {
502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pExistingChildItem = pExistingChildItem->m_pNextSibling;
503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pExistingChildItem->m_pNextSibling = pChildItem;
505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_LayoutItem::AddHeadChild(CXFA_LayoutItem* pChildItem) {
508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pChildItem->m_pParent) {
509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pChildItem->m_pParent->RemoveChild(pChildItem);
510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pChildItem->m_pParent = this;
512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFirstChild == NULL) {
513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFirstChild = pChildItem;
514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutItem* pExistingChildItem = m_pFirstChild;
516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFirstChild = pChildItem;
517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFirstChild->m_pNextSibling = pExistingChildItem;
518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_LayoutItem::InsertChild(CXFA_LayoutItem* pBeforeItem,
521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  CXFA_LayoutItem* pChildItem) {
522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pBeforeItem->m_pParent != this) {
523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pChildItem->m_pParent) {
526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pChildItem->m_pParent = NULL;
527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pChildItem->m_pParent = this;
529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_LayoutItem* pExistingChildItem = pBeforeItem->m_pNextSibling;
530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pBeforeItem->m_pNextSibling = pChildItem;
531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pChildItem->m_pNextSibling = pExistingChildItem;
532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_LayoutItem::RemoveChild(CXFA_LayoutItem* pChildItem) {
534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pChildItem->m_pParent != this) {
535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pFirstChild == pChildItem) {
538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pFirstChild = pChildItem->m_pNextSibling;
539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutItem* pExistingChildItem = m_pFirstChild;
541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (pExistingChildItem &&
542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pExistingChildItem->m_pNextSibling != pChildItem) {
543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pExistingChildItem = pExistingChildItem->m_pNextSibling;
544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pExistingChildItem) {
546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pExistingChildItem->m_pNextSibling = pChildItem->m_pNextSibling;
547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pChildItem->m_pNextSibling = NULL;
550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pChildItem->m_pParent = NULL;
551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_ContentLayoutItem* CXFA_ItemLayoutProcessor::ExtractLayoutItem() {
553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pLayoutItem = m_pLayoutItem;
554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pLayoutItem) {
555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pLayoutItem = (CXFA_ContentLayoutItem*)pLayoutItem->m_pNextSibling;
556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutItem->m_pNextSibling = NULL;
557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef _XFA_LAYOUTITEM_ProcessCACHE_
559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done &&
560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ToContentLayoutItem(m_pOldLayoutItem)) {
561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_pOldLayoutItem->m_pPrev) {
562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pOldLayoutItem->m_pPrev->m_pNext = NULL;
563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IXFA_Notify* pNotify =
565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pOldLayoutItem->m_pFormNode->GetDocument()->GetParser()->GetNotify();
566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    IXFA_DocLayout* pDocLayout =
567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pOldLayoutItem->m_pFormNode->GetDocument()->GetDocLayout();
568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pOldLayoutItem = m_pOldLayoutItem;
569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (pOldLayoutItem) {
570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_ContentLayoutItem* pNextOldLayoutItem = pOldLayoutItem->m_pNext;
571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pNotify->OnLayoutEvent(pDocLayout, pOldLayoutItem,
572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             XFA_LAYOUTEVENT_ItemRemoving);
573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      delete pOldLayoutItem;
574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pOldLayoutItem = pNextOldLayoutItem;
575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pOldLayoutItem = NULL;
577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pLayoutItem;
580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic FX_BOOL XFA_ItemLayoutProcessor_FindBreakNode(
582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pContainerNode,
583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node*& pCurActionNode,
584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessorStages& nCurStage,
585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bBreakBefore) {
586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bFindRs = FALSE;
587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_Node* pBreakNode = pContainerNode; pBreakNode;
588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pBreakNode = pBreakNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTE eAttributeType = XFA_ATTRIBUTE_Before;
590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!bBreakBefore) {
591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      eAttributeType = XFA_ATTRIBUTE_After;
592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    switch (pBreakNode->GetClassID()) {
594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ELEMENT_BreakBefore: {
595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (bBreakBefore) {
596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pCurActionNode = pBreakNode;
597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          nCurStage = XFA_ItemLayoutProcessorStages_BreakBefore;
598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bFindRs = TRUE;
599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ELEMENT_BreakAfter: {
602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (!bBreakBefore) {
603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pCurActionNode = pBreakNode;
604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          nCurStage = XFA_ItemLayoutProcessorStages_BreakAfter;
605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bFindRs = TRUE;
606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } break;
608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ELEMENT_Break:
609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pBreakNode->GetEnum(eAttributeType) != XFA_ATTRIBUTEENUM_Auto) {
610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pCurActionNode = pBreakNode;
611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          nCurStage = XFA_ItemLayoutProcessorStages_BreakBefore;
612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (!bBreakBefore) {
613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            nCurStage = XFA_ItemLayoutProcessorStages_BreakAfter;
614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bFindRs = TRUE;
616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      default:
619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bFindRs) {
622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bFindRs;
626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef _XFA_LAYOUTITEM_ProcessCACHE_
628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void XFA_DeleteLayoutGeneratedNode(CXFA_Node* pGenerateNode) {
629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_Notify* pNotify = pGenerateNode->GetDocument()->GetParser()->GetNotify();
630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_DocLayout* pDocLayout = pGenerateNode->GetDocument()->GetDocLayout();
631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> sIterator(
632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pGenerateNode);
633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode;
634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pNode = sIterator.MoveToNext()) {
635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pCurLayoutItem =
636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (CXFA_ContentLayoutItem*)pNode->GetUserData(XFA_LAYOUTITEMKEY);
637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pNextLayoutItem = NULL;
638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (pCurLayoutItem) {
639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pNextLayoutItem = pCurLayoutItem->m_pNext;
640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pNotify->OnLayoutEvent(pDocLayout, pCurLayoutItem,
641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             XFA_LAYOUTEVENT_ItemRemoving);
642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      delete pCurLayoutItem;
643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pCurLayoutItem = pNextLayoutItem;
644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pGenerateNode->GetNodeItem(XFA_NODEITEM_Parent)->RemoveChild(pGenerateNode);
647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::XFA_ItemLayoutProcessor_GotoNextContainerNode(
650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node*& pCurActionNode,
651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessorStages& nCurStage,
652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pParentContainer,
653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bUsePageBreak) {
654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pEntireContainer = pParentContainer;
655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pChildContainer = XFA_LAYOUT_INVALIDNODE;
656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nCurStage) {
657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ItemLayoutProcessorStages_BreakBefore:
658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ItemLayoutProcessorStages_BreakAfter: {
659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pChildContainer = pCurActionNode->GetNodeItem(XFA_NODEITEM_Parent);
660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } break;
661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ItemLayoutProcessorStages_Keep:
662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ItemLayoutProcessorStages_Container:
663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pChildContainer = pCurActionNode;
664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pChildContainer = XFA_LAYOUT_INVALIDNODE;
667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nCurStage) {
670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ItemLayoutProcessorStages_Keep: {
671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Node* pBreakAfterNode =
672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pChildContainer->GetNodeItem(XFA_NODEITEM_FirstChild);
673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!m_bKeepBreakFinish &&
674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ItemLayoutProcessor_FindBreakNode(pBreakAfterNode, pCurActionNode,
675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                nCurStage, FALSE)) {
676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return;
677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      goto CheckNextChildContainer;
679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ItemLayoutProcessorStages_None: {
681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pCurActionNode = XFA_LAYOUT_INVALIDNODE;
682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ItemLayoutProcessorStages_BookendLeader:
683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (CXFA_Node* pBookendNode =
684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 pCurActionNode == XFA_LAYOUT_INVALIDNODE
685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     ? pEntireContainer->GetNodeItem(XFA_NODEITEM_FirstChild)
686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     : pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling);
687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             pBookendNode; pBookendNode = pBookendNode->GetNodeItem(
688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               XFA_NODEITEM_NextSibling)) {
689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          switch (pBookendNode->GetClassID()) {
690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            case XFA_ELEMENT_Bookend:
691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            case XFA_ELEMENT_Break:
692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pCurActionNode = pBookendNode;
693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              nCurStage = XFA_ItemLayoutProcessorStages_BookendLeader;
694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              return;
695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            default:
696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              break;
697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      {
701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pCurActionNode = XFA_LAYOUT_INVALIDNODE;
702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_BreakBefore:
703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pCurActionNode != XFA_LAYOUT_INVALIDNODE) {
704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CXFA_Node* pBreakBeforeNode =
705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling);
706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (!m_bKeepBreakFinish &&
707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                XFA_ItemLayoutProcessor_FindBreakNode(
708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    pBreakBeforeNode, pCurActionNode, nCurStage, TRUE)) {
709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              return;
710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (m_bIsProcessKeep) {
712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (ProcessKeepNodesForBreakBefore(pCurActionNode, nCurStage,
713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 pChildContainer)) {
714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                return;
715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              goto CheckNextChildContainer;
717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pCurActionNode = pChildContainer;
719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            nCurStage = XFA_ItemLayoutProcessorStages_Container;
720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            return;
721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          goto CheckNextChildContainer;
723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ItemLayoutProcessorStages_Container: {
725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pCurActionNode = XFA_LAYOUT_INVALIDNODE;
726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ItemLayoutProcessorStages_BreakAfter: {
727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pCurActionNode == XFA_LAYOUT_INVALIDNODE) {
728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Node* pBreakAfterNode =
729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pChildContainer->GetNodeItem(XFA_NODEITEM_FirstChild);
730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (!m_bKeepBreakFinish &&
731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              XFA_ItemLayoutProcessor_FindBreakNode(
732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pBreakAfterNode, pCurActionNode, nCurStage, FALSE)) {
733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            return;
734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else {
736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Node* pBreakAfterNode =
737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling);
738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (XFA_ItemLayoutProcessor_FindBreakNode(
739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pBreakAfterNode, pCurActionNode, nCurStage, FALSE)) {
740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            return;
741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        goto CheckNextChildContainer;
744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CheckNextChildContainer : {
747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Node* pNextChildContainer =
748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pChildContainer == XFA_LAYOUT_INVALIDNODE
749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              ? pEntireContainer->GetNodeItem(XFA_NODEITEM_FirstChild,
750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                              XFA_OBJECTTYPE_ContainerNode)
751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              : pChildContainer->GetNodeItem(XFA_NODEITEM_NextSibling,
752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             XFA_OBJECTTYPE_ContainerNode);
753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while (pNextChildContainer &&
754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             pNextChildContainer->HasFlag(XFA_NODEFLAG_LayoutGeneratedNode)) {
755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_Node* pSaveNode = pNextChildContainer;
756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pNextChildContainer = pNextChildContainer->GetNodeItem(
757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_NODEITEM_NextSibling, XFA_OBJECTTYPE_ContainerNode);
758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifdef _XFA_LAYOUTITEM_ProcessCACHE_
759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pSaveNode->HasFlag(XFA_NODEFLAG_UnusedNode)) {
760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_DeleteLayoutGeneratedNode(pSaveNode);
761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!pNextChildContainer) {
765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        goto NoMoreChildContainer;
766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_BOOL bLastKeep = FALSE;
768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (ProcessKeepNodesForCheckNext(pCurActionNode, nCurStage,
769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       pNextChildContainer, bLastKeep)) {
770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return;
771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!m_bKeepBreakFinish && !bLastKeep &&
773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ItemLayoutProcessor_FindBreakNode(
774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pNextChildContainer->GetNodeItem(XFA_NODEITEM_FirstChild),
775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pCurActionNode, nCurStage, TRUE)) {
776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return;
777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pCurActionNode = pNextChildContainer;
779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (m_bIsProcessKeep) {
780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nCurStage = XFA_ItemLayoutProcessorStages_Keep;
781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nCurStage = XFA_ItemLayoutProcessorStages_Container;
783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return;
785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    NoMoreChildContainer : {
787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pCurActionNode = XFA_LAYOUT_INVALIDNODE;
788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      case XFA_ItemLayoutProcessorStages_BookendTrailer:
789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (CXFA_Node* pBookendNode =
790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 pCurActionNode == XFA_LAYOUT_INVALIDNODE
791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     ? pEntireContainer->GetNodeItem(XFA_NODEITEM_FirstChild)
792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     : pCurActionNode->GetNodeItem(XFA_NODEITEM_NextSibling);
793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             pBookendNode; pBookendNode = pBookendNode->GetNodeItem(
794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               XFA_NODEITEM_NextSibling)) {
795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          switch (pBookendNode->GetClassID()) {
796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            case XFA_ELEMENT_Bookend:
797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            case XFA_ELEMENT_Break:
798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pCurActionNode = pBookendNode;
799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              nCurStage = XFA_ItemLayoutProcessorStages_BookendTrailer;
800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              return;
801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            default:
802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              break;
803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pCurActionNode = NULL;
808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nCurStage = XFA_ItemLayoutProcessorStages_Done;
809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::ProcessKeepNodesForCheckNext(
812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node*& pCurActionNode,
813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessorStages& nCurStage,
814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node*& pNextContainer,
815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bLastKeepNode) {
816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bCanSplite = pNextContainer->GetIntact() == XFA_ATTRIBUTEENUM_None;
817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bNextKeep = FALSE;
818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (XFA_ExistContainerKeep(pNextContainer, FALSE)) {
819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bNextKeep = TRUE;
820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bNextKeep && !bCanSplite) {
822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!m_bIsProcessKeep && !m_bKeepBreakFinish) {
823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pKeepHeadNode = pNextContainer;
824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bIsProcessKeep = TRUE;
825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_bIsProcessKeep && m_pKeepHeadNode != NULL) {
828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pKeepTailNode = pNextContainer;
829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!m_bKeepBreakFinish &&
830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ItemLayoutProcessor_FindBreakNode(
831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pNextContainer->GetNodeItem(XFA_NODEITEM_FirstChild),
832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pCurActionNode, nCurStage, TRUE)) {
833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return TRUE;
834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pNextContainer = m_pKeepHeadNode;
836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_bKeepBreakFinish = TRUE;
837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pKeepHeadNode = NULL;
838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pKeepTailNode = NULL;
839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_bIsProcessKeep = FALSE;
840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (m_bKeepBreakFinish) {
843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bLastKeepNode = TRUE;
844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bKeepBreakFinish = FALSE;
846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::ProcessKeepNodesForBreakBefore(
851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node*& pCurActionNode,
852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessorStages& nCurStage,
853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pContainerNode) {
854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pKeepTailNode == pContainerNode) {
855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pCurActionNode = m_pKeepHeadNode;
856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_bKeepBreakFinish = TRUE;
857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pKeepHeadNode = NULL;
858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pKeepTailNode = NULL;
859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_bIsProcessKeep = FALSE;
860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    nCurStage = XFA_ItemLayoutProcessorStages_Container;
861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pBreakAfterNode =
864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pContainerNode->GetNodeItem(XFA_NODEITEM_FirstChild);
865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (XFA_ItemLayoutProcessor_FindBreakNode(pBreakAfterNode, pCurActionNode,
866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                            nCurStage, FALSE)) {
867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL XFA_ItemLayoutProcessor_IsTakingSpace(CXFA_Node* pNode) {
872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM ePresence = pNode->GetEnum(XFA_ATTRIBUTE_Presence);
873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return ePresence == XFA_ATTRIBUTEENUM_Visible ||
874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         ePresence == XFA_ATTRIBUTEENUM_Invisible;
875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic inline void XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize(
877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pFormNode,
878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContainerWidth,
879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContainerHeight,
880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bContainerWidthAutoSize,
881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bContainerHeightAutoSize) {
882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fContainerWidth = 0;
883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fContainerHeight = 0;
884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bContainerWidthAutoSize = TRUE;
885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  bContainerHeightAutoSize = TRUE;
886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ELEMENT eClassID = pFormNode->GetClassID();
887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Measurement mTmpValue;
888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerWidthAutoSize &&
889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup) &&
890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pFormNode->TryMeasure(XFA_ATTRIBUTE_W, mTmpValue, FALSE) &&
891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerWidth = mTmpValue.ToUnit(XFA_UNIT_Pt);
893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bContainerWidthAutoSize = FALSE;
894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerHeightAutoSize &&
896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (eClassID == XFA_ELEMENT_Subform || eClassID == XFA_ELEMENT_ExclGroup) &&
897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pFormNode->TryMeasure(XFA_ATTRIBUTE_H, mTmpValue, FALSE) &&
898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerHeight = mTmpValue.ToUnit(XFA_UNIT_Pt);
900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bContainerHeightAutoSize = FALSE;
901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerWidthAutoSize && eClassID == XFA_ELEMENT_Subform &&
903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pFormNode->TryMeasure(XFA_ATTRIBUTE_MaxW, mTmpValue, FALSE) &&
904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerWidth = mTmpValue.ToUnit(XFA_UNIT_Pt);
906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bContainerWidthAutoSize = FALSE;
907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerHeightAutoSize && eClassID == XFA_ELEMENT_Subform &&
909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pFormNode->TryMeasure(XFA_ATTRIBUTE_MaxH, mTmpValue, FALSE) &&
910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      mTmpValue.GetValue() > XFA_LAYOUT_FLOAT_PERCISION) {
911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerHeight = mTmpValue.ToUnit(XFA_UNIT_Pt);
912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bContainerHeightAutoSize = FALSE;
913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic inline void
916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannXFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize(
917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pFormNode,
918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bContainerWidthAutoSize,
919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fContentCalculatedWidth,
920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContainerWidth,
921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bContainerHeightAutoSize,
922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fContentCalculatedHeight,
923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContainerHeight) {
924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMarginNode = pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Measurement mTmpValue;
926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerWidthAutoSize) {
927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerWidth = fContentCalculatedWidth;
928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pMarginNode) {
929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_LeftInset, mTmpValue, FALSE)) {
930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContainerWidth += mTmpValue.ToUnit(XFA_UNIT_Pt);
931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_RightInset, mTmpValue, FALSE)) {
933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContainerWidth += mTmpValue.ToUnit(XFA_UNIT_Pt);
934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerHeightAutoSize) {
938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerHeight = fContentCalculatedHeight;
939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pMarginNode) {
940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_TopInset, mTmpValue, FALSE)) {
941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContainerHeight += mTmpValue.ToUnit(XFA_UNIT_Pt);
942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pMarginNode->TryMeasure(XFA_ATTRIBUTE_BottomInset, mTmpValue,
944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                  FALSE)) {
945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContainerHeight += mTmpValue.ToUnit(XFA_UNIT_Pt);
946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::CalculatePositionedContainerPos(
951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pNode,
952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fWidth,
953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fHeight,
954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fAbsoluteX,
955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fAbsoluteY) {
956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM eAnchorType = pNode->GetEnum(XFA_ATTRIBUTE_AnchorType);
957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nAnchorType = 0;
958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eAnchorType) {
959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_TopLeft:
960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 0;
961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_TopCenter:
963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 1;
964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_TopRight:
966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 2;
967ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_MiddleLeft:
969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 3;
970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_MiddleCenter:
972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 4;
973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_MiddleRight:
975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 5;
976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_BottomLeft:
978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 6;
979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_BottomCenter:
981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 7;
982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_BottomRight:
984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nAnchorType = 8;
985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  static const uint8_t nNextPos[4][9] = {{0, 1, 2, 3, 4, 5, 6, 7, 8},
990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         {6, 3, 0, 7, 4, 1, 8, 5, 2},
991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         {8, 7, 6, 5, 4, 3, 2, 1, 0},
992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         {2, 5, 8, 1, 4, 7, 0, 3, 6}};
993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann
994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fAnchorX = pNode->GetMeasure(XFA_ATTRIBUTE_X).ToUnit(XFA_UNIT_Pt);
995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fAnchorY = pNode->GetMeasure(XFA_ATTRIBUTE_Y).ToUnit(XFA_UNIT_Pt);
996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nRotate =
997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FXSYS_round(pNode->GetMeasure(XFA_ATTRIBUTE_Rotate).GetValue());
998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  nRotate = XFA_MapRotation(nRotate) / 90;
999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nAbsoluteAnchorType = nNextPos[nRotate][nAnchorType];
1000ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fAbsoluteX = fAnchorX;
1001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fAbsoluteY = fAnchorY;
1002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nAbsoluteAnchorType / 3) {
1003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 1:
1004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fAbsoluteY -= fHeight / 2;
1005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 2:
1007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fAbsoluteY -= fHeight;
1008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (nAbsoluteAnchorType % 3) {
1013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 1:
1014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fAbsoluteX -= fWidth / 2;
1015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1016ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case 2:
1017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fAbsoluteX -= fWidth;
1018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::IncrementRelayoutNode(
1024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutProcessor* pLayoutProcessor,
1025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pNode,
1026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pParentNode) {
1027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
1028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::DoLayoutPageArea(
1030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContainerLayoutItem* pPageAreaLayoutItem) {
1031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pFormNode = pPageAreaLayoutItem->m_pFormNode;
1032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pCurChildNode = XFA_LAYOUT_INVALIDNODE;
1033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessorStages nCurChildNodeStage =
1034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessorStages_None;
1035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_LayoutItem* pBeforeItem = NULL;
1036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (XFA_ItemLayoutProcessor_GotoNextContainerNode(
1037ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pCurChildNode, nCurChildNodeStage, pFormNode, FALSE);
1038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pCurChildNode; XFA_ItemLayoutProcessor_GotoNextContainerNode(
1039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pCurChildNode, nCurChildNodeStage, pFormNode, FALSE)) {
1040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Container) {
1041ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1043ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pCurChildNode->GetClassID() == XFA_ELEMENT_Variables) {
1044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor =
1047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CXFA_ItemLayoutProcessor(pCurChildNode, NULL);
1048ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
1049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
1050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
1051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX);
1052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pProcessor->HasLayoutItem()) {
1053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      delete pProcessor;
1054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fWidth, fHeight;
1057ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->GetCurrentComponentSize(fWidth, fHeight);
1058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fAbsoluteX = 0, fAbsoluteY = 0;
1059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CalculatePositionedContainerPos(pCurChildNode, fWidth, fHeight, fAbsoluteX,
1060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    fAbsoluteY);
1061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->SetCurrentComponentPos(fAbsoluteX, fAbsoluteY);
1062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutItem* pProcessItem = pProcessor->ExtractLayoutItem();
1063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pBeforeItem == NULL) {
1064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pPageAreaLayoutItem->AddHeadChild(pProcessItem);
1065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
1066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pPageAreaLayoutItem->InsertChild(pBeforeItem, pProcessItem);
1067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pBeforeItem = pProcessItem;
1069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete pProcessor;
1070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pBeforeItem = NULL;
1072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_LayoutItem* pLayoutItem = pPageAreaLayoutItem->m_pFirstChild;
1073ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pLayoutItem) {
1074ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pLayoutItem->IsContentLayoutItem() ||
1075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pLayoutItem->m_pFormNode->GetClassID() != XFA_ELEMENT_Draw) {
1076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutItem = pLayoutItem->m_pNextSibling;
1077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1079ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pLayoutItem->m_pFormNode->GetClassID() == XFA_ELEMENT_Draw) {
1080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_LayoutItem* pNextLayoutItem = pLayoutItem->m_pNextSibling;
1081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pPageAreaLayoutItem->RemoveChild(pLayoutItem);
1082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pBeforeItem == NULL) {
1083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pPageAreaLayoutItem->AddHeadChild(pLayoutItem);
1084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
1085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pPageAreaLayoutItem->InsertChild(pBeforeItem, pLayoutItem);
1086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pBeforeItem = pLayoutItem;
1088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutItem = pNextLayoutItem;
1089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::DoLayoutPositionedContainer(
1093ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutContext* pContext) {
1094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pLayoutItem != NULL) {
1095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
1096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
1098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bIgnoreXY = (m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout) !=
1099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                       XFA_ATTRIBUTEENUM_Position);
1100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContainerWidth = 0, fContainerHeight = 0;
1101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE;
1102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize(
1103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode, fContainerWidth, fContainerHeight, bContainerWidthAutoSize,
1104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bContainerHeightAutoSize);
1105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0;
1106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fHiddenContentCalculatedWidth = 0,
1107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           fHiddenContentCalculatedHeight = 0;
1108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pCurChildNode == XFA_LAYOUT_INVALIDNODE) {
1109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessor_GotoNextContainerNode(
1110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE);
1111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iColIndex = 0;
1113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (; m_pCurChildNode; XFA_ItemLayoutProcessor_GotoNextContainerNode(
1114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE)) {
1115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Container) {
1116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_pCurChildNode->GetClassID() == XFA_ELEMENT_Variables) {
1119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor =
1122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CXFA_ItemLayoutProcessor(m_pCurChildNode, m_pPageMgr);
1123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
1124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
1125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
1126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pContext && pContext->m_prgSpecifiedColumnWidths) {
1127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int32_t iColSpan = m_pCurChildNode->GetInteger(XFA_ATTRIBUTE_ColSpan);
1128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (iColSpan <=
1129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pContext->m_prgSpecifiedColumnWidths->GetSize() - iColIndex) {
1130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pContext->m_fCurColumnWidth = 0;
1131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pContext->m_bCurColumnWidthAvaiable = TRUE;
1132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (iColSpan == -1) {
1133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          iColSpan = pContext->m_prgSpecifiedColumnWidths->GetSize();
1134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int32_t i = 0; i < iColSpan; i++) {
1136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pContext->m_fCurColumnWidth +=
1137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pContext->m_prgSpecifiedColumnWidths->GetAt(iColIndex + i);
1138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pContext->m_fCurColumnWidth == 0) {
1140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pContext->m_bCurColumnWidthAvaiable = FALSE;
1141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        iColIndex += iColSpan;
1143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX,
1146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         pContext);
1147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pProcessor->HasLayoutItem()) {
1148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      delete pProcessor;
1149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fWidth, fHeight;
1152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->GetCurrentComponentSize(fWidth, fHeight);
1153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bChangeParentSize = FALSE;
1154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (XFA_ItemLayoutProcessor_IsTakingSpace(m_pCurChildNode)) {
1155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bChangeParentSize = TRUE;
1156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fAbsoluteX = 0, fAbsoluteY = 0;
1158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!bIgnoreXY) {
1159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CalculatePositionedContainerPos(m_pCurChildNode, fWidth, fHeight,
1160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                      fAbsoluteX, fAbsoluteY);
1161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->SetCurrentComponentPos(fAbsoluteX, fAbsoluteY);
1163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bContainerWidthAutoSize) {
1164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fChildSuppliedWidth = fAbsoluteX + fWidth;
1165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bChangeParentSize) {
1166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fContentCalculatedWidth < fChildSuppliedWidth) {
1167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCalculatedWidth = fChildSuppliedWidth;
1168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
1170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fHiddenContentCalculatedWidth < fChildSuppliedWidth &&
1171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_pCurChildNode->GetClassID() != XFA_ELEMENT_Subform) {
1172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fHiddenContentCalculatedWidth = fChildSuppliedWidth;
1173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bContainerHeightAutoSize) {
1177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fChildSuppliedHeight = fAbsoluteY + fHeight;
1178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bChangeParentSize) {
1179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fContentCalculatedHeight < fChildSuppliedHeight) {
1180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCalculatedHeight = fChildSuppliedHeight;
1181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
1183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fHiddenContentCalculatedHeight < fChildSuppliedHeight &&
1184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_pCurChildNode->GetClassID() != XFA_ELEMENT_Subform) {
1185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fHiddenContentCalculatedHeight = fChildSuppliedHeight;
1186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pLayoutItem->AddChild(pProcessor->ExtractLayoutItem());
1190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete pProcessor;
1191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_VERSION eVersion = m_pFormNode->GetDocument()->GetCurVersionMode();
1193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (fContentCalculatedWidth == 0 && eVersion < XFA_VERSION_207) {
1194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContentCalculatedWidth = fHiddenContentCalculatedWidth;
1195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (fContentCalculatedHeight == 0 && eVersion < XFA_VERSION_207) {
1197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContentCalculatedHeight = fHiddenContentCalculatedHeight;
1198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize(
1200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
1201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight,
1202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerHeight);
1203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  SetCurrentComponentSize(fContainerWidth, fContainerHeight);
1204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic inline void XFA_ItemLayoutProcessor_UpdateWidgetSize(
1206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pLayoutItem,
1207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fWidth,
1208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fHeight) {
1209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pNode = pLayoutItem->m_pFormNode;
1210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(pNode);
1211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ELEMENT eClassID = pNode->GetClassID();
1212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eClassID) {
1213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Subform:
1214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Area:
1215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_ExclGroup:
1216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_SubformSet: {
1217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (fWidth < -XFA_LAYOUT_FLOAT_PERCISION) {
1218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fWidth = pLayoutItem->m_sSize.x;
1219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (fHeight < -XFA_LAYOUT_FLOAT_PERCISION) {
1221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fHeight = pLayoutItem->m_sSize.y;
1222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Draw:
1226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Field: {
1227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pNode->GetDocument()->GetParser()->GetNotify()->StartFieldDrawLayout(
1228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pNode, fWidth, fHeight);
1229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      ASSERT(FALSE);
1233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic inline void XFA_ItemLayoutProcessor_RelocateTableRowCells(
1236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pLayoutRow,
1237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    const CFX_ArrayTemplate<FX_FLOAT>& rgSpecifiedColumnWidths,
1238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTEENUM eLayout) {
1239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContainerWidth = 0, fContainerHeight = 0;
1240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE;
1241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize(
1242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutRow->m_pFormNode, fContainerWidth, fContainerHeight,
1243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bContainerWidthAutoSize, bContainerHeightAutoSize);
1244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMarginNode =
1245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutRow->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
1246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0;
1247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pMarginNode) {
1248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fLeftInset =
1249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt);
1250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fTopInset =
1251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt);
1252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fRightInset =
1253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt);
1254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fBottomInset =
1255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt);
1256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentWidthLimit =
1258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bContainerWidthAutoSize ? XFA_LAYOUT_FLOAT_MAX
1259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              : fContainerWidth - fLeftInset - fRightInset;
1260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentCurrentHeight =
1261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutRow->m_sSize.y - fTopInset - fBottomInset;
1262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0;
1263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fCurrentColX = 0;
1264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nCurrentColIdx = 0;
1265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bMetWholeRowCell = FALSE;
1266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_ContentLayoutItem* pLayoutChild =
1267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           (CXFA_ContentLayoutItem*)pLayoutRow->m_pFirstChild;
1268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pLayoutChild;
1269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) {
1270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t nOriginalColSpan =
1271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pLayoutChild->m_pFormNode->GetInteger(XFA_ATTRIBUTE_ColSpan);
1272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t nColSpan = nOriginalColSpan;
1273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fColSpanWidth = 0;
1274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nColSpan == -1 ||
1275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        nCurrentColIdx + nColSpan > rgSpecifiedColumnWidths.GetSize()) {
1276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nColSpan = rgSpecifiedColumnWidths.GetSize() - nCurrentColIdx;
1277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t i = 0; i < nColSpan; i++) {
1279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fColSpanWidth += rgSpecifiedColumnWidths[nCurrentColIdx + i];
1280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nColSpan != nOriginalColSpan) {
1282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fColSpanWidth = bMetWholeRowCell ? 0 : std::max(fColSpanWidth,
1283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                      pLayoutChild->m_sSize.y);
1284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (nOriginalColSpan == -1) {
1286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bMetWholeRowCell = TRUE;
1287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutChild->m_sPos.Set(fCurrentColX, 0);
1289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutChild->m_sSize.x = fColSpanWidth;
1290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutChild->m_pFormNode)) {
1291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fCurrentColX += fColSpanWidth;
1292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nCurrentColIdx += nColSpan;
1293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fNewHeight =
1294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bContainerHeightAutoSize ? -1 : fContentCurrentHeight;
1295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_UpdateWidgetSize(pLayoutChild, fColSpanWidth,
1296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               fNewHeight);
1297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutChild->m_sSize.y = fNewHeight;
1298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bContainerHeightAutoSize) {
1299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fChildSuppliedHeight = pLayoutChild->m_sSize.y;
1300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fContentCalculatedHeight < fChildSuppliedHeight) {
1301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCalculatedHeight = fChildSuppliedHeight;
1302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerHeightAutoSize) {
1307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (CXFA_ContentLayoutItem* pLayoutChild =
1308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             (CXFA_ContentLayoutItem*)pLayoutRow->m_pFirstChild;
1309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutChild;
1310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) {
1311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_UpdateWidgetSize(
1312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild, pLayoutChild->m_sSize.x, fContentCalculatedHeight);
1313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fOldChildHeight = pLayoutChild->m_sSize.y;
1314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutChild->m_sSize.y = fContentCalculatedHeight;
1315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Node* pParaNode =
1316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Para);
1317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pParaNode && pLayoutChild->m_pFirstChild) {
1318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fOffHeight = fContentCalculatedHeight - fOldChildHeight;
1319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        XFA_ATTRIBUTEENUM eVType = pParaNode->GetEnum(XFA_ATTRIBUTE_VAlign);
1320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        switch (eVType) {
1321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case XFA_ATTRIBUTEENUM_Middle:
1322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fOffHeight = fOffHeight / 2;
1323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            break;
1324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case XFA_ATTRIBUTEENUM_Bottom:
1325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            break;
1326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          case XFA_ATTRIBUTEENUM_Top:
1327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          default:
1328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fOffHeight = 0;
1329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            break;
1330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fOffHeight > 0) {
1332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (CXFA_ContentLayoutItem* pInnerLayoutChild =
1333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   (CXFA_ContentLayoutItem*)pLayoutChild->m_pFirstChild;
1334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               pInnerLayoutChild;
1335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               pInnerLayoutChild =
1336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                   (CXFA_ContentLayoutItem*)pInnerLayoutChild->m_pNextSibling) {
1337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pInnerLayoutChild->m_sPos.y += fOffHeight;
1338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerWidthAutoSize) {
1344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fChildSuppliedWidth = fCurrentColX;
1345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fContentWidthLimit < XFA_LAYOUT_FLOAT_MAX &&
1346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContentWidthLimit > fChildSuppliedWidth) {
1347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fChildSuppliedWidth = fContentWidthLimit;
1348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fContentCalculatedWidth < fChildSuppliedWidth) {
1350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCalculatedWidth = fChildSuppliedWidth;
1351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContentCalculatedWidth = fContainerWidth - fLeftInset - fRightInset;
1354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pLayoutRow->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout) ==
1356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ATTRIBUTEENUM_Rl_row) {
1357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (CXFA_ContentLayoutItem* pLayoutChild =
1358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             (CXFA_ContentLayoutItem*)pLayoutRow->m_pFirstChild;
1359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutChild;
1360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) {
1361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutChild->m_sPos.x = fContentCalculatedWidth -
1362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               pLayoutChild->m_sPos.x - pLayoutChild->m_sSize.x;
1363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize(
1366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutRow->m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
1367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight,
1368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerHeight);
1369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pLayoutRow->m_sSize.Set(fContainerWidth, fContainerHeight);
1370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::DoLayoutTableContainer(CXFA_Node* pLayoutNode) {
1372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pLayoutItem != NULL) {
1373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
1374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pLayoutNode == NULL) {
1376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutNode = m_pFormNode;
1377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE);
1379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
1380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContainerWidth = 0, fContainerHeight = 0;
1381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE;
1382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize(
1383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode, fContainerWidth, fContainerHeight, bContainerWidthAutoSize,
1384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bContainerHeightAutoSize);
1385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0;
1386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMarginNode =
1387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
1388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0;
1389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pMarginNode) {
1390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fLeftInset =
1391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt);
1392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fTopInset =
1393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt);
1394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fRightInset =
1395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt);
1396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fBottomInset =
1397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt);
1398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentWidthLimit =
1400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bContainerWidthAutoSize ? XFA_LAYOUT_FLOAT_MAX
1401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              : fContainerWidth - fLeftInset - fRightInset;
1402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CFX_WideStringC wsColumnWidths;
1403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pLayoutNode->TryCData(XFA_ATTRIBUTE_ColumnWidths, wsColumnWidths)) {
1404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_WideStringArray widths;
1405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (FX_SeparateStringW(wsColumnWidths.GetPtr(), wsColumnWidths.GetLength(),
1406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                           L' ', widths) > 0) {
1407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      int32_t iCols = widths.GetSize();
1408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_WideString wsWidth;
1409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (int32_t i = 0; i < iCols; i++) {
1410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        wsWidth = widths[i];
1411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        wsWidth.TrimLeft(L' ');
1412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (!wsWidth.IsEmpty()) {
1413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Measurement measure(wsWidth);
1414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_rgSpecifiedColumnWidths.Add(measure.ToUnit(XFA_UNIT_Pt));
1415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iSpecifiedColumnCount = m_rgSpecifiedColumnWidths.GetSize();
1420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_LayoutContext layoutContext;
1421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  layoutContext.m_prgSpecifiedColumnWidths = &m_rgSpecifiedColumnWidths;
1422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_LayoutContext* pLayoutContext =
1423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      iSpecifiedColumnCount > 0 ? &layoutContext : NULL;
1424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pCurChildNode == XFA_LAYOUT_INVALIDNODE) {
1425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessor_GotoNextContainerNode(
1426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE);
1427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (; m_pCurChildNode; XFA_ItemLayoutProcessor_GotoNextContainerNode(
1429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, FALSE)) {
1430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    layoutContext.m_bCurColumnWidthAvaiable = FALSE;
1431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    layoutContext.m_fCurColumnWidth = 0;
1432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Container) {
1433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor =
1436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CXFA_ItemLayoutProcessor(m_pCurChildNode, m_pPageMgr);
1437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
1438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
1439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
1440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX,
1441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         pLayoutContext);
1442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!pProcessor->HasLayoutItem()) {
1443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      delete pProcessor;
1444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pLayoutItem->AddChild(pProcessor->ExtractLayoutItem());
1447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete pProcessor;
1448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iRowCount = 0, iColCount = 0;
1450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  {
1451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<CXFA_ContentLayoutItem*> rgRowItems;
1452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<int32_t> rgRowItemsSpan;
1453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<FX_FLOAT> rgRowItemsWidth;
1454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (CXFA_ContentLayoutItem* pLayoutChild =
1455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild;
1456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutChild;
1457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) {
1458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pLayoutChild->m_pFormNode->GetClassID() != XFA_ELEMENT_Subform) {
1459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        continue;
1460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutChild->m_pFormNode)) {
1462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        continue;
1463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ATTRIBUTEENUM eLayout =
1465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
1466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (eLayout != XFA_ATTRIBUTEENUM_Row &&
1467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          eLayout != XFA_ATTRIBUTEENUM_Rl_row) {
1468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        continue;
1469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (CXFA_ContentLayoutItem* pRowLayoutCell =
1471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              (CXFA_ContentLayoutItem*)pLayoutChild->m_pFirstChild) {
1472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgRowItems.Add(pRowLayoutCell);
1473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        int32_t iColSpan =
1474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pRowLayoutCell->m_pFormNode->GetInteger(XFA_ATTRIBUTE_ColSpan);
1475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgRowItemsSpan.Add(iColSpan);
1476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgRowItemsWidth.Add(pRowLayoutCell->m_sSize.x);
1477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iRowCount = rgRowItems.GetSize();
1480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iColCount = 0;
1481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bMoreColumns = TRUE;
1482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (bMoreColumns) {
1483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bMoreColumns = FALSE;
1484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_BOOL bAutoCol = FALSE;
1485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (int32_t i = 0; i < iRowCount; i++) {
1486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        while (rgRowItems[i] != NULL && (rgRowItemsSpan[i] <= 0 ||
1487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         !XFA_ItemLayoutProcessor_IsTakingSpace(
1488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             rgRowItems[i]->m_pFormNode))) {
1489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_ContentLayoutItem* pNewCell =
1490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              (CXFA_ContentLayoutItem*)rgRowItems[i]->m_pNextSibling;
1491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (rgRowItemsSpan[i] < 0 && XFA_ItemLayoutProcessor_IsTakingSpace(
1492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           rgRowItems[i]->m_pFormNode)) {
1493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pNewCell = NULL;
1494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rgRowItems[i] = pNewCell;
1496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rgRowItemsSpan[i] =
1497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pNewCell
1498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  ? pNewCell->m_pFormNode->GetInteger(XFA_ATTRIBUTE_ColSpan)
1499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  : 0;
1500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rgRowItemsWidth[i] = pNewCell ? pNewCell->m_sSize.x : 0;
1501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_ContentLayoutItem* pCell = rgRowItems[i];
1503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (!pCell) {
1504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          continue;
1505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bMoreColumns = TRUE;
1507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (rgRowItemsSpan[i] == 1) {
1508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (iColCount >= iSpecifiedColumnCount) {
1509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            for (int32_t j = 0, c = iColCount + 1 -
1510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    m_rgSpecifiedColumnWidths.GetSize();
1511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 j < c; j++) {
1512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_rgSpecifiedColumnWidths.Add(0);
1513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
1514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (m_rgSpecifiedColumnWidths[iColCount] <
1516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              XFA_LAYOUT_FLOAT_PERCISION) {
1517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            bAutoCol = TRUE;
1518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bAutoCol &&
1520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_rgSpecifiedColumnWidths[iColCount] < rgRowItemsWidth[i]) {
1521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_rgSpecifiedColumnWidths[iColCount] = rgRowItemsWidth[i];
1522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bMoreColumns) {
1526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fFinalColumnWidth = m_rgSpecifiedColumnWidths[iColCount];
1527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int32_t i = 0; i < iRowCount; i++) {
1528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (!rgRowItems[i]) {
1529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            continue;
1530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
1531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rgRowItemsSpan[i]--;
1532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rgRowItemsWidth[i] -= fFinalColumnWidth;
1533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        iColCount++;
1535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fCurrentRowY = 0;
1539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_ContentLayoutItem* pLayoutChild =
1540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild;
1541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pLayoutChild;
1542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pLayoutChild = (CXFA_ContentLayoutItem*)pLayoutChild->m_pNextSibling) {
1543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutChild->m_pFormNode)) {
1544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      continue;
1545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pLayoutChild->m_pFormNode->GetClassID() == XFA_ELEMENT_Subform) {
1547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ATTRIBUTEENUM eSubformLayout =
1548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
1549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (eSubformLayout == XFA_ATTRIBUTEENUM_Row ||
1550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          eSubformLayout == XFA_ATTRIBUTEENUM_Rl_row) {
1551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        XFA_ItemLayoutProcessor_RelocateTableRowCells(
1552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pLayoutChild, m_rgSpecifiedColumnWidths, eSubformLayout);
1553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pLayoutChild->m_sPos.y = fCurrentRowY;
1556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bContainerWidthAutoSize) {
1557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutChild->m_sPos.x = 0;
1558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
1559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      switch (pLayoutChild->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign)) {
1560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Left:
1561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        default:
1562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild->m_sPos.x = 0;
1563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
1564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Center:
1565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild->m_sPos.x =
1566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              (fContentWidthLimit - pLayoutChild->m_sSize.x) / 2;
1567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
1568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Right:
1569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild->m_sPos.x = fContentWidthLimit - pLayoutChild->m_sSize.x;
1570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
1571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bContainerWidthAutoSize) {
1574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fChildSuppliedWidth =
1575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild->m_sPos.x + pLayoutChild->m_sSize.x;
1576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (fContentWidthLimit < XFA_LAYOUT_FLOAT_MAX &&
1577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentWidthLimit > fChildSuppliedWidth) {
1578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fChildSuppliedWidth = fContentWidthLimit;
1579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (fContentCalculatedWidth < fChildSuppliedWidth) {
1581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContentCalculatedWidth = fChildSuppliedWidth;
1582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurrentRowY += pLayoutChild->m_sSize.y;
1585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerHeightAutoSize) {
1587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fChildSuppliedHeight = fCurrentRowY;
1588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fContentCalculatedHeight < fChildSuppliedHeight) {
1589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCalculatedHeight = fChildSuppliedHeight;
1590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize(
1593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
1594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight,
1595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerHeight);
1596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  SetCurrentComponentSize(fContainerWidth, fContainerHeight);
1597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic uint8_t XFA_ItemLayoutProcessor_HAlignEnumToInt(
1599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTEENUM eHAlign) {
1600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eHAlign) {
1601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Center:
1602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return 1;
1603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Right:
1604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return 2;
1605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Left:
1606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return 0;
1608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void XFA_ItemLayoutProcessor_UpdatePendedItemLayout(
1611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor,
1612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pLayoutItem) {
1613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM eLayout =
1614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
1615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eLayout) {
1616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Row:
1617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Rl_row:
1618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_RelocateTableRowCells(
1619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutItem, pProcessor->m_rgSpecifiedColumnWidths, eLayout);
1620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::IsAddNewRowForTrailer(
1626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pTrailerItem) {
1627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pTrailerItem) {
1628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
1629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fWidth = pTrailerItem->m_sSize.x;
1631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ATTRIBUTEENUM eLayout = m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
1632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (eLayout != XFA_ATTRIBUTEENUM_Tb && m_fWidthLimite > fWidth) {
1633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
1634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
1636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void XFA_ItemLayoutProcessor_AddTrailerBeforeSplit(
1638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor,
1639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fSplitPos,
1640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pTrailerLayoutItem,
1641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bUseInherited = FALSE) {
1642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pTrailerLayoutItem) {
1643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
1644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fHeight = pTrailerLayoutItem->m_sSize.y;
1646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bUseInherited) {
1647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fNewSplitPos = 0;
1648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fSplitPos - fHeight > XFA_LAYOUT_FLOAT_PERCISION) {
1649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fNewSplitPos = pProcessor->FindSplitPos(fSplitPos - fHeight);
1650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fNewSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
1652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pProcessor->SplitLayoutItem(fNewSplitPos);
1653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
1655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_UpdatePendedItemLayout(pProcessor,
1657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 pTrailerLayoutItem);
1658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMarginNode =
1659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pProcessor->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
1660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0;
1661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pMarginNode) {
1662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fLeftInset =
1663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt);
1664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fTopInset =
1665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt);
1666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fRightInset =
1667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt);
1668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fBottomInset =
1669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt);
1670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pProcessor->IsAddNewRowForTrailer(pTrailerLayoutItem)) {
1672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pTrailerLayoutItem->m_sPos.y = pProcessor->m_fLastRowY;
1673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pTrailerLayoutItem->m_sPos.x = pProcessor->m_fLastRowWidth;
1674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_pLayoutItem->m_sSize.x += pTrailerLayoutItem->m_sSize.x;
1675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_pLayoutItem->AddChild(pTrailerLayoutItem);
1676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
1677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fNewSplitPos = 0;
1679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (fSplitPos - fHeight > XFA_LAYOUT_FLOAT_PERCISION) {
1680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fNewSplitPos = pProcessor->FindSplitPos(fSplitPos - fHeight);
1681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (fNewSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
1683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->SplitLayoutItem(fNewSplitPos);
1684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pTrailerLayoutItem->m_sPos.y = fNewSplitPos - fTopInset - fBottomInset;
1685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pTrailerLayoutItem->m_sPos.y = fSplitPos - fTopInset - fBottomInset;
1687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (pTrailerLayoutItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign)) {
1689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Left:
1690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pTrailerLayoutItem->m_sPos.x = fLeftInset;
1692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Right:
1694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pTrailerLayoutItem->m_sPos.x = pProcessor->m_pLayoutItem->m_sSize.x -
1695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     fRightInset -
1696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                     pTrailerLayoutItem->m_sSize.x;
1697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Center:
1699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pTrailerLayoutItem->m_sPos.x =
1700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          (pProcessor->m_pLayoutItem->m_sSize.x - fLeftInset - fRightInset -
1701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pTrailerLayoutItem->m_sSize.x) /
1702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          2;
1703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pProcessor->m_pLayoutItem->m_sSize.y += fHeight;
1706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pProcessor->m_pLayoutItem->AddChild(pTrailerLayoutItem);
1707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
1708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void XFA_ItemLayoutProcessor_AddLeaderAfterSplit(
1709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor,
1710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pLeaderLayoutItem) {
1711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_UpdatePendedItemLayout(pProcessor, pLeaderLayoutItem);
1712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMarginNode =
1713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pProcessor->m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
1714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0;
1715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pMarginNode) {
1716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fLeftInset =
1717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt);
1718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fTopInset =
1719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt);
1720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fRightInset =
1721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt);
1722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fBottomInset =
1723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt);
1724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fHeight = pLeaderLayoutItem->m_sSize.y;
1726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_ContentLayoutItem* pChildItem =
1727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           (CXFA_ContentLayoutItem*)pProcessor->m_pLayoutItem->m_pFirstChild;
1728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pChildItem;
1729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pChildItem = (CXFA_ContentLayoutItem*)pChildItem->m_pNextSibling) {
1730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pChildItem->m_sPos.y += fHeight;
1731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pLeaderLayoutItem->m_sPos.y = 0;
1733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (pLeaderLayoutItem->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign)) {
1734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Left:
1735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
1736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLeaderLayoutItem->m_sPos.x = fLeftInset;
1737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Right:
1739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLeaderLayoutItem->m_sPos.x = pProcessor->m_pLayoutItem->m_sSize.x -
1740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                    fRightInset - pLeaderLayoutItem->m_sSize.x;
1741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ATTRIBUTEENUM_Center:
1743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLeaderLayoutItem->m_sPos.x =
1744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          (pProcessor->m_pLayoutItem->m_sSize.x - fLeftInset - fRightInset -
1745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pLeaderLayoutItem->m_sSize.x) /
1746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          2;
1747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
1748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pProcessor->m_pLayoutItem->m_sSize.y += fHeight;
1750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pProcessor->m_pLayoutItem->AddChild(pLeaderLayoutItem);
1751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann};
1752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic void XFA_ItemLayoutProcessor_AddPendingNode(
1753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor,
1754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pPendingNode,
1755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bBreakPending) {
1756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pProcessor->m_rgPendingNodes.AddTail(pPendingNode);
1757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pProcessor->m_bBreakPending = bBreakPending;
1758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic FX_FLOAT XFA_ItemLayoutProcessor_InsertPendingItems(
1760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pProcessor,
1761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pCurChildNode) {
1762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fTotalHeight = 0;
1763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pProcessor->m_rgPendingNodes.GetCount() < 1) {
1764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return fTotalHeight;
1765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pProcessor->m_pLayoutItem == NULL) {
1767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_pLayoutItem =
1768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pProcessor->CreateContentLayoutItem(pCurChildNode);
1769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_pLayoutItem->m_sSize.Set(0, 0);
1770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (pProcessor->m_rgPendingNodes.GetCount() > 0) {
1772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_POSITION pos = pProcessor->m_rgPendingNodes.GetHeadPosition();
1773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pPendingNode =
1774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (CXFA_Node*)pProcessor->m_rgPendingNodes.GetAt(pos);
1775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_rgPendingNodes.RemoveAt(pos);
1776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pPendingLayoutItem = NULL;
1777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pPendingProcessor =
1778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        new CXFA_ItemLayoutProcessor(pPendingNode, NULL);
1779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
1780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pPendingProcessor->m_pPageMgrCreateItem = pProcessor->m_pPageMgrCreateItem;
1781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
1782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pPendingProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX);
1783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pPendingLayoutItem = pPendingProcessor->HasLayoutItem()
1784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             ? pPendingProcessor->ExtractLayoutItem()
1785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                             : NULL;
1786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    delete pPendingProcessor;
1787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pPendingLayoutItem) {
1788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_AddLeaderAfterSplit(pProcessor,
1789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                  pPendingLayoutItem);
1790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pProcessor->m_bBreakPending) {
1791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fTotalHeight += pPendingLayoutItem->m_sSize.y;
1792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return fTotalHeight;
1796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CXFA_ItemLayoutProcessor::InsertKeepLayoutItems() {
1798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fTotalHeight = 0;
1799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_arrayKeepItems.GetSize()) {
1800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_pLayoutItem == NULL) {
1801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
1802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem->m_sSize.Set(0, 0);
1803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t iIndex = m_arrayKeepItems.GetSize() - 1; iIndex >= 0;
1805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         iIndex--) {
1806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_AddLeaderAfterSplit(this,
1807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                  m_arrayKeepItems[iIndex]);
1808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fTotalHeight += m_arrayKeepItems[iIndex]->m_sSize.y;
1809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_arrayKeepItems.RemoveAll();
1811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return fTotalHeight;
1813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::ProcessKeepForSplite(
1815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pParentProcessor,
1816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pChildProcessor,
1817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessorResult eRetValue,
1818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<CXFA_ContentLayoutItem*>& rgCurLineLayoutItem,
1819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCurRowAvailWidth,
1820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCurRowHeight,
1821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCurRowY,
1822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bAddedItemInRow,
1823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bForceEndPage,
1824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessorResult& result) {
1825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pParentProcessor == NULL || pChildProcessor == NULL) {
1826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
1827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pParentProcessor->m_pCurChildNode->GetIntact() !=
1829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ATTRIBUTEENUM_None ||
1830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      !pChildProcessor->m_bHasAvailHeight) {
1831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (XFA_ExistContainerKeep(pParentProcessor->m_pCurChildNode, TRUE)) {
1832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fChildWidth, fChildHeight;
1833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pChildProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight);
1834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CFX_ArrayTemplate<CXFA_ContentLayoutItem*> keepLayoutItems;
1835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pParentProcessor->JudgePutNextPage(pParentProcessor->m_pLayoutItem,
1836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             fChildHeight, keepLayoutItems)) {
1837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_arrayKeepItems.RemoveAll();
1838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (int32_t iIndex = 0; iIndex < keepLayoutItems.GetSize(); iIndex++) {
1839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_ContentLayoutItem* pItem = keepLayoutItems.GetAt(iIndex);
1840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pParentProcessor->m_pLayoutItem->RemoveChild(pItem);
1841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCurRowY -= pItem->m_sSize.y;
1842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_arrayKeepItems.Add(pItem);
1843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
1844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bAddedItemInRow = TRUE;
1845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bForceEndPage = TRUE;
1846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        result = XFA_ItemLayoutProcessorResult_PageFullBreak;
1847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return TRUE;
1848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      rgCurLineLayoutItem.Add(pChildProcessor->ExtractLayoutItem());
1850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bAddedItemInRow = TRUE;
1851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCurRowAvailWidth -= fChildWidth;
1852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (fContentCurRowHeight < fChildHeight) {
1853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContentCurRowHeight = fChildHeight;
1854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      result = eRetValue;
1856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return TRUE;
1857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
1860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::JudgePutNextPage(
1862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pParentLayoutItem,
1863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fChildHeight,
1864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<CXFA_ContentLayoutItem*>& pKeepItems) {
1865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pParentLayoutItem == NULL) {
1866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
1867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fItemsHeight = 0;
1869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_ContentLayoutItem* pChildLayoutItem =
1870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           (CXFA_ContentLayoutItem*)pParentLayoutItem->m_pFirstChild;
1871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pChildLayoutItem;
1872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pChildLayoutItem =
1873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           (CXFA_ContentLayoutItem*)pChildLayoutItem->m_pNextSibling) {
1874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (XFA_ExistContainerKeep(pChildLayoutItem->m_pFormNode, FALSE)) {
1875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pKeepItems.Add(pChildLayoutItem);
1876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fItemsHeight += pChildLayoutItem->m_sSize.y;
1877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
1878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pKeepItems.RemoveAll();
1879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fItemsHeight = 0;
1880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fItemsHeight += fChildHeight;
1883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pPageMgr->GetNextAvailContentHeight(fItemsHeight)) {
1884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
1885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return FALSE;
1887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::ProcessUnUseBinds(CXFA_Node* pFormNode) {
1889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pFormNode) {
1890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
1891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_NodeIteratorTemplate<CXFA_Node, CXFA_TraverseStrategy_XFANode> sIterator(
1893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pFormNode);
1894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (CXFA_Node* pNode = sIterator.MoveToNext(); pNode;
1895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       pNode = sIterator.MoveToNext()) {
1896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pNode->IsContainerNode()) {
1897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Node* pBindNode = pNode->GetBindData();
1898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pBindNode) {
1899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pBindNode->RemoveBindItem(pNode);
1900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pNode->SetObject(XFA_ATTRIBUTE_BindingNode, NULL);
1901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
1902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pNode->SetFlag(XFA_NODEFLAG_UnusedNode);
1904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::ProcessUnUseOverFlow(
1907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pLeaderNode,
1908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pTrailerNode,
1909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pTrailerItem,
1910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pFormNode) {
1911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ProcessUnUseBinds(pLeaderNode);
1912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ProcessUnUseBinds(pTrailerNode);
1913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFormNode == NULL) {
1914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
1915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFormNode->GetClassID() == XFA_ELEMENT_Overflow ||
1917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pFormNode->GetClassID() == XFA_ELEMENT_Break) {
1918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pFormNode = pFormNode->GetNodeItem(XFA_NODEITEM_Parent);
1919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pLeaderNode && pFormNode) {
1921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pFormNode->RemoveChild(pLeaderNode);
1922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pTrailerNode && pFormNode) {
1924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pFormNode->RemoveChild(pTrailerNode);
1925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pTrailerItem) {
1927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ReleaseLayoutItem(pTrailerItem);
1928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
1930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstatic XFA_ItemLayoutProcessorResult XFA_ItemLayoutProcessor_InsertFlowedItem(
1931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor* pThis,
1932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ItemLayoutProcessor*& pProcessor,
1933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bContainerWidthAutoSize,
1934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bContainerHeightAutoSize,
1935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fContainerHeight,
1936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTEENUM eFlowStrategy,
1937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    uint8_t& uCurHAlignState,
1938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<CXFA_ContentLayoutItem*>(&rgCurLineLayoutItems)[3],
1939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bUseBreakControl,
1940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fAvailHeight,
1941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fRealHeight,
1942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCurRowY,
1943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentWidthLimit,
1944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCurRowAvailWidth,
1945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCurRowHeight,
1946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bAddedItemInRow,
1947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL& bForceEndPage,
1948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutContext* pLayoutContext = NULL,
1949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bNewRow = FALSE) {
1950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bTakeSpace =
1951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_IsTakingSpace(pProcessor->m_pFormNode);
1952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uint8_t uHAlign = XFA_ItemLayoutProcessor_HAlignEnumToInt(
1953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pThis->m_pCurChildNode->GetEnum(XFA_ATTRIBUTE_HAlign));
1954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerWidthAutoSize) {
1955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    uHAlign = 0;
1956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if ((eFlowStrategy != XFA_ATTRIBUTEENUM_Rl_tb && uHAlign < uCurHAlignState) ||
1958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (eFlowStrategy == XFA_ATTRIBUTEENUM_Rl_tb && uHAlign > uCurHAlignState)) {
1959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return XFA_ItemLayoutProcessorResult_RowFullBreak;
1960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  uCurHAlignState = uHAlign;
1962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bIsOwnSplite =
1963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None;
1964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bUseRealHeight =
1965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bTakeSpace && bContainerHeightAutoSize && bIsOwnSplite &&
1966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pProcessor->m_pFormNode->GetNodeItem(XFA_NODEITEM_Parent)->GetIntact() ==
1967ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ATTRIBUTEENUM_None;
1968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bIsTransHeight = bTakeSpace;
1969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bIsTransHeight && !bIsOwnSplite) {
1970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bRootForceTb = FALSE;
1971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTEENUM eLayoutStrategy = XFA_ItemLayoutProcessor_GetLayout(
1972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pProcessor->m_pFormNode, bRootForceTb);
1973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (eLayoutStrategy == XFA_ATTRIBUTEENUM_Lr_tb ||
1974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        eLayoutStrategy == XFA_ATTRIBUTEENUM_Rl_tb) {
1975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bIsTransHeight = FALSE;
1976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bUseInherited = FALSE;
1979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_LayoutContext layoutContext;
1980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pThis->m_pPageMgr) {
1981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pOverflowNode =
1982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pThis->m_pPageMgr->QueryOverflow(pThis->m_pFormNode);
1983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pOverflowNode) {
1984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      layoutContext.m_pOverflowNode = pOverflowNode;
1985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      layoutContext.m_pOverflowProcessor = pThis;
1986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutContext = &layoutContext;
1987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
1988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
1989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessorResult eRetValue = XFA_ItemLayoutProcessorResult_Done;
1990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bNewRow ||
1991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pProcessor->m_ePreProcessRs == XFA_ItemLayoutProcessorResult_Done) {
1992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    eRetValue = pProcessor->DoLayout(
1993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bTakeSpace ? bUseBreakControl : FALSE,
1994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bUseRealHeight ? fRealHeight - fContentCurRowY : XFA_LAYOUT_FLOAT_MAX,
1995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bIsTransHeight ? fRealHeight - fContentCurRowY : XFA_LAYOUT_FLOAT_MAX,
1996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pLayoutContext);
1997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_ePreProcessRs = eRetValue;
1998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
1999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    eRetValue = pProcessor->m_ePreProcessRs;
2000ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pProcessor->m_ePreProcessRs = XFA_ItemLayoutProcessorResult_Done;
2001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pProcessor->HasLayoutItem() == FALSE) {
2003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return eRetValue;
2004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fChildWidth, fChildHeight;
2006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight);
2007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bUseRealHeight && fRealHeight < XFA_LAYOUT_FLOAT_PERCISION) {
2008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fRealHeight = XFA_LAYOUT_FLOAT_MAX;
2009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fAvailHeight = XFA_LAYOUT_FLOAT_MAX;
2010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bTakeSpace ||
2012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (fChildWidth <= fContentCurRowAvailWidth + XFA_LAYOUT_FLOAT_PERCISION) ||
2013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (fContentWidthLimit - fContentCurRowAvailWidth <=
2014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       XFA_LAYOUT_FLOAT_PERCISION)) {
2015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node *pOverflowLeaderNode = NULL, *pOverflowTrailerNode = NULL,
2016ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              *pFormNode = NULL;
2017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_ContentLayoutItem* pTrailerLayoutItem = NULL;
2018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bIsAddTrailerHeight = FALSE;
2019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pThis->m_pPageMgr &&
2020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None) {
2021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pFormNode = pThis->m_pPageMgr->QueryOverflow(pProcessor->m_pFormNode);
2022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pFormNode == NULL && pLayoutContext &&
2023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutContext->m_pOverflowProcessor) {
2024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pFormNode = pLayoutContext->m_pOverflowNode;
2025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bUseInherited = TRUE;
2026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pThis->m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode,
2028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pOverflowTrailerNode, FALSE,
2029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             FALSE)) {
2030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowTrailerNode)) {
2031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pOverflowTrailerNode) {
2032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CXFA_ItemLayoutProcessor* pOverflowLeaderProcessor =
2033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                new CXFA_ItemLayoutProcessor(pOverflowTrailerNode, NULL);
2034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
2035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pOverflowLeaderProcessor->m_pPageMgrCreateItem =
2036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor->m_pPageMgrCreateItem;
2037ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
2038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pOverflowLeaderProcessor->DoLayout(FALSE, XFA_LAYOUT_FLOAT_MAX);
2039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pTrailerLayoutItem =
2040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pOverflowLeaderProcessor->HasLayoutItem()
2041ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    ? pOverflowLeaderProcessor->ExtractLayoutItem()
2042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    : NULL;
2043ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            delete pOverflowLeaderProcessor;
2044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bUseInherited) {
2046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            bIsAddTrailerHeight =
2047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pThis->IsAddNewRowForTrailer(pTrailerLayoutItem);
2048ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } else {
2049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            bIsAddTrailerHeight =
2050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor->IsAddNewRowForTrailer(pTrailerLayoutItem);
2051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bIsAddTrailerHeight) {
2053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            FX_FLOAT fTrailerHeight = pTrailerLayoutItem->m_sSize.y;
2054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fChildHeight += fTrailerHeight;
2055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            bIsAddTrailerHeight = TRUE;
2056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2057ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (!bTakeSpace ||
2061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContentCurRowY + fChildHeight <=
2062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fAvailHeight + XFA_LAYOUT_FLOAT_PERCISION ||
2063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (!bContainerHeightAutoSize &&
2064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pThis->m_fUsedSize + fAvailHeight + XFA_LAYOUT_FLOAT_PERCISION >=
2065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             fContainerHeight)) {
2066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (!bTakeSpace || eRetValue == XFA_ItemLayoutProcessorResult_Done) {
2067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pProcessor->m_bUseInheriated) {
2068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pTrailerLayoutItem) {
2069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessor_AddTrailerBeforeSplit(
2070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor, fChildHeight, pTrailerLayoutItem);
2071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) {
2073ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessor_AddPendingNode(pProcessor,
2074ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                   pOverflowLeaderNode, FALSE);
2075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pProcessor->m_bUseInheriated = FALSE;
2077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else {
2078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bIsAddTrailerHeight) {
2079ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fChildHeight -= pTrailerLayoutItem->m_sSize.y;
2080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
2082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           pOverflowTrailerNode,
2083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           pTrailerLayoutItem, pFormNode);
2084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_ContentLayoutItem* pChildLayoutItem =
2086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->ExtractLayoutItem();
2087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (XFA_ExistContainerKeep(pProcessor->m_pFormNode, FALSE) &&
2088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None) {
2089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pThis->m_arrayKeepItems.Add(pChildLayoutItem);
2090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else {
2091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pThis->m_arrayKeepItems.RemoveAll();
2092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2093ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[uHAlign].Add(pChildLayoutItem);
2094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bAddedItemInRow = TRUE;
2095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (bTakeSpace) {
2096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCurRowAvailWidth -= fChildWidth;
2097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (fContentCurRowHeight < fChildHeight) {
2098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fContentCurRowHeight = fChildHeight;
2099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return XFA_ItemLayoutProcessorResult_Done;
2102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
2103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (eRetValue == XFA_ItemLayoutProcessorResult_PageFullBreak) {
2104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pProcessor->m_bUseInheriated) {
2105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pTrailerLayoutItem) {
2106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              XFA_ItemLayoutProcessor_AddTrailerBeforeSplit(
2107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pProcessor, fChildHeight, pTrailerLayoutItem);
2108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) {
2110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              XFA_ItemLayoutProcessor_AddPendingNode(
2111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pProcessor, pOverflowLeaderNode, FALSE);
2112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->m_bUseInheriated = FALSE;
2114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } else {
2115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (bIsAddTrailerHeight) {
2116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              fChildHeight -= pTrailerLayoutItem->m_sSize.y;
2117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
2119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pOverflowTrailerNode,
2120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pTrailerLayoutItem, pFormNode);
2121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem());
2124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bAddedItemInRow = TRUE;
2125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContentCurRowAvailWidth -= fChildWidth;
2126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fContentCurRowHeight < fChildHeight) {
2127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCurRowHeight = fChildHeight;
2128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return eRetValue;
2130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
2132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessorResult eResult;
2133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pThis->ProcessKeepForSplite(
2134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pThis, pProcessor, eRetValue, rgCurLineLayoutItems[uHAlign],
2135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              fContentCurRowAvailWidth, fContentCurRowHeight, fContentCurRowY,
2136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bAddedItemInRow, bForceEndPage, eResult)) {
2137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return eResult;
2138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bForceEndPage = TRUE;
2140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fSplitPos =
2141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pProcessor->FindSplitPos(fAvailHeight - fContentCurRowY);
2142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (fSplitPos > XFA_LAYOUT_FLOAT_PERCISION) {
2143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        XFA_ATTRIBUTEENUM eLayout =
2144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
2145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (eLayout == XFA_ATTRIBUTEENUM_Tb &&
2146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            eRetValue == XFA_ItemLayoutProcessorResult_Done) {
2147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
2148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           pOverflowTrailerNode,
2149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           pTrailerLayoutItem, pFormNode);
2150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem());
2151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bAddedItemInRow = TRUE;
2152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bTakeSpace) {
2153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fContentCurRowAvailWidth -= fChildWidth;
2154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (fContentCurRowHeight < fChildHeight) {
2155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              fContentCurRowHeight = fChildHeight;
2156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return XFA_ItemLayoutProcessorResult_PageFullBreak;
2159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_Node *pTempLeaderNode = NULL, *pTempTrailerNode = NULL;
2161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pThis->m_pPageMgr && !pProcessor->m_bUseInheriated &&
2162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            eRetValue != XFA_ItemLayoutProcessorResult_PageFullBreak) {
2163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pThis->m_pPageMgr->ProcessOverflow(pFormNode, pTempLeaderNode,
2164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pTempTrailerNode, FALSE, TRUE);
2165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pTrailerLayoutItem && bIsAddTrailerHeight) {
2167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ItemLayoutProcessor_AddTrailerBeforeSplit(
2168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor, fSplitPos, pTrailerLayoutItem, bUseInherited);
2169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else {
2170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pProcessor->SplitLayoutItem(fSplitPos);
2171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (bUseInherited) {
2173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
2174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           pOverflowTrailerNode,
2175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                           pTrailerLayoutItem, pFormNode);
2176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pThis->m_bUseInheriated = TRUE;
2177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else {
2178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pProcessor->m_pLayoutItem->m_pFirstChild &&
2179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor->m_pLayoutItem->m_pFirstChild->m_pNextSibling ==
2180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  NULL &&
2181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor->m_pLayoutItem->m_pFirstChild->m_pFormNode->HasFlag(
2182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  XFA_NODEFLAG_LayoutGeneratedNode)) {
2183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
2184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pOverflowTrailerNode,
2185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pTrailerLayoutItem, pFormNode);
2186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } else {
2187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) {
2188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              XFA_ItemLayoutProcessor_AddPendingNode(
2189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pProcessor, pOverflowLeaderNode, FALSE);
2190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pProcessor->m_pLayoutItem->m_pNextSibling) {
2194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight);
2195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem());
2196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bAddedItemInRow = TRUE;
2197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bTakeSpace) {
2198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fContentCurRowAvailWidth -= fChildWidth;
2199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (fContentCurRowHeight < fChildHeight) {
2200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              fContentCurRowHeight = fChildHeight;
2201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return XFA_ItemLayoutProcessorResult_PageFullBreak;
2205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else if (fContentCurRowY <= XFA_LAYOUT_FLOAT_PERCISION) {
2206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pProcessor->GetCurrentComponentSize(fChildWidth, fChildHeight);
2207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pProcessor->m_pPageMgr->GetNextAvailContentHeight(fChildHeight)) {
2208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Node *pTempLeaderNode = NULL, *pTempTrailerNode = NULL;
2209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pThis->m_pPageMgr) {
2210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pFormNode == NULL && pLayoutContext != NULL) {
2211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pFormNode = pLayoutContext->m_pOverflowProcessor->m_pFormNode;
2212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pThis->m_pPageMgr->ProcessOverflow(pFormNode, pTempLeaderNode,
2214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               pTempTrailerNode, FALSE, TRUE);
2215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bUseInherited) {
2217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
2218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pOverflowTrailerNode,
2219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                             pTrailerLayoutItem, pFormNode);
2220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pThis->m_bUseInheriated = TRUE;
2221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return XFA_ItemLayoutProcessorResult_PageFullBreak;
2223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[uHAlign].Add(pProcessor->ExtractLayoutItem());
2225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bAddedItemInRow = TRUE;
2226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (bTakeSpace) {
2227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCurRowAvailWidth -= fChildWidth;
2228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (fContentCurRowHeight < fChildHeight) {
2229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fContentCurRowHeight = fChildHeight;
2230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (eRetValue == XFA_ItemLayoutProcessorResult_Done) {
2233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          bForceEndPage = FALSE;
2234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return eRetValue;
2236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
2237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        XFA_ATTRIBUTEENUM eLayout =
2238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->m_pFormNode->GetEnum(XFA_ATTRIBUTE_Layout);
2239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pProcessor->m_pFormNode->GetIntact() == XFA_ATTRIBUTEENUM_None &&
2240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            eLayout == XFA_ATTRIBUTEENUM_Tb) {
2241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pThis->m_pPageMgr) {
2242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pThis->m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode,
2243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               pOverflowTrailerNode, FALSE,
2244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               TRUE);
2245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pTrailerLayoutItem) {
2247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessor_AddTrailerBeforeSplit(pProcessor, fSplitPos,
2248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                          pTrailerLayoutItem);
2249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pProcessor->JudgeLeaderOrTrailerForOccur(pOverflowLeaderNode)) {
2251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessor_AddPendingNode(pProcessor,
2252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                   pOverflowLeaderNode, FALSE);
2253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else {
2255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (eRetValue == XFA_ItemLayoutProcessorResult_Done) {
2256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pFormNode == NULL && pLayoutContext != NULL) {
2257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pFormNode = pLayoutContext->m_pOverflowProcessor->m_pFormNode;
2258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (pThis->m_pPageMgr) {
2260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pThis->m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode,
2261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 pOverflowTrailerNode, FALSE,
2262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                 TRUE);
2263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (bUseInherited) {
2265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor->ProcessUnUseOverFlow(pOverflowLeaderNode,
2266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               pOverflowTrailerNode,
2267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                               pTrailerLayoutItem, pFormNode);
2268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pThis->m_bUseInheriated = TRUE;
2269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return XFA_ItemLayoutProcessorResult_PageFullBreak;
2273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
2276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return XFA_ItemLayoutProcessorResult_RowFullBreak;
2277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return XFA_ItemLayoutProcessorResult_Done;
2279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannXFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayoutFlowedContainer(
2281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bUseBreakControl,
2282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTEENUM eFlowStrategy,
2283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fHeightLimit,
2284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fRealHeight,
2285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutContext* pContext,
2286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bRootForceTb) {
2287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_bHasAvailHeight = TRUE;
2288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContainerWidth = 0, fContainerHeight = 0;
2289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bBreakDone = FALSE;
2290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bContainerWidthAutoSize = TRUE, bContainerHeightAutoSize = TRUE;
2291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bForceEndPage = FALSE;
2292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bIsManualBreak = FALSE;
2293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pCurChildPreprocessor) {
2294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pCurChildPreprocessor->m_ePreProcessRs =
2295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        XFA_ItemLayoutProcessorResult_Done;
2296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerSpecfiedSize(
2298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode, fContainerWidth, fContainerHeight, bContainerWidthAutoSize,
2299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bContainerHeightAutoSize);
2300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pContext && pContext->m_bCurColumnWidthAvaiable) {
2301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bContainerWidthAutoSize = FALSE;
2302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerWidth = pContext->m_fCurColumnWidth;
2303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bContainerHeightAutoSize) {
2305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fContainerHeight -= m_fUsedSize;
2306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!bContainerHeightAutoSize) {
2308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pParentNode = m_pFormNode->GetNodeItem(XFA_NODEITEM_Parent);
2309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bFocrTb = FALSE;
2310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pParentNode &&
2311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        XFA_ItemLayoutProcessor_GetLayout(pParentNode, bFocrTb) ==
2312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ATTRIBUTEENUM_Row) {
2313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Node* pChildContainer = m_pFormNode->GetNodeItem(
2314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_NODEITEM_FirstChild, XFA_OBJECTTYPE_ContainerNode);
2315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pChildContainer &&
2316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pChildContainer->GetNodeItem(XFA_NODEITEM_NextSibling,
2317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                       XFA_OBJECTTYPE_ContainerNode)) {
2318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContainerHeight = 0;
2319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        bContainerHeightAutoSize = TRUE;
2320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pMarginNode =
2324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode->GetFirstChildByClass(XFA_ELEMENT_Margin);
2325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fLeftInset = 0, fTopInset = 0, fRightInset = 0, fBottomInset = 0;
2326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pMarginNode) {
2327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fLeftInset =
2328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_LeftInset).ToUnit(XFA_UNIT_Pt);
2329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fTopInset =
2330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_TopInset).ToUnit(XFA_UNIT_Pt);
2331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fRightInset =
2332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_RightInset).ToUnit(XFA_UNIT_Pt);
2333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fBottomInset =
2334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pMarginNode->GetMeasure(XFA_ATTRIBUTE_BottomInset).ToUnit(XFA_UNIT_Pt);
2335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentWidthLimit =
2337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bContainerWidthAutoSize ? XFA_LAYOUT_FLOAT_MAX
2338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              : fContainerWidth - fLeftInset - fRightInset;
2339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentCalculatedWidth = 0, fContentCalculatedHeight = 0;
2340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fAvailHeight = fHeightLimit - fTopInset - fBottomInset;
2341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (fAvailHeight < 0) {
2342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_bHasAvailHeight = FALSE;
2343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fRealHeight = fRealHeight - fTopInset - fBottomInset;
2345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fContentCurRowY = 0;
2346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_ContentLayoutItem* pLayoutChild = NULL;
2347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pLayoutItem != NULL) {
2348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Done &&
2349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        eFlowStrategy != XFA_ATTRIBUTEENUM_Tb) {
2350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutChild = (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild;
2351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (CXFA_ContentLayoutItem* pLayoutNext = pLayoutChild; pLayoutNext;
2352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pLayoutNext = (CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling) {
2353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pLayoutNext->m_sPos.y != pLayoutChild->m_sPos.y) {
2354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild = pLayoutNext;
2355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (CXFA_ContentLayoutItem* pLayoutTempChild =
2359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild;
2360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutTempChild != pLayoutChild;
2361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann         pLayoutTempChild =
2362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             (CXFA_ContentLayoutItem*)pLayoutTempChild->m_pNextSibling) {
2363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (XFA_ItemLayoutProcessor_IsTakingSpace(
2364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pLayoutTempChild->m_pFormNode)) {
2365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fChildContentWidth =
2366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pLayoutTempChild->m_sPos.x + pLayoutTempChild->m_sSize.x;
2367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fChildContentHeight =
2368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pLayoutTempChild->m_sPos.y + pLayoutTempChild->m_sSize.y;
2369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fContentCalculatedWidth < fChildContentWidth) {
2370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCalculatedWidth = fChildContentWidth;
2371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (fContentCalculatedHeight < fChildContentHeight) {
2373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCalculatedHeight = fChildContentHeight;
2374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pLayoutChild) {
2378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCurRowY = pLayoutChild->m_sPos.y;
2379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
2380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCurRowY = fContentCalculatedHeight;
2381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fContentCurRowY += InsertKeepLayoutItems();
2384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_None) {
2385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ItemLayoutProcessor_GotoNextContainerNode(
2386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE);
2387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fContentCurRowY +=
2389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_InsertPendingItems(this, m_pFormNode);
2390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pCurChildPreprocessor &&
2391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Container) {
2392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (XFA_ExistContainerKeep(m_pCurChildPreprocessor->GetFormNode(), FALSE)) {
2393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pKeepHeadNode = m_pCurChildNode;
2394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_bIsProcessKeep = TRUE;
2395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Keep;
2396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  while (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages_Done) {
2399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fContentCurRowHeight = 0;
2400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fContentCurRowAvailWidth = fContentWidthLimit;
2401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_fWidthLimite = fContentCurRowAvailWidth;
2402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<CXFA_ContentLayoutItem*> rgCurLineLayoutItems[3];
2403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    uint8_t uCurHAlignState =
2404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (eFlowStrategy != XFA_ATTRIBUTEENUM_Rl_tb ? 0 : 2);
2405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (pLayoutChild) {
2406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      for (CXFA_ContentLayoutItem* pLayoutNext = pLayoutChild; pLayoutNext;
2407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann           pLayoutNext = (CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling) {
2408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (pLayoutNext->m_pNextSibling == NULL && m_pCurChildPreprocessor &&
2409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_pCurChildPreprocessor->m_pFormNode == pLayoutNext->m_pFormNode) {
2410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutNext->m_pNext = m_pCurChildPreprocessor->m_pLayoutItem;
2411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_pCurChildPreprocessor->m_pLayoutItem = pLayoutNext;
2412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
2413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        uint8_t uHAlign = XFA_ItemLayoutProcessor_HAlignEnumToInt(
2415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pLayoutNext->m_pFormNode->GetEnum(XFA_ATTRIBUTE_HAlign));
2416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[uHAlign].Add(pLayoutNext);
2417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (eFlowStrategy == XFA_ATTRIBUTEENUM_Lr_tb) {
2418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (uHAlign > uCurHAlignState) {
2419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            uCurHAlignState = uHAlign;
2420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } else if (uHAlign < uCurHAlignState) {
2422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          uCurHAlignState = uHAlign;
2423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (XFA_ItemLayoutProcessor_IsTakingSpace(pLayoutNext->m_pFormNode)) {
2425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pLayoutNext->m_sSize.y > fContentCurRowHeight) {
2426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fContentCurRowHeight = pLayoutNext->m_sSize.y;
2427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fContentCurRowAvailWidth -= pLayoutNext->m_sSize.x;
2429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if ((CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild ==
2432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          pLayoutChild) {
2433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pLayoutItem->m_pFirstChild = NULL;
2434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
2435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_ContentLayoutItem* pLayoutNext =
2436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            (CXFA_ContentLayoutItem*)m_pLayoutItem->m_pFirstChild;
2437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        for (; pLayoutNext;
2438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             pLayoutNext =
2439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                 (CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling) {
2440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if ((CXFA_ContentLayoutItem*)pLayoutNext->m_pNextSibling ==
2441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pLayoutChild) {
2442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pLayoutNext->m_pNextSibling = NULL;
2443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            break;
2444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_ContentLayoutItem* pLayoutNextTemp =
2448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          (CXFA_ContentLayoutItem*)pLayoutChild;
2449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      while (pLayoutNextTemp) {
2450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pLayoutNextTemp->m_pParent = NULL;
2451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CXFA_ContentLayoutItem* pSaveLayoutNext =
2452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            (CXFA_ContentLayoutItem*)pLayoutNextTemp->m_pNextSibling;
2453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pLayoutNextTemp->m_pNextSibling = NULL;
2454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        pLayoutNextTemp = pSaveLayoutNext;
2455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pLayoutChild = NULL;
2457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (m_pCurChildNode) {
2459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_ItemLayoutProcessor* pProcessor = NULL;
2460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_BOOL bAddedItemInRow = FALSE;
2461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCurRowY +=
2462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ItemLayoutProcessor_InsertPendingItems(this, m_pFormNode);
2463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      switch (m_nCurChildNodeStage) {
2464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_Keep:
2465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_None:
2466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
2467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_BreakBefore: {
2468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          for (int32_t iIndex = 0; iIndex < m_arrayKeepItems.GetSize();
2469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               iIndex++) {
2470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            CXFA_ContentLayoutItem* pItem = m_arrayKeepItems.GetAt(iIndex);
2471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_pLayoutItem->RemoveChild(pItem);
2472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            fContentCalculatedHeight -= pItem->m_sSize.y;
2473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Node *pLeaderNode = NULL, *pTrailerNode = NULL;
2475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FX_BOOL bCreatePage = FALSE;
2476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bUseBreakControl && m_pPageMgr &&
2477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, TRUE,
2478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    pLeaderNode, pTrailerNode,
2479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    bCreatePage) &&
2480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_pFormNode->GetClassID() != XFA_ELEMENT_Form && bCreatePage) {
2481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (JudgeLeaderOrTrailerForOccur(pLeaderNode)) {
2482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              XFA_ItemLayoutProcessor_AddPendingNode(this, pLeaderNode, TRUE);
2483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (JudgeLeaderOrTrailerForOccur(pTrailerNode)) {
2485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (m_pFormNode->GetNodeItem(XFA_NODEITEM_Parent)->GetClassID() ==
2486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                      XFA_ELEMENT_Form &&
2487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  m_pLayoutItem == NULL) {
2488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                XFA_ItemLayoutProcessor_AddPendingNode(this, pTrailerNode,
2489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                       TRUE);
2490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              } else {
2491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CXFA_ItemLayoutProcessor* pProcessor =
2492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    new CXFA_ItemLayoutProcessor(pTrailerNode, NULL);
2493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
2494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
2495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
2496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                XFA_ItemLayoutProcessor_InsertFlowedItem(
2497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    this, pProcessor, bContainerWidthAutoSize,
2498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    bContainerHeightAutoSize, fContainerHeight, eFlowStrategy,
2499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    uCurHAlignState, rgCurLineLayoutItems, FALSE,
2500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, fContentCurRowY,
2501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentWidthLimit, fContentCurRowAvailWidth,
2502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentCurRowHeight, bAddedItemInRow, bForceEndPage,
2503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    pContext);
2504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                delete pProcessor;
2505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor = NULL;
2506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
2507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessor_GotoNextContainerNode(
2509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE);
2510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            bForceEndPage = TRUE;
2511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            bIsManualBreak = TRUE;
2512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            goto SuspendAndCreateNewRow;
2513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } break;
2515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_BreakAfter: {
2516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ItemLayoutProcessorResult eResult;
2517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Node *pLeaderNode = NULL, *pTrailerNode = NULL;
2518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          FX_BOOL bCreatePage = FALSE;
2519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (bUseBreakControl && m_pPageMgr &&
2520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_pPageMgr->ProcessBreakBeforeOrAfter(m_pCurChildNode, FALSE,
2521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    pLeaderNode, pTrailerNode,
2522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                    bCreatePage) &&
2523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_pFormNode->GetClassID() != XFA_ELEMENT_Form) {
2524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (JudgeLeaderOrTrailerForOccur(pTrailerNode)) {
2525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              CXFA_ItemLayoutProcessor* pProcessor =
2526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  new CXFA_ItemLayoutProcessor(pTrailerNode, NULL);
2527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
2528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
2529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
2530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              eResult = XFA_ItemLayoutProcessor_InsertFlowedItem(
2531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  this, pProcessor, bContainerWidthAutoSize,
2532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  bContainerHeightAutoSize, fContainerHeight, eFlowStrategy,
2533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  uCurHAlignState, rgCurLineLayoutItems, FALSE,
2534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, fContentCurRowY,
2535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  fContentWidthLimit, fContentCurRowAvailWidth,
2536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  fContentCurRowHeight, bAddedItemInRow, bForceEndPage,
2537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  pContext);
2538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              delete pProcessor;
2539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor = NULL;
2540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (!bCreatePage) {
2542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (JudgeLeaderOrTrailerForOccur(pLeaderNode)) {
2543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CalculateRowChildPosition(
2544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    rgCurLineLayoutItems, eFlowStrategy,
2545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    bContainerHeightAutoSize, bContainerWidthAutoSize,
2546ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentCalculatedWidth, fContentCalculatedHeight,
2547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentCurRowY, fContentCurRowHeight, fContentWidthLimit);
2548ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                rgCurLineLayoutItems->RemoveAll();
2549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                CXFA_ItemLayoutProcessor* pProcessor =
2550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    new CXFA_ItemLayoutProcessor(pLeaderNode, NULL);
2551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
2552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
2553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
2554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                XFA_ItemLayoutProcessor_InsertFlowedItem(
2555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    this, pProcessor, bContainerWidthAutoSize,
2556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    bContainerHeightAutoSize, fContainerHeight, eFlowStrategy,
2557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    uCurHAlignState, rgCurLineLayoutItems, FALSE,
2558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    XFA_LAYOUT_FLOAT_MAX, XFA_LAYOUT_FLOAT_MAX, fContentCurRowY,
2559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentWidthLimit, fContentCurRowAvailWidth,
2560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentCurRowHeight, bAddedItemInRow, bForceEndPage,
2561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    pContext);
2562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                delete pProcessor;
2563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor = NULL;
2564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
2565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            } else {
2566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (JudgeLeaderOrTrailerForOccur(pLeaderNode)) {
2567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                XFA_ItemLayoutProcessor_AddPendingNode(this, pLeaderNode, TRUE);
2568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
2569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessor_GotoNextContainerNode(
2571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE);
2572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (bCreatePage) {
2573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bForceEndPage = TRUE;
2574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bIsManualBreak = TRUE;
2575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              if (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done) {
2576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                bBreakDone = TRUE;
2577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              }
2578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            goto SuspendAndCreateNewRow;
2580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } break;
2582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_BookendLeader: {
2583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Node* pLeaderNode = NULL;
2584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (m_pCurChildPreprocessor) {
2585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor = m_pCurChildPreprocessor;
2586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_pCurChildPreprocessor = NULL;
2587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } else if (m_pPageMgr &&
2588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     m_pPageMgr->ProcessBookendLeaderOrTrailer(
2589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         m_pCurChildNode, TRUE, pLeaderNode)) {
2590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor = new CXFA_ItemLayoutProcessor(pLeaderNode, m_pPageMgr);
2591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
2592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
2593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
2594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pProcessor) {
2596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (XFA_ItemLayoutProcessor_InsertFlowedItem(
2597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    this, pProcessor, bContainerWidthAutoSize,
2598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    bContainerHeightAutoSize, fContainerHeight, eFlowStrategy,
2599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    uCurHAlignState, rgCurLineLayoutItems, bUseBreakControl,
2600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fAvailHeight, fRealHeight, fContentCurRowY,
2601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentWidthLimit, fContentCurRowAvailWidth,
2602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentCurRowHeight, bAddedItemInRow, bForceEndPage,
2603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    pContext) != XFA_ItemLayoutProcessorResult_Done) {
2604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              goto SuspendAndCreateNewRow;
2605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            } else {
2606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              delete pProcessor;
2607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor = NULL;
2608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } break;
2611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_BookendTrailer: {
2612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          CXFA_Node* pTrailerNode = NULL;
2613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (m_pCurChildPreprocessor) {
2614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor = m_pCurChildPreprocessor;
2615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            m_pCurChildPreprocessor = NULL;
2616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          } else if (m_pPageMgr &&
2617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                     m_pPageMgr->ProcessBookendLeaderOrTrailer(
2618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                         m_pCurChildNode, FALSE, pTrailerNode)) {
2619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor = new CXFA_ItemLayoutProcessor(pTrailerNode, m_pPageMgr);
2620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
2621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
2622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
2623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (pProcessor) {
2625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (XFA_ItemLayoutProcessor_InsertFlowedItem(
2626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    this, pProcessor, bContainerWidthAutoSize,
2627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    bContainerHeightAutoSize, fContainerHeight, eFlowStrategy,
2628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    uCurHAlignState, rgCurLineLayoutItems, bUseBreakControl,
2629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fAvailHeight, fRealHeight, fContentCurRowY,
2630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentWidthLimit, fContentCurRowAvailWidth,
2631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentCurRowHeight, bAddedItemInRow, bForceEndPage,
2632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    pContext) != XFA_ItemLayoutProcessorResult_Done) {
2633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              goto SuspendAndCreateNewRow;
2634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            } else {
2635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              delete pProcessor;
2636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor = NULL;
2637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        } break;
2640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_Container:
2641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          ASSERT(m_pCurChildNode->IsContainerNode());
2642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (m_pCurChildNode->GetClassID() == XFA_ELEMENT_Variables) {
2643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            break;
2644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (fContentCurRowY >= fHeightLimit + XFA_LAYOUT_FLOAT_PERCISION &&
2646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              XFA_ItemLayoutProcessor_IsTakingSpace(m_pCurChildNode)) {
2647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            bForceEndPage = TRUE;
2648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            goto SuspendAndCreateNewRow;
2649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          if (m_pCurChildNode->IsContainerNode()) {
2651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            FX_BOOL bNewRow = FALSE;
2652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            if (m_pCurChildPreprocessor) {
2653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor = m_pCurChildPreprocessor;
2654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              m_pCurChildPreprocessor = NULL;
2655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              bNewRow = TRUE;
2656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            } else {
2657ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor =
2658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                  new CXFA_ItemLayoutProcessor(m_pCurChildNode, m_pPageMgr);
2659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef _XFA_LAYOUTITEM_ProcessCACHE_
2660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              pProcessor->m_pPageMgrCreateItem = m_pPageMgrCreateItem;
2661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif
2662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessor_InsertPendingItems(pProcessor,
2664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                       m_pCurChildNode);
2665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            XFA_ItemLayoutProcessorResult rs =
2666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                XFA_ItemLayoutProcessor_InsertFlowedItem(
2667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    this, pProcessor, bContainerWidthAutoSize,
2668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    bContainerHeightAutoSize, fContainerHeight, eFlowStrategy,
2669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    uCurHAlignState, rgCurLineLayoutItems, bUseBreakControl,
2670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fAvailHeight, fRealHeight, fContentCurRowY,
2671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentWidthLimit, fContentCurRowAvailWidth,
2672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    fContentCurRowHeight, bAddedItemInRow, bForceEndPage,
2673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    pContext, bNewRow);
2674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            switch (rs) {
2675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              case XFA_ItemLayoutProcessorResult_ManualBreak:
2676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                bIsManualBreak = TRUE;
2677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              case XFA_ItemLayoutProcessorResult_PageFullBreak:
2678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                bForceEndPage = TRUE;
2679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              case XFA_ItemLayoutProcessorResult_RowFullBreak:
2680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                goto SuspendAndCreateNewRow;
2681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              case XFA_ItemLayoutProcessorResult_Done:
2682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              default:
2683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                fContentCurRowY += XFA_ItemLayoutProcessor_InsertPendingItems(
2684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                    pProcessor, m_pCurChildNode);
2685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                delete pProcessor;
2686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                pProcessor = NULL;
2687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann            }
2688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          }
2689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
2690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ItemLayoutProcessorStages_Done:
2691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
2692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        default:
2693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          break;
2694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ItemLayoutProcessor_GotoNextContainerNode(
2696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_pCurChildNode, m_nCurChildNodeStage, m_pFormNode, TRUE);
2697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bAddedItemInRow && eFlowStrategy == XFA_ATTRIBUTEENUM_Tb) {
2698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        break;
2699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
2700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        continue;
2701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    SuspendAndCreateNewRow:
2703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pProcessor) {
2704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        m_pCurChildPreprocessor = pProcessor;
2705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
2707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CalculateRowChildPosition(rgCurLineLayoutItems, eFlowStrategy,
2709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              bContainerHeightAutoSize, bContainerWidthAutoSize,
2710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              fContentCalculatedWidth, fContentCalculatedHeight,
2711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              fContentCurRowY, fContentCurRowHeight,
2712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                              fContentWidthLimit, bRootForceTb);
2713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_fWidthLimite = fContentCurRowAvailWidth;
2714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bForceEndPage) {
2715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      break;
2716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_BOOL bRetValue =
2719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      (m_nCurChildNodeStage == XFA_ItemLayoutProcessorStages_Done &&
2720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann       m_rgPendingNodes.GetCount() == 0);
2721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bBreakDone) {
2722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    bRetValue = FALSE;
2723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ItemLayoutProcessor_CalculateContainerComponentSizeFromContentSize(
2725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pFormNode, bContainerWidthAutoSize, fContentCalculatedWidth,
2726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerWidth, bContainerHeightAutoSize, fContentCalculatedHeight,
2727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerHeight);
2728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (fContainerHeight >= XFA_LAYOUT_FLOAT_PERCISION || m_pLayoutItem ||
2729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      bRetValue) {
2730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (m_pLayoutItem == NULL) {
2731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
2732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fContainerHeight < 0) {
2734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContainerHeight = 0;
2735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    SetCurrentComponentSize(fContainerWidth, fContainerHeight);
2737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bForceEndPage) {
2738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fUsedSize = 0;
2739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    } else {
2740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fUsedSize += m_pLayoutItem->m_sSize.y;
2741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return bRetValue
2744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             ? XFA_ItemLayoutProcessorResult_Done
2745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann             : (bIsManualBreak ? XFA_ItemLayoutProcessorResult_ManualBreak
2746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                               : XFA_ItemLayoutProcessorResult_PageFullBreak);
2747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::CalculateRowChildPosition(
2749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CFX_ArrayTemplate<CXFA_ContentLayoutItem*>(&rgCurLineLayoutItems)[3],
2750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    XFA_ATTRIBUTEENUM eFlowStrategy,
2751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bContainerHeightAutoSize,
2752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bContainerWidthAutoSize,
2753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCalculatedWidth,
2754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCalculatedHeight,
2755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT& fContentCurRowY,
2756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fContentCurRowHeight,
2757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fContentWidthLimit,
2758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bRootForceTb) {
2759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nGroupLengths[3] = {0, 0, 0};
2760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fGroupWidths[3] = {0, 0, 0};
2761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nTotalLength = 0;
2762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  for (int32_t i = 0; i < 3; i++) {
2763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    nGroupLengths[i] = rgCurLineLayoutItems[i].GetSize();
2764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t c = nGroupLengths[i], j = 0; j < c; j++) {
2765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      nTotalLength++;
2766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (XFA_ItemLayoutProcessor_IsTakingSpace(
2767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              rgCurLineLayoutItems[i][j]->m_pFormNode)) {
2768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fGroupWidths[i] += rgCurLineLayoutItems[i][j]->m_sSize.x;
2769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!nTotalLength) {
2773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (bContainerHeightAutoSize) {
2774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_FLOAT fNewHeight = fContentCurRowY;
2775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (fContentCalculatedHeight > fNewHeight) {
2776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContentCalculatedHeight = fNewHeight;
2777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
2780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pLayoutItem == NULL) {
2782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
2783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (eFlowStrategy != XFA_ATTRIBUTEENUM_Rl_tb) {
2785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fCurPos;
2786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurPos = 0;
2787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t c = nGroupLengths[0], j = 0; j < c; j++) {
2788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bRootForceTb) {
2789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fAbsoluteX, fAbsoluteY;
2790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CalculatePositionedContainerPos(rgCurLineLayoutItems[0][j]->m_pFormNode,
2791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        rgCurLineLayoutItems[0][j]->m_sSize.x,
2792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        rgCurLineLayoutItems[0][j]->m_sSize.y,
2793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        fAbsoluteX, fAbsoluteY);
2794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[0][j]->m_sPos.Set(fAbsoluteX, fAbsoluteY);
2795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
2796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[0][j]->m_sPos.Set(fCurPos, fContentCurRowY);
2797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (XFA_ItemLayoutProcessor_IsTakingSpace(
2798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                rgCurLineLayoutItems[0][j]->m_pFormNode)) {
2799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fCurPos += rgCurLineLayoutItems[0][j]->m_sSize.x;
2800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem->AddChild(rgCurLineLayoutItems[0][j]);
2803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowWidth = fCurPos;
2804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurPos = (fContentWidthLimit + fGroupWidths[0] - fGroupWidths[1] -
2806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               fGroupWidths[2]) /
2807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              2;
2808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t c = nGroupLengths[1], j = 0; j < c; j++) {
2809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bRootForceTb) {
2810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fAbsoluteX, fAbsoluteY;
2811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CalculatePositionedContainerPos(rgCurLineLayoutItems[1][j]->m_pFormNode,
2812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        rgCurLineLayoutItems[1][j]->m_sSize.x,
2813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        rgCurLineLayoutItems[1][j]->m_sSize.y,
2814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        fAbsoluteX, fAbsoluteY);
2815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[1][j]->m_sPos.Set(fAbsoluteX, fAbsoluteY);
2816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
2817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[1][j]->m_sPos.Set(fCurPos, fContentCurRowY);
2818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (XFA_ItemLayoutProcessor_IsTakingSpace(
2819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                rgCurLineLayoutItems[1][j]->m_pFormNode)) {
2820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fCurPos += rgCurLineLayoutItems[1][j]->m_sSize.x;
2821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem->AddChild(rgCurLineLayoutItems[1][j]);
2824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowWidth = fCurPos;
2825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurPos = fContentWidthLimit - fGroupWidths[2];
2827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t c = nGroupLengths[2], j = 0; j < c; j++) {
2828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (bRootForceTb) {
2829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        FX_FLOAT fAbsoluteX, fAbsoluteY;
2830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        CalculatePositionedContainerPos(rgCurLineLayoutItems[2][j]->m_pFormNode,
2831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        rgCurLineLayoutItems[2][j]->m_sSize.x,
2832ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        rgCurLineLayoutItems[2][j]->m_sSize.y,
2833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                        fAbsoluteX, fAbsoluteY);
2834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[2][j]->m_sPos.Set(fAbsoluteX, fAbsoluteY);
2835ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      } else {
2836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        rgCurLineLayoutItems[2][j]->m_sPos.Set(fCurPos, fContentCurRowY);
2837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        if (XFA_ItemLayoutProcessor_IsTakingSpace(
2838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                rgCurLineLayoutItems[2][j]->m_pFormNode)) {
2839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          fCurPos += rgCurLineLayoutItems[2][j]->m_sSize.x;
2840ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        }
2841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem->AddChild(rgCurLineLayoutItems[2][j]);
2843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowWidth = fCurPos;
2844ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  } else {
2846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fCurPos;
2847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurPos = fGroupWidths[0];
2848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t c = nGroupLengths[0], j = 0; j < c; j++) {
2849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (XFA_ItemLayoutProcessor_IsTakingSpace(
2850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              rgCurLineLayoutItems[0][j]->m_pFormNode)) {
2851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fCurPos -= rgCurLineLayoutItems[0][j]->m_sSize.x;
2852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      rgCurLineLayoutItems[0][j]->m_sPos.Set(fCurPos, fContentCurRowY);
2854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem->AddChild(rgCurLineLayoutItems[0][j]);
2855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowWidth = fCurPos;
2856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurPos = (fContentWidthLimit + fGroupWidths[0] + fGroupWidths[1] -
2858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann               fGroupWidths[2]) /
2859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              2;
2860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t c = nGroupLengths[1], j = 0; j < c; j++) {
2861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (XFA_ItemLayoutProcessor_IsTakingSpace(
2862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              rgCurLineLayoutItems[1][j]->m_pFormNode)) {
2863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fCurPos -= rgCurLineLayoutItems[1][j]->m_sSize.x;
2864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      rgCurLineLayoutItems[1][j]->m_sPos.Set(fCurPos, fContentCurRowY);
2866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem->AddChild(rgCurLineLayoutItems[1][j]);
2867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowWidth = fCurPos;
2868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fCurPos = fContentWidthLimit;
2870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    for (int32_t c = nGroupLengths[2], j = 0; j < c; j++) {
2871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (XFA_ItemLayoutProcessor_IsTakingSpace(
2872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann              rgCurLineLayoutItems[2][j]->m_pFormNode)) {
2873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fCurPos -= rgCurLineLayoutItems[2][j]->m_sSize.x;
2874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      rgCurLineLayoutItems[2][j]->m_sPos.Set(fCurPos, fContentCurRowY);
2876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_pLayoutItem->AddChild(rgCurLineLayoutItems[2][j]);
2877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_fLastRowWidth = fCurPos;
2878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_fLastRowY = fContentCurRowY;
2881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fContentCurRowY += fContentCurRowHeight;
2882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerWidthAutoSize) {
2883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fChildSuppliedWidth = fGroupWidths[0];
2884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fContentWidthLimit < XFA_LAYOUT_FLOAT_MAX &&
2885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        fContentWidthLimit > fChildSuppliedWidth) {
2886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fChildSuppliedWidth = fContentWidthLimit;
2887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fContentCalculatedWidth < fChildSuppliedWidth) {
2889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCalculatedWidth = fChildSuppliedWidth;
2890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (bContainerHeightAutoSize) {
2893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fChildSuppliedHeight = fContentCurRowY;
2894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (fContentCalculatedHeight < fChildSuppliedHeight) {
2895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      fContentCalculatedHeight = fChildSuppliedHeight;
2896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
2899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCXFA_Node* CXFA_ItemLayoutProcessor::GetSubformSetParent(
2901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pSubformSet) {
2902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pSubformSet && pSubformSet->GetClassID() == XFA_ELEMENT_SubformSet) {
2903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pParent = pSubformSet->GetNodeItem(XFA_NODEITEM_Parent);
2904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    while (pParent) {
2905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      if (pParent->GetClassID() != XFA_ELEMENT_SubformSet) {
2906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        return pParent;
2907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      pParent = pParent->GetNodeItem(XFA_NODEITEM_Parent);
2909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return pSubformSet;
2912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::DoLayoutField() {
2914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (m_pLayoutItem != NULL) {
2915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
2916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pCurChildNode == XFA_LAYOUT_INVALIDNODE);
2918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pLayoutItem = CreateContentLayoutItem(m_pFormNode);
2919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!m_pLayoutItem) {
2920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return;
2921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Document* pDocument = m_pFormNode->GetDocument();
2923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  IXFA_Notify* pNotify = pDocument->GetParser()->GetNotify();
2924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fHeight = -1;
2925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  FX_FLOAT fWidth = -1;
2926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  pNotify->StartFieldDrawLayout(m_pFormNode, fWidth, fHeight);
2927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t nRotate =
2928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FXSYS_round(m_pFormNode->GetMeasure(XFA_ATTRIBUTE_Rotate).GetValue());
2929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  nRotate = XFA_MapRotation(nRotate);
2930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (nRotate == 90 || nRotate == 270) {
2931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fTmp = fWidth;
2932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fWidth = fHeight;
2933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    fHeight = fTmp;
2934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  SetCurrentComponentSize(fWidth, fHeight);
2936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannXFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayout(
2938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_BOOL bUseBreakControl,
2939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fHeightLimit,
2940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    FX_FLOAT fRealHeight,
2941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_LayoutContext* pContext) {
2942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  XFA_ELEMENT eClassID = m_pFormNode->GetClassID();
2943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  switch (eClassID) {
2944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Subform:
2945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Area:
2946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_ExclGroup:
2947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_SubformSet: {
2948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      FX_BOOL bRootForceTb = FALSE;
2949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      CXFA_Node* pLayoutNode = GetSubformSetParent(m_pFormNode);
2950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      XFA_ATTRIBUTEENUM eLayoutStrategy =
2951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          XFA_ItemLayoutProcessor_GetLayout(pLayoutNode, bRootForceTb);
2952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      switch (eLayoutStrategy) {
2953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Tb:
2954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Lr_tb:
2955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Rl_tb:
2956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return DoLayoutFlowedContainer(bUseBreakControl, eLayoutStrategy,
2957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         fHeightLimit, fRealHeight, pContext,
2958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                         bRootForceTb);
2959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Position:
2960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Row:
2961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Rl_row:
2962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        default:
2963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          DoLayoutPositionedContainer(pContext);
2964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Done;
2965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return XFA_ItemLayoutProcessorResult_Done;
2966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        case XFA_ATTRIBUTEENUM_Table:
2967ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          DoLayoutTableContainer(pLayoutNode);
2968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Done;
2969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann          return XFA_ItemLayoutProcessorResult_Done;
2970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      }
2971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
2972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Draw:
2973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_Field:
2974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      DoLayoutField();
2975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      m_nCurChildNodeStage = XFA_ItemLayoutProcessorStages_Done;
2976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return XFA_ItemLayoutProcessorResult_Done;
2977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    case XFA_ELEMENT_ContentArea:
2978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return XFA_ItemLayoutProcessorResult_Done;
2979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    default:
2980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return XFA_ItemLayoutProcessorResult_Done;
2981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
2982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::GetCurrentComponentPos(FX_FLOAT& fAbsoluteX,
2984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                      FX_FLOAT& fAbsoluteY) {
2985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pLayoutItem);
2986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fAbsoluteX = m_pLayoutItem->m_sPos.x;
2987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fAbsoluteY = m_pLayoutItem->m_sPos.y;
2988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::GetCurrentComponentSize(FX_FLOAT& fWidth,
2990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                       FX_FLOAT& fHeight) {
2991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pLayoutItem);
2992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fWidth = m_pLayoutItem->m_sSize.x;
2993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  fHeight = m_pLayoutItem->m_sSize.y;
2994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
2995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::SetCurrentComponentPos(FX_FLOAT fAbsoluteX,
2996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                      FX_FLOAT fAbsoluteY) {
2997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pLayoutItem);
2998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pLayoutItem->m_sPos.Set(fAbsoluteX, fAbsoluteY);
2999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
3000ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CXFA_ItemLayoutProcessor::SetCurrentComponentSize(FX_FLOAT fWidth,
3001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann                                                       FX_FLOAT fHeight) {
3002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  ASSERT(m_pLayoutItem);
3003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  m_pLayoutItem->m_sSize.Set(fWidth, fHeight);
3004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
3005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CXFA_ItemLayoutProcessor::JudgeLeaderOrTrailerForOccur(
3006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    CXFA_Node* pFormNode) {
3007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (pFormNode == NULL) {
3008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return FALSE;
3009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
3010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Node* pTemplate = pFormNode->GetTemplateNode();
3011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (!pTemplate) {
3012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    pTemplate = pFormNode;
3013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
3014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  CXFA_Occur NodeOccur = pTemplate->GetFirstChildByClass(XFA_ELEMENT_Occur);
3015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  int32_t iMax = NodeOccur.GetMax();
3016ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  if (iMax > -1) {
3017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    int32_t iCount =
3018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann        (int32_t)(uintptr_t)m_PendingNodesCount.GetValueAt(pTemplate);
3019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    if (iCount >= iMax) {
3020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann      return FALSE;
3021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    }
3022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    iCount++;
3023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    m_PendingNodesCount.SetAt(pTemplate, (void*)(uintptr_t)(iCount));
3024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann    return TRUE;
3025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  }
3026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann  return TRUE;
3027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}
3028