Encapsulate `CPDF_TextPage::CharInfo::m_Matrix`

- Add getter and setter.
- Rename member to "matrix_".
- Rename various "formMatrix" variables to "form_matrix".

Change-Id: I92612a9b9104b87b34d3b0e74ea9b7e8dec4fb59
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/124730
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 1e4b6de..6ba3539 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -254,9 +254,9 @@
     int ascent = charinfo.m_pTextObj->GetFont()->GetTypeAscent();
     int descent = charinfo.m_pTextObj->GetFont()->GetTypeDescent();
     if (ascent != descent) {
-      float width = charinfo.m_Matrix.a *
+      float width = charinfo.matrix().a *
                     charinfo.m_pTextObj->GetCharWidth(charinfo.m_CharCode);
-      float font_scale = charinfo.m_Matrix.a * font_size / (ascent - descent);
+      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);
@@ -613,14 +613,15 @@
 }
 
 void CPDF_TextPage::AppendGeneratedCharacter(wchar_t unicode,
-                                             const CFX_Matrix& formMatrix) {
+                                             const CFX_Matrix& form_matrix) {
   std::optional<CharInfo> pGenerateChar = GenerateCharInfo(unicode);
   if (!pGenerateChar.has_value())
     return;
 
   m_TextBuf.AppendChar(unicode);
-  if (!formMatrix.IsIdentity())
-    pGenerateChar->m_Matrix = formMatrix;
+  if (!form_matrix.IsIdentity()) {
+    pGenerateChar->set_matrix(form_matrix);
+  }
   m_CharList.push_back(pGenerateChar.value());
 }
 
