Encapsulate `CPDF_TextPage::CharInfo::m_Origin` and `m_CharBox`
Add getters and setters, and rename to follow Google C++ style.
Change-Id: Ib13c1dd8295306c778a26f95fb74f781d3debe5d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/124731
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Tom 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 6ba3539..6b83a6d 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -244,9 +244,9 @@
int16_t vert_width = pCIDFont->GetVertWidth(cid);
double height = vert_width * font_size / 1000.0;
- float left = charinfo.m_Origin.x + offsetx;
+ float left = charinfo.origin().x + offsetx;
float right = left + font_size;
- float bottom = charinfo.m_Origin.y + offsety;
+ float bottom = charinfo.origin().y + offsety;
float top = bottom + height;
return CFX_FloatRect(left, bottom, right, top);
}
@@ -258,16 +258,16 @@
charinfo.m_pTextObj->GetCharWidth(charinfo.m_CharCode);
float font_scale = charinfo.matrix().a * font_size / (ascent - descent);
- float left = charinfo.m_Origin.x;
- float right = charinfo.m_Origin.x + (is_vert_writing ? -width : width);
- float bottom = charinfo.m_Origin.y + descent * font_scale;
- float top = charinfo.m_Origin.y + ascent * font_scale;
+ float left = charinfo.origin().x;
+ float right = charinfo.origin().x + (is_vert_writing ? -width : width);
+ float bottom = charinfo.origin().y + descent * font_scale;
+ float top = charinfo.origin().y + ascent * font_scale;
return CFX_FloatRect(left, bottom, right, top);
}
}
// Fallback to the tight bounds in empty text scenarios, or bad font metrics
- return charinfo.m_CharBox;
+ return charinfo.char_box();
}
} // namespace
@@ -367,8 +367,8 @@
const CharInfo& charinfo = m_CharList[pos++];
if (charinfo.m_CharType == CPDF_TextPage::CharType::kGenerated)
continue;
- if (charinfo.m_CharBox.Width() < kSizeEpsilon ||
- charinfo.m_CharBox.Height() < kSizeEpsilon) {
+ if (charinfo.char_box().Width() < kSizeEpsilon ||
+ charinfo.char_box().Height() < kSizeEpsilon) {
continue;
}
if (!text_object)
@@ -380,11 +380,11 @@
}
if (is_new_rect) {
is_new_rect = false;
- rect = charinfo.m_CharBox;
+ rect = charinfo.char_box();
rect.Normalize();
continue;
}
- rect.Union(charinfo.m_CharBox);
+ rect.Union(charinfo.char_box());
}
rects.push_back(rect);
return rects;
@@ -398,7 +398,7 @@
double ydif = 5000;
const int nCount = CountChars();
for (pos = 0; pos < nCount; ++pos) {
- const CFX_FloatRect& orig_charrect = m_CharList[pos].m_CharBox;
+ const CFX_FloatRect& orig_charrect = m_CharList[pos].char_box();
if (orig_charrect.Contains(point))
break;
@@ -435,9 +435,9 @@
WideString strText;
for (const auto& charinfo : m_CharList) {
if (predicate(charinfo)) {
- if (fabs(posy - charinfo.m_Origin.y) > 0 && !IsContainPreChar &&
+ if (fabs(posy - charinfo.origin().y) > 0 && !IsContainPreChar &&
IsAddLineFeed) {
- posy = charinfo.m_Origin.y;
+ posy = charinfo.origin().y;
if (!strText.IsEmpty())
strText += L"\r\n";
}
@@ -461,7 +461,7 @@
WideString CPDF_TextPage::GetTextByRect(const CFX_FloatRect& rect) const {
return GetTextByPredicate([&rect](const CharInfo& charinfo) {
- return IsRectIntersect(rect, charinfo.m_CharBox);
+ return IsRectIntersect(rect, charinfo.char_box());
});
}
@@ -913,14 +913,15 @@
continue;
CharInfo charinfo;
- charinfo.m_Origin = pTextObj->GetPos();
charinfo.m_Index = m_TextBuf.GetLength();
charinfo.m_Unicode = wChar;
charinfo.m_CharCode = pFont->CharCodeFromUnicode(wChar);
charinfo.m_CharType = CPDF_TextPage::CharType::kPiece;
charinfo.m_pTextObj = pTextObj;
- charinfo.m_CharBox = CFX_FloatRect(rect);
- charinfo.m_CharBox.Translate(k * step, 0);
+ charinfo.set_origin(pTextObj->GetPos());
+ CFX_FloatRect char_box(rect);
+ char_box.Translate(k * step, 0);
+ charinfo.set_char_box(char_box);
charinfo.set_matrix(matrix);
m_TempTextBuf.AppendChar(wChar);
m_TempCharList.push_back(charinfo);
@@ -1084,11 +1085,11 @@
charinfo.m_Index = m_TextBuf.GetLength();
m_TempTextBuf.AppendChar(L' ');
charinfo.m_CharCode = CPDF_Font::kInvalidCharCode;
+ charinfo.set_origin(matrix.Transform(item.m_Origin));
+ charinfo.set_char_box(
+ CFX_FloatRect(charinfo.origin().x, charinfo.origin().y,
+ charinfo.origin().x, charinfo.origin().y));
charinfo.set_matrix(form_matrix);
- charinfo.m_Origin = matrix.Transform(item.m_Origin);
- charinfo.m_CharBox =
- CFX_FloatRect(charinfo.m_Origin.x, charinfo.m_Origin.y,
- charinfo.m_Origin.x, charinfo.m_Origin.y);
m_TempCharList.push_back(charinfo);
}
if (item.m_CharCode == CPDF_Font::kInvalidCharCode)
@@ -1106,25 +1107,24 @@
charinfo.m_CharType = bNoUnicode ? CPDF_TextPage::CharType::kNotUnicode
: CPDF_TextPage::CharType::kNormal;
charinfo.m_pTextObj = pTextObj;
- charinfo.m_Origin = matrix.Transform(item.m_Origin);
+ charinfo.set_origin(matrix.Transform(item.m_Origin));
const FX_RECT rect =
charinfo.m_pTextObj->GetFont()->GetCharBBox(charinfo.m_CharCode);
const float fFontSize = pTextObj->GetFontSize() / 1000;
- charinfo.m_CharBox.top = rect.top * fFontSize + item.m_Origin.y;
- charinfo.m_CharBox.left = rect.left * fFontSize + item.m_Origin.x;
- charinfo.m_CharBox.right = rect.right * fFontSize + item.m_Origin.x;
- charinfo.m_CharBox.bottom = rect.bottom * fFontSize + item.m_Origin.y;
- if (fabsf(charinfo.m_CharBox.top - charinfo.m_CharBox.bottom) <
- kSizeEpsilon) {
- charinfo.m_CharBox.top = charinfo.m_CharBox.bottom + fFontSize;
+ CFX_FloatRect char_box(rect.left * fFontSize + item.m_Origin.x,
+ rect.bottom * fFontSize + item.m_Origin.y,
+ rect.right * fFontSize + item.m_Origin.x,
+ rect.top * fFontSize + item.m_Origin.y);
+ if (fabsf(char_box.top - char_box.bottom) < kSizeEpsilon) {
+ char_box.top = char_box.bottom + fFontSize;
}
- if (fabsf(charinfo.m_CharBox.right - charinfo.m_CharBox.left) <
- kSizeEpsilon) {
- charinfo.m_CharBox.right =
- charinfo.m_CharBox.left + pTextObj->GetCharWidth(charinfo.m_CharCode);
+ if (fabsf(char_box.right - char_box.left) < kSizeEpsilon) {
+ char_box.right =
+ char_box.left + pTextObj->GetCharWidth(charinfo.m_CharCode);
}
- charinfo.m_CharBox = matrix.TransformRect(charinfo.m_CharBox);
+ char_box = matrix.TransformRect(char_box);
+ charinfo.set_char_box(char_box);
charinfo.set_matrix(matrix);
if (wstrItem.IsEmpty()) {
charinfo.m_Unicode = 0;
@@ -1141,7 +1141,7 @@
for (int n = fxcrt::CollectionSize<int>(m_TempCharList);
n > fxcrt::CollectionSize<int>(m_TempCharList) - count; --n) {
const CharInfo& charinfo1 = m_TempCharList[n - 1];
- CFX_PointF diff = charinfo1.m_Origin - charinfo.m_Origin;
+ CFX_PointF diff = charinfo1.origin() - charinfo.origin();
if (charinfo1.m_CharCode == charinfo.m_CharCode &&
charinfo1.m_pTextObj->GetFont() == charinfo.m_pTextObj->GetFont() &&
fabs(diff.x) < threshold && fabs(diff.y) < threshold) {
@@ -1180,9 +1180,9 @@
CPDF_TextObject::Item first = pTextObj->GetCharInfo(0);
CPDF_TextObject::Item last = pTextObj->GetCharInfo(nChars - 1);
- CFX_Matrix textMatrix = pTextObj->GetTextMatrix();
- first.m_Origin = textMatrix.Transform(first.m_Origin);
- last.m_Origin = textMatrix.Transform(last.m_Origin);
+ CFX_Matrix text_matrix = pTextObj->GetTextMatrix();
+ first.m_Origin = text_matrix.Transform(first.m_Origin);
+ last.m_Origin = text_matrix.Transform(last.m_Origin);
static constexpr float kEpsilon = 0.0001f;
float dX = fabs(last.m_Origin.x - first.m_Origin.x);
@@ -1363,7 +1363,7 @@
float dbXdif = fabs(rcPreObj.left - rcCurObj.left);
size_t nCount = m_CharList.size();
if (nCount >= 2) {
- float dbSpace = m_CharList[nCount - 2].m_CharBox.Width();
+ float dbSpace = m_CharList[nCount - 2].char_box().Width();
if (dbXdif > dbSpace)
return false;
}
@@ -1444,14 +1444,14 @@
float fFontSize = pPrevCharInfo->m_pTextObj
? pPrevCharInfo->m_pTextObj->GetFontSize()
- : pPrevCharInfo->m_CharBox.Height();
+ : pPrevCharInfo->char_box().Height();
if (!fFontSize)
fFontSize = kDefaultFontSize;
- info.m_Origin =
- CFX_PointF(pPrevCharInfo->m_Origin.x + preWidth * (fFontSize) / 1000,
- pPrevCharInfo->m_Origin.y);
- info.m_CharBox = CFX_FloatRect(info.m_Origin.x, info.m_Origin.y,
- info.m_Origin.x, info.m_Origin.y);
+ info.set_origin(
+ CFX_PointF(pPrevCharInfo->origin().x + preWidth * (fFontSize) / 1000,
+ pPrevCharInfo->origin().y));
+ info.set_char_box(CFX_FloatRect(info.origin().x, info.origin().y,
+ info.origin().x, info.origin().y));
return info;
}
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index 297dd86..4327fd2 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -49,6 +49,12 @@
CharInfo(const CharInfo&);
~CharInfo();
+ const CFX_PointF& origin() const { return origin_; }
+ void set_origin(const CFX_PointF& origin) { origin_ = origin; }
+
+ const CFX_FloatRect& char_box() const { return char_box_; }
+ void set_char_box(const CFX_FloatRect& char_box) { char_box_ = char_box; }
+
const CFX_Matrix& matrix() const { return matrix_; }
void set_matrix(const CFX_Matrix& matrix) { matrix_ = matrix; }
@@ -56,11 +62,11 @@
uint32_t m_CharCode = 0;
wchar_t m_Unicode = 0;
CharType m_CharType = CharType::kNormal;
- CFX_PointF m_Origin;
- CFX_FloatRect m_CharBox;
UnownedPtr<CPDF_TextObject> m_pTextObj;
private:
+ CFX_PointF origin_;
+ CFX_FloatRect char_box_;
CFX_Matrix matrix_;
};
diff --git a/fpdfsdk/fpdf_text.cpp b/fpdfsdk/fpdf_text.cpp
index 5fa9fb6..1a7cb9e 100644
--- a/fpdfsdk/fpdf_text.cpp
+++ b/fpdfsdk/fpdf_text.cpp
@@ -247,10 +247,10 @@
return false;
const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
- *left = charinfo.m_CharBox.left;
- *right = charinfo.m_CharBox.right;
- *bottom = charinfo.m_CharBox.bottom;
- *top = charinfo.m_CharBox.top;
+ *left = charinfo.char_box().left;
+ *right = charinfo.char_box().right;
+ *bottom = charinfo.char_box().bottom;
+ *top = charinfo.char_box().top;
return true;
}
@@ -292,8 +292,8 @@
return false;
const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
- *x = charinfo.m_Origin.x;
- *y = charinfo.m_Origin.y;
+ *x = charinfo.origin().x;
+ *y = charinfo.origin().y;
return true;
}