summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Mikolajczyk <[email protected]>2022-12-06 11:44:45 +0100
committerPiotr Mikolajczyk <[email protected]>2022-12-09 16:16:48 +0100
commit4f0272befb23a68ea5d9de371a1522b0df9df24f (patch)
treea933b359ed150601b9d92921c68a0865ea405c64
parentd4eb5d11104bb823e56cf173e29f9d205320581f (diff)
Add possibility to retrieve displayId for Android
When handling multiple screens in Android system it is needed to have the information about the display's Id. This patch provides this possibility. Task-number: QTBUG-105325 Change-Id: Id91aeaa59b17d5a098b672e220a5182b97320703 Reviewed-by: Tor Arne Vestbø <[email protected]>
-rw-r--r--src/gui/kernel/qplatformscreen_p.h8
-rw-r--r--src/gui/kernel/qscreen.cpp4
-rw-r--r--src/gui/platform/android/qandroidnativeinterface.cpp4
-rw-r--r--src/plugins/platforms/android/qandroidplatformscreen.cpp6
-rw-r--r--src/plugins/platforms/android/qandroidplatformscreen.h7
5 files changed, 28 insertions, 1 deletions
diff --git a/src/gui/kernel/qplatformscreen_p.h b/src/gui/kernel/qplatformscreen_p.h
index f7c9d94154e..e871fc16c85 100644
--- a/src/gui/kernel/qplatformscreen_p.h
+++ b/src/gui/kernel/qplatformscreen_p.h
@@ -92,6 +92,14 @@ struct Q_GUI_EXPORT QWaylandScreen
};
#endif
+#if defined(Q_OS_ANDROID) || defined(Q_QDOC)
+struct Q_GUI_EXPORT QAndroidScreen
+{
+ QT_DECLARE_NATIVE_INTERFACE(QAndroidScreen, 1, QScreen)
+ virtual int displayId() const = 0;
+};
+#endif
+
} // QNativeInterface::Private
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
index efaba3e426b..2cc38cb6383 100644
--- a/src/gui/kernel/qscreen.cpp
+++ b/src/gui/kernel/qscreen.cpp
@@ -759,6 +759,10 @@ void *QScreen::resolveInterface(const char *name, int revision) const
QT_NATIVE_INTERFACE_RETURN_IF(QWindowsScreen, platformScreen);
#endif
+#if defined(Q_OS_ANDROID)
+ QT_NATIVE_INTERFACE_RETURN_IF(QAndroidScreen, platformScreen);
+#endif
+
#if defined(Q_OS_UNIX)
QT_NATIVE_INTERFACE_RETURN_IF(QWaylandScreen, platformScreen);
#endif
diff --git a/src/gui/platform/android/qandroidnativeinterface.cpp b/src/gui/platform/android/qandroidnativeinterface.cpp
index 3062b5255e1..1bc718cbf18 100644
--- a/src/gui/platform/android/qandroidnativeinterface.cpp
+++ b/src/gui/platform/android/qandroidnativeinterface.cpp
@@ -7,6 +7,8 @@
#include <QtGui/qoffscreensurface_platform.h>
#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/qpa/qplatformscreen_p.h>
+
QT_BEGIN_NAMESPACE
using namespace QNativeInterface::Private;
@@ -33,4 +35,6 @@ QOffscreenSurface *QNativeInterface::QAndroidOffscreenSurface::fromNative(ANati
&QAndroidOffScreenIntegration::createOffscreenSurface>(nativeSurface);
}
+QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QAndroidScreen);
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp
index 1c867f435dd..451a8d84cbe 100644
--- a/src/plugins/platforms/android/qandroidplatformscreen.cpp
+++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp
@@ -82,6 +82,7 @@ QAndroidPlatformScreen::QAndroidPlatformScreen(const QJniObject &displayObject)
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");
if (QNativeInterface::QAndroidApplication::sdkVersion() >= 23) {
const QJniObject currentMode = displayObject.callObjectMethod<QtJniTypes::DisplayMode>("getMode");
@@ -271,6 +272,11 @@ void QAndroidPlatformScreen::setSizeParameters(const QSize &physicalSize, const
}
}
+int QAndroidPlatformScreen::displayId() const
+{
+ return m_displayId;
+}
+
void QAndroidPlatformScreen::setRefreshRate(qreal refreshRate)
{
if (refreshRate == m_refreshRate)
diff --git a/src/plugins/platforms/android/qandroidplatformscreen.h b/src/plugins/platforms/android/qandroidplatformscreen.h
index 390bda04168..076530613b5 100644
--- a/src/plugins/platforms/android/qandroidplatformscreen.h
+++ b/src/plugins/platforms/android/qandroidplatformscreen.h
@@ -13,6 +13,7 @@
#include <QWaitCondition>
#include <QtCore/QJniObject>
#include <qpa/qplatformscreen.h>
+#include <qpa/qplatformscreen_p.h>
#include <android/native_window.h>
@@ -20,7 +21,9 @@ QT_BEGIN_NAMESPACE
class QAndroidPlatformWindow;
-class QAndroidPlatformScreen: public QObject, public QPlatformScreen, public AndroidSurfaceClient
+class QAndroidPlatformScreen: public QObject,
+ public QPlatformScreen, public AndroidSurfaceClient,
+ public QNativeInterface::Private::QAndroidScreen
{
Q_OBJECT
public:
@@ -50,6 +53,7 @@ public:
void scheduleUpdate();
void topWindowChanged(QWindow *w);
int rasterSurfaces();
+ int displayId() const override;
public slots:
void setDirty(const QRect &rect);
@@ -77,6 +81,7 @@ protected:
QString m_name;
QList<Mode> m_modes;
int m_currentMode = 0;
+ int m_displayId = -1;
private:
QDpi logicalDpi() const override;