Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(825)

Unified Diff: src/pdf/SkPDFDevice.cpp

Issue 434623002: Remove ALL font fallback logic from Skia. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix win font host Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkScalerContext.cpp ('k') | src/ports/SkFontConfigInterface_android.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « src/core/SkScalerContext.cpp ('k') | src/ports/SkFontConfigInterface_android.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698