From c0804c33291ab8e8d6b2f6f4a4018168edd587d5 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Fri, 10 Nov 2023 23:36:57 +0100 Subject: [PATCH] WrapperWidget: overwrite measured size if layout size is fixed --- src/api-impl-jni/views/android_view_View.c | 2 ++ src/api-impl-jni/widgets/WrapperWidget.c | 11 +++++++++++ src/api-impl-jni/widgets/WrapperWidget.h | 3 +++ 3 files changed, 16 insertions(+) diff --git a/src/api-impl-jni/views/android_view_View.c b/src/api-impl-jni/views/android_view_View.c index faaaeaf1..e1fbd519 100644 --- a/src/api-impl-jni/views/android_view_View.c +++ b/src/api-impl-jni/views/android_view_View.c @@ -247,6 +247,8 @@ JNIEXPORT void JNICALL Java_android_view_View_native_1setLayoutParams(JNIEnv *en GtkLayoutManager *layout_manager = gtk_widget_get_layout_manager(WRAPPER_WIDGET(widget)->child); if (ATL_IS_ANDROID_LAYOUT(layout_manager)) android_layout_set_params(ATL_ANDROID_LAYOUT(layout_manager), width, height); + + wrapper_widget_set_layout_params(WRAPPER_WIDGET(widget), width, height); } JNIEXPORT void JNICALL Java_android_view_View_native_1setVisibility(JNIEnv *env, jobject this, jlong widget_ptr, jint visibility) { diff --git a/src/api-impl-jni/widgets/WrapperWidget.c b/src/api-impl-jni/widgets/WrapperWidget.c index 8154aeb7..c817cde1 100644 --- a/src/api-impl-jni/widgets/WrapperWidget.c +++ b/src/api-impl-jni/widgets/WrapperWidget.c @@ -58,6 +58,11 @@ void wrapper_widget_measure(GtkWidget *widget, GtkOrientation orientation, int f { WrapperWidget *wrapper = WRAPPER_WIDGET(widget); gtk_widget_measure(wrapper->child, orientation, for_size, minimum, natural, minimum_baseline, natural_baseline); + if (orientation == GTK_ORIENTATION_HORIZONTAL && (wrapper->layout_width > 0)) { + *minimum = *natural = wrapper->layout_width; + } else if (orientation == GTK_ORIENTATION_VERTICAL && (wrapper->layout_height > 0)) { + *minimum = *natural = wrapper->layout_height; + } } void wrapper_widget_allocate(GtkWidget *widget, int width, int height, int baseline) @@ -161,3 +166,9 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job wrapper->computeScroll_method = computeScroll_method; } } + +void wrapper_widget_set_layout_params(WrapperWidget *wrapper, int width, int height) +{ + wrapper->layout_width = width; + wrapper->layout_height = height; +} diff --git a/src/api-impl-jni/widgets/WrapperWidget.h b/src/api-impl-jni/widgets/WrapperWidget.h index d35c39f6..c73dcc17 100644 --- a/src/api-impl-jni/widgets/WrapperWidget.h +++ b/src/api-impl-jni/widgets/WrapperWidget.h @@ -17,6 +17,8 @@ struct _WrapperWidget jmethodID draw_method; jmethodID measure_method; jmethodID computeScroll_method; + int layout_width; + int layout_height; }; struct _WrapperWidgetClass @@ -28,6 +30,7 @@ GtkWidget * wrapper_widget_new(void); void wrapper_widget_set_child(WrapperWidget *parent, GtkWidget *child); void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject jobj); void wrapper_widget_queue_draw(WrapperWidget *wrapper); +void wrapper_widget_set_layout_params(WrapperWidget *wrapper, int width, int height); void _setOnTouchListener(JNIEnv *env, jobject this, GtkWidget *widget, jobject on_touch_listener);