Fix issue with FPDFText_GetLooseCharBox() and the tranformation matrix.

Take the tranformation matrix into account, so
FPDFText_GetLooseCharBox() behavior is more consistent with
FPDFText_GetCharBox() behavior.

Bug: pdfium:1465
Change-Id: Ie12c0a6ede84b7dcbf317273e1b0189d1533e369
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/71878
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_text.cpp b/fpdfsdk/fpdf_text.cpp
index 5b5ca93..3ec62e3 100644
--- a/fpdfsdk/fpdf_text.cpp
+++ b/fpdfsdk/fpdf_text.cpp
@@ -266,8 +266,9 @@
     int ascent = charinfo.m_pTextObj->GetFont()->GetTypeAscent();
     int descent = charinfo.m_pTextObj->GetFont()->GetTypeDescent();
     if (ascent != descent) {
-      float width = charinfo.m_pTextObj->GetCharWidth(charinfo.m_CharCode);
-      float font_scale = font_size / (ascent - descent);
+      float width = charinfo.m_Matrix.a *
+                    charinfo.m_pTextObj->GetCharWidth(charinfo.m_CharCode);
+      float font_scale = charinfo.m_Matrix.a * font_size / (ascent - descent);
 
       rect->left = charinfo.m_Origin.x;
       rect->right = charinfo.m_Origin.x + (is_vert_writing ? -width : width);
diff --git a/fpdfsdk/fpdf_text_embeddertest.cpp b/fpdfsdk/fpdf_text_embeddertest.cpp
index d82d327..7e7160a 100644
--- a/fpdfsdk/fpdf_text_embeddertest.cpp
+++ b/fpdfsdk/fpdf_text_embeddertest.cpp
@@ -1590,14 +1590,13 @@
     EXPECT_NEAR(kExpectedCharHeight, top - bottom, 0.001);
 
     // Check the loose character box size.
-    // TODO(crbug.com/pdfium/1465): There should be no division here.
     FS_RECTF rect;
     ASSERT_TRUE(FPDFText_GetLooseCharBox(text_page.get(), 0, &rect));
-    EXPECT_FLOAT_EQ(kExpectedLooseCharWidth / 12, rect.right - rect.left);
-    EXPECT_FLOAT_EQ(kExpectedLooseCharHeight / 12, rect.top - rect.bottom);
+    EXPECT_FLOAT_EQ(kExpectedLooseCharWidth, rect.right - rect.left);
+    EXPECT_FLOAT_EQ(kExpectedLooseCharHeight, rect.top - rect.bottom);
     ASSERT_TRUE(FPDFText_GetLooseCharBox(text_page.get(), 4, &rect));
-    EXPECT_FLOAT_EQ(kExpectedLooseCharWidth / 12, rect.right - rect.left);
-    EXPECT_FLOAT_EQ(kExpectedLooseCharHeight / 12, rect.top - rect.bottom);
+    EXPECT_FLOAT_EQ(kExpectedLooseCharWidth, rect.right - rect.left);
+    EXPECT_FLOAT_EQ(kExpectedLooseCharHeight, rect.top - rect.bottom);
     ASSERT_TRUE(FPDFText_GetLooseCharBox(text_page.get(), 8, &rect));
     EXPECT_FLOAT_EQ(kExpectedLooseCharWidth, rect.right - rect.left);
     EXPECT_FLOAT_EQ(kExpectedLooseCharHeight, rect.top - rect.bottom);