From dd3965df8a359ad046314f4ac268c90adabf56f2 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Sun, 19 May 2024 15:04:15 +0200 Subject: [PATCH] WrapperWidget: create SkArea also for Views with custom draw() method Previously we only handled custom onDraw() methods --- src/api-impl-jni/util.c | 1 + src/api-impl-jni/util.h | 1 + src/api-impl-jni/widgets/WrapperWidget.c | 5 +++-- src/api-impl/android/view/View.java | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/api-impl-jni/util.c b/src/api-impl-jni/util.c index f5b61f58..db95cf52 100644 --- a/src/api-impl-jni/util.c +++ b/src/api-impl-jni/util.c @@ -108,6 +108,7 @@ void set_up_handle_cache(JNIEnv *env) if((*env)->ExceptionCheck(env)) (*env)->ExceptionDescribe(env); handle_cache.view.onDraw = _METHOD(handle_cache.view.class, "onDraw", "(Landroid/graphics/Canvas;)V"); + handle_cache.view.draw = _METHOD(handle_cache.view.class, "draw", "(Landroid/graphics/Canvas;)V"); handle_cache.view.onMeasure = _METHOD(handle_cache.view.class, "onMeasure", "(II)V"); handle_cache.view.onLayout = _METHOD(handle_cache.view.class, "onLayout", "(ZIIII)V"); handle_cache.view.getMeasuredWidth = _METHOD(handle_cache.view.class, "getMeasuredWidth", "()I"); diff --git a/src/api-impl-jni/util.h b/src/api-impl-jni/util.h index 420414d5..5243d0f4 100644 --- a/src/api-impl-jni/util.h +++ b/src/api-impl-jni/util.h @@ -62,6 +62,7 @@ struct handle_cache { jclass class; jmethodID setLayoutParams; jmethodID onDraw; + jmethodID draw; jmethodID onMeasure; jmethodID onLayout; jmethodID getMeasuredWidth; diff --git a/src/api-impl-jni/widgets/WrapperWidget.c b/src/api-impl-jni/widgets/WrapperWidget.c index 0767e348..1f1e4eca 100644 --- a/src/api-impl-jni/widgets/WrapperWidget.c +++ b/src/api-impl-jni/widgets/WrapperWidget.c @@ -175,8 +175,9 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job (*env)->GetJavaVM(env, &jvm); wrapper->jvm = jvm; wrapper->jobj = _REF(jobj); - jmethodID draw_method = _METHOD(_CLASS(jobj), "onDraw", "(Landroid/graphics/Canvas;)V"); - if (draw_method != handle_cache.view.onDraw) { + jmethodID on_draw_method = _METHOD(_CLASS(jobj), "onDraw", "(Landroid/graphics/Canvas;)V"); + jmethodID draw_method = _METHOD(_CLASS(jobj), "draw", "(Landroid/graphics/Canvas;)V"); + if (on_draw_method != handle_cache.view.onDraw || draw_method != handle_cache.view.draw) { wrapper->draw_method = draw_method; GtkWidget *sk_area = sk_area_new(); diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index 059a9576..9c0e47cc 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -900,6 +900,9 @@ public class View implements Drawable.Callback { } public void onDraw(Canvas canvas) {} + public void draw(Canvas canvas) { + onDraw(canvas); + } public View(Context context) { this(context, null);