Fix bug #5753006 Garbled Labels in Maps
- it was a regression introduced into this CL: https://android-git.corp.google.com/g/#/c/154240/5 - basically needed to set the GlyphID encoding to the Skia Paint as we are now using glyphID resulting from the Harfbuzz shaping - also define GlyphID encoding as the default on the Paint class Change-Id: Idb7c2c57ac67595425ce3be9421258962690fcdd
This commit is contained in:
@@ -779,15 +779,8 @@ public:
|
||||
// TODO: need to suppress this code after the GL renderer is modified for not
|
||||
// copying the paint
|
||||
|
||||
// Save old text encoding
|
||||
SkPaint::TextEncoding oldEncoding = paint->getTextEncoding();
|
||||
// Define Glyph encoding
|
||||
paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
|
||||
|
||||
// Beware: this needs Glyph encoding (already done on the Paint constructor)
|
||||
canvas->drawText(glyphArray + index * 2, count * 2, x, y, *paint);
|
||||
|
||||
// Get back old encoding
|
||||
paint->setTextEncoding(oldEncoding);
|
||||
}
|
||||
|
||||
static void drawTextRun___CIIIIFFIPaint(
|
||||
|
||||
@@ -54,8 +54,8 @@ static jclass gFontMetricsInt_class;
|
||||
static JMetricsID gFontMetricsInt_fieldID;
|
||||
|
||||
static void defaultSettingsForAndroid(SkPaint* paint) {
|
||||
// utf16 is required for java
|
||||
paint->setTextEncoding(SkPaint::kUTF16_TextEncoding);
|
||||
// GlyphID encoding is required because we are using Harfbuzz shaping
|
||||
paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
|
||||
}
|
||||
|
||||
class SkPaintGlue {
|
||||
|
||||
@@ -52,7 +52,7 @@ bool TextLayout::needsLayout(const jchar* text, jint len, jint bidiFlags) {
|
||||
// This will draw if canvas is not null, otherwise path must be non-null and it will create
|
||||
// a path representing the text that would have been drawn.
|
||||
void TextLayout::handleText(SkPaint *paint, const jchar* text, jsize len,
|
||||
jint bidiFlags, jfloat x, jfloat y,SkCanvas *canvas, SkPath *path) {
|
||||
jint bidiFlags, jfloat x, jfloat y, SkPath *path) {
|
||||
sp<TextLayoutCacheValue> value;
|
||||
#if USE_TEXT_LAYOUT_CACHE
|
||||
// Return advances from the cache. Compute them if needed
|
||||
@@ -70,11 +70,8 @@ void TextLayout::handleText(SkPaint *paint, const jchar* text, jsize len,
|
||||
}
|
||||
SkScalar x_ = SkFloatToScalar(x);
|
||||
SkScalar y_ = SkFloatToScalar(y);
|
||||
if (canvas) {
|
||||
canvas->drawText(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, *paint);
|
||||
} else {
|
||||
paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, path);
|
||||
}
|
||||
// Beware: this needs Glyph encoding (already done on the Paint constructor)
|
||||
paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, path);
|
||||
}
|
||||
|
||||
void TextLayout::getTextRunAdvances(SkPaint* paint, const jchar* chars, jint start,
|
||||
@@ -113,7 +110,7 @@ void TextLayout::getTextRunAdvancesICU(SkPaint* paint, const jchar* chars, jint
|
||||
|
||||
void TextLayout::getTextPath(SkPaint *paint, const jchar *text, jsize len,
|
||||
jint bidiFlags, jfloat x, jfloat y, SkPath *path) {
|
||||
handleText(paint, text, len, bidiFlags, x, y, NULL, path);
|
||||
handleText(paint, text, len, bidiFlags, x, y, path);
|
||||
}
|
||||
|
||||
|
||||
@@ -143,16 +140,8 @@ void TextLayout::drawTextOnPath(SkPaint* paint, const jchar* text, int count,
|
||||
String8(text, count).string());
|
||||
return ;
|
||||
}
|
||||
|
||||
// Save old text encoding
|
||||
SkPaint::TextEncoding oldEncoding = paint->getTextEncoding();
|
||||
// Define Glyph encoding
|
||||
paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
|
||||
|
||||
// Beware: this needs Glyph encoding (already done on the Paint constructor)
|
||||
canvas->drawTextOnPathHV(value->getGlyphs(), value->getGlyphsCount() * 2, *path, h_, v_, *paint);
|
||||
|
||||
// Get back old encoding
|
||||
paint->setTextEncoding(oldEncoding);
|
||||
}
|
||||
|
||||
void TextLayout::computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
|
||||
|
||||
@@ -81,7 +81,7 @@ private:
|
||||
static bool needsLayout(const jchar* text, jint len, jint bidiFlags);
|
||||
|
||||
static void handleText(SkPaint* paint, const jchar* text, jsize len,
|
||||
int bidiFlags, jfloat x, jfloat y, SkCanvas* canvas, SkPath* path);
|
||||
int bidiFlags, jfloat x, jfloat y, SkPath* path);
|
||||
|
||||
static void computeAdvancesWithICU(SkPaint* paint, const UChar* chars,
|
||||
size_t start, size_t count, size_t contextCount, int dirFlags,
|
||||
|
||||
@@ -1210,10 +1210,8 @@ void DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
|
||||
// see if it matters.
|
||||
// If we make a copy, then drawTextDecorations() should *not* make
|
||||
// its own copy as it does right now.
|
||||
// Beware: this needs Glyph encoding (already done on the Paint constructor)
|
||||
paint->setAntiAlias(true);
|
||||
#if RENDER_TEXT_AS_GLYPHS
|
||||
paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
|
||||
#endif
|
||||
addPaint(paint);
|
||||
addFloat(length < 0.0f ? paint->measureText(text, bytesCount) : length);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user