diff options
| author | 2011-08-25 11:46:25 -0700 | |
|---|---|---|
| committer | 2011-08-25 11:46:25 -0700 | |
| commit | 8d8533a9f0d2ed1955f548e7d255de747e01b8cf (patch) | |
| tree | f03aced221e80206df5a6c93a24423d3a4675b9a | |
| parent | 89b921e96bb50c3f3fdc413139598d2581b06755 (diff) | |
| parent | 189887e0ae171c1b7601991442104a30e56c50ab (diff) | |
Merge "Implement saveLayer*() correctly"
| -rw-r--r-- | core/java/android/view/GLES20Canvas.java | 21 | ||||
| -rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 16 |
2 files changed, 34 insertions, 3 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index cfbb47c30d55..c934c7b92a95 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -541,9 +541,19 @@ class GLES20Canvas extends HardwareCanvas { @Override public int saveLayer(RectF bounds, Paint paint, int saveFlags) { - return saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, paint, saveFlags); + if (bounds != null) { + return saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, paint, saveFlags); + } + + int modifier = paint != null ? setupColorFilter(paint) : MODIFIER_NONE; + final int nativePaint = paint == null ? 0 : paint.mNativePaint; + int count = nSaveLayer(mRenderer, nativePaint, saveFlags); + if (modifier != MODIFIER_NONE) nResetModifiers(mRenderer, modifier); + return count; } + private static native int nSaveLayer(int renderer, int paint, int saveFlags); + @Override public int saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags) { @@ -562,10 +572,15 @@ class GLES20Canvas extends HardwareCanvas { @Override public int saveLayerAlpha(RectF bounds, int alpha, int saveFlags) { - return saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom, - alpha, saveFlags); + if (bounds != null) { + return saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom, + alpha, saveFlags); + } + return nSaveLayerAlpha(mRenderer, alpha, saveFlags); } + private static native int nSaveLayerAlpha(int renderer, int alpha, int saveFlags); + @Override public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags) { diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index fb5e5fe0bfe3..bcf8e7128ab1 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -222,12 +222,26 @@ static jint android_view_GLES20Canvas_saveLayer(JNIEnv* env, jobject clazz, return renderer->saveLayer(left, top, right, bottom, paint, saveFlags); } +static jint android_view_GLES20Canvas_saveLayerClip(JNIEnv* env, jobject clazz, + OpenGLRenderer* renderer, SkPaint* paint, jint saveFlags) { + const android::uirenderer::Rect& bounds(renderer->getClipBounds()); + return renderer->saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, + paint, saveFlags); +} + static jint android_view_GLES20Canvas_saveLayerAlpha(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom, jint alpha, jint saveFlags) { return renderer->saveLayerAlpha(left, top, right, bottom, alpha, saveFlags); } +static jint android_view_GLES20Canvas_saveLayerAlphaClip(JNIEnv* env, jobject clazz, + OpenGLRenderer* renderer, jint alpha, jint saveFlags) { + const android::uirenderer::Rect& bounds(renderer->getClipBounds()); + return renderer->saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom, + alpha, saveFlags); +} + // ---------------------------------------------------------------------------- // Clipping // ---------------------------------------------------------------------------- @@ -759,7 +773,9 @@ static JNINativeMethod gMethods[] = { { "nGetSaveCount", "(I)I", (void*) android_view_GLES20Canvas_getSaveCount }, { "nSaveLayer", "(IFFFFII)I", (void*) android_view_GLES20Canvas_saveLayer }, + { "nSaveLayer", "(III)I", (void*) android_view_GLES20Canvas_saveLayerClip }, { "nSaveLayerAlpha", "(IFFFFII)I", (void*) android_view_GLES20Canvas_saveLayerAlpha }, + { "nSaveLayerAlpha", "(III)I", (void*) android_view_GLES20Canvas_saveLayerAlphaClip }, { "nQuickReject", "(IFFFFI)Z", (void*) android_view_GLES20Canvas_quickReject }, { "nClipRect", "(IFFFFI)Z", (void*) android_view_GLES20Canvas_clipRectF }, |