API stubs and fixes for composeUI

This commit is contained in:
Julian Winkler
2024-11-27 14:59:37 +01:00
committed by Mis012
parent 447784b6d6
commit e9cf5e7002
35 changed files with 559 additions and 24 deletions

View File

@@ -85,6 +85,9 @@ JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1restore(JNIEnv *e
JNIEXPORT void JNICALL Java_android_graphics_GskCanvas_native_1drawLine(JNIEnv *env, jclass this_class, jlong snapshot_ptr, jfloat x0, jfloat y0, jfloat x1, jfloat y1, jlong paint_ptr)
{
if (isnan(x0) || isnan(y0) || isnan(x1) || isnan(y1)) {
return;
}
GdkSnapshot *snapshot = GTK_SNAPSHOT(_PTR(snapshot_ptr));
sk_paint_t *paint = (sk_paint_t *)_PTR(paint_ptr);
GdkRGBA gdk_color;

View File

@@ -119,6 +119,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.dispatchDraw = _METHOD(handle_cache.view.class, "dispatchDraw", "(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");
@@ -133,6 +134,7 @@ void set_up_handle_cache(JNIEnv *env)
handle_cache.view.getScrollY = _METHOD(handle_cache.view.class, "getScrollY", "()I");
handle_cache.view.performClick = _METHOD(handle_cache.view.class, "performClick", "()Z");
handle_cache.view.onTouchEvent = _METHOD(handle_cache.view.class, "onTouchEvent", "(Landroid/view/MotionEvent;)Z");
handle_cache.view.dispatchTouchEvent = _METHOD(handle_cache.view.class, "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
handle_cache.view.onInterceptTouchEvent = _METHOD(handle_cache.view.class, "onInterceptTouchEvent", "(Landroid/view/MotionEvent;)Z");
handle_cache.view.layoutInternal = _METHOD(handle_cache.view.class, "layoutInternal", "(II)V");
handle_cache.view.measure = _METHOD(handle_cache.view.class, "measure", "(II)V");

View File

@@ -65,6 +65,7 @@ struct handle_cache {
jclass class;
jmethodID setLayoutParams;
jmethodID onDraw;
jmethodID dispatchDraw;
jmethodID draw;
jmethodID onMeasure;
jmethodID onLayout;
@@ -79,6 +80,7 @@ struct handle_cache {
jmethodID getScrollY;
jmethodID performClick;
jmethodID onTouchEvent;
jmethodID dispatchTouchEvent;
jmethodID onInterceptTouchEvent;
jmethodID layoutInternal;
jmethodID measure;

View File

@@ -279,8 +279,9 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job
wrapper->jvm = jvm;
wrapper->jobj = _WEAK_REF(jobj);
jmethodID on_draw_method = _METHOD(_CLASS(jobj), "onDraw", "(Landroid/graphics/Canvas;)V");
jmethodID dispatch_draw_method = _METHOD(_CLASS(jobj), "dispatchDraw", "(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) {
if (on_draw_method != handle_cache.view.onDraw || draw_method != handle_cache.view.draw || dispatch_draw_method != handle_cache.view.dispatchDraw) {
wrapper->draw_method = draw_method;
jclass canvas_class = (*env)->FindClass(env, "android/graphics/GskCanvas");
jmethodID canvas_constructor = _METHOD(canvas_class, "<init>", "(J)V");
@@ -289,7 +290,8 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job
}
jmethodID ontouchevent_method = _METHOD(_CLASS(jobj), "onTouchEvent", "(Landroid/view/MotionEvent;)Z");
if (ontouchevent_method != handle_cache.view.onTouchEvent) {
jmethodID dispatchtouchevent_method = _METHOD(_CLASS(jobj), "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
if (ontouchevent_method != handle_cache.view.onTouchEvent || dispatchtouchevent_method != handle_cache.view.dispatchTouchEvent) {
_setOnTouchListener(env, jobj, GTK_WIDGET(wrapper));
}