aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/pdf/SkPDFDevice.cpp74
-rw-r--r--src/pdf/SkPDFFont.cpp3
2 files changed, 2 insertions, 75 deletions
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 4065235389..a002120738 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -1205,47 +1205,6 @@ static Clusterator make_clusterator(
return Clusterator(clusters, utf8Text, SkToU32(glyphCount), utf8ByteCount);
}
-static void draw_transparent_text(SkPDFDevice* device,
- const SkDraw& d,
- const void* text, size_t len,
- SkScalar x, SkScalar y,
- const SkPaint& srcPaint) {
- sk_sp<SkTypeface> defaultFace = SkTypeface::MakeDefault();
- if (!SkPDFFont::CanEmbedTypeface(defaultFace.get(), device->getCanon())) {
- SkDebugf("SkPDF: default typeface should be embeddable");
- return; // Avoid infinite loop in release.
- }
- SkPaint transparent;
- transparent.setTypeface(std::move(defaultFace));
- transparent.setTextSize(srcPaint.getTextSize());
- transparent.setColor(SK_ColorTRANSPARENT);
- switch (srcPaint.getTextEncoding()) {
- case SkPaint::kGlyphID_TextEncoding: {
- // Since a glyphId<->Unicode mapping is typeface-specific,
- // map back to Unicode first.
- size_t glyphCount = len / 2;
- SkAutoTMalloc<SkUnichar> unichars(glyphCount);
- srcPaint.glyphsToUnichars(
- (const uint16_t*)text, SkToInt(glyphCount), &unichars[0]);
- transparent.setTextEncoding(SkPaint::kUTF32_TextEncoding);
- // TODO(halcanary): deal with case where default typeface
- // does not have glyphs for these unicode code points.
- device->drawText(d, &unichars[0],
- glyphCount * sizeof(SkUnichar),
- x, y, transparent);
- break;
- }
- case SkPaint::kUTF8_TextEncoding:
- case SkPaint::kUTF16_TextEncoding:
- case SkPaint::kUTF32_TextEncoding:
- transparent.setTextEncoding(srcPaint.getTextEncoding());
- device->drawText(d, text, len, x, y, transparent);
- break;
- default:
- SkFAIL("unknown text encoding");
- }
-}
-
static SkUnichar map_glyph(const SkTDArray<SkUnichar>& glyphToUnicode, SkGlyphID glyph) {
return SkToInt(glyph) < glyphToUnicode.count() ? glyphToUnicode[SkToInt(glyph)] : -1;
}
@@ -1302,39 +1261,6 @@ void SkPDFDevice::internalDrawText(
if (glyphCount <= 0) {
return;
}
- // TODO(halcanary): use metrics->fGlyphToUnicode to check Unicode mapping.
- if (!SkPDFFont::CanEmbedTypeface(typeface, fDocument->canon())) {
- SkPath path; // https://bug.skia.org/3866
- switch (positioning) {
- case SkTextBlob::kDefault_Positioning:
- srcPaint.getTextPath(sourceText, sourceByteCount,
- offset.x(), offset.y(), &path);
- break;
- case SkTextBlob::kHorizontal_Positioning: {
- SkAutoTMalloc<SkPoint> positionsBuffer(glyphCount);
- for (int i = 0; i < glyphCount; ++i) {
- positionsBuffer[i] = offset + SkPoint{pos[i], 0};
- }
- srcPaint.getPosTextPath(sourceText, sourceByteCount,
- &positionsBuffer[0], &path);
- break;
- }
- case SkTextBlob::kFull_Positioning: {
- SkAutoTMalloc<SkPoint> positionsBuffer(glyphCount);
- for (int i = 0; i < glyphCount; ++i) {
- positionsBuffer[i] = offset + SkPoint{pos[2 * i], pos[2 * i + 1]};
- }
- srcPaint.getPosTextPath(sourceText, sourceByteCount,
- &positionsBuffer[0], &path);
- break;
- }
- }
- this->drawPath(d, path, srcPaint, &SkMatrix::I(), true);
- // Draw text transparently to make it copyable/searchable/accessable.
- draw_transparent_text(this, d, sourceText, sourceByteCount,
- offset.x(), offset.y(), paint);
- return;
- }
// These three heap buffers are only used in the case where no glyphs
// are passed to drawText() (most clients pass glyphs or a textblob).
diff --git a/src/pdf/SkPDFFont.cpp b/src/pdf/SkPDFFont.cpp
index db9a177dc2..284e1bfcd5 100644
--- a/src/pdf/SkPDFFont.cpp
+++ b/src/pdf/SkPDFFont.cpp
@@ -162,7 +162,8 @@ const SkAdvancedTypefaceMetrics* SkPDFFont::GetMetrics(SkTypeface* typeface,
}
SkAdvancedTypefaceMetrics::FontType SkPDFFont::FontType(const SkAdvancedTypefaceMetrics& metrics) {
- if (SkToBool(metrics.fFlags & SkAdvancedTypefaceMetrics::kMultiMaster_FontFlag)) {
+ if (SkToBool(metrics.fFlags & SkAdvancedTypefaceMetrics::kMultiMaster_FontFlag) ||
+ SkToBool(metrics.fFlags & SkAdvancedTypefaceMetrics::kNotEmbeddable_FontFlag)) {
// force Type3 fallback.
return SkAdvancedTypefaceMetrics::kOther_Font;
}