From f9d49da715deeb0efa6eaaf8ac43727ae28f8749 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Mon, 16 Jul 2018 21:52:56 +0000 Subject: Use UnownedPtr/Optional in cfxa_layoutcontext.cpp Introduce cfxa_layoutcontext.cpp to satisfy chromium style ctor check. Fix typo in class forward declaration in cfxa_layoutcontext.h Change-Id: I2b29bf61a21be0f895faf8984897c5655a4f0e89 Reviewed-on: https://pdfium-review.googlesource.com/37950 Commit-Queue: Tom Sepez Reviewed-by: Lei Zhang --- BUILD.gn | 1 + xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp | 18 ++++++++---------- xfa/fxfa/parser/cxfa_layoutcontext.cpp | 11 +++++++++++ xfa/fxfa/parser/cxfa_layoutcontext.h | 25 +++++++++++-------------- 4 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 xfa/fxfa/parser/cxfa_layoutcontext.cpp diff --git a/BUILD.gn b/BUILD.gn index e571772915..16eaffd785 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -2450,6 +2450,7 @@ if (pdf_enable_xfa) { "xfa/fxfa/parser/cxfa_labelprinter.h", "xfa/fxfa/parser/cxfa_layout.cpp", "xfa/fxfa/parser/cxfa_layout.h", + "xfa/fxfa/parser/cxfa_layoutcontext.cpp", "xfa/fxfa/parser/cxfa_layoutcontext.h", "xfa/fxfa/parser/cxfa_layoutitem.cpp", "xfa/fxfa/parser/cxfa_layoutitem.h", diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp index 2dfa956ee0..2ff9acd25a 100644 --- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp +++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp @@ -1143,18 +1143,17 @@ void CXFA_ItemLayoutProcessor::DoLayoutPositionedContainer( if (iColSpan <= pdfium::CollectionSize( *pContext->m_prgSpecifiedColumnWidths) - iColIndex) { - pContext->m_fCurColumnWidth = 0; - pContext->m_bCurColumnWidthAvaiable = true; + pContext->m_fCurColumnWidth = 0.0f; if (iColSpan == -1) { iColSpan = pdfium::CollectionSize( *pContext->m_prgSpecifiedColumnWidths); } for (int32_t i = 0; iColIndex + i < iColSpan; ++i) { - pContext->m_fCurColumnWidth += + pContext->m_fCurColumnWidth.value() += (*pContext->m_prgSpecifiedColumnWidths)[iColIndex + i]; } - if (pContext->m_fCurColumnWidth == 0) - pContext->m_bCurColumnWidthAvaiable = false; + if (pContext->m_fCurColumnWidth.value() == 0) + pContext->m_fCurColumnWidth.reset(); iColIndex += iColSpan >= 0 ? iColSpan : 0; } @@ -1273,8 +1272,7 @@ void CXFA_ItemLayoutProcessor::DoLayoutTableContainer(CXFA_Node* pLayoutNode) { for (; m_pCurChildNode; GotoNextContainerNode( m_pCurChildNode, &m_nCurChildNodeStage, GetFormNode(), false)) { - layoutContext.m_bCurColumnWidthAvaiable = false; - layoutContext.m_fCurColumnWidth = 0; + layoutContext.m_fCurColumnWidth.reset(); if (m_nCurChildNodeStage != XFA_ItemLayoutProcessorStages::Container) continue; @@ -1605,9 +1603,9 @@ XFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::DoLayoutFlowedContainer( CFX_SizeF containerSize = CalculateContainerSpecifiedSize( GetFormNode(), &bContainerWidthAutoSize, &bContainerHeightAutoSize); - if (pContext && pContext->m_bCurColumnWidthAvaiable) { + if (pContext && pContext->m_fCurColumnWidth.has_value()) { + containerSize.width = pContext->m_fCurColumnWidth.value(); bContainerWidthAutoSize = false; - containerSize.width = pContext->m_fCurColumnWidth; } if (!bContainerHeightAutoSize) containerSize.height -= m_fUsedSize; @@ -2556,7 +2554,7 @@ XFA_ItemLayoutProcessorResult CXFA_ItemLayoutProcessor::InsertFlowedItem( pProcessor->GetFormNode()->GetIntact() == XFA_AttributeEnum::None) { pFormNode = m_pPageMgr->QueryOverflow(pProcessor->GetFormNode()); if (!pFormNode && pLayoutContext && pLayoutContext->m_pOverflowProcessor) { - pFormNode = pLayoutContext->m_pOverflowNode; + pFormNode = pLayoutContext->m_pOverflowNode.Get(); bUseInherited = true; } if (m_pPageMgr->ProcessOverflow(pFormNode, pOverflowLeaderNode, diff --git a/xfa/fxfa/parser/cxfa_layoutcontext.cpp b/xfa/fxfa/parser/cxfa_layoutcontext.cpp new file mode 100644 index 0000000000..24f0e8d803 --- /dev/null +++ b/xfa/fxfa/parser/cxfa_layoutcontext.cpp @@ -0,0 +1,11 @@ +// 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/parser/cxfa_layoutcontext.h" + +CXFA_LayoutContext::CXFA_LayoutContext() = default; + +CXFA_LayoutContext::~CXFA_LayoutContext() = default; diff --git a/xfa/fxfa/parser/cxfa_layoutcontext.h b/xfa/fxfa/parser/cxfa_layoutcontext.h index a133ee19d9..9927d3e534 100644 --- a/xfa/fxfa/parser/cxfa_layoutcontext.h +++ b/xfa/fxfa/parser/cxfa_layoutcontext.h @@ -9,24 +9,21 @@ #include -class CXFA_ItemLayoutProcess; +#include "core/fxcrt/unowned_ptr.h" +#include "third_party/base/optional.h" + +class CXFA_ItemLayoutProcessor; class CXFA_Node; class CXFA_LayoutContext { public: - CXFA_LayoutContext() - : m_prgSpecifiedColumnWidths(nullptr), - m_fCurColumnWidth(0), - m_bCurColumnWidthAvaiable(false), - m_pOverflowProcessor(nullptr), - m_pOverflowNode(nullptr) {} - ~CXFA_LayoutContext() {} - - std::vector* m_prgSpecifiedColumnWidths; - float m_fCurColumnWidth; - bool m_bCurColumnWidthAvaiable; - CXFA_ItemLayoutProcessor* m_pOverflowProcessor; - CXFA_Node* m_pOverflowNode; + CXFA_LayoutContext(); + ~CXFA_LayoutContext(); + + Optional m_fCurColumnWidth; + UnownedPtr> m_prgSpecifiedColumnWidths; + UnownedPtr m_pOverflowProcessor; + UnownedPtr m_pOverflowNode; }; #endif // XFA_FXFA_PARSER_CXFA_LAYOUTCONTEXT_H_ -- cgit v1.2.3