Expose the native interfaces of QScreen/QWindow

Add the macros.

Task-number: QTBUG-84220
Change-Id: Ica23b9e4d5c1ca072acb5356e6f2be28d5199fa6
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Friedemann Kleint 2021-06-01 15:22:04 +02:00
parent 19a154f57b
commit cafdb8d3ee
6 changed files with 63 additions and 6 deletions

View File

@ -73,7 +73,7 @@ namespace QNativeInterface::Private {
#if QT_CONFIG(xcb) || defined(Q_CLANG_QDOC) #if QT_CONFIG(xcb) || defined(Q_CLANG_QDOC)
struct Q_GUI_EXPORT QXcbScreen struct Q_GUI_EXPORT QXcbScreen
{ {
QT_DECLARE_NATIVE_INTERFACE(QXcbScreen) QT_DECLARE_NATIVE_INTERFACE(QXcbScreen, 1, QScreen)
virtual int virtualDesktopNumber() const = 0; virtual int virtualDesktopNumber() const = 0;
}; };
#endif #endif
@ -81,7 +81,7 @@ struct Q_GUI_EXPORT QXcbScreen
#if QT_CONFIG(vsp2) || defined(Q_CLANG_QDOC) #if QT_CONFIG(vsp2) || defined(Q_CLANG_QDOC)
struct Q_GUI_EXPORT QVsp2Screen struct Q_GUI_EXPORT QVsp2Screen
{ {
QT_DECLARE_NATIVE_INTERFACE(QVsp2Screen) QT_DECLARE_NATIVE_INTERFACE(QVsp2Screen, 1, QScreen)
virtual int addLayer(int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine) = 0; virtual int addLayer(int dmabufFd, const QSize &size, const QPoint &position, uint drmPixelFormat, uint bytesPerLine) = 0;
virtual void setLayerBuffer(int id, int dmabufFd) = 0; virtual void setLayerBuffer(int id, int dmabufFd) = 0;
virtual void setLayerPosition(int id, const QPoint &position) = 0; virtual void setLayerPosition(int id, const QPoint &position) = 0;
@ -94,7 +94,7 @@ struct Q_GUI_EXPORT QVsp2Screen
#if defined(Q_OS_WEBOS) || defined(Q_CLANG_QDOC) #if defined(Q_OS_WEBOS) || defined(Q_CLANG_QDOC)
struct Q_GUI_EXPORT QWebOSScreen struct Q_GUI_EXPORT QWebOSScreen
{ {
QT_DECLARE_NATIVE_INTERFACE(QWebOSScreen) QT_DECLARE_NATIVE_INTERFACE(QWebOSScreen, 1, QScreen)
virtual int addLayer(void *gbm_bo, const QRectF &geometry) = 0; virtual int addLayer(void *gbm_bo, const QRectF &geometry) = 0;
virtual void setLayerBuffer(int id, void *gbm_bo) = 0; virtual void setLayerBuffer(int id, void *gbm_bo) = 0;
virtual void setLayerGeometry(int id, const QRectF &geometry) = 0; virtual void setLayerGeometry(int id, const QRectF &geometry) = 0;

View File

@ -74,7 +74,7 @@ namespace QNativeInterface::Private {
#if defined(Q_OS_MACOS) || defined(Q_CLANG_QDOC) #if defined(Q_OS_MACOS) || defined(Q_CLANG_QDOC)
struct Q_GUI_EXPORT QCocoaWindow struct Q_GUI_EXPORT QCocoaWindow
{ {
QT_DECLARE_NATIVE_INTERFACE(QCocoaWindow) QT_DECLARE_NATIVE_INTERFACE(QCocoaWindow, 1, QWindow)
virtual void setContentBorderEnabled(bool enable) = 0; virtual void setContentBorderEnabled(bool enable) = 0;
virtual QPoint bottomLeftClippedByNSWindowOffset() const = 0; virtual QPoint bottomLeftClippedByNSWindowOffset() const = 0;
}; };
@ -83,7 +83,7 @@ struct Q_GUI_EXPORT QCocoaWindow
#if QT_CONFIG(xcb) || defined(Q_CLANG_QDOC) #if QT_CONFIG(xcb) || defined(Q_CLANG_QDOC)
struct Q_GUI_EXPORT QXcbWindow struct Q_GUI_EXPORT QXcbWindow
{ {
QT_DECLARE_NATIVE_INTERFACE(QXcbWindow) QT_DECLARE_NATIVE_INTERFACE(QXcbWindow, 1, QWindow)
enum WindowType { enum WindowType {
None = 0x000000, None = 0x000000,
@ -115,7 +115,7 @@ struct Q_GUI_EXPORT QXcbWindow
#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC) #if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
struct Q_GUI_EXPORT QWindowsWindow struct Q_GUI_EXPORT QWindowsWindow
{ {
QT_DECLARE_NATIVE_INTERFACE(QWindowsWindow) QT_DECLARE_NATIVE_INTERFACE(QWindowsWindow, 1, QWindow)
virtual void setHasBorderInFullScreen(bool border) = 0; virtual void setHasBorderInFullScreen(bool border) = 0;
virtual bool hasBorderInFullScreen() const = 0; virtual bool hasBorderInFullScreen() const = 0;

View File

@ -786,6 +786,31 @@ QPixmap QScreen::grabWindow(WId window, int x, int y, int width, int height)
return result; return result;
} }
template <>
Q_NATIVE_INTERFACE_EXPORT void *QNativeInterface::Private::resolveInterface(const QScreen *that, const char *name, int revision)
{
using namespace QNativeInterface::Private;
auto *platformScreen = that->handle();
Q_UNUSED(platformScreen);
Q_UNUSED(name);
Q_UNUSED(revision);
#if QT_CONFIG(xcb)
QT_NATIVE_INTERFACE_RETURN_IF(QXcbScreen, platformScreen);
#endif
#if QT_CONFIG(vsp2)
QT_NATIVE_INTERFACE_RETURN_IF(QVsp2Screen, platformScreen);
#endif
#if defined(Q_OS_WEBOS)
QT_NATIVE_INTERFACE_RETURN_IF(QWebOSScreen, platformScreen);
#endif
return nullptr;
}
#ifndef QT_NO_DEBUG_STREAM #ifndef QT_NO_DEBUG_STREAM
static inline void formatRect(QDebug &debug, const QRect r) static inline void formatRect(QDebug &debug, const QRect r)

View File

@ -50,6 +50,7 @@
#include <QtGui/QTransform> #include <QtGui/QTransform>
#include <QtCore/qnamespace.h> #include <QtCore/qnamespace.h>
#include <QtCore/qnativeinterface.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@ -148,6 +149,8 @@ public:
qreal refreshRate() const; qreal refreshRate() const;
QT_DECLARE_NATIVE_INTERFACE_ACCESSOR
Q_SIGNALS: Q_SIGNALS:
void geometryChanged(const QRect &geometry); void geometryChanged(const QRect &geometry);
void availableGeometryChanged(const QRect &geometry); void availableGeometryChanged(const QRect &geometry);

View File

@ -69,6 +69,7 @@
#include <QStyleHints> #include <QStyleHints>
#include <qpa/qplatformcursor.h> #include <qpa/qplatformcursor.h>
#include <qpa/qplatformwindow_p.h>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@ -3003,6 +3004,31 @@ bool QWindowPrivate::applyCursor()
} }
#endif // QT_NO_CURSOR #endif // QT_NO_CURSOR
template <>
Q_NATIVE_INTERFACE_EXPORT void *QNativeInterface::Private::resolveInterface(const QWindow *that, const char *name, int revision)
{
using namespace QNativeInterface::Private;
auto *platformWindow = that->handle();
Q_UNUSED(platformWindow);
Q_UNUSED(name);
Q_UNUSED(revision);
#if defined(Q_OS_WIN)
QT_NATIVE_INTERFACE_RETURN_IF(QWindowsWindow, platformWindow);
#endif
#if QT_CONFIG(xcb)
QT_NATIVE_INTERFACE_RETURN_IF(QXcbWindow, platformWindow);
#endif
#if defined(Q_OS_MACOS)
QT_NATIVE_INTERFACE_RETURN_IF(QCocoaWindow, platformWindow);
#endif
return nullptr;
}
#ifndef QT_NO_DEBUG_STREAM #ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug debug, const QWindow *window) QDebug operator<<(QDebug debug, const QWindow *window)
{ {

View File

@ -47,6 +47,7 @@
#include <QtCore/QRect> #include <QtCore/QRect>
#include <QtCore/qnamespace.h> #include <QtCore/qnamespace.h>
#include <QtCore/qnativeinterface.h>
#include <QtGui/qsurface.h> #include <QtGui/qsurface.h>
#include <QtGui/qsurfaceformat.h> #include <QtGui/qsurfaceformat.h>
@ -283,6 +284,8 @@ public:
QVulkanInstance *vulkanInstance() const; QVulkanInstance *vulkanInstance() const;
#endif #endif
QT_DECLARE_NATIVE_INTERFACE_ACCESSOR
public Q_SLOTS: public Q_SLOTS:
Q_REVISION(2, 1) void requestActivate(); Q_REVISION(2, 1) void requestActivate();