59 void Trace(cppgc::Visitor* visitor)
const;
62 Result DoLayout(
bool bUseBreakControl,
float fHeightLimit,
float fRealHeight);
70 CPPGC_STACK_ALLOCATED();
76 std::optional<
float> m_fCurColumnWidth;
77 UnownedPtr<std::vector<
float>> m_prgSpecifiedColumnWidths;
85 CXFA_ContentLayoutProcessor(
cppgc::Heap* pHeap,
89 Result DoLayoutInternal(
bool bUseBreakControl,
95 bool HasLayoutItem()
const {
return !!m_pLayoutItem; }
96 void SplitLayoutItem(
float fSplitPos);
97 float FindSplitPos(
float fProposedSplitPos);
100 ContentLayoutItemVector& rgCurLineLayoutItem,
101 float* fContentCurRowAvailWidth,
102 float* fContentCurRowHeight,
103 float* fContentCurRowY,
104 bool* bAddedItemInRow,
107 void ProcessUnUseOverFlow(
CXFA_Node* pLeaderNode,
109 CXFA_ContentLayoutItem* pTrailerItem,
111 bool IsAddNewRowForTrailer(CXFA_ContentLayoutItem* pTrailerItem);
112 bool JudgeLeaderOrTrailerForOccur(
CXFA_Node* pFormNode);
115 CXFA_ContentLayoutItem* CreateContentLayoutItem(
CXFA_Node* pFormNode);
117 void SetCurrentComponentPos(
const CFX_PointF& pos);
118 void SetCurrentComponentSize(
const CFX_SizeF& size);
120 void SplitLayoutItem(CXFA_ContentLayoutItem* pLayoutItem,
121 CXFA_ContentLayoutItem* pSecondParent,
123 float InsertKeepLayoutItems();
124 bool CalculateRowChildPosition(
125 std::array<ContentLayoutItemVector, 3>& rgCurLineLayoutItems,
127 bool bContainerHeightAutoSize,
128 bool bContainerWidthAutoSize,
129 float* fContentCalculatedWidth,
130 float* fContentCalculatedHeight,
131 float* fContentCurRowY,
132 float fContentCurRowHeight,
133 float fContentWidthLimit,
135 void ProcessUnUseBinds(
CXFA_Node* pFormNode);
136 bool JudgePutNextPage(CXFA_ContentLayoutItem* pParentLayoutItem,
138 std::vector<CXFA_ContentLayoutItem*>* pKeepItems);
140 void DoLayoutPositionedContainer(Context* pContext);
141 void DoLayoutTableContainer(
CXFA_Node* pLayoutNode);
142 Result DoLayoutFlowedContainer(
bool bUseBreakControl,
148 void DoLayoutField();
150 void GotoNextContainerNodeSimple();
160 bool* pLastKeepNode);
162 std::optional<
Stage> ProcessKeepNodesForBreakBefore(
168 void UpdatePendingItemLayout(CXFA_ContentLayoutItem* pLayoutItem);
169 void AddTrailerBeforeSplit(
float fSplitPos,
170 CXFA_ContentLayoutItem* pTrailerLayoutItem,
172 void AddLeaderAfterSplit(CXFA_ContentLayoutItem* pLeaderLayoutItem);
173 void AddPendingNode(
CXFA_Node* pPendingNode,
bool bBreakPending);
174 float InsertPendingItems(
CXFA_Node* pCurChildNode);
177 bool bContainerWidthAutoSize,
178 bool bContainerHeightAutoSize,
179 float fContainerHeight,
181 uint8_t* uCurHAlignState,
182 std::array<ContentLayoutItemVector, 3>& rgCurLineLayoutItems,
183 bool bUseBreakControl,
186 float fContentWidthLimit,
187 float* fContentCurRowY,
188 float* fContentCurRowAvailWidth,
189 float* fContentCurRowHeight,
190 bool* bAddedItemInRow,
192 Context* pLayoutContext,
203 std::optional<
Stage> HandleCheckNextChildContainer(
209 void ProcessKeepNodesEnd();
210 void AdjustContainerSpecifiedSize(Context* pContext,
212 bool* pContainerWidthAutoSize,
213 bool* pContainerHeightAutoSize);
214 CXFA_ContentLayoutItem* FindLastContentLayoutItem(
216 CFX_SizeF CalculateLayoutItemSize(
const CXFA_ContentLayoutItem* pLayoutChild);
220 bool m_bBreakPending =
true;
221 bool m_bUseInherited =
false;
222 bool m_bKeepBreakFinish =
false;
223 bool m_bIsProcessKeep =
false;
224 bool m_bHasAvailHeight =
true;
225 float m_fUsedSize = 0;
226 float m_fLastRowWidth = 0;
227 float m_fLastRowY = 0;
228 float m_fWidthLimit = 0;
230 cppgc::Member<CXFA_Node>
const m_pFormNode;
231 cppgc::Member<CXFA_Node> m_pCurChildNode;
232 cppgc::Member<CXFA_Node> m_pKeepHeadNode;
233 cppgc::Member<CXFA_Node> m_pKeepTailNode;
234 cppgc::Member<CXFA_ContentLayoutItem> m_pLayoutItem;
235 cppgc::Member<CXFA_ContentLayoutItem> m_pOldLayoutItem;
236 cppgc::Member<CXFA_ViewLayoutProcessor> m_pViewLayoutProcessor;
237 cppgc::Member<CXFA_ContentLayoutProcessor> m_pCurChildPreprocessor;
238 std::vector<
float> m_rgSpecifiedColumnWidths;
void InsertAfter(CXFA_ContentLayoutItem *pNext)
CXFA_ContentLayoutItem * GetNext() const
CXFA_ContentLayoutItem * GetLast()
Result DoLayout(bool bUseBreakControl, float fHeightLimit, float fRealHeight)
void DoLayoutPageArea(CXFA_ViewLayoutItem *pPageAreaLayoutItem)
cppgc::Heap * GetHeap() const
CXFA_ContentLayoutItem * ExtractLayoutItem()
void Trace(cppgc::Visitor *visitor) const
constexpr float kXFALayoutPrecision