From 768bffc9b814f6a1f7d9ff59d91285895c23bbe9 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Wed, 27 Feb 2013 13:50:45 -0800 Subject: Draw text drop shadows even when the text color is transparent This matches Skia's behavior. Change-Id: Ibf0a52611f5801cfa68169f66ab0ec06f256600f --- libs/hwui/OpenGLRenderer.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'libs/hwui/OpenGLRenderer.cpp') diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 34d1c983f87d..ee54462275aa 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -2555,10 +2555,14 @@ void OpenGLRenderer::drawTextShadow(SkPaint* paint, const char* text, int bytesC glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount); } +bool OpenGLRenderer::canSkipText(const SkPaint* paint) const { + float alpha = (mDrawModifiers.mHasShadow ? 1.0f : paint->getAlpha()) * mSnapshot->alpha; + return alpha == 0.0f && getXfermode(paint->getXfermode()) == SkXfermode::kSrcOver_Mode; +} + status_t OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count, const float* positions, SkPaint* paint) { - if (text == NULL || count == 0 || mSnapshot->isIgnored() || - (paint->getAlpha() * mSnapshot->alpha == 0 && paint->getXfermode() == NULL)) { + if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) { return DrawGlInfo::kStatusDone; } @@ -2630,8 +2634,7 @@ status_t OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float x, float y, const float* positions, SkPaint* paint, float length) { - if (text == NULL || count == 0 || mSnapshot->isIgnored() || - (paint->getAlpha() * mSnapshot->alpha == 0 && paint->getXfermode() == NULL)) { + if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) { return DrawGlInfo::kStatusDone; } @@ -2735,8 +2738,7 @@ status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count, status_t OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path, float hOffset, float vOffset, SkPaint* paint) { - if (text == NULL || count == 0 || mSnapshot->isIgnored() || - (paint->getAlpha() == 0 && paint->getXfermode() == NULL)) { + if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) { return DrawGlInfo::kStatusDone; } -- cgit v1.2.3-59-g8ed1b