5package org.qtproject.qt.android;
7import android.app.Activity;
8import android.content.Context;
9import android.graphics.Rect;
10import android.os.Build;
11import android.util.Log;
12import android.util.AttributeSet;
13import android.util.DisplayMetrics;
14import android.view.Display;
15import android.view.View;
16import android.view.ViewGroup;
17import android.view.WindowInsets;
18import android.view.WindowManager;
19import android.graphics.Insets;
20import android.view.WindowMetrics;
21import android.content.res.Configuration;
22import android.content.res.Resources;
26 private Runnable m_startApplicationRunnable;
28 private int m_activityDisplayRotation = -1;
29 private int m_ownDisplayRotation = -1;
30 private int m_nativeOrientation = -1;
34 m_activityDisplayRotation = rotation;
39 m_nativeOrientation = orientation;
44 return m_ownDisplayRotation;
50 m_startApplicationRunnable = startRunnable;
66 Activity activity = (Activity)getContext();
70 final WindowManager windowManager = activity.getWindowManager();
73 final WindowInsets rootInsets = getRootWindowInsets();
81 if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
82 display = windowManager.getDefaultDisplay();
84 final DisplayMetrics maxMetrics =
new DisplayMetrics();
85 display.getRealMetrics(maxMetrics);
86 maxWidth = maxMetrics.widthPixels;
87 maxHeight = maxMetrics.heightPixels;
89 insetLeft = rootInsets.getStableInsetLeft();
90 insetTop = rootInsets.getStableInsetTop();
92 display = activity.getDisplay();
94 final WindowMetrics maxMetrics = windowManager.getMaximumWindowMetrics();
95 maxWidth = maxMetrics.getBounds().width();
96 maxHeight = maxMetrics.getBounds().height();
98 insetLeft = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).left;
99 insetTop = rootInsets.getInsetsIgnoringVisibility(WindowInsets.Type.systemBars()).top;
102 final DisplayMetrics displayMetrics = activity.getResources().getDisplayMetrics();
103 double xdpi = displayMetrics.xdpi;
104 double ydpi = displayMetrics.ydpi;
105 double density = displayMetrics.density;
106 double scaledDensity = displayMetrics.scaledDensity;
107 float refreshRate =
display.getRefreshRate();
111 xdpi,ydpi,scaledDensity, density,
114 int newRotation =
display.getRotation();
115 if (m_ownDisplayRotation != m_activityDisplayRotation
116 && newRotation == m_activityDisplayRotation) {
123 m_ownDisplayRotation = newRotation;
125 if (m_startApplicationRunnable !=
null) {
126 m_startApplicationRunnable.run();
127 m_startApplicationRunnable =
null;
132 protected void onMeasure(
int widthMeasureSpec,
int heightMeasureSpec)
134 int count = getChildCount();
140 measureChildren(widthMeasureSpec, heightMeasureSpec);
144 View
child = getChildAt(
i);
145 if (
child.getVisibility() != GONE) {
149 QtLayout.LayoutParams lp
152 childRight = lp.x +
child.getMeasuredWidth();
153 childBottom = lp.y +
child.getMeasuredHeight();
155 maxWidth = Math.max(maxWidth, childRight);
156 maxHeight = Math.max(maxHeight, childBottom);
161 maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight());
162 maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth());
164 setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec),
165 resolveSize(maxHeight, heightMeasureSpec));
177 return new LayoutParams(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
178 android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
184 protected void onLayout(
boolean changed,
int l,
int t,
int r,
int b)
186 int count = getChildCount();
189 View
child = getChildAt(
i);
190 if (
child.getVisibility() != GONE) {
191 QtLayout.LayoutParams lp =
194 int childLeft = lp.x;
197 childLeft +
child.getMeasuredWidth(),
198 childTop +
child.getMeasuredHeight());
266 if (indexOfChild(
view) == -1)
269 detachViewFromParent(
view);
282 final ViewGroup.LayoutParams
params,
283 final boolean forceRedraw)
286 if (childView ==
null)
294 final boolean canUpdate = (
this == childView.getParent());
297 childView.setLayoutParams(
params);
301 addView(childView,
params);
virtual QLayout * layout()
If this item is a QLayout, it is returned as a QLayout; otherwise \nullptr is returned.
LayoutParams(int width, int height, int x, int y)
LayoutParams(ViewGroup.LayoutParams source)
void setActivityDisplayRotation(int rotation)
QtLayout(Context context, AttributeSet attrs)
ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p)
QtLayout(Context context, Runnable startRunnable)
QtLayout(Context context, AttributeSet attrs, int defStyle)
void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
void setLayoutParams(final View childView, final ViewGroup.LayoutParams params, final boolean forceRedraw)
void onLayout(boolean changed, int l, int t, int r, int b)
void moveChild(View view, int index)
boolean checkLayoutParams(ViewGroup.LayoutParams p)
void onSizeChanged(int w, int h, int oldw, int oldh)
ViewGroup.LayoutParams generateDefaultLayoutParams()
void setNativeOrientation(int orientation)
static native void handleOrientationChanged(int newRotation, int nativeOrientation)
static void setApplicationDisplayMetrics(int screenWidthPixels, int screenHeightPixels, int availableLeftPixels, int availableTopPixels, int availableWidthPixels, int availableHeightPixels, double XDpi, double YDpi, double scaledDensity, double density, float refreshRate)
struct wl_display * display
static struct AttrInfo attrs[]
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLint GLsizei GLsizei height
GLenum GLenum GLsizei count
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLsizei GLchar * source