@@ -645,8 +646,8 @@
 }
 
 void CPDF_TextPage::ProcessFormObject(CPDF_FormObject* pFormObj,
-                                      const CFX_Matrix& formMatrix) {
-  CFX_Matrix curFormMatrix = pFormObj->form_matrix() * formMatrix;
+                                      const CFX_Matrix& form_matrix) {
+  CFX_Matrix curFormMatrix = pFormObj->form_matrix() * form_matrix;
   const CPDF_PageObjectHolder* pHolder = pFormObj->form();
   for (auto it = pHolder->begin(); it != pHolder->end(); ++it) {
     CPDF_PageObject* pPageObj = it->get();
@@ -752,7 +753,7 @@
 
 void CPDF_TextPage::ProcessTextObject(
     CPDF_TextObject* pTextObj,
-    const CFX_Matrix& formMatrix,
+    const CFX_Matrix& form_matrix,
     const CPDF_PageObjectHolder* pObjList,
     CPDF_PageObjectHolder::const_iterator ObjPos) {
   if (fabs(pTextObj->GetRect().Width()) < kSizeEpsilon)
@@ -761,7 +762,7 @@
   size_t count = mTextObjects.size();
   TransformedTextObject new_obj;
   new_obj.m_pTextObj = pTextObj;
-  new_obj.m_formMatrix = formMatrix;
+  new_obj.m_formMatrix = form_matrix;
   if (count == 0) {
     mTextObjects.push_back(new_obj);
     return;
@@ -787,14 +788,14 @@
                      pTextObj->GetFontSize() / 1000;
   this_width = fabs(this_width);
 
-  CFX_Matrix this_matrix = pTextObj->GetTextMatrix() * formMatrix;
+  CFX_Matrix this_matrix = pTextObj->GetTextMatrix() * form_matrix;
   this_width = this_matrix.TransformDistance(fabs(this_width));
 
   float threshold = std::max(prev_width, this_width) / 4;
   CFX_PointF prev_pos = m_DisplayMatrix.Transform(
       prev_obj.m_formMatrix.Transform(prev_obj.m_pTextObj->GetPos()));
   CFX_PointF this_pos =
-      m_DisplayMatrix.Transform(formMatrix.Transform(pTextObj->GetPos()));
+      m_DisplayMatrix.Transform(form_matrix.Transform(pTextObj->GetPos()));
   if (fabs(this_pos.y - prev_pos.y) > threshold * 2) {
     for (size_t i = 0; i < count; ++i)
       ProcessTextObject(mTextObjects[i]);
@@ -920,7 +921,7 @@
     charinfo.m_pTextObj = pTextObj;
     charinfo.m_CharBox = CFX_FloatRect(rect);
     charinfo.m_CharBox.Translate(k * step, 0);
-    charinfo.m_Matrix = matrix;
+    charinfo.set_matrix(matrix);
     m_TempTextBuf.AppendChar(wChar);
     m_TempCharList.push_back(charinfo);
   }
@@ -983,7 +984,7 @@
         std::optional<CharInfo> pGenerateChar = GenerateCharInfo(L' ');
         if (pGenerateChar.has_value()) {
           if (!form_matrix.IsIdentity())
-            pGenerateChar->m_Matrix = form_matrix;
+            pGenerateChar->set_matrix(form_matrix);
           m_TempTextBuf.AppendChar(L' ');
           m_TempCharList.push_back(pGenerateChar.value());
         }
@@ -1083,7 +1084,7 @@
         charinfo.m_Index = m_TextBuf.GetLength();
         m_TempTextBuf.AppendChar(L' ');
         charinfo.m_CharCode = CPDF_Font::kInvalidCharCode;
-        charinfo.m_Matrix = form_matrix;
+        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,
@@ -1124,7 +1125,7 @@
           charinfo.m_CharBox.left + pTextObj->GetCharWidth(charinfo.m_CharCode);
     }
     charinfo.m_CharBox = matrix.TransformRect(charinfo.m_CharBox);
-    charinfo.m_Matrix = matrix;
+    charinfo.set_matrix(matrix);
     if (wstrItem.IsEmpty()) {
       charinfo.m_Unicode = 0;
       m_TempCharList.push_back(charinfo);
@@ -1135,7 +1136,7 @@
     bool bDel = false;
     const int count = std::min(fxcrt::CollectionSize<int>(m_TempCharList), 7);
     constexpr float kTextCharRatioGapDelta = 0.07f;
-    float threshold = charinfo.m_Matrix.TransformXDistance(
+    float threshold = charinfo.matrix().TransformXDistance(
         kTextCharRatioGapDelta * pTextObj->GetFontSize());
     for (int n = fxcrt::CollectionSize<int>(m_TempCharList);
          n > fxcrt::CollectionSize<int>(m_TempCharList) - count; --n) {
@@ -1234,7 +1235,7 @@
 
 CPDF_TextPage::GenerateCharacter CPDF_TextPage::ProcessInsertObject(
     const CPDF_TextObject* pObj,
-    const CFX_Matrix& formMatrix) {
+    const CFX_Matrix& form_matrix) {
   FindPreviousTextObject();
   TextOrientation WritingMode = GetTextObjectWritingMode(pObj);
   if (WritingMode == TextOrientation::kUnknown)
@@ -1278,7 +1279,8 @@
   CFX_Matrix prev_matrix = m_pPrevTextObj->GetTextMatrix() * m_PrevMatrix;
   CFX_Matrix prev_reverse = prev_matrix.GetInverse();
 
-  CFX_PointF pos = prev_reverse.Transform(formMatrix.Transform(pObj->GetPos()));
+  CFX_PointF pos =
+      prev_reverse.Transform(form_matrix.Transform(pObj->GetPos()));
   if (last_width < this_width)
     threshold = prev_reverse.TransformDistance(threshold);
 
@@ -1330,7 +1332,7 @@
   if (preChar == L' ')
     return GenerateCharacter::kNone;
 
-  CFX_Matrix matrix = pObj->GetTextMatrix() * formMatrix;
+  CFX_Matrix matrix = pObj->GetTextMatrix() * form_matrix;
   float threshold2 = std::max(nLastWidth, nThisWidth);
   threshold2 = NormalizeThreshold(threshold2, 400, 700, 800);
   if (nLastWidth >= nThisWidth) {
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index 5ec92c6..297dd86 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -49,6 +49,9 @@
     CharInfo(const CharInfo&);
     ~CharInfo();
 
+    const CFX_Matrix& matrix() const { return matrix_; }
+    void set_matrix(const CFX_Matrix& matrix) { matrix_ = matrix; }
+
     int m_Index = 0;
     uint32_t m_CharCode = 0;
     wchar_t m_Unicode = 0;
@@ -56,7 +59,9 @@
     CFX_PointF m_Origin;
     CFX_FloatRect m_CharBox;
     UnownedPtr<CPDF_TextObject> m_pTextObj;
-    CFX_Matrix m_Matrix;
+
+   private:
+    CFX_Matrix matrix_;
   };
 
   CPDF_TextPage(const CPDF_Page* pPage, bool rtl);
@@ -116,14 +121,14 @@
   bool IsHyphen(wchar_t curChar) const;
   void ProcessObject();
   void ProcessFormObject(CPDF_FormObject* pFormObj,
-                         const CFX_Matrix& formMatrix);
+                         const CFX_Matrix& form_matrix);
   void ProcessTextObject(const TransformedTextObject& obj);
   void ProcessTextObject(CPDF_TextObject* pTextObj,
-                         const CFX_Matrix& formMatrix,
+                         const CFX_Matrix& form_matrix,
                          const CPDF_PageObjectHolder* pObjList,
                          CPDF_PageObjectHolder::const_iterator ObjPos);
   GenerateCharacter ProcessInsertObject(const CPDF_TextObject* pObj,
-                                        const CFX_Matrix& formMatrix);
+                                        const CFX_Matrix& form_matrix);
   const CharInfo* GetPrevCharInfo() const;
   std::optional<CharInfo> GenerateCharInfo(wchar_t unicode);
   bool IsSameAsPreTextObject(CPDF_TextObject* pTextObj,
@@ -140,7 +145,7 @@
   TextOrientation GetTextObjectWritingMode(
       const CPDF_TextObject* pTextObj) const;
   TextOrientation FindTextlineFlowOrientation() const;
-  void AppendGeneratedCharacter(wchar_t unicode, const CFX_Matrix& formMatrix);
+  void AppendGeneratedCharacter(wchar_t unicode, const CFX_Matrix& form_matrix);
   void SwapTempTextBuf(size_t iCharListStartAppend, size_t iBufStartAppend);
   WideString GetTextByPredicate(
       const std::function<bool(const CharInfo&)>& predicate) const;
diff --git a/fpdfsdk/fpdf_text.cpp b/fpdfsdk/fpdf_text.cpp
index 818ca40..5fa9fb6 100644
--- a/fpdfsdk/fpdf_text.cpp
+++ b/fpdfsdk/fpdf_text.cpp
@@ -226,7 +226,7 @@
   // | c  d  0 |    | sin(t)   cos(t)  0 |
   // | e  f  1 |    |   0        0     1 |
   // Calculate the angle of the vector
-  float angle = atan2f(charinfo.m_Matrix.c, charinfo.m_Matrix.a);
+  float angle = atan2f(charinfo.matrix().c, charinfo.matrix().a);
   if (angle < 0)
     angle = 2 * FXSYS_PI + angle;
 
@@ -278,7 +278,7 @@
     return false;
 
   const CPDF_TextPage::CharInfo& charinfo = textpage->GetCharInfo(index);
-  *matrix = FSMatrixFromCFXMatrix(charinfo.m_Matrix);
+  *matrix = FSMatrixFromCFXMatrix(charinfo.matrix());
   return true;
 }