diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/java/android/view/GLES20Canvas.java | 13 | ||||
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 10 |
2 files changed, 20 insertions, 3 deletions
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java index e0c4b14..f917001 100644 --- a/core/java/android/view/GLES20Canvas.java +++ b/core/java/android/view/GLES20Canvas.java @@ -537,17 +537,24 @@ class GLES20Canvas extends Canvas { mLine[1] = startY; mLine[2] = stopX; mLine[3] = stopY; - drawLines(mLine, 0, 1, paint); + drawLines(mLine, 0, 4, paint); } @Override public void drawLines(float[] pts, int offset, int count, Paint paint) { - // TODO: Implement + if ((offset | count) < 0 || offset + count > pts.length) { + throw new IllegalArgumentException("The lines array must contain 4 elements per line."); + } + boolean hasModifier = setupModifiers(paint); + nDrawLines(mRenderer, pts, offset, count, paint.mNativePaint); + if (hasModifier) nResetModifiers(mRenderer); } + private native void nDrawLines(int renderer, float[] points, int offset, int count, int paint); + @Override public void drawLines(float[] pts, Paint paint) { - drawLines(pts, 0, pts.length / 4, paint); + drawLines(pts, 0, pts.length, paint); } @Override diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp index a61a9d1..3a85bc1 100644 --- a/core/jni/android_view_GLES20Canvas.cpp +++ b/core/jni/android_view_GLES20Canvas.cpp @@ -265,6 +265,15 @@ static void android_view_GLES20Canvas_drawPath(JNIEnv* env, jobject canvas, renderer->drawPath(path, paint); } +static void android_view_GLES20Canvas_drawLines(JNIEnv* env, jobject canvas, + OpenGLRenderer* renderer, jfloatArray points, jint offset, jint count, SkPaint* paint) { + jfloat* storage = env->GetFloatArrayElements(points, NULL); + + renderer->drawLines(storage + offset, count, paint); + + env->ReleaseFloatArrayElements(points, storage, 0); +} + // ---------------------------------------------------------------------------- // Shaders and color filters // ---------------------------------------------------------------------------- @@ -421,6 +430,7 @@ static JNINativeMethod gMethods[] = { { "nDrawRect", "(IFFFFI)V", (void*) android_view_GLES20Canvas_drawRect }, { "nDrawRects", "(III)V", (void*) android_view_GLES20Canvas_drawRects }, { "nDrawPath", "(III)V", (void*) android_view_GLES20Canvas_drawPath }, + { "nDrawLines", "(I[FIII)V", (void*) android_view_GLES20Canvas_drawLines }, { "nResetModifiers", "(I)V", (void*) android_view_GLES20Canvas_resetModifiers }, { "nSetupShader", "(II)V", (void*) android_view_GLES20Canvas_setupShader }, |