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:
Fabrice Di Meglio
2012-01-05 13:30:54 -08:00
parent 2853041e6a
commit c511bee87c
5 changed files with 10 additions and 30 deletions

View File

@@ -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(

View File

@@ -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 {

View File

@@ -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,

View File

@@ -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,

View File

@@ -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);
}