Nest CXFA_TextPiece and CXFA_PieceLine in CXFA_TextLayout Motivation: in an ideal world, anything starting with CXFA would get garbage collected, and unique_ptr<CXFA_*> becomes an anti-pattern. -- add some |const| where possible. Change-Id: I03dfbfa67b981d062adb77b6315f4f684e52dc5e Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73432 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Daniel Hosseinian <dhoss@chromium.org>
diff --git a/xfa/fxfa/BUILD.gn b/xfa/fxfa/BUILD.gn index d4d4d7b..bb96f3b 100644 --- a/xfa/fxfa/BUILD.gn +++ b/xfa/fxfa/BUILD.gn
@@ -71,8 +71,6 @@ "cxfa_fwltheme.h", "cxfa_imagerenderer.cpp", "cxfa_imagerenderer.h", - "cxfa_pieceline.cpp", - "cxfa_pieceline.h", "cxfa_readynodeiterator.cpp", "cxfa_readynodeiterator.h", "cxfa_textlayout.cpp", @@ -81,8 +79,6 @@ "cxfa_textparsecontext.h", "cxfa_textparser.cpp", "cxfa_textparser.h", - "cxfa_textpiece.cpp", - "cxfa_textpiece.h", "cxfa_textprovider.cpp", "cxfa_textprovider.h", "cxfa_texttabstopscontext.cpp",
diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp index a2d1797..f9b2085 100644 --- a/xfa/fxfa/cxfa_fftext.cpp +++ b/xfa/fxfa/cxfa_fftext.cpp
@@ -12,9 +12,7 @@ #include "xfa/fxfa/cxfa_ffdoc.h" #include "xfa/fxfa/cxfa_ffpageview.h" #include "xfa/fxfa/cxfa_ffwidget.h" -#include "xfa/fxfa/cxfa_pieceline.h" #include "xfa/fxfa/cxfa_textlayout.h" -#include "xfa/fxfa/cxfa_textpiece.h" #include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxgraphics/cxfa_graphics.h"
diff --git a/xfa/fxfa/cxfa_pieceline.cpp b/xfa/fxfa/cxfa_pieceline.cpp deleted file mode 100644 index 7f49249..0000000 --- a/xfa/fxfa/cxfa_pieceline.cpp +++ /dev/null
@@ -1,13 +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 - -#include "xfa/fxfa/cxfa_pieceline.h" - -#include "xfa/fxfa/cxfa_textpiece.h" - -CXFA_PieceLine::CXFA_PieceLine() {} - -CXFA_PieceLine::~CXFA_PieceLine() = default;
diff --git a/xfa/fxfa/cxfa_pieceline.h b/xfa/fxfa/cxfa_pieceline.h deleted file mode 100644 index 0e233ac..0000000 --- a/xfa/fxfa/cxfa_pieceline.h +++ /dev/null
@@ -1,24 +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_CXFA_PIECELINE_H_ -#define XFA_FXFA_CXFA_PIECELINE_H_ - -#include <memory> -#include <vector> - -class CXFA_TextPiece; - -class CXFA_PieceLine { - public: - CXFA_PieceLine(); - ~CXFA_PieceLine(); - - std::vector<std::unique_ptr<CXFA_TextPiece>> m_textPieces; - std::vector<size_t> m_charCounts; -}; - -#endif // XFA_FXFA_CXFA_PIECELINE_H_
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp index 51678e8..1a4e941 100644 --- a/xfa/fxfa/cxfa_textlayout.cpp +++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -27,9 +27,7 @@ #include "xfa/fgas/layout/cfx_rtfbreak.h" #include "xfa/fgas/layout/cfx_textuserdata.h" #include "xfa/fxfa/cxfa_ffdoc.h" -#include "xfa/fxfa/cxfa_pieceline.h" #include "xfa/fxfa/cxfa_textparsecontext.h" -#include "xfa/fxfa/cxfa_textpiece.h" #include "xfa/fxfa/cxfa_textprovider.h" #include "xfa/fxfa/cxfa_texttabstopscontext.h" #include "xfa/fxfa/parser/cxfa_font.h" @@ -66,6 +64,14 @@ } // namespace +CXFA_TextLayout::TextPiece::TextPiece() = default; + +CXFA_TextLayout::TextPiece::~TextPiece() = default; + +CXFA_TextLayout::PieceLine::PieceLine() = default; + +CXFA_TextLayout::PieceLine::~PieceLine() = default; + CXFA_TextLayout::LoaderContext::LoaderContext() = default; CXFA_TextLayout::LoaderContext::~LoaderContext() = default; @@ -619,9 +625,9 @@ if (i + szLineStart >= m_pieceLines.size()) break; - CXFA_PieceLine* pPieceLine = m_pieceLines[i + szLineStart].get(); + PieceLine* pPieceLine = m_pieceLines[i + szLineStart].get(); for (size_t j = 0; j < pPieceLine->m_textPieces.size(); ++j) { - const CXFA_TextPiece* pPiece = pPieceLine->m_textPieces[j].get(); + const TextPiece* pPiece = pPieceLine->m_textPieces[j].get(); int32_t iChars = pPiece->iChars; if (pdfium::CollectionSize<int32_t>(char_pos) < iChars) char_pos.resize(iChars); @@ -941,7 +947,7 @@ } void CXFA_TextLayout::DoTabstops(CFX_CSSComputedStyle* pStyle, - CXFA_PieceLine* pPieceLine) { + PieceLine* pPieceLine) { if (!pStyle || !pPieceLine) return; @@ -952,7 +958,7 @@ if (iPieces == 0) return; - CXFA_TextPiece* pPiece = pPieceLine->m_textPieces[iPieces - 1].get(); + TextPiece* pPiece = pPieceLine->m_textPieces[iPieces - 1].get(); int32_t& iTabstopsIndex = m_pTabstopContext->m_iTabIndex; int32_t iCount = m_textParser.CountTabs(pStyle); if (!pdfium::IndexInBounds(m_pTabstopContext->m_tabstops, iTabstopsIndex)) @@ -963,7 +969,7 @@ m_pTabstopContext->m_bHasTabstops = true; float fRight = 0; if (iPieces > 1) { - CXFA_TextPiece* p = pPieceLine->m_textPieces[iPieces - 2].get(); + const TextPiece* p = pPieceLine->m_textPieces[iPieces - 2].get(); fRight = p->rtPiece.right(); } m_pTabstopContext->m_fTabWidth = @@ -1005,8 +1011,8 @@ RetainPtr<CFX_CSSComputedStyle> pStyle; if (bSavePieces) { - auto pNew = std::make_unique<CXFA_PieceLine>(); - CXFA_PieceLine* pPieceLine = pNew.get(); + auto pNew = std::make_unique<PieceLine>(); + PieceLine* pPieceLine = pNew.get(); m_pieceLines.push_back(std::move(pNew)); if (m_pTabstopContext) m_pTabstopContext->Reset(); @@ -1020,7 +1026,7 @@ pStyle = pUserData->m_pStyle; float fVerScale = pPiece->m_iVerticalScale / 100.0f; - auto pTP = std::make_unique<CXFA_TextPiece>(); + auto pTP = std::make_unique<TextPiece>(); pTP->iChars = pPiece->m_iCharCount; pTP->szText = pPiece->GetString(); pTP->Widths = pPiece->GetWidths(); @@ -1133,11 +1139,11 @@ } void CXFA_TextLayout::RenderString(CFX_RenderDevice* pDevice, - CXFA_PieceLine* pPieceLine, + PieceLine* pPieceLine, size_t szPiece, std::vector<TextCharPos>* pCharPos, const CFX_Matrix& mtDoc2Device) { - const CXFA_TextPiece* pPiece = pPieceLine->m_textPieces[szPiece].get(); + const TextPiece* pPiece = pPieceLine->m_textPieces[szPiece].get(); size_t szCount = GetDisplayPos(pPiece, pCharPos); if (szCount > 0) { auto span = pdfium::make_span(pCharPos->data(), szCount); @@ -1148,11 +1154,11 @@ } void CXFA_TextLayout::RenderPath(CFX_RenderDevice* pDevice, - CXFA_PieceLine* pPieceLine, + const PieceLine* pPieceLine, size_t szPiece, std::vector<TextCharPos>* pCharPos, const CFX_Matrix& mtDoc2Device) { - CXFA_TextPiece* pPiece = pPieceLine->m_textPieces[szPiece].get(); + const TextPiece* pPiece = pPieceLine->m_textPieces[szPiece].get(); bool bNoUnderline = pPiece->iUnderline < 1 || pPiece->iUnderline > 2; bool bNoLineThrough = pPiece->iLineThrough < 1 || pPiece->iLineThrough > 2; if (bNoUnderline && bNoLineThrough) @@ -1271,7 +1277,7 @@ CFX_FillRenderOptions()); } -size_t CXFA_TextLayout::GetDisplayPos(const CXFA_TextPiece* pPiece, +size_t CXFA_TextLayout::GetDisplayPos(const TextPiece* pPiece, std::vector<TextCharPos>* pCharPos) { if (!pPiece || pPiece->iChars < 1) return 0;
diff --git a/xfa/fxfa/cxfa_textlayout.h b/xfa/fxfa/cxfa_textlayout.h index ae813cb..7512cfb 100644 --- a/xfa/fxfa/cxfa_textlayout.h +++ b/xfa/fxfa/cxfa_textlayout.h
@@ -20,17 +20,17 @@ #include "v8/include/cppgc/member.h" #include "v8/include/cppgc/visitor.h" #include "xfa/fgas/layout/cfx_char.h" +#include "xfa/fgas/layout/cfx_textpiece.h" #include "xfa/fxfa/cxfa_textparser.h" class CFDE_RenderDevice; +class CFX_LinkUserData; class CFX_CSSComputedStyle; class CFX_RTFBreak; class CFX_RenderDevice; class CFX_XMLNode; class CFX_LinkUserData; class CXFA_Node; -class CXFA_PieceLine; -class CXFA_TextPiece; class CXFA_TextProvider; class CXFA_TextTabstopsContext; class TextCharPos; @@ -65,6 +65,27 @@ const wchar_t* GetLinkURLAtPoint(const CFX_PointF& point); private: + class TextPiece : public CFX_TextPiece { + public: + TextPiece(); + ~TextPiece(); + + int32_t iUnderline = 0; + int32_t iLineThrough = 0; + XFA_AttributeValue iPeriod = XFA_AttributeValue::All; + FX_ARGB dwColor = 0; + RetainPtr<CFX_LinkUserData> pLinkData; + }; + + class PieceLine { + public: + PieceLine(); + ~PieceLine(); + + std::vector<std::unique_ptr<TextPiece>> m_textPieces; + std::vector<size_t> m_charCounts; + }; + struct BlockData { size_t szIndex; size_t szLength; @@ -134,18 +155,18 @@ bool IsEnd(bool bSavePieces); void UpdateAlign(float fHeight, float fBottom); void RenderString(CFX_RenderDevice* pDevice, - CXFA_PieceLine* pPieceLine, + PieceLine* pPieceLine, size_t szPiece, std::vector<TextCharPos>* pCharPos, const CFX_Matrix& mtDoc2Device); void RenderPath(CFX_RenderDevice* pDevice, - CXFA_PieceLine* pPieceLine, + const PieceLine* pPieceLine, size_t szPiece, std::vector<TextCharPos>* pCharPos, const CFX_Matrix& mtDoc2Device); - size_t GetDisplayPos(const CXFA_TextPiece* pPiece, + size_t GetDisplayPos(const TextPiece* pPiece, std::vector<TextCharPos>* pCharPos); - void DoTabstops(CFX_CSSComputedStyle* pStyle, CXFA_PieceLine* pPieceLine); + void DoTabstops(CFX_CSSComputedStyle* pStyle, PieceLine* pPieceLine); bool LayoutInternal(size_t szBlockIndex); size_t CountBlocks() const; size_t GetNextIndexFromLastBlockData() const; @@ -162,7 +183,7 @@ std::unique_ptr<CFX_RTFBreak> m_pBreak; std::unique_ptr<LoaderContext> m_pLoader; CXFA_TextParser m_textParser; - std::vector<std::unique_ptr<CXFA_PieceLine>> m_pieceLines; + std::vector<std::unique_ptr<PieceLine>> m_pieceLines; std::unique_ptr<CXFA_TextTabstopsContext> m_pTabstopContext; };
diff --git a/xfa/fxfa/cxfa_textpiece.cpp b/xfa/fxfa/cxfa_textpiece.cpp deleted file mode 100644 index 363361a..0000000 --- a/xfa/fxfa/cxfa_textpiece.cpp +++ /dev/null
@@ -1,13 +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 - -#include "xfa/fxfa/cxfa_textpiece.h" - -#include "xfa/fgas/layout/cfx_linkuserdata.h" - -CXFA_TextPiece::CXFA_TextPiece() = default; - -CXFA_TextPiece::~CXFA_TextPiece() = default;
diff --git a/xfa/fxfa/cxfa_textpiece.h b/xfa/fxfa/cxfa_textpiece.h deleted file mode 100644 index c9d524d..0000000 --- a/xfa/fxfa/cxfa_textpiece.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_CXFA_TEXTPIECE_H_ -#define XFA_FXFA_CXFA_TEXTPIECE_H_ - -#include "core/fxcrt/retain_ptr.h" -#include "core/fxge/fx_dib.h" -#include "xfa/fgas/layout/cfx_textpiece.h" -#include "xfa/fxfa/fxfa_basic.h" - -class CFX_LinkUserData; - -class CXFA_TextPiece : public CFX_TextPiece { - public: - CXFA_TextPiece(); - ~CXFA_TextPiece(); - - int32_t iUnderline; - int32_t iLineThrough; - XFA_AttributeValue iPeriod; - FX_ARGB dwColor; - RetainPtr<CFX_LinkUserData> pLinkData; -}; - -#endif // XFA_FXFA_CXFA_TEXTPIECE_H_