Index: core/fxge/win32/fx_win32_print.cpp |
diff --git a/core/fxge/win32/fx_win32_print.cpp b/core/fxge/win32/fx_win32_print.cpp |
index 9e19873577604c967dee5c79b6f6607c66835570..ed9b781943b4ec86e9e1fa120d20d421fbc61951 100644 |
--- a/core/fxge/win32/fx_win32_print.cpp |
+++ b/core/fxge/win32/fx_win32_print.cpp |
@@ -282,23 +282,31 @@ FX_BOOL CGdiPrinterDriver::DrawDeviceText(int nChars, |
// Text |
CFX_WideString wsText; |
+ std::vector<INT> spacing(nChars); |
+ FX_FLOAT fPreviousOriginX = 0; |
for (int i = 0; i < nChars; ++i) { |
// Only works with PDFs from Skia's PDF generator. Cannot handle arbitrary |
// values from PDFs. |
const FXTEXT_CHARPOS& charpos = pCharPos[i]; |
- ASSERT(charpos.m_OriginX == 0); |
- ASSERT(charpos.m_OriginY == 0); |
ASSERT(charpos.m_AdjustMatrix[0] == 0); |
ASSERT(charpos.m_AdjustMatrix[1] == 0); |
ASSERT(charpos.m_AdjustMatrix[2] == 0); |
ASSERT(charpos.m_AdjustMatrix[3] == 0); |
+ ASSERT(charpos.m_OriginY == 0); |
hal.canary
2016/07/29 15:26:21
why is this true?
Lei Zhang
2016/07/29 15:55:52
It's held up so far with my test cases. Do you hav
|
+ |
+ // Round the spacing to the nearest integer, but keep track of the rounding |
+ // error for calculating the next spacing value. |
+ FX_FLOAT fPixelSpacing = charpos.m_OriginX - fPreviousOriginX; |
+ spacing[i] = FXSYS_round(fPixelSpacing); |
Lei Zhang
2016/07/29 22:42:08
I printed a random page from Wikipedia and there a
|
+ fPreviousOriginX = charpos.m_OriginX - (fPixelSpacing - spacing[i]); |
+ |
wsText += charpos.m_GlyphIndex; |
} |
// Draw |
SetTextAlign(m_hDC, TA_LEFT | TA_BASELINE); |
if (ExtTextOutW(m_hDC, 0, 0, ETO_GLYPH_INDEX, nullptr, wsText.c_str(), nChars, |
- nullptr)) { |
+ nChars > 1 ? &spacing[1] : nullptr)) { |
return TRUE; |
} |
@@ -309,7 +317,7 @@ FX_BOOL CGdiPrinterDriver::DrawDeviceText(int nChars, |
// Try to get the font and draw again. |
g_pdfium_typeface_accessible_func(&lf, wsText.c_str(), nChars); |
return ExtTextOutW(m_hDC, 0, 0, ETO_GLYPH_INDEX, nullptr, wsText.c_str(), |
- nChars, nullptr); |
+ nChars, nChars > 1 ? &spacing[1] : nullptr); |
#else |
return FALSE; |
#endif |