View.onMeasure: handle MEASURE_SPEC_AT_MOST properly

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
This commit is contained in:
Julian Winkler
2023-10-14 11:06:27 +02:00
committed by Mis012
parent e735757a2e
commit 37d9b13470
6 changed files with 41 additions and 11 deletions

View File

@@ -876,7 +876,11 @@ public class View extends Object {
protected native long native_constructor(Context context, AttributeSet attrs); // will create a custom GtkWidget with a custom drawing function
public native void native_setLayoutParams(long widget, int width, int height, int gravity, float weight);
protected native void native_destructor(long widget);
protected native void native_measure(long widget, int widthMeasureSpec, int heightMeasureSpec);
/**
* 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_layout(long widget, int l, int t, int r, int b);
protected native void native_requestLayout(long widget);
@@ -913,7 +917,7 @@ public class View extends Object {
};
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
native_measure(widget, widthMeasureSpec, heightMeasureSpec);
native_measure(widget, widthMeasureSpec, heightMeasureSpec, false);
}
public void setPressed(boolean pressed) {

View File

@@ -119,6 +119,11 @@ public class ViewGroup extends View implements ViewParent, ViewManager {
removeView(child);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
native_measure(widget, widthMeasureSpec, heightMeasureSpec, true);
}
@Override
protected native long native_constructor(Context context, AttributeSet attrs);
protected native void native_addView(long widget, long child, int index, LayoutParams params);

View File

@@ -33,6 +33,11 @@ public class ImageView extends View {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
native_measure(widget, widthMeasureSpec, heightMeasureSpec, true);
}
@Override
protected native long native_constructor(Context context, AttributeSet attrs);
protected native void native_setPixbuf(long pixbuf);

View File

@@ -66,6 +66,11 @@ public class TextView extends View {
setText(getContext().getResources().getText(resId));
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
native_measure(widget, widthMeasureSpec, heightMeasureSpec, true);
}
private native final void native_set_markup(int bool);
public native final void native_setText(String text);