From f852c2bbc92048272fe529fd7b166694ae4071d0 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Tue, 12 Mar 2024 18:19:43 +0100 Subject: [PATCH] remove View.haveComplexMeasure as it is redundant with haveCustomMeasure Makes haveCustomMeasure true by default. And disable it for widgets which previously set haveComplexMeasure --- src/api-impl-jni/generated_headers/android_view_View.h | 4 ++-- src/api-impl-jni/views/android_view_View.c | 7 +++---- src/api-impl-jni/widgets/android_widget_ScrollView.c | 1 - src/api-impl/android/view/View.java | 7 +++---- src/api-impl/android/view/ViewGroup.java | 1 - src/api-impl/android/widget/ImageView.java | 2 +- src/api-impl/android/widget/ProgressBar.java | 2 +- src/api-impl/android/widget/Space.java | 4 ++-- src/api-impl/android/widget/TextView.java | 2 +- 9 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/api-impl-jni/generated_headers/android_view_View.h b/src/api-impl-jni/generated_headers/android_view_View.h index 423d9db9..335f891a 100644 --- a/src/api-impl-jni/generated_headers/android_view_View.h +++ b/src/api-impl-jni/generated_headers/android_view_View.h @@ -258,10 +258,10 @@ JNIEXPORT void JNICALL Java_android_view_View_native_1destructor /* * Class: android_view_View * Method: native_measure - * Signature: (JIIZ)V + * Signature: (JII)V */ JNIEXPORT void JNICALL Java_android_view_View_native_1measure - (JNIEnv *, jobject, jlong, jint, jint, jboolean); + (JNIEnv *, jobject, jlong, jint, jint); /* * Class: android_view_View diff --git a/src/api-impl-jni/views/android_view_View.c b/src/api-impl-jni/views/android_view_View.c index 50af75a7..6ca78d62 100644 --- a/src/api-impl-jni/views/android_view_View.c +++ b/src/api-impl-jni/views/android_view_View.c @@ -347,7 +347,6 @@ JNIEXPORT jlong JNICALL Java_android_view_View_native_1constructor(JNIEnv *env, jmethodID layout_method = _METHOD(class, "onLayout", "(ZIIII)V"); if (measure_method != handle_cache.view.onMeasure || layout_method != handle_cache.view.onLayout) { gtk_widget_set_layout_manager(widget, android_layout_new(_REF(this))); - (*env)->SetBooleanField(env, this, _FIELD_ID(class, "haveCustomMeasure", "Z"), true); } if (_METHOD(_CLASS(this), "onGenericMotionEvent", "(Landroid/view/MotionEvent;)Z") != handle_cache.view.onGenericMotionEvent) { @@ -376,7 +375,7 @@ JNIEXPORT void JNICALL Java_android_view_View_native_1destructor(JNIEnv *env, jo #define MEASURE_SPEC_AT_MOST (2 << 30) #define MEASURE_SPEC_MASK (0x3 << 30) -JNIEXPORT void JNICALL Java_android_view_View_native_1measure(JNIEnv *env, jobject this, jlong widget_ptr, jint width_spec, jint height_spec, jboolean is_complex) { +JNIEXPORT void JNICALL Java_android_view_View_native_1measure(JNIEnv *env, jobject this, jlong widget_ptr, jint width_spec, jint height_spec) { int width = -1; int height = -1; GtkWidget *widget = gtk_widget_get_parent(GTK_WIDGET(_PTR(widget_ptr))); @@ -386,11 +385,11 @@ JNIEXPORT void JNICALL Java_android_view_View_native_1measure(JNIEnv *env, jobje int height_spec_mode = height_spec & MEASURE_SPEC_MASK; GtkSizeRequestMode request_mode; - if (width_spec_mode == MEASURE_SPEC_EXACTLY || (!is_complex && width_spec_mode == MEASURE_SPEC_AT_MOST)) { + if (width_spec_mode == MEASURE_SPEC_EXACTLY) { width = width_spec_size; request_mode = GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH; } - if (height_spec_mode == MEASURE_SPEC_EXACTLY || (!is_complex && height_spec_mode == MEASURE_SPEC_AT_MOST)) { + if (height_spec_mode == MEASURE_SPEC_EXACTLY) { height = height_spec_size; request_mode = GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT; } diff --git a/src/api-impl-jni/widgets/android_widget_ScrollView.c b/src/api-impl-jni/widgets/android_widget_ScrollView.c index 6af15e9b..19dff634 100644 --- a/src/api-impl-jni/widgets/android_widget_ScrollView.c +++ b/src/api-impl-jni/widgets/android_widget_ScrollView.c @@ -13,7 +13,6 @@ JNIEXPORT jlong JNICALL Java_android_widget_ScrollView_native_1constructor(JNIEn GtkWidget *scrolled_window = gtk_scrolled_window_new(); wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), scrolled_window); gtk_widget_set_name(scrolled_window, "ScrollView"); - (*env)->SetBooleanField(env, this, _FIELD_ID(_CLASS(this), "haveCustomMeasure", "Z"), true); return _INTPTR(scrolled_window); } diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index d348bcfc..d74e49ce 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -813,8 +813,7 @@ public class View extends Object { private boolean layoutRequested = true; private int oldWidth; private int oldHeight; - private boolean haveCustomMeasure; - protected boolean haveComplexMeasure = false; + protected boolean haveCustomMeasure = true; private int visibility = View.VISIBLE; private float alpha = 1.0f; @@ -936,7 +935,7 @@ public class View extends Object { * We decide between simple widgets which handles MEASURE_SPEC_AT_MOST the same way as * MEASURE_SPEC_EXACTLY, and complex widgets which handles MEASURE_SPEC_AT_MOST by measuring the content */ - protected native void native_measure(long widget, int widthMeasureSpec, int heightMeasureSpec, boolean isComplex); + protected native void native_measure(long widget, int widthMeasureSpec, int heightMeasureSpec); protected native void native_layout(long widget, int l, int t, int r, int b); protected native void native_requestLayout(long widget); protected native void native_setBackgroundDrawable(long widget, long paintable); @@ -976,7 +975,7 @@ public class View extends Object { if (haveCustomMeasure) // calling native_measure here would create infinite loop setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); else - native_measure(widget, widthMeasureSpec, heightMeasureSpec, haveComplexMeasure); + native_measure(widget, widthMeasureSpec, heightMeasureSpec); } public void setPressed(boolean pressed) { diff --git a/src/api-impl/android/view/ViewGroup.java b/src/api-impl/android/view/ViewGroup.java index 1259377c..e355cf5c 100644 --- a/src/api-impl/android/view/ViewGroup.java +++ b/src/api-impl/android/view/ViewGroup.java @@ -27,7 +27,6 @@ public class ViewGroup extends View implements ViewParent, ViewManager { super(context, attrs, defStyleAttr); children = new ArrayList(); - haveComplexMeasure = true; } public void addView(View child) { diff --git a/src/api-impl/android/widget/ImageView.java b/src/api-impl/android/widget/ImageView.java index 1eefd9b9..9ba05d17 100644 --- a/src/api-impl/android/widget/ImageView.java +++ b/src/api-impl/android/widget/ImageView.java @@ -27,7 +27,7 @@ public class ImageView extends View { public ImageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); - haveComplexMeasure = true; + haveCustomMeasure = false; if (attrs != null) { int resid = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/android", "src", 0); if (resid != 0 && !getResources().getString(resid).endsWith(".xml")) { diff --git a/src/api-impl/android/widget/ProgressBar.java b/src/api-impl/android/widget/ProgressBar.java index 0586a23d..eccc4e2c 100644 --- a/src/api-impl/android/widget/ProgressBar.java +++ b/src/api-impl/android/widget/ProgressBar.java @@ -14,7 +14,7 @@ public class ProgressBar extends View { public ProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - haveComplexMeasure = true; + haveCustomMeasure = false; TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.ProgressBar, defStyle, 0); setIndeterminate(a.getBoolean(com.android.internal.R.styleable.ProgressBar_indeterminate, false)); a.recycle(); diff --git a/src/api-impl/android/widget/Space.java b/src/api-impl/android/widget/Space.java index 5f13050b..5c76becb 100644 --- a/src/api-impl/android/widget/Space.java +++ b/src/api-impl/android/widget/Space.java @@ -8,12 +8,12 @@ public class Space extends View { public Space(Context context) { super(context); - haveComplexMeasure = true; + haveCustomMeasure = false; } public Space(Context context, AttributeSet attributeSet) { super(context, attributeSet); - haveComplexMeasure = true; + haveCustomMeasure = false; } } \ No newline at end of file diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java index 1bb4128c..f35bcd97 100644 --- a/src/api-impl/android/widget/TextView.java +++ b/src/api-impl/android/widget/TextView.java @@ -60,7 +60,7 @@ public class TextView extends View { } } catch(java.lang.Exception e) { System.out.println("exception while inflating TextView:"); e.printStackTrace(); } a.recycle(); - haveComplexMeasure = true; + haveCustomMeasure = false; } @Override