Save loose char box values in CPDF_TextPage::CharInfo
Calculate loose char box values once per text page load, to be
consistent with other char info fields. Then repeated
FPDFText_GetLooseCharBox() calls won't have to recalculate the loose
char box values.
Change-Id: Ibf4101c503a24658944b0e1fe6ee5ae9f412ede1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/128812
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 5d2d41f..657e305 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -339,7 +339,9 @@
origin_(origin),
char_box_(char_box),
matrix_(matrix),
- text_object_(text_object) {}
+ text_object_(text_object) {
+ loose_char_box_ = GetLooseBounds(*this);
+}
CPDF_TextPage::CharInfo::CharInfo(const CharInfo&) = default;
@@ -550,7 +552,8 @@
}
CFX_FloatRect CPDF_TextPage::GetCharLooseBounds(size_t index) const {
- return GetLooseBounds(GetCharInfo(index));
+ CHECK_LT(index, m_CharList.size());
+ return m_CharList[index].loose_char_box();
}
WideString CPDF_TextPage::GetPageText(int start, int count) const {
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index a47d059..4ab40d6 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -67,6 +67,7 @@
const CFX_PointF& origin() const { return origin_; }
const CFX_FloatRect& char_box() const { return char_box_; }
+ const CFX_FloatRect& loose_char_box() const { return loose_char_box_; }
const CFX_Matrix& matrix() const { return matrix_; }
@@ -79,6 +80,7 @@
uint32_t char_code_ = 0;
CFX_PointF origin_;
CFX_FloatRect char_box_;
+ CFX_FloatRect loose_char_box_;
CFX_Matrix matrix_;
UnownedPtr<CPDF_TextObject> text_object_;
};