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);