| Index: src/pdf/SkPDFDevice.cpp
|
| diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
|
| index e571477e439fd2f1875007cb8b51d397847b71f1..5946b9ae6f293fcadc43d73ba2758eee8cc4bb92 100644
|
| --- a/src/pdf/SkPDFDevice.cpp
|
| +++ b/src/pdf/SkPDFDevice.cpp
|
| @@ -35,22 +35,6 @@
|
| #include "SkTypefacePriv.h"
|
| #include "SkTSet.h"
|
|
|
| -#ifdef SK_BUILD_FOR_ANDROID
|
| -#include "SkTypeface_android.h"
|
| -
|
| -struct TypefaceFallbackData {
|
| - SkTypeface* typeface;
|
| - int lowerBounds;
|
| - int upperBounds;
|
| -
|
| - bool operator==(const TypefaceFallbackData& b) const {
|
| - return typeface == b.typeface &&
|
| - lowerBounds == b.lowerBounds &&
|
| - upperBounds == b.upperBounds;
|
| - }
|
| -};
|
| -#endif
|
| -
|
| #define DPI_FOR_RASTER_SCALE_ONE 72
|
|
|
| // Utility functions
|
| @@ -1175,116 +1159,6 @@ void SkPDFDevice::drawPosText(const SkDraw& d, const void* text, size_t len,
|
| return;
|
| }
|
|
|
| -#ifdef SK_BUILD_FOR_ANDROID
|
| - /*
|
| - * In the case that we have enabled fallback fonts on Android we need to
|
| - * take the following steps to ensure that the PDF draws all characters,
|
| - * regardless of their underlying font file, correctly.
|
| - *
|
| - * 1. Convert input into GlyphID encoding if it currently is not
|
| - * 2. Iterate over the glyphIDs and identify the actual typeface that each
|
| - * glyph resolves to
|
| - * 3. Iterate over those typefaces and recursively call this function with
|
| - * only the glyphs (and their positions) that the typeface is capable of
|
| - * resolving.
|
| - */
|
| - if (paint.getPaintOptionsAndroid().isUsingFontFallbacks()) {
|
| - uint16_t* glyphIDs = NULL;
|
| - SkGlyphStorage tmpStorage(0);
|
| - size_t numGlyphs = 0;
|
| -
|
| - // convert to glyphIDs
|
| - if (paint.getTextEncoding() == SkPaint::kGlyphID_TextEncoding) {
|
| - numGlyphs = len / 2;
|
| - glyphIDs = reinterpret_cast<uint16_t*>(const_cast<void*>(text));
|
| - } else {
|
| - numGlyphs = paint.textToGlyphs(text, len, NULL);
|
| - tmpStorage.reset(numGlyphs);
|
| - paint.textToGlyphs(text, len, tmpStorage.get());
|
| - glyphIDs = tmpStorage.get();
|
| - }
|
| -
|
| - // if no typeface is provided in the paint get the default
|
| - SkAutoTUnref<SkTypeface> origFace(SkSafeRef(paint.getTypeface()));
|
| - if (NULL == origFace.get()) {
|
| - origFace.reset(SkTypeface::RefDefault());
|
| - }
|
| - const uint16_t origGlyphCount = origFace->countGlyphs();
|
| -
|
| - // keep a list of the already visited typefaces and some data about them
|
| - SkTDArray<TypefaceFallbackData> visitedTypefaces;
|
| -
|
| - // find all the typefaces needed to resolve this run of text
|
| - bool usesOriginalTypeface = false;
|
| - for (uint16_t x = 0; x < numGlyphs; ++x) {
|
| - // optimization that checks to see if original typeface can resolve
|
| - // the glyph
|
| - if (glyphIDs[x] < origGlyphCount) {
|
| - usesOriginalTypeface = true;
|
| - continue;
|
| - }
|
| -
|
| - // find the fallback typeface that supports this glyph
|
| - TypefaceFallbackData data;
|
| - data.typeface =
|
| - SkGetTypefaceForGlyphID(glyphIDs[x], origFace.get(),
|
| - paint.getPaintOptionsAndroid(),
|
| - &data.lowerBounds,
|
| - &data.upperBounds);
|
| - // add the typeface and its data if we don't have it
|
| - if (data.typeface && !visitedTypefaces.contains(data)) {
|
| - visitedTypefaces.push(data);
|
| - }
|
| - }
|
| -
|
| - // if the original font was used then add it to the list as well
|
| - if (usesOriginalTypeface) {
|
| - TypefaceFallbackData* data = visitedTypefaces.push();
|
| - data->typeface = origFace.get();
|
| - data->lowerBounds = 0;
|
| - data->upperBounds = origGlyphCount;
|
| - }
|
| -
|
| - // keep a scratch glyph and pos storage
|
| - SkAutoTMalloc<SkScalar> posStorage(len * scalarsPerPos);
|
| - SkScalar* tmpPos = posStorage.get();
|
| - SkGlyphStorage glyphStorage(numGlyphs);
|
| - uint16_t* tmpGlyphIDs = glyphStorage.get();
|
| -
|
| - // loop through all the valid typefaces, trim the glyphs to only those
|
| - // resolved by the typeface, and then draw that run of glyphs
|
| - for (int x = 0; x < visitedTypefaces.count(); ++x) {
|
| - const TypefaceFallbackData& data = visitedTypefaces[x];
|
| -
|
| - int tmpGlyphCount = 0;
|
| - for (uint16_t y = 0; y < numGlyphs; ++y) {
|
| - if (glyphIDs[y] >= data.lowerBounds &&
|
| - glyphIDs[y] < data.upperBounds) {
|
| - tmpGlyphIDs[tmpGlyphCount] = glyphIDs[y] - data.lowerBounds;
|
| - memcpy(&(tmpPos[tmpGlyphCount * scalarsPerPos]),
|
| - &(pos[y * scalarsPerPos]),
|
| - scalarsPerPos * sizeof(SkScalar));
|
| - tmpGlyphCount++;
|
| - }
|
| - }
|
| -
|
| - // recursively call this function with the right typeface
|
| - SkPaint tmpPaint = paint;
|
| - tmpPaint.setTypeface(data.typeface);
|
| - tmpPaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
|
| -
|
| - // turn off fallback chaining
|
| - SkPaintOptionsAndroid paintOpts = tmpPaint.getPaintOptionsAndroid();
|
| - paintOpts.setUseFontFallbacks(false);
|
| - tmpPaint.setPaintOptionsAndroid(paintOpts);
|
| -
|
| - this->drawPosText(d, tmpGlyphIDs, tmpGlyphCount * 2, tmpPos, constY,
|
| - scalarsPerPos, tmpPaint);
|
| - }
|
| - return;
|
| - }
|
| -#endif
|
| -
|
| SkGlyphStorage storage(0);
|
| uint16_t* glyphIDs = NULL;
|
| size_t numGlyphs = force_glyph_encoding(paint, text, len, &storage,
|
|
|