diff options
author | Romain Guy <romainguy@google.com> | 2011-12-05 11:56:09 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-12-05 11:56:09 -0800 |
commit | 7da48db9c5c071cfc1c54a3709a02c1300dccd76 (patch) | |
tree | 960648b93566fe5b23dac29d39137f0c03378383 | |
parent | 315e468763c9601e2f06443fda847d2c9eb27a75 (diff) | |
parent | 8f9a9f61ab793d9387a5942b307e74324704893b (diff) |
Merge "Clip text correctly Bug #5706056"
-rw-r--r-- | libs/hwui/DisplayListRenderer.cpp | 10 | ||||
-rw-r--r-- | libs/hwui/DisplayListRenderer.h | 2 | ||||
-rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 12 | ||||
-rw-r--r-- | libs/hwui/ShapeCache.h | 3 | ||||
-rw-r--r-- | libs/hwui/TextureCache.cpp | 3 |
5 files changed, 17 insertions, 13 deletions
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp index ae7a3b5b27b4..5a52464a54fb 100644 --- a/libs/hwui/DisplayListRenderer.cpp +++ b/libs/hwui/DisplayListRenderer.cpp @@ -1204,6 +1204,16 @@ void DisplayListRenderer::drawText(const char* text, int bytesCount, int count, addText(text, bytesCount); addInt(count); addPoint(x, y); + // TODO: We should probably make a copy of the paint instead of modifying + // it; modifying the paint will change its generationID the first + // time, which might impact caches. More investigation needed to + // see if it matters. + // If we make a copy, then drawTextDecorations() should *not* make + // its own copy as it does right now. + 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); } diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h index ab483fbc2ff5..c09760ef2538 100644 --- a/libs/hwui/DisplayListRenderer.h +++ b/libs/hwui/DisplayListRenderer.h @@ -290,7 +290,7 @@ public: virtual void drawLines(float* points, int count, SkPaint* paint); virtual void drawPoints(float* points, int count, SkPaint* paint); virtual void drawText(const char* text, int bytesCount, int count, float x, float y, - SkPaint* paint, float length); + SkPaint* paint, float length = 1.0f); virtual void resetShader(); virtual void setupShader(SkiaShader* shader); diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index a60ac0804af4..81c053e3265f 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -2069,16 +2069,7 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, } if (mSnapshot->isIgnored()) return; - // TODO: We should probably make a copy of the paint instead of modifying - // it; modifying the paint will change its generationID the first - // time, which might impact caches. More investigation needed to - // see if it matters. - // If we make a copy, then drawTextDecorations() should *not* make - // its own copy as it does right now. - paint->setAntiAlias(true); -#if RENDER_TEXT_AS_GLYPHS - paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding); -#endif + // NOTE: AA and glyph id encoding are set in DisplayListRenderer.cpp switch (paint->getTextAlign()) { case SkPaint::kCenter_Align: @@ -2095,6 +2086,7 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, SkPaint::FontMetrics metrics; paint->getFontMetrics(&metrics, 0.0f); + // If no length was specified, just perform the hit test on the Y axis if (quickReject(x, y + metrics.fTop, x + (length >= 0.0f ? length : INT_MAX / 2), y + metrics.fBottom)) { return; diff --git a/libs/hwui/ShapeCache.h b/libs/hwui/ShapeCache.h index 8b88d30ef9b2..f64c074c58a8 100644 --- a/libs/hwui/ShapeCache.h +++ b/libs/hwui/ShapeCache.h @@ -503,7 +503,8 @@ PathTexture* ShapeCache<Entry>::addTexture(const Entry& entry, const SkPath *pat const uint32_t height = uint32_t(pathHeight + offset * 2.0 + 0.5); if (width > mMaxTextureSize || height > mMaxTextureSize) { - LOGW("Shape %s too large to be rendered into a texture", mName); + LOGW("Shape %s too large to be rendered into a texture (%dx%d, max=%dx%d)", + mName, width, height, mMaxTextureSize, mMaxTextureSize); return NULL; } diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp index 711277a56d8a..60f4ca19d9b4 100644 --- a/libs/hwui/TextureCache.cpp +++ b/libs/hwui/TextureCache.cpp @@ -125,7 +125,8 @@ Texture* TextureCache::get(SkBitmap* bitmap) { if (!texture) { if (bitmap->width() > mMaxTextureSize || bitmap->height() > mMaxTextureSize) { - LOGW("Bitmap too large to be uploaded into a texture"); + LOGW("Bitmap too large to be uploaded into a texture (%dx%d, max=%dx%d)", + bitmap->width(), bitmap->height(), mMaxTextureSize, mMaxTextureSize); return NULL; } |