Better encapsulate CFXA_TextLayout::m_pieceLines.
Rather than providing a method returning a reference to it, replace
that one use with a method that takes the desired get link url action
directly.
Change-Id: I06dcf6149459cbceb8155b956cdd68382d97e3e5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73431
Reviewed-by: Daniel Hosseinian <dhoss@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/cxfa_fftext.cpp b/xfa/fxfa/cxfa_fftext.cpp
index 34534be..a2d1797 100644
--- a/xfa/fxfa/cxfa_fftext.cpp
+++ b/xfa/fxfa/cxfa_fftext.cpp
@@ -151,13 +151,5 @@
return nullptr;
CFX_RectF rect = GetRectWithoutRotate();
- for (const auto& pPieceLine : *pTextLayout->GetPieceLines()) {
- for (const auto& pPiece : pPieceLine->m_textPieces) {
- if (pPiece->pLinkData &&
- pPiece->rtPiece.Contains(point - rect.TopLeft())) {
- return pPiece->pLinkData->GetLinkURL();
- }
- }
- }
- return nullptr;
+ return pTextLayout->GetLinkURLAtPoint(point - rect.TopLeft());
}
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 3e60ea9..51678e8 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -98,6 +98,16 @@
m_pBreak.reset();
}
+const wchar_t* CXFA_TextLayout::GetLinkURLAtPoint(const CFX_PointF& point) {
+ for (const auto& pPieceLine : m_pieceLines) {
+ for (const auto& pPiece : pPieceLine->m_textPieces) {
+ if (pPiece->pLinkData && pPiece->rtPiece.Contains(point))
+ return pPiece->pLinkData->GetLinkURL();
+ }
+ }
+ return nullptr;
+}
+
void CXFA_TextLayout::GetTextDataNode() {
CXFA_Node* pNode = m_pTextProvider->GetTextNode(&m_bRichText);
if (pNode && m_bRichText)
diff --git a/xfa/fxfa/cxfa_textlayout.h b/xfa/fxfa/cxfa_textlayout.h
index cb285de..ae813cb 100644
--- a/xfa/fxfa/cxfa_textlayout.h
+++ b/xfa/fxfa/cxfa_textlayout.h
@@ -59,14 +59,10 @@
size_t szBlockIndex);
bool IsLoaded() const { return !m_pieceLines.empty(); }
void Unload();
-
- const std::vector<std::unique_ptr<CXFA_PieceLine>>* GetPieceLines() const {
- return &m_pieceLines;
- }
-
bool HasBlock() const { return m_bHasBlock; }
void ClearBlocks() { m_Blocks.clear(); }
void ResetHasBlock() { m_bHasBlock = false; }
+ const wchar_t* GetLinkURLAtPoint(const CFX_PointF& point);
private:
struct BlockData {