Canvas: add drawLines

This commit is contained in:
Mis012
2025-02-15 21:36:03 +01:00
parent 453224cf31
commit 899805f23f
4 changed files with 39 additions and 0 deletions

View File

@@ -73,6 +73,14 @@ JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1restore
JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawLine
(JNIEnv *, jobject, jlong, jfloat, jfloat, jfloat, jfloat, jlong);
/*
* Class: android_graphics_GskCanvas
* Method: native_drawLines
* Signature: (J[FIIJ)V
*/
JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawLines
(JNIEnv *, jobject, jlong, jfloatArray, jint, jint, jlong);
/*
* Class: android_graphics_GskCanvas
* Method: native_drawText

View File

@@ -82,6 +82,15 @@ JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawLine(JNIEnv *
gtk_snapshot_restore(snapshot);
}
JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawLines(JNIEnv *env, jclass this_class, jlong snapshot_ptr, jfloatArray points_arr, jint offset, jint count, jlong paint_ptr)
{
jfloat *points = (*env)->GetFloatArrayElements(env, points_arr, NULL);
for(int i = offset; i < count; i++)
Java_android_graphics_GskCanvas_native_1drawLine(env, this_class, snapshot_ptr, points[i + 0], points[i + 1], points[i + 2], points[i + 3], paint_ptr);
(*env)->ReleaseFloatArrayElements(env, points_arr, points, 0);
}
extern GtkWidget *window;
JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawText(JNIEnv *env, jclass this_class, jlong snapshot_ptr, jstring text, jfloat x, jfloat y, jlong paint_ptr)

View File

@@ -378,6 +378,15 @@ public class Canvas {
gsk_canvas.drawLine(startX, startY, stopX, stopY, paint);
}
public void drawLines(float[] points, Paint paint) {
drawLines(points, 0, points.length, paint);
}
public void drawLines(float[] points, int offset, int count, Paint paint) {
gsk_canvas.snapshot = bitmap.getSnapshot();
gsk_canvas.drawLines(points, offset, count, paint);
}
public void setBitmap(Bitmap bitmap) {
if (bitmap != null && !bitmap.isMutable()) {
throw new IllegalStateException("Bitmap must be mutable");

View File

@@ -78,6 +78,18 @@ public class GskCanvas extends Canvas {
native_drawLine(snapshot, startX, startY, stopX, stopY, paint != null ? paint.paint : default_paint.paint);
}
@Override
public void drawLines(float[] points, Paint paint) {
drawLines(points, 0, points.length, paint);
}
@Override
public void drawLines(float[] points, int offset, int count, Paint paint) {
if (offset + count < 0 /* overflow */ || offset + count > points.length)
throw new IndexOutOfBoundsException();
native_drawLines(snapshot, points, offset, count, paint != null ? paint.paint : default_paint.paint);
}
@Override
public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) {
Rect src = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
@@ -122,6 +134,7 @@ public class GskCanvas extends Canvas {
protected native void native_save(long snapshot);
protected native void native_restore(long snapshot);
protected native void native_drawLine(long snapshot, float startX, float startY, float stopX, float stopY, long paint);
protected native void native_drawLines(long snapshot, float[] points, int offset, int count, long paint);
protected native void native_drawText(long snapshot, String text, float x, float y, long paint);
protected native void native_drawRoundRect(long snapshot, float left, float top, float right, float bottom, float rx, float ry, long paint);
protected native void native_scale(long snapshot, float sx, float sy);