diff options
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformscreen.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp index b2fa2ed3e5..4d046685ff 100644 --- a/src/plugins/platforms/android/qandroidplatformscreen.cpp +++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp @@ -53,6 +53,7 @@ private: #endif Q_DECLARE_JNI_CLASS(Display, "android/view/Display") +Q_DECLARE_JNI_CLASS(DisplayMetrics, "android/util/DisplayMetrics") Q_DECLARE_JNI_TYPE(DisplayMode, "Landroid/view/Display$Mode;") @@ -79,12 +80,21 @@ QAndroidPlatformScreen::QAndroidPlatformScreen(const QJniObject &displayObject) if (!displayObject.isValid()) return; - m_size = QSize(displayObject.callMethod<jint>("getWidth"), displayObject.callMethod<jint>("getHeight")); m_name = displayObject.callObjectMethod<jstring>("getName").toString(); m_refreshRate = displayObject.callMethod<jfloat>("getRefreshRate"); m_displayId = displayObject.callMethod<jint>("getDisplayId"); + QJniObject displayMetricsObj(QtJniTypes::className<QtJniTypes::DisplayMetrics>()); + displayObject.callMethod<void>("getRealMetrics", displayMetricsObj.object<QtJniTypes::DisplayMetrics>()); + + const int widthPixels = displayMetricsObj.getField<int>("widthPixels"); + const int heightPixels = displayMetricsObj.getField<int>("heightPixels"); + m_size = QSize(widthPixels, heightPixels); + if (QNativeInterface::QAndroidApplication::sdkVersion() >= 23) { + const qreal xdpi = displayMetricsObj.getField<float>("xdpi"); + const qreal ydpi = displayMetricsObj.getField<float>("ydpi"); + const QJniObject currentMode = displayObject.callObjectMethod<QtJniTypes::DisplayMode>("getMode"); const jint currentModeId = currentMode.callMethod<jint>("getModeId"); @@ -96,8 +106,9 @@ QAndroidPlatformScreen::QAndroidPlatformScreen(const QJniObject &displayObject) const auto size = env->GetArrayLength(modeArray); for (jsize i = 0; i < size; ++i) { const auto mode = QJniObject::fromLocalRef(env->GetObjectArrayElement(modeArray, i)); - const int physicalWidth = mode.callMethod<jint>("getPhysicalWidth"); - const int physicalHeight = mode.callMethod<jint>("getPhysicalHeight"); + // Physical sizes in millimeters + const int physicalWidth = qRound(mode.callMethod<jint>("getPhysicalWidth") / xdpi * 25.4); + const int physicalHeight = qRound(mode.callMethod<jint>("getPhysicalHeight") / ydpi * 25.4); if (currentModeId == mode.callMethod<jint>("getModeId")) { m_currentMode = i; |