diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/GLES20Canvas.java | 32 | ||||
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 13 |
2 files changed, 37 insertions, 8 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index 99b686e..d82f051 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -452,11 +452,14 @@ class GLES20Canvas extends HardwareCanvas { @Override public int saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags) { - boolean hasColorFilter = paint != null && setupColorFilter(paint); - final int nativePaint = paint == null ? 0 : paint.mNativePaint; - int count = nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags); - if (hasColorFilter) nResetModifiers(mRenderer); - return count; + if (left < right && top < bottom) { + boolean hasColorFilter = paint != null && setupColorFilter(paint); + final int nativePaint = paint == null ? 0 : paint.mNativePaint; + int count = nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags); + if (hasColorFilter) nResetModifiers(mRenderer); + return count; + } + return save(saveFlags); } private native int nSaveLayer(int renderer, float left, float top, float right, float bottom, @@ -471,7 +474,10 @@ class GLES20Canvas extends HardwareCanvas { @Override public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags) { - return nSaveLayerAlpha(mRenderer, left, top, right, bottom, alpha, saveFlags); + if (left < right && top < bottom) { + return nSaveLayerAlpha(mRenderer, left, top, right, bottom, alpha, saveFlags); + } + return save(saveFlags); } private native int nSaveLayerAlpha(int renderer, float left, float top, float right, @@ -629,9 +635,13 @@ class GLES20Canvas extends HardwareCanvas { @Override public void drawCircle(float cx, float cy, float radius, Paint paint) { - throw new UnsupportedOperationException(); + boolean hasModifier = setupModifiers(paint); + nDrawCircle(mRenderer, cx, cy, radius, paint.mNativePaint); + if (hasModifier) nResetModifiers(mRenderer); } + private native void nDrawCircle(int renderer, float cx, float cy, float radius, int paint); + @Override public void drawColor(int color) { drawColor(color, PorterDuff.Mode.SRC_OVER); @@ -767,9 +777,15 @@ class GLES20Canvas extends HardwareCanvas { @Override public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) { - // TODO: Implement + boolean hasModifier = setupModifiers(paint); + nDrawRoundRect(mRenderer, rect.left, rect.top, rect.right, rect.bottom, + rx, ry, paint.mNativePaint); + if (hasModifier) nResetModifiers(mRenderer); } + private native void nDrawRoundRect(int renderer, float left, float top, + float right, float bottom, float rx, float y, int paint); + @Override public void drawText(char[] text, int index, int count, float x, float y, Paint paint) { if ((index | count | (index + count) | (text.length - index - count)) < 0) { diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index ac491ea..bfd2b58 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -299,6 +299,17 @@ static void android_view_GLES20Canvas_drawRect(JNIEnv* env, jobject canvas, renderer->drawRect(left, top, right, bottom, paint); } +static void android_view_GLES20Canvas_drawRoundRect(JNIEnv* env, jobject canvas, + OpenGLRenderer* renderer, jfloat left, jfloat top, jfloat right, jfloat bottom, + jfloat rx, jfloat ry, SkPaint* paint) { + renderer->drawRoundRect(left, top, right, bottom, rx, ry, paint); +} + +static void android_view_GLES20Canvas_drawCircle(JNIEnv* env, jobject canvas, + OpenGLRenderer* renderer, jfloat x, jfloat y, jfloat radius, SkPaint* paint) { + renderer->drawCircle(x, y, radius, paint); +} + static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject canvas, OpenGLRenderer* renderer, SkRegion* region, SkPaint* paint) { SkRegion::Iterator it(*region); @@ -570,6 +581,8 @@ static JNINativeMethod gMethods[] = { { "nDrawColor", "(III)V", (void*) android_view_GLES20Canvas_drawColor }, { "nDrawRect", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRects }, + { "nDrawRoundRect", "(IFFFFFFI)V", (void*) android_view_GLES20Canvas_drawRoundRect }, + { "nDrawCircle", "(IFFFI)V", (void*) android_view_GLES20Canvas_drawCircle }, { "nDrawPath", "(III)V", (void*) android_view_GLES20Canvas_drawPath }, { "nDrawLines", "(I[FIII)V", (void*) android_view_GLES20Canvas_drawLines }, |