Store frequently used function results in variables in GetLooseBounds() Stop repeatedly calling charinfo.text_object() and charinfo.text_object()->GetFont(). This makes it slightly easier to refactor the code in the future, if the GetLooseBounds() parameters change. Change-Id: I6af6e759b27e073cee04b816ec6622e8c2c6c55b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/128811 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org> Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp index 47cff23..5d2d41f 100644 --- a/core/fpdftext/cpdf_textpage.cpp +++ b/core/fpdftext/cpdf_textpage.cpp
@@ -267,11 +267,13 @@ } CFX_FloatRect GetLooseBounds(const CPDF_TextPage::CharInfo& charinfo) { - float font_size = GetFontSize(charinfo.text_object()); - if (charinfo.text_object() && !FXSYS_IsFloatZero(font_size)) { - bool is_vert_writing = charinfo.text_object()->GetFont()->IsVertWriting(); - if (is_vert_writing && charinfo.text_object()->GetFont()->IsCIDFont()) { - CPDF_CIDFont* pCIDFont = charinfo.text_object()->GetFont()->AsCIDFont(); + const CPDF_TextObject* text_object = charinfo.text_object(); + float font_size = GetFontSize(text_object); + if (text_object && !FXSYS_IsFloatZero(font_size)) { + RetainPtr<CPDF_Font> font = text_object->GetFont(); + bool is_vert_writing = font->IsVertWriting(); + if (is_vert_writing && font->IsCIDFont()) { + CPDF_CIDFont* pCIDFont = font->AsCIDFont(); uint16_t cid = pCIDFont->CIDFromCharCode(charinfo.char_code()); CFX_Point16 vertical_origin = pCIDFont->GetVertOrigin(cid); @@ -290,10 +292,10 @@ return char_box; } - FX_RECT font_bbox = charinfo.text_object()->GetFont()->GetFontBBox(); + FX_RECT font_bbox = font->GetFontBBox(); if (font_bbox.Height() != 0) { // Compute `left` and `right` based on the individual character's `width`. - float width = charinfo.text_object()->GetCharWidth(charinfo.char_code()); + float width = text_object->GetCharWidth(charinfo.char_code()); CFX_Matrix inverse_matrix = charinfo.matrix().GetInverse(); CFX_PointF original_origin = inverse_matrix.Transform(charinfo.origin()); float left = original_origin.x;