summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2011-08-25 11:46:25 -0700
committer Android (Google) Code Review <android-gerrit@google.com> 2011-08-25 11:46:25 -0700
commit8d8533a9f0d2ed1955f548e7d255de747e01b8cf (patch)
treef03aced221e80206df5a6c93a24423d3a4675b9a
parent89b921e96bb50c3f3fdc413139598d2581b06755 (diff)
parent189887e0ae171c1b7601991442104a30e56c50ab (diff)
Merge "Implement saveLayer*() correctly"
-rw-r--r--core/java/android/view/GLES20Canvas.java21
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp16
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 },