summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/java/android/view/GLES20Canvas.java13
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp10
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 },