Fold CXFA_LayoutContext into CXFA_ContentLayoutProcessor.
The content layout processor is the only thing that uses the
layout context in the first place, so make it a private
nested class (external callers always pass nullptr where this
type is required).
Change-Id: I7f9274ba5e5c49a1438b38dfae9da945cec62e84
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/57150
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/layout/BUILD.gn b/xfa/fxfa/layout/BUILD.gn
index 9fe47c2..c572120 100644
--- a/xfa/fxfa/layout/BUILD.gn
+++ b/xfa/fxfa/layout/BUILD.gn
@@ -14,8 +14,6 @@
"cxfa_contentlayoutitem.h",
"cxfa_contentlayoutprocessor.cpp",
"cxfa_contentlayoutprocessor.h",
- "cxfa_layoutcontext.cpp",
- "cxfa_layoutcontext.h",
"cxfa_layoutitem.cpp",
"cxfa_layoutitem.h",
"cxfa_layoutprocessor.cpp",
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
index 43c1be8..e760b5a 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
@@ -20,7 +20,6 @@
#include "xfa/fxfa/cxfa_ffnotify.h"
#include "xfa/fxfa/cxfa_ffwidget.h"
#include "xfa/fxfa/layout/cxfa_contentlayoutitem.h"
-#include "xfa/fxfa/layout/cxfa_layoutcontext.h"
#include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
#include "xfa/fxfa/layout/cxfa_viewlayoutitem.h"
#include "xfa/fxfa/layout/cxfa_viewlayoutprocessor.h"
@@ -989,7 +988,7 @@
auto pProcessor =
pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(pCurChildNode, nullptr);
- pProcessor->DoLayout(false, FLT_MAX, FLT_MAX, nullptr);
+ pProcessor->DoLayout(false, FLT_MAX, FLT_MAX);
if (!pProcessor->HasLayoutItem())
continue;
@@ -1028,7 +1027,7 @@
}
void CXFA_ContentLayoutProcessor::DoLayoutPositionedContainer(
- CXFA_LayoutContext* pContext) {
+ Context* pContext) {
if (m_pLayoutItem)
return;
@@ -1079,7 +1078,7 @@
}
}
- pProcessor->DoLayout(false, FLT_MAX, FLT_MAX, pContext);
+ pProcessor->DoLayoutInternal(false, FLT_MAX, FLT_MAX, pContext);
if (!pProcessor->HasLayoutItem())
continue;
@@ -1178,9 +1177,9 @@
int32_t iSpecifiedColumnCount =
pdfium::CollectionSize<int32_t>(m_rgSpecifiedColumnWidths);
- CXFA_LayoutContext layoutContext;
+ Context layoutContext;
layoutContext.m_prgSpecifiedColumnWidths = &m_rgSpecifiedColumnWidths;
- CXFA_LayoutContext* pLayoutContext =
+ Context* pLayoutContext =
iSpecifiedColumnCount > 0 ? &layoutContext : nullptr;
if (!m_pCurChildNode)
GotoNextContainerNodeSimple(false);
@@ -1192,7 +1191,7 @@
auto pProcessor = pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(
m_pCurChildNode, m_pViewLayoutProcessor.Get());
- pProcessor->DoLayout(false, FLT_MAX, FLT_MAX, pLayoutContext);
+ pProcessor->DoLayoutInternal(false, FLT_MAX, FLT_MAX, pLayoutContext);
if (!pProcessor->HasLayoutItem())
continue;
@@ -1507,7 +1506,7 @@
XFA_AttributeValue eFlowStrategy,
float fHeightLimit,
float fRealHeight,
- CXFA_LayoutContext* pContext,
+ Context* pContext,
bool bRootForceTb) {
m_bHasAvailHeight = true;
if (m_pCurChildPreprocessor)
@@ -2043,8 +2042,15 @@
CXFA_ContentLayoutProcessor::Result CXFA_ContentLayoutProcessor::DoLayout(
bool bUseBreakControl,
float fHeightLimit,
- float fRealHeight,
- CXFA_LayoutContext* pContext) {
+ float fRealHeight) {
+ return DoLayoutInternal(bUseBreakControl, fHeightLimit, fRealHeight, nullptr);
+}
+
+CXFA_ContentLayoutProcessor::Result
+CXFA_ContentLayoutProcessor::DoLayoutInternal(bool bUseBreakControl,
+ float fHeightLimit,
+ float fRealHeight,
+ Context* pContext) {
switch (GetFormNode()->GetElementType()) {
case XFA_Element::Subform:
case XFA_Element::Area:
@@ -2269,7 +2275,7 @@
auto pPendingProcessor = pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(
m_PendingNodes.front(), nullptr);
m_PendingNodes.pop_front();
- pPendingProcessor->DoLayout(false, FLT_MAX, FLT_MAX, nullptr);
+ pPendingProcessor->DoLayout(false, FLT_MAX, FLT_MAX);
CXFA_ContentLayoutItem* pPendingLayoutItem =
pPendingProcessor->HasLayoutItem()
? pPendingProcessor->ExtractLayoutItem()
@@ -2301,7 +2307,7 @@
float* fContentCurRowHeight,
bool* bAddedItemInRow,
bool* bForceEndPage,
- CXFA_LayoutContext* pLayoutContext,
+ Context* pLayoutContext,
bool bNewRow) {
bool bTakeSpace = pProcessor->GetFormNode()->PresenceRequiresSpace();
uint8_t uHAlign = HAlignEnumToInt(
@@ -2334,7 +2340,7 @@
}
bool bUseInherited = false;
- CXFA_LayoutContext layoutContext;
+ Context layoutContext;
if (m_pViewLayoutProcessor) {
CXFA_Node* pOverflowNode =
m_pViewLayoutProcessor->QueryOverflow(GetFormNode());
@@ -2347,7 +2353,7 @@
Result eRetValue = Result::kDone;
if (!bNewRow || pProcessor->m_ePreProcessRs == Result::kDone) {
- eRetValue = pProcessor->DoLayout(
+ eRetValue = pProcessor->DoLayoutInternal(
bTakeSpace ? bUseBreakControl : false,
bUseRealHeight ? fRealHeight - *fContentCurRowY : FLT_MAX,
bIsTransHeight ? fRealHeight - *fContentCurRowY : FLT_MAX,
@@ -2394,7 +2400,7 @@
auto pOverflowLeaderProcessor =
pdfium::MakeUnique<CXFA_ContentLayoutProcessor>(
pOverflowTrailerNode, nullptr);
- pOverflowLeaderProcessor->DoLayout(false, FLT_MAX, FLT_MAX, nullptr);
+ pOverflowLeaderProcessor->DoLayout(false, FLT_MAX, FLT_MAX);
pTrailerLayoutItem =
pOverflowLeaderProcessor->HasLayoutItem()
? pOverflowLeaderProcessor->ExtractLayoutItem()
@@ -2739,7 +2745,7 @@
}
void CXFA_ContentLayoutProcessor::AdjustContainerSpecifiedSize(
- CXFA_LayoutContext* pContext,
+ Context* pContext,
CFX_SizeF* pSize,
bool* pContainerWidthAutoSize,
bool* pContainerHeightAutoSize) {
@@ -2800,3 +2806,7 @@
}
return size;
}
+
+CXFA_ContentLayoutProcessor::Context::Context() = default;
+
+CXFA_ContentLayoutProcessor::Context::~Context() = default;
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h
index 32dd9cd..e8a425c 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h
+++ b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.h
@@ -23,7 +23,6 @@
class CXFA_ContentLayoutItem;
class CXFA_ContentLayoutProcessor;
-class CXFA_LayoutContext;
class CXFA_LayoutProcessor;
class CXFA_Node;
class CXFA_ViewLayoutItem;
@@ -53,16 +52,29 @@
CXFA_ViewLayoutProcessor* pViewLayoutProcessor);
~CXFA_ContentLayoutProcessor();
- Result DoLayout(bool bUseBreakControl,
- float fHeightLimit,
- float fRealHeight,
- CXFA_LayoutContext* pContext);
+ Result DoLayout(bool bUseBreakControl, float fHeightLimit, float fRealHeight);
void DoLayoutPageArea(CXFA_ViewLayoutItem* pPageAreaLayoutItem);
CXFA_Node* GetFormNode() { return m_pFormNode; }
CXFA_ContentLayoutItem* ExtractLayoutItem();
private:
+ class Context {
+ public:
+ Context();
+ ~Context();
+
+ Optional<float> m_fCurColumnWidth;
+ UnownedPtr<std::vector<float>> m_prgSpecifiedColumnWidths;
+ UnownedPtr<CXFA_ContentLayoutProcessor> m_pOverflowProcessor;
+ UnownedPtr<CXFA_Node> m_pOverflowNode;
+ };
+
+ Result DoLayoutInternal(bool bUseBreakControl,
+ float fHeightLimit,
+ float fRealHeight,
+ Context* pContext);
+
CFX_SizeF GetCurrentComponentSize();
bool HasLayoutItem() const { return !!m_pLayoutItem; }
void SplitLayoutItem(float fSplitPos);
@@ -111,13 +123,13 @@
float fChildHeight,
std::vector<CXFA_ContentLayoutItem*>* pKeepItems);
- void DoLayoutPositionedContainer(CXFA_LayoutContext* pContext);
+ void DoLayoutPositionedContainer(Context* pContext);
void DoLayoutTableContainer(CXFA_Node* pLayoutNode);
Result DoLayoutFlowedContainer(bool bUseBreakControl,
XFA_AttributeValue eFlowStrategy,
float fHeightLimit,
float fRealHeight,
- CXFA_LayoutContext* pContext,
+ Context* pContext,
bool bRootForceTb);
void DoLayoutField();
@@ -160,7 +172,7 @@
float* fContentCurRowHeight,
bool* bAddedItemInRow,
bool* bForceEndPage,
- CXFA_LayoutContext* pLayoutContext,
+ Context* pLayoutContext,
bool bNewRow);
Optional<Stage> HandleKeep(CXFA_Node* pBreakAfterNode,
@@ -177,7 +189,7 @@
Optional<Stage> HandleBookendTrailer(CXFA_Node* pParentContainer,
CXFA_Node** pCurActionNode);
void ProcessKeepNodesEnd();
- void AdjustContainerSpecifiedSize(CXFA_LayoutContext* pContext,
+ void AdjustContainerSpecifiedSize(Context* pContext,
CFX_SizeF* pSize,
bool* pContainerWidthAutoSize,
bool* pContainerHeightAutoSize);
diff --git a/xfa/fxfa/layout/cxfa_layoutcontext.cpp b/xfa/fxfa/layout/cxfa_layoutcontext.cpp
deleted file mode 100644
index cd5d8b1..0000000
--- a/xfa/fxfa/layout/cxfa_layoutcontext.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright 2018 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/layout/cxfa_layoutcontext.h"
-
-CXFA_LayoutContext::CXFA_LayoutContext() = default;
-
-CXFA_LayoutContext::~CXFA_LayoutContext() = default;
diff --git a/xfa/fxfa/layout/cxfa_layoutcontext.h b/xfa/fxfa/layout/cxfa_layoutcontext.h
deleted file mode 100644
index 76ed06f..0000000
--- a/xfa/fxfa/layout/cxfa_layoutcontext.h
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXFA_LAYOUT_CXFA_LAYOUTCONTEXT_H_
-#define XFA_FXFA_LAYOUT_CXFA_LAYOUTCONTEXT_H_
-
-#include <vector>
-
-#include "core/fxcrt/unowned_ptr.h"
-#include "third_party/base/optional.h"
-
-class CXFA_ContentLayoutProcessor;
-class CXFA_Node;
-
-class CXFA_LayoutContext {
- public:
- CXFA_LayoutContext();
- ~CXFA_LayoutContext();
-
- Optional<float> m_fCurColumnWidth;
- UnownedPtr<std::vector<float>> m_prgSpecifiedColumnWidths;
- UnownedPtr<CXFA_ContentLayoutProcessor> m_pOverflowProcessor;
- UnownedPtr<CXFA_Node> m_pOverflowNode;
-};
-
-#endif // XFA_FXFA_LAYOUT_CXFA_LAYOUTCONTEXT_H_
diff --git a/xfa/fxfa/layout/cxfa_layoutprocessor.cpp b/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
index fc86a4b..0edfefd 100644
--- a/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutprocessor.cpp
@@ -76,8 +76,8 @@
pFormNode->JSObject()->GetMeasureInUnit(XFA_Attribute::Y, XFA_Unit::Pt);
do {
float fAvailHeight = m_pViewLayoutProcessor->GetAvailHeight();
- eStatus = m_pContentLayoutProcessor->DoLayout(true, fAvailHeight,
- fAvailHeight, nullptr);
+ eStatus =
+ m_pContentLayoutProcessor->DoLayout(true, fAvailHeight, fAvailHeight);
if (eStatus != CXFA_ContentLayoutProcessor::Result::kDone)
m_nProgressCounter++;