diff options
| author | 2012-01-23 17:10:42 -0800 | |
|---|---|---|
| committer | 2012-01-23 17:10:42 -0800 | |
| commit | 1a54368b24a8cb88ee56ee746eae45171a43b89e (patch) | |
| tree | 15f2fd88778259c74851068d9346f61e4b38640f /libs/hwui/OpenGLRenderer.cpp | |
| parent | e575005f7c7a2ec26662862631ca1d0d1959d6bc (diff) | |
| parent | 5ff9df658230d49e42c43586997a02d8e4dd417e (diff) | |
Merge "Add full support for Canvas.setDrawFilter()"
Diffstat (limited to 'libs/hwui/OpenGLRenderer.cpp')
| -rw-r--r-- | libs/hwui/OpenGLRenderer.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 786a4f1c0f98..cc0e05ef914b 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -111,6 +111,7 @@ OpenGLRenderer::OpenGLRenderer(): mCaches(Caches::getInstance()) { mShader = NULL; mColorFilter = NULL; mHasShadow = false; + mHasDrawFilter = false; memcpy(mMeshVertices, gMeshVertices, sizeof(gMeshVertices)); @@ -2399,6 +2400,31 @@ void OpenGLRenderer::setupShadow(float radius, float dx, float dy, int color) { } /////////////////////////////////////////////////////////////////////////////// +// Draw filters +/////////////////////////////////////////////////////////////////////////////// + +void OpenGLRenderer::resetPaintFilter() { + mHasDrawFilter = false; +} + +void OpenGLRenderer::setupPaintFilter(int clearBits, int setBits) { + mHasDrawFilter = true; + mPaintFilterClearBits = clearBits & SkPaint::kAllFlags; + mPaintFilterSetBits = setBits & SkPaint::kAllFlags; +} + +SkPaint* OpenGLRenderer::filterPaint(SkPaint* paint) { + if (!mHasDrawFilter || !paint) return paint; + + uint32_t flags = paint->getFlags(); + + mFilteredPaint = *paint; + mFilteredPaint.setFlags((flags & ~mPaintFilterClearBits) | mPaintFilterSetBits); + + return &mFilteredPaint; +} + +/////////////////////////////////////////////////////////////////////////////// // Drawing implementation /////////////////////////////////////////////////////////////////////////////// |