Index: src/pdf/SkPDFDevice.cpp |
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp |
index 7d025780a6fae8f2df4b39cdcaa3d8c4d56cdfaf..b9e1f3b48bcf9abd12275f682b0180fb85651330 100644 |
--- a/src/pdf/SkPDFDevice.cpp |
+++ b/src/pdf/SkPDFDevice.cpp |
@@ -1270,6 +1270,7 @@ void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len, |
const uint16_t* glyphIDs = nullptr; |
size_t numGlyphs = force_glyph_encoding(paint, text, len, &storage, &glyphIDs); |
textPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); |
+ SkAutoGlyphCache autoGlyphCache(textPaint, nullptr, nullptr); |
content.entry()->fContent.writeText("BT\n"); |
this->updateFont(textPaint, glyphIDs[0], content.entry()); |
@@ -1280,6 +1281,7 @@ void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len, |
for (size_t i = 0; i < numGlyphs; i++) { |
SkPDFFont* font = content.entry()->fState.fFont; |
uint16_t encodedValue = glyphIDs[i]; |
+ SkScalar advanceWidth = autoGlyphCache->getGlyphIDAdvance(encodedValue).fAdvanceX; |
if (font->glyphsToPDFFontEncoding(&encodedValue, 1) != 1) { |
// The current pdf font cannot encode the current glyph. |
// Try to get a pdf font which can encode the current glyph. |
@@ -1292,13 +1294,11 @@ void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len, |
continue; |
} |
} |
- |
fontGlyphUsage->noteGlyphUsage(font, &encodedValue, 1); |
SkScalar x = offset.x() + pos[i * scalarsPerPos]; |
SkScalar y = offset.y() + (2 == scalarsPerPos ? pos[i * scalarsPerPos + 1] : 0); |
align_text(textPaint, glyphIDs + i, 1, &x, &y); |
- SkScalar advanceWidth = textPaint.measureText(&encodedValue, sizeof(uint16_t)); |
glyphPositioner.writeGlyph(x, y, advanceWidth, encodedValue); |
} |
glyphPositioner.flush(); // Must flush before ending text object. |