Loading core/java/android/view/GLES20Canvas.java +11 −0 Original line number Diff line number Diff line Loading @@ -994,4 +994,15 @@ class GLES20Canvas extends HardwareCanvas { int indexOffset, int indexCount, Paint paint) { // TODO: Implement } @Override public void setOverrideXfermode(PorterDuff.Mode xfermode) { int xfermodeValue = -1; if (xfermode != null) { xfermodeValue = xfermode.nativeInt; } nSetOverrideXfermode(mRenderer, xfermodeValue); } private static native void nSetOverrideXfermode(long renderer, int xfermode); } core/jni/android_view_GLES20Canvas.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,12 @@ static jint android_view_GLES20Canvas_getMaxTextureHeight(JNIEnv* env, jobject c return Caches::getInstance().maxTextureSize; } static void android_view_GLES20Canvas_setOverrideXfermode(JNIEnv* env, jobject clazz, jlong rendererPtr, int xfermode) { DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); renderer->setOverrideXfermode(xfermode); } // ---------------------------------------------------------------------------- // State // ---------------------------------------------------------------------------- Loading Loading @@ -964,6 +970,8 @@ static JNINativeMethod gMethods[] = { { "nGetMaximumTextureWidth", "()I", (void*) android_view_GLES20Canvas_getMaxTextureWidth }, { "nGetMaximumTextureHeight", "()I", (void*) android_view_GLES20Canvas_getMaxTextureHeight }, { "nSetOverrideXfermode", "(JI)V", (void*) android_view_GLES20Canvas_setOverrideXfermode }, #endif }; Loading graphics/java/android/graphics/Canvas.java +9 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,15 @@ public class Canvas { /** @hide */ public void insertInorderBarrier() {} /** * Set a transfer mode that overrides any transfer modes * in paints used for drawing. Pass null to disable this * override. Only implemented in GLES20Canvas. * * @hide */ public void setOverrideXfermode(@Nullable PorterDuff.Mode xfermode) {} /** * Return true if the device that the current layer draws into is opaque * (i.e. does not support per-pixel alpha). Loading libs/hwui/DisplayListRenderer.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ DisplayListRenderer::DisplayListRenderer() , mTranslateY(0.0f) , mDeferredBarrierType(kBarrier_None) , mHighContrastText(false) , mOverrideXfermode(-1) , mRestoreSaveCount(-1) { } Loading libs/hwui/DisplayListRenderer.h +33 −12 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <SkMatrix.h> #include <SkPaint.h> #include <SkPath.h> #include <SkPorterDuff.h> #include <cutils/compiler.h> #include "DisplayListLogBuffer.h" Loading Loading @@ -161,6 +162,15 @@ public: void setHighContrastText(bool highContrastText) { mHighContrastText = highContrastText; } void setOverrideXfermode(int xfermode) { if (xfermode != -1) { SkPorterDuff::Mode porterDuffMode = static_cast<SkPorterDuff::Mode>(xfermode); xfermode = SkPorterDuff::ToXfermodeMode(porterDuffMode); } mOverrideXfermode = xfermode; }; private: enum DeferredBarrierType { kBarrier_None, Loading Loading @@ -220,7 +230,14 @@ private: inline const SkPaint* refPaint(const SkPaint* paint) { if (!paint) return NULL; const SkPaint* paintCopy = mPaintMap.valueFor(paint); const SkPaint* paintCopy; if (mOverrideXfermode != -1) { SkPaint* overriddenPaint = copyPaint(paint); overriddenPaint->setXfermodeMode(static_cast<SkXfermode::Mode>(mOverrideXfermode)); paintCopy = overriddenPaint; } else { paintCopy = mPaintMap.valueFor(paint); if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID() // We can't compare shader pointers because that will always Loading @@ -233,6 +250,7 @@ private: // replaceValueFor() performs an add if the entry doesn't exist mPaintMap.replaceValueFor(paint, paintCopy); } } return paintCopy; } Loading Loading @@ -304,6 +322,9 @@ private: DeferredBarrierType mDeferredBarrierType; bool mHighContrastText; // -1 if unset, or SkXfermode::Mode value if set int mOverrideXfermode; int mRestoreSaveCount; friend class RenderNode; Loading Loading
core/java/android/view/GLES20Canvas.java +11 −0 Original line number Diff line number Diff line Loading @@ -994,4 +994,15 @@ class GLES20Canvas extends HardwareCanvas { int indexOffset, int indexCount, Paint paint) { // TODO: Implement } @Override public void setOverrideXfermode(PorterDuff.Mode xfermode) { int xfermodeValue = -1; if (xfermode != null) { xfermodeValue = xfermode.nativeInt; } nSetOverrideXfermode(mRenderer, xfermodeValue); } private static native void nSetOverrideXfermode(long renderer, int xfermode); }
core/jni/android_view_GLES20Canvas.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,12 @@ static jint android_view_GLES20Canvas_getMaxTextureHeight(JNIEnv* env, jobject c return Caches::getInstance().maxTextureSize; } static void android_view_GLES20Canvas_setOverrideXfermode(JNIEnv* env, jobject clazz, jlong rendererPtr, int xfermode) { DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); renderer->setOverrideXfermode(xfermode); } // ---------------------------------------------------------------------------- // State // ---------------------------------------------------------------------------- Loading Loading @@ -964,6 +970,8 @@ static JNINativeMethod gMethods[] = { { "nGetMaximumTextureWidth", "()I", (void*) android_view_GLES20Canvas_getMaxTextureWidth }, { "nGetMaximumTextureHeight", "()I", (void*) android_view_GLES20Canvas_getMaxTextureHeight }, { "nSetOverrideXfermode", "(JI)V", (void*) android_view_GLES20Canvas_setOverrideXfermode }, #endif }; Loading
graphics/java/android/graphics/Canvas.java +9 −0 Original line number Diff line number Diff line Loading @@ -249,6 +249,15 @@ public class Canvas { /** @hide */ public void insertInorderBarrier() {} /** * Set a transfer mode that overrides any transfer modes * in paints used for drawing. Pass null to disable this * override. Only implemented in GLES20Canvas. * * @hide */ public void setOverrideXfermode(@Nullable PorterDuff.Mode xfermode) {} /** * Return true if the device that the current layer draws into is opaque * (i.e. does not support per-pixel alpha). Loading
libs/hwui/DisplayListRenderer.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ DisplayListRenderer::DisplayListRenderer() , mTranslateY(0.0f) , mDeferredBarrierType(kBarrier_None) , mHighContrastText(false) , mOverrideXfermode(-1) , mRestoreSaveCount(-1) { } Loading
libs/hwui/DisplayListRenderer.h +33 −12 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <SkMatrix.h> #include <SkPaint.h> #include <SkPath.h> #include <SkPorterDuff.h> #include <cutils/compiler.h> #include "DisplayListLogBuffer.h" Loading Loading @@ -161,6 +162,15 @@ public: void setHighContrastText(bool highContrastText) { mHighContrastText = highContrastText; } void setOverrideXfermode(int xfermode) { if (xfermode != -1) { SkPorterDuff::Mode porterDuffMode = static_cast<SkPorterDuff::Mode>(xfermode); xfermode = SkPorterDuff::ToXfermodeMode(porterDuffMode); } mOverrideXfermode = xfermode; }; private: enum DeferredBarrierType { kBarrier_None, Loading Loading @@ -220,7 +230,14 @@ private: inline const SkPaint* refPaint(const SkPaint* paint) { if (!paint) return NULL; const SkPaint* paintCopy = mPaintMap.valueFor(paint); const SkPaint* paintCopy; if (mOverrideXfermode != -1) { SkPaint* overriddenPaint = copyPaint(paint); overriddenPaint->setXfermodeMode(static_cast<SkXfermode::Mode>(mOverrideXfermode)); paintCopy = overriddenPaint; } else { paintCopy = mPaintMap.valueFor(paint); if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID() // We can't compare shader pointers because that will always Loading @@ -233,6 +250,7 @@ private: // replaceValueFor() performs an add if the entry doesn't exist mPaintMap.replaceValueFor(paint, paintCopy); } } return paintCopy; } Loading Loading @@ -304,6 +322,9 @@ private: DeferredBarrierType mDeferredBarrierType; bool mHighContrastText; // -1 if unset, or SkXfermode::Mode value if set int mOverrideXfermode; int mRestoreSaveCount; friend class RenderNode; Loading