Fix initial kerning when there is a horzscale set
Reasoning: the pTextAdvanceX in CPDF_TextObject::CalcPositionData is
being multiplied by horz_scale in CPDF_TextObject::CalcPositionData.
Then, m_pCurStates->m_TextX is updated by this amount. So multiply by
the scale also when updating with initial and final kerning and when
nsegs = 0.
BUG=528103
Review-Url: https://codereview.chromium.org/2542743002
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index df0d5f1..45a468f 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -1271,7 +1271,9 @@
if (fInitKerning != 0) {
if (!pFont->IsVertWriting()) {
m_pCurStates->m_TextX -=
- (fInitKerning * m_pCurStates->m_TextState.GetFontSize()) / 1000;
+ (fInitKerning * m_pCurStates->m_TextState.GetFontSize() *
+ m_pCurStates->m_TextHorzScale) /
+ 1000;
} else {
m_pCurStates->m_TextY -=
(fInitKerning * m_pCurStates->m_TextState.GetFontSize()) / 1000;
@@ -1313,7 +1315,8 @@
if (pKerning && pKerning[nsegs - 1] != 0) {
if (!pFont->IsVertWriting()) {
m_pCurStates->m_TextX -=
- (pKerning[nsegs - 1] * m_pCurStates->m_TextState.GetFontSize()) /
+ (pKerning[nsegs - 1] * m_pCurStates->m_TextState.GetFontSize() *
+ m_pCurStates->m_TextHorzScale) /
1000;
} else {
m_pCurStates->m_TextY -=
@@ -1345,7 +1348,8 @@
if (nsegs == 0) {
for (size_t i = 0; i < n; i++) {
m_pCurStates->m_TextX -=
- (pArray->GetNumberAt(i) * m_pCurStates->m_TextState.GetFontSize()) /
+ (pArray->GetNumberAt(i) * m_pCurStates->m_TextState.GetFontSize() *
+ m_pCurStates->m_TextHorzScale) /
1000;
}
return;