# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1620773085 0 # Node ID cd9d2ba251d5b9e50bdda7ba951f55f204390008 # Parent d172ab2eddb644868185cf97954ddadc6f9682ce Android: Reimplement drawPolygon() using drawPath() instead of drawLines/Points(). Add some extra safety checks before calling into drawPolygon(). diff -r d172ab2eddb6 -r cd9d2ba251d5 android/DWindows.kt --- a/android/DWindows.kt Tue May 11 22:19:28 2021 +0000 +++ b/android/DWindows.kt Tue May 11 22:44:45 2021 +0000 @@ -1971,12 +1971,12 @@ fun drawPolygon(render: DWRender?, bitmap: Bitmap?, flags: Int, npoints: Int, x: IntArray, y: IntArray) { - var points = FloatArray(npoints*2) + // Create a path with all our points + val path = Path() - // Convert to a single IntArray - for (i in 0 until npoints) { - points[(i*2)] = x[i].toFloat() - points[(i*2)+1] = y[i].toFloat() + path.moveTo(x[0].toFloat(), y[0].toFloat()) + for (i in 1 until npoints) { + path.lineTo(x[i].toFloat(), y[i].toFloat()) } waitOnUiThread { @@ -2001,7 +2001,7 @@ } else { paint.style = Paint.Style.STROKE } - canvas.drawPoints(points, paint) + canvas.drawPath(path, paint) } } } diff -r d172ab2eddb6 -r cd9d2ba251d5 android/dw.cpp --- a/android/dw.cpp Tue May 11 22:19:28 2021 +0000 +++ b/android/dw.cpp Tue May 11 22:44:45 2021 +0000 @@ -2582,7 +2582,7 @@ { JNIEnv *env; - if((handle || pixmap) && (env = (JNIEnv *)pthread_getspecific(_dw_env_key))) + if((handle || pixmap) && npoints > 0 && x && y && (env = (JNIEnv *)pthread_getspecific(_dw_env_key))) { jintArray jx = env->NewIntArray(npoints); jintArray jy = env->NewIntArray(npoints);