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_; };