summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Srebrny <[email protected]>2022-07-05 16:19:49 +0200
committerPiotr Srebrny <[email protected]>2022-07-06 12:20:39 +0200
commit1e02c4acbf9a8d70c62ce9fd384eba0f438a4a01 (patch)
treea1dcc00d718d646e558ea8e2b379edbd4ac8be44
parent3622fc81ea29e1b20c6cd71269d383a8ffe90d68 (diff)
Enable access to QWindowsScreen from QScreen
This patch adds access to the QWindowsScreen interface from QScreen with the aim to provide the native handle of QScreen. This handle will be used in QtMultmedia to find DXGI interfaces related to that screen. Change-Id: I93f066b3f0d4d70331aeedab36bb0db111a34556 Reviewed-by: Tor Arne Vestbø <[email protected]>
-rw-r--r--src/gui/kernel/qplatformscreen_p.h12
-rw-r--r--src/gui/kernel/qscreen.cpp4
-rw-r--r--src/gui/platform/windows/qwindowsnativeinterface.cpp10
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.h4
4 files changed, 29 insertions, 1 deletions
diff --git a/src/gui/kernel/qplatformscreen_p.h b/src/gui/kernel/qplatformscreen_p.h
index 2d3fb2d4182..6c79978f796 100644
--- a/src/gui/kernel/qplatformscreen_p.h
+++ b/src/gui/kernel/qplatformscreen_p.h
@@ -20,6 +20,10 @@
#include <QtCore/qpointer.h>
#include <QtCore/qnativeinterface.h>
+#if defined(Q_OS_WIN32)
+#include <qwindowdefs_win.h>
+#endif
+
QT_BEGIN_NAMESPACE
class QScreen;
@@ -68,6 +72,14 @@ struct Q_GUI_EXPORT QWebOSScreen
};
#endif
+#if defined(Q_OS_WIN32) || defined(Q_CLANG_QDOC)
+struct Q_GUI_EXPORT QWindowsScreen
+{
+ QT_DECLARE_NATIVE_INTERFACE(QWindowsScreen, 1, QScreen)
+ virtual HMONITOR handle() const = 0;
+};
+#endif
+
} // QNativeInterface::Private
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qscreen.cpp b/src/gui/kernel/qscreen.cpp
index ac33185900d..1bc6042a1aa 100644
--- a/src/gui/kernel/qscreen.cpp
+++ b/src/gui/kernel/qscreen.cpp
@@ -775,6 +775,10 @@ void *QScreen::resolveInterface(const char *name, int revision) const
QT_NATIVE_INTERFACE_RETURN_IF(QWebOSScreen, platformScreen);
#endif
+#if defined(Q_OS_WIN32)
+ QT_NATIVE_INTERFACE_RETURN_IF(QWindowsScreen, platformScreen);
+#endif
+
return nullptr;
}
diff --git a/src/gui/platform/windows/qwindowsnativeinterface.cpp b/src/gui/platform/windows/qwindowsnativeinterface.cpp
index e4339c9aa95..fe6f4e96dd3 100644
--- a/src/gui/platform/windows/qwindowsnativeinterface.cpp
+++ b/src/gui/platform/windows/qwindowsnativeinterface.cpp
@@ -8,6 +8,7 @@
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformwindow.h>
#include <qpa/qplatformwindow_p.h>
+#include <qpa/qplatformscreen_p.h>
QT_BEGIN_NAMESPACE
@@ -89,6 +90,15 @@ QOpenGLContext *QNativeInterface::QWGLContext::fromNative(HGLRC context, HWND wi
QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWindowsApplication);
/*!
+ \class QNativeInterface::Private::QWindowsScreen
+ \since 6.5
+ \internal
+ \brief Native interface to QScreen, to be retrieved from QPlatformIntegration.
+ \inmodule QtGui
+ \ingroup native-interfaces
+*/
+QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWindowsScreen);
+/*!
\enum QNativeInterface::Private::QWindowsApplication::TouchWindowTouchType
This enum represents the supported TouchWindow touch flags for registerTouchWindow().
diff --git a/src/plugins/platforms/windows/qwindowsscreen.h b/src/plugins/platforms/windows/qwindowsscreen.h
index 0635f172ad8..b1c94d2204c 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.h
+++ b/src/plugins/platforms/windows/qwindowsscreen.h
@@ -10,6 +10,7 @@
#include <QtCore/qpair.h>
#include <QtCore/qscopedpointer.h>
#include <qpa/qplatformscreen.h>
+#include <qpa/qplatformscreen_p.h>
QT_BEGIN_NAMESPACE
@@ -38,6 +39,7 @@ struct QWindowsScreenData
};
class QWindowsScreen : public QPlatformScreen
+ , public QNativeInterface::Private::QWindowsScreen
{
public:
#ifndef QT_NO_CURSOR
@@ -69,7 +71,7 @@ public:
inline void handleChanges(const QWindowsScreenData &newData);
- HMONITOR handle() const;
+ HMONITOR handle() const override;
#ifndef QT_NO_CURSOR
QPlatformCursor *cursor() const override { return m_cursor.data(); }