diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-10-14 12:20:38 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-10-18 13:31:09 +0200 |
commit | 40e6fe780150161bb608f5df356bfe4f00861be5 (patch) | |
tree | 97749eb338e4365656d65da8bc1168570e9ca96d /src/gui | |
parent | 1f66d914e435e733a7741e6b98abf92594122c01 (diff) |
doc: Update and flesh out native interface docs
The namespace and overviews are in the qtdoc repository.
Docs for individual interfaces should live with their platform.
Change-Id: Iba5fd7e9ebc4f1f634ec9dc3ec125ce88a1312ba
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/doc/src/nativeinterfaces.qdoc | 422 | ||||
-rw-r--r-- | src/gui/doc/src/qtgui.qdoc | 4 | ||||
-rw-r--r-- | src/gui/kernel/qoffscreensurface.cpp | 25 | ||||
-rw-r--r-- | src/gui/kernel/qopenglcontext.cpp | 8 | ||||
-rw-r--r-- | src/gui/kernel/qopenglcontext_platform.h | 2 | ||||
-rw-r--r-- | src/gui/platform/android/qandroidnativeinterface.cpp | 15 | ||||
-rw-r--r-- | src/gui/platform/macos/qcocoanativeinterface.mm | 54 | ||||
-rw-r--r-- | src/gui/platform/unix/qunixnativeinterface.cpp | 108 | ||||
-rw-r--r-- | src/gui/platform/windows/qwindowsnativeinterface.cpp | 247 |
9 files changed, 437 insertions, 448 deletions
diff --git a/src/gui/doc/src/nativeinterfaces.qdoc b/src/gui/doc/src/nativeinterfaces.qdoc deleted file mode 100644 index f7137a76a9..0000000000 --- a/src/gui/doc/src/nativeinterfaces.qdoc +++ /dev/null @@ -1,422 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -/*! - \group native_interfaces - \title Native Interfaces - - Native interfaces provide access to native APIs of the classes they extend. -*/ - -/*! - \namespace QNativeInterface::Private - \inmodule QtGui - \since 6.0 - \brief Contains the classes providing native interfaces. - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::QCocoaGLContext - \since 6.0 - \brief Native interface to QPlatformOpenGLContext. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::Private::QCocoaMenu - \since 6.0 - \brief Native interface to QPlatformMenu. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::Private::QCocoaWindow - \since 6.0 - \brief Native interface to QPlatformWindow. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::QEGLContext - \since 6.0 - \brief Native interface to QPlatformOpenGLContext. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::Private::QEvdevKeyMapper - \since 6.0 - \brief Native interface to QKeyMapper. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::QGLXContext - \since 6.0 - \brief Native interface to QPlatformOpenGLContext. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::QWGLContext - \since 6.0 - \brief Native interface to QPlatformOpenGLContext. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::Private::QWindowsApplication - \since 6.0 - \brief Native interface to QGuiApplication, to be retrieved from QPlatformIntegration. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \enum QNativeInterface::Private::QWindowsApplication::TouchWindowTouchType - - This enum represents the supported TouchWindow touch flags for registerTouchWindow(). - - \value NormalTouch - \value FineTouch - \value WantPalmTouch -*/ - -/*! - \fn void QNativeInterface::Private::QWindowsApplication::setTouchWindowTouchType(QNativeInterface::Private::QWindowsApplication::TouchWindowTouchTypes type) - - Sets the touch window type for all windows to \a type. -*/ - -/*! - \fn QNativeInterface::Private::QWindowsApplication::TouchWindowTouchTypes QNativeInterface::Private::QWindowsApplication::touchWindowTouchType() const - - Returns the currently set the touch window type. -*/ - -/*! - \enum QNativeInterface::Private::QWindowsApplication::WindowActivationBehavior - - This enum specifies the behavior of QWidget::activateWindow() and - QWindow::requestActivate(). - - \value DefaultActivateWindow The window is activated according to the default - behavior of the Windows operating system. This means the window will not - be activated in some circumstances (most notably when the calling process - is not the active process); only the taskbar entry will be flashed. - \value AlwaysActivateWindow The window is always activated, even when the - calling process is not the active process. - - \sa QWidget::activateWindow(), QWindow::requestActivate() -*/ - -/*! - \fn void QNativeInterface::Private::QWindowsApplication::setWindowActivationBehavior(QNativeInterface::Private::QWindowsApplication::WindowActivationBehavior behavior) - - Sets the window activation behavior to \a behavior. - - \sa QWidget::activateWindow(), QWindow::requestActivate() -*/ - -/*! - \fn QNativeInterface::Private::QWindowsApplication::WindowActivationBehavior QNativeInterface::Private::QWindowsApplication::windowActivationBehavior() const - - Returns the currently set the window activation behavior. -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsApplication::isTabletMode() const - - Returns \c true if Windows 10 operates in \e{Tablet Mode}. - In this mode, Windows forces all application main windows to open in maximized - state. Applications should then avoid resizing windows or restoring geometries - to non-maximized states. - - \sa QWidget::showMaximized(), QWidget::saveGeometry(), QWidget::restoreGeometry() -*/ - -/*! - \enum QNativeInterface::Private::QWindowsApplication::DarkModeHandlingFlag - - This enum specifies the behavior of the application when Windows - is configured to use dark mode for applications. - - \value DarkModeWindowFrames The window frames will be switched to dark. - \value DarkModeStyle The Windows Vista style will be turned off and - a simple dark style will be used. - - \sa isDarkMode(), setDarkModeHandling() -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsApplication::isDarkMode() const - - Returns \c true if Windows 10 is configured to use dark mode for - applications. -*/ - -/*! - \fn void QNativeInterface::Private::QWindowsApplication::setDarkModeHandling(DarkModeHandling handling) - - Sets the dark mode handling to \a handling. -*/ - -/*! - \fn QNativeInterface::Private::QWindowsApplication::DarkModeHandling QNativeInterface::Private::QWindowsApplication::darkModeHandling() const - - Returns the currently set dark mode handling. -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsApplication::isWinTabEnabled() const - - Returns whether the \e{Tablet WinTab Driver} (\c Wintab32.dll) is used. -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsApplication::setWinTabEnabled(bool enabled) - - Sets whether the \e{Tablet WinTab Driver} (\c Wintab32.dll) should be used to \a enabled. - - Returns \c true on success, \c false otherwise. -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsApplication::registerMime(QWindowsMime *mime) - - Registers the converter \a mime to the system. - - \sa QNativeInterface::Private::QWindowsMime, unregisterMime() -*/ - -/*! - \fn void QNativeInterface::Private::QWindowsApplication::unregisterMime(QWindowsMime *mime) - - Unregisters the converter \a mime from the system. - - \sa QNativeInterface::Private::QWindowsMime, registerMime() -*/ - -/*! - \fn int QNativeInterface::Private::QWindowsApplication::registerMimeType(const QString &mime) - - Registers the MIME type \a mime, and returns an ID number - identifying the format on Windows. -*/ - -/*! - \fn HWND QNativeInterface::Private::QWindowsApplication::createMessageWindow(const QString &, const QString &, QFunctionPointer) const - \internal -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsApplication::asyncExpose() const - \internal -*/ - -/*! - \fn void QNativeInterface::Private::QWindowsApplication::setAsyncExpose(bool) - \internal -*/ - -/*! - \fn QVariant QNativeInterface::Private::QWindowsApplication::gpu() - \internal -*/ - -/*! - \fn QVariant QNativeInterface::Private::QWindowsApplication::gpuList() - \internal -*/ - -/*! - \class QNativeInterface::Private::QWindowsMime - \since 6.0 - \brief The QWindowsMime class maps open-standard MIME to Window Clipboard formats. - \inmodule QtGui - \ingroup native_interfaces - - Qt's drag-and-drop and clipboard facilities use the MIME standard. - On X11, this maps trivially to the Xdnd protocol, but on Windows - although some applications use MIME types to describe clipboard - formats, others use arbitrary non-standardized naming conventions, - or unnamed built-in formats of Windows. - - By instantiating subclasses of QWinMime that provide conversions - between Windows Clipboard and MIME formats, you can convert - proprietary clipboard formats to MIME formats. - - Qt has predefined support for the following Windows Clipboard formats: - - \table - \header \li Windows Format \li Equivalent MIME type - \row \li \c CF_UNICODETEXT \li \c text/plain - \row \li \c CF_TEXT \li \c text/plain - \row \li \c CF_DIB \li \c{image/xyz}, where \c xyz is - a \l{QImageWriter::supportedImageFormats()}{Qt image format} - \row \li \c CF_HDROP \li \c text/uri-list - \row \li \c CF_INETURL \li \c text/uri-list - \row \li \c CF_HTML \li \c text/html - \endtable - - An example use of this class would be to map the Windows Metafile - clipboard format (\c CF_METAFILEPICT) to and from the MIME type - \c{image/x-wmf}. This conversion might simply be adding or removing - a header, or even just passing on the data. See \l{Drag and Drop} - for more information on choosing and definition MIME types. - - You can check if a MIME type is convertible using canConvertFromMime() and - can perform conversions with convertToMime() and convertFromMime(). - - \since 6.0 -*/ - -/*! - \fn QNativeInterface::Private::QWindowsMime::~QWindowsMime() - - Destroys the conversion object. -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsMime::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const - - Returns \c true if the converter can convert from the \a mimeData to - the format specified in \a formatetc. - - All subclasses must reimplement this pure virtual function. -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsMime::canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const - - Returns \c true if the converter can convert to the \a mimeType from - the available formats in \a pDataObj. - - All subclasses must reimplement this pure virtual function. -*/ - -/*! - \fn QString QNativeInterface::Private::QWindowsMime::mimeForFormat(const FORMATETC &formatetc) const - - Returns the mime type that will be created form the format specified - in \a formatetc, or an empty string if this converter does not support - \a formatetc. - - All subclasses must reimplement this pure virtual function. -*/ - -/*! - \fn QList<FORMATETC> QNativeInterface::Private::QWindowsMime::formatsForMime(const QString &mimeType, const QMimeData *mimeData) const - - Returns a QList of FORMATETC structures representing the different windows clipboard - formats that can be provided for the \a mimeType from the \a mimeData. - - All subclasses must reimplement this pure virtual function. -*/ - -/*! - \fn QVariant QNativeInterface::Private::QWindowsMime::convertToMime(const QString &mimeType, IDataObject *pDataObj, - QVariant::Type preferredType) const - - Returns a QVariant containing the converted data for \a mimeType from \a pDataObj. - If possible the QVariant should be of the \a preferredType to avoid needless conversions. - - All subclasses must reimplement this pure virtual function. -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsMime::convertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData, STGMEDIUM * pmedium) const - - Convert the \a mimeData to the format specified in \a formatetc. - The converted data should then be placed in \a pmedium structure. - - Return true if the conversion was successful. - - All subclasses must reimplement this pure virtual function. -*/ - -/*! - \class QNativeInterface::Private::QWindowsWindow - \since 6.0 - \brief Native interface to QPlatformWindow. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \fn void QNativeInterface::Private::QWindowsWindow::setHasBorderInFullScreen(bool border) - - Sets whether the WS_BORDER flag will be set for the window in full screen mode - to \a border. - - See also \l [QtDoc] {Fullscreen OpenGL Based Windows} -*/ - -/*! - \fn bool QNativeInterface::Private::QWindowsWindow::hasBorderInFullScreen() const - - Returns whether the WS_BORDER flag will be set for the window in full screen - mode. -*/ - -/*! - \fn QMargins QNativeInterface::Private::QWindowsWindow::customMargins() const - - Returns the margin to be used when handling the \c WM_NCCALCSIZE message. -*/ - -/*! - \fn void QNativeInterface::Private::QWindowsWindow::setCustomMargins(const QMargins &margins) - - Sets the\a margins to be used when handling the \c WM_NCCALCSIZE message. It is - possible to remove a frame border by specifying a negative value. -*/ - -/*! - \class QNativeInterface::Private::QXcbScreen - \since 6.0 - \brief Native interface to QPlatformScreen. - \inmodule QtGui - \ingroup native_interfaces -*/ - -/*! - \class QNativeInterface::Private::QXcbWindow - \since 6.0 - \brief Native interface to QPlatformWindow. - \inmodule QtGui - \ingroup native_interfaces -*/ diff --git a/src/gui/doc/src/qtgui.qdoc b/src/gui/doc/src/qtgui.qdoc index b8a71d5176..d6b013ea96 100644 --- a/src/gui/doc/src/qtgui.qdoc +++ b/src/gui/doc/src/qtgui.qdoc @@ -113,10 +113,6 @@ and font handling, classes like QRawFont and QGlyphRun can be used. - \section1 Native Interfaces - - See \l{Native Interfaces}. - \section1 OpenGL and OpenGL ES Integration QWindow supports rendering using OpenGL and OpenGL ES, depending diff --git a/src/gui/kernel/qoffscreensurface.cpp b/src/gui/kernel/qoffscreensurface.cpp index 3144bc6f8c..d80a081105 100644 --- a/src/gui/kernel/qoffscreensurface.cpp +++ b/src/gui/kernel/qoffscreensurface.cpp @@ -50,18 +50,6 @@ QT_BEGIN_NAMESPACE - -/*! - \fn template <typename NativeInterface> NativeInterface *QOffScreenSurface::nativeInterface() - - Returns a native interface of type \c NativeInterface for the surface. - - This function provides access to platform specific functionality - of QOffScreenSurface, as defined in the QNativeInterface namespace. - - If the requested interface is not available a \nullptr is returned. -*/ - /*! \class QOffscreenSurface \inmodule QtGui @@ -355,6 +343,19 @@ QPlatformOffscreenSurface *QOffscreenSurface::handle() const } /*! + \fn template <typename QNativeInterface> QNativeInterface *QOffscreenSurface::nativeInterface() const + + Returns a native interface of the given type for the surface. + + This function provides access to platform specific functionality + of QOffScreenSurface, as defined in the QNativeInterface namespace: + + \annotatedlist native-interfaces-qoffscreensurface + + If the requested interface is not available a \nullptr is returned. +*/ + +/*! Returns the platform surface corresponding to the offscreen surface. \internal diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp index 490d082fd4..6cc2d65a35 100644 --- a/src/gui/kernel/qopenglcontext.cpp +++ b/src/gui/kernel/qopenglcontext.cpp @@ -347,12 +347,14 @@ void QOpenGLContextPrivate::_q_screenDestroyed(QObject *object) } /*! - \fn template <typename NativeInterface> NativeInterface *QOpenGLContext::nativeInterface() const + \fn template <typename QNativeInterface> QNativeInterface *QOpenGLContext::nativeInterface() const - Returns a native interface of type \c NativeInterface for the context. + Returns a native interface of the given type for the context. This function provides access to platform specific functionality - of QOpenGLContext, as defined in the QNativeInterface namespace. + of QOpenGLContext, as defined in the QNativeInterface namespace: + + \annotatedlist native-interfaces-qopenglcontext If the requested interface is not available a \nullptr is returned. */ diff --git a/src/gui/kernel/qopenglcontext_platform.h b/src/gui/kernel/qopenglcontext_platform.h index 80a29a1021..c0e1c59fdf 100644 --- a/src/gui/kernel/qopenglcontext_platform.h +++ b/src/gui/kernel/qopenglcontext_platform.h @@ -70,7 +70,7 @@ namespace QNativeInterface { struct Q_GUI_EXPORT QCocoaGLContext { QT_DECLARE_NATIVE_INTERFACE(QCocoaGLContext) - static QOpenGLContext *fromNative(QT_IGNORE_DEPRECATIONS(NSOpenGLContext) *, QOpenGLContext *shareContext = nullptr); + static QOpenGLContext *fromNative(QT_IGNORE_DEPRECATIONS(NSOpenGLContext) *context, QOpenGLContext *shareContext = nullptr); virtual QT_IGNORE_DEPRECATIONS(NSOpenGLContext) *nativeContext() const = 0; }; #endif diff --git a/src/gui/platform/android/qandroidnativeinterface.cpp b/src/gui/platform/android/qandroidnativeinterface.cpp index bdb322add0..b1063034a0 100644 --- a/src/gui/platform/android/qandroidnativeinterface.cpp +++ b/src/gui/platform/android/qandroidnativeinterface.cpp @@ -47,7 +47,19 @@ QT_BEGIN_NAMESPACE using namespace QNativeInterface::Private; -#if defined(Q_OS_ANDROID) +/*! + \class QNativeInterface::QAndroidOffscreenSurface + \since 6.0 + \brief Native interface to a offscreen surface on Android. + + Accessed through QOffscreenSurface::nativeInterface(). + + \inmodule QtGui + \inheaderfile QOffscreenSurface + \ingroup native-interfaces + \ingroup native-interfaces-qoffscreensurface +*/ + QT_DEFINE_NATIVE_INTERFACE(QAndroidOffscreenSurface, QOffscreenSurface); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QAndroidOffScreenIntegration); @@ -56,6 +68,5 @@ QOffscreenSurface *QNativeInterface::QAndroidOffscreenSurface::fromNative(ANati return QGuiApplicationPrivate::platformIntegration()->call< &QAndroidOffScreenIntegration::createOffscreenSurface>(nativeSurface); } -#endif QT_END_NAMESPACE diff --git a/src/gui/platform/macos/qcocoanativeinterface.mm b/src/gui/platform/macos/qcocoanativeinterface.mm index f9d5f5dbe5..5d199f8a0f 100644 --- a/src/gui/platform/macos/qcocoanativeinterface.mm +++ b/src/gui/platform/macos/qcocoanativeinterface.mm @@ -50,12 +50,66 @@ QT_BEGIN_NAMESPACE using namespace QNativeInterface::Private; +/*! + \class QNativeInterface::Private::QCocoaWindow + \since 6.0 + \internal + \brief Native interface for QPlatformWindow on \macos. + \inmodule QtGui + \ingroup native-interfaces +*/ + QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QCocoaWindow); + + +/*! + \class QNativeInterface::Private::QCocoaMenu + \since 6.0 + \internal + \brief Native interface for QPlatformMenu on \macos. + \inmodule QtGui + \ingroup native-interfaces +*/ + QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QCocoaMenu); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QCocoaMenuBar); #ifndef QT_NO_OPENGL +/*! + \class QNativeInterface::QCocoaGLContext + \since 6.0 + \brief Native interface to an NSOpenGLContext on \macos. + + Accessed through QOpenGLContext::nativeInterface(). + + \inmodule QtGui + \inheaderfile QOpenGLContext + \ingroup native-interfaces + \ingroup native-interfaces-qopenglcontext +*/ + +/*! + \fn QOpenGLContext *QNativeInterface::QCocoaGLContext::fromNative(NSOpenGLContext *context, QOpenGLContext *shareContext = nullptr) + + \brief Adopts an NSOpenGLContext. + + The adopted NSOpenGLContext is retained. Ownership of the created QOpenGLContext is transferred to the caller. +*/ + +/*! + \fn NSOpenGLContext *QNativeInterface::QCocoaGLContext::nativeContext() const + + \return the underlying NSOpenGLContext. +*/ + +struct Q_GUI_EXPORT QCocoaGLContext +{ + QT_DECLARE_NATIVE_INTERFACE(QCocoaGLContext) + static QOpenGLContext *fromNative(QT_IGNORE_DEPRECATIONS(NSOpenGLContext) *, QOpenGLContext *shareContext = nullptr); + virtual QT_IGNORE_DEPRECATIONS(NSOpenGLContext) *nativeContext() const = 0; +}; + QT_DEFINE_NATIVE_INTERFACE(QCocoaGLContext, QOpenGLContext); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QCocoaGLIntegration); diff --git a/src/gui/platform/unix/qunixnativeinterface.cpp b/src/gui/platform/unix/qunixnativeinterface.cpp index 378282936e..43184daa12 100644 --- a/src/gui/platform/unix/qunixnativeinterface.cpp +++ b/src/gui/platform/unix/qunixnativeinterface.cpp @@ -56,6 +56,46 @@ using namespace QNativeInterface::Private; #ifndef QT_NO_OPENGL #if defined(Q_OS_LINUX) + +/*! + \class QNativeInterface::QGLXContext + \since 6.0 + \brief Native interface to a GLX context. + + Accessed through QOpenGLContext::nativeInterface(). + + \inmodule QtGui + \ingroup native-interfaces + \ingroup native-interfaces-qopenglcontext +*/ + +/*! + \fn QOpenGLContext *QNativeInterface::QGLXContext::fromNative(GLXContext configBasedContext, QOpenGLContext *shareContext = nullptr) + + \brief Adopts a GLXContext created from an FBConfig. + + The context must be created from a framebuffer configuration, using the \c glXCreateNewContext function. + + Ownership of the created QOpenGLContext is transferred to the caller. +*/ + +/*! + \fn QOpenGLContext *QNativeInterface::QGLXContext::fromNative(GLXContext visualBasedContext, void *visualInfo, QOpenGLContext *shareContext = nullptr) + + \brief Adopts a GLXContext created from an X visual. + + The context must be created from a visual, using the \c glXCreateContext function. + The same visual must be passed as a pointer to an \c XVisualInfo struct, in the \a visualInfo argument. + + Ownership of the created QOpenGLContext is transferred to the caller. +*/ + +/*! + \fn GLXContext QNativeInterface::QGLXContext::nativeContext() const + + \return the underlying GLXContext. +*/ + QT_DEFINE_NATIVE_INTERFACE(QGLXContext, QOpenGLContext); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QGLXIntegration); @@ -70,9 +110,38 @@ QOpenGLContext *QNativeInterface::QGLXContext::fromNative(GLXContext visualBased return QGuiApplicationPrivate::platformIntegration()->call< &QGLXIntegration::createOpenGLContext>(visualBasedContext, visualInfo, shareContext); } -#endif +#endif // defined(Q_OS_LINUX) #if QT_CONFIG(egl) + +/*! + \class QNativeInterface::QEGLContext + \since 6.0 + \brief Native interface to an EGL context. + + Accessed through QOpenGLContext::nativeInterface(). + + \inmodule QtGui + \ingroup native-interfaces + \ingroup native-interfaces-qopenglcontext +*/ + +/*! + \fn QOpenGLContext *QNativeInterface::QEGLContext::fromNative(EGLContext context, EGLDisplay display, QOpenGLContext *shareContext = nullptr) + + \brief Adopts an EGLContext. + + The same \c EGLDisplay passed to \c eglCreateContext must be passed as the \a display argument. + + Ownership of the created QOpenGLContext is transferred to the caller. +*/ + +/*! + \fn EGLContext QNativeInterface::QEGLContext::nativeContext() const + + \return the underlying EGLContext. +*/ + QT_DEFINE_NATIVE_INTERFACE(QEGLContext, QOpenGLContext); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QEGLIntegration); @@ -81,20 +150,51 @@ QOpenGLContext *QNativeInterface::QEGLContext::fromNative(EGLContext context, EG return QGuiApplicationPrivate::platformIntegration()->call< &QEGLIntegration::createOpenGLContext>(context, display, shareContext); } -#endif +#endif // QT_CONFIG(egl) #endif // QT_NO_OPENGL #if QT_CONFIG(xcb) + +/*! + \class QNativeInterface::Private::QXcbScreen + \since 6.0 + \internal + \brief Native interface to QPlatformScreen. + \inmodule QtGui + \ingroup native-interfaces +*/ + QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QXcbScreen); + +/*! + \class QNativeInterface::Private::QXcbWindow + \since 6.0 + \internal + \brief Native interface to QPlatformWindow. + \inmodule QtGui + \ingroup native-interfaces +*/ + QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QXcbWindow); -#endif + +#endif // QT_CONFIG(xcb) #if QT_CONFIG(vsp2) QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QVsp2Screen); #endif #if QT_CONFIG(evdev) + +/*! + \class QNativeInterface::Private::QEvdevKeyMapper + \since 6.0 + \internal + \brief Native interface to QKeyMapper. + \inmodule QtGui + \ingroup native-interfaces +*/ + QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QEvdevKeyMapper); template <> @@ -102,6 +202,6 @@ QEvdevKeyMapper *QKeyMapper::nativeInterface<QEvdevKeyMapper>() const { return dynamic_cast<QEvdevKeyMapper*>(QGuiApplicationPrivate::platformIntegration()); } -#endif +#endif // QT_CONFIG(evdev) QT_END_NAMESPACE diff --git a/src/gui/platform/windows/qwindowsnativeinterface.cpp b/src/gui/platform/windows/qwindowsnativeinterface.cpp index 950c86d7fb..700a3b34bf 100644 --- a/src/gui/platform/windows/qwindowsnativeinterface.cpp +++ b/src/gui/platform/windows/qwindowsnativeinterface.cpp @@ -51,6 +51,48 @@ using namespace QNativeInterface::Private; #ifndef QT_NO_OPENGL +/*! + \class QNativeInterface::QWGLContext + \since 6.0 + \brief Native interface to a WGL context on Windows. + + Accessed through QOpenGLContext::nativeInterface(). + + \inmodule QtGui + \ingroup native-interfaces + \ingroup native-interfaces-qopenglcontext +*/ + +/*! + \fn QOpenGLContext *QNativeInterface::QWGLContext::fromNative(HGLRC context, HWND window, QOpenGLContext *shareContext = nullptr) + + \brief Adopts an WGL context handle. + + The \a window is needed because the its pixel format will be queried. When the + adoption is successful, QOpenGLContext::format() will return a QSurfaceFormat + describing this pixel format. + + \note The window specified by \a window must have its pixel format set to a + format compatible with the context's. If no SetPixelFormat() call was made on + any device context belonging to the window, adopting the context will fail. + + Ownership of the created QOpenGLContext is transferred to the caller. +*/ + +/*! + \fn HGLRC QNativeInterface::QWGLContext::nativeContext() const + + \return the underlying context handle. +*/ + +/*! + \fn HMODULE QNativeInterface::QWGLContext::openGLModuleHandle() + + \return the handle for the OpenGL implementation that is currently in use. + + \note This function requires that the QGuiApplication instance is already created. +*/ + QT_DEFINE_NATIVE_INTERFACE(QWGLContext, QOpenGLContext); QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWindowsGLIntegration); @@ -68,7 +110,212 @@ QOpenGLContext *QNativeInterface::QWGLContext::fromNative(HGLRC context, HWND wi #endif // QT_NO_OPENGL +/*! + \class QNativeInterface::Private::QWindowsApplication + \since 6.0 + \internal + \brief Native interface to QGuiApplication, to be retrieved from QPlatformIntegration. + \inmodule QtGui + \ingroup native-interfaces +*/ + QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWindowsApplication); + +/*! + \enum QNativeInterface::Private::QWindowsApplication::TouchWindowTouchType + + This enum represents the supported TouchWindow touch flags for registerTouchWindow(). + + \value NormalTouch + \value FineTouch + \value WantPalmTouch +*/ + +/*! + \fn void QNativeInterface::Private::QWindowsApplication::setTouchWindowTouchType(QNativeInterface::Private::QWindowsApplication::TouchWindowTouchTypes type) + + Sets the touch window type for all windows to \a type. +*/ + +/*! + \fn QNativeInterface::Private::QWindowsApplication::TouchWindowTouchTypes QNativeInterface::Private::QWindowsApplication::touchWindowTouchType() const + + Returns the currently set the touch window type. +*/ + +/*! + \enum QNativeInterface::Private::QWindowsApplication::WindowActivationBehavior + + This enum specifies the behavior of QWidget::activateWindow() and + QWindow::requestActivate(). + + \value DefaultActivateWindow The window is activated according to the default + behavior of the Windows operating system. This means the window will not + be activated in some circumstances (most notably when the calling process + is not the active process); only the taskbar entry will be flashed. + \value AlwaysActivateWindow The window is always activated, even when the + calling process is not the active process. + + \sa QWidget::activateWindow(), QWindow::requestActivate() +*/ + +/*! + \fn void QNativeInterface::Private::QWindowsApplication::setWindowActivationBehavior(QNativeInterface::Private::QWindowsApplication::WindowActivationBehavior behavior) + + Sets the window activation behavior to \a behavior. + + \sa QWidget::activateWindow(), QWindow::requestActivate() +*/ + +/*! + \fn QNativeInterface::Private::QWindowsApplication::WindowActivationBehavior QNativeInterface::Private::QWindowsApplication::windowActivationBehavior() const + + Returns the currently set the window activation behavior. +*/ + +/*! + \fn bool QNativeInterface::Private::QWindowsApplication::isTabletMode() const + + Returns \c true if Windows 10 operates in \e{Tablet Mode}. + In this mode, Windows forces all application main windows to open in maximized + state. Applications should then avoid resizing windows or restoring geometries + to non-maximized states. + + \sa QWidget::showMaximized(), QWidget::saveGeometry(), QWidget::restoreGeometry() +*/ + +/*! + \enum QNativeInterface::Private::QWindowsApplication::DarkModeHandlingFlag + + This enum specifies the behavior of the application when Windows + is configured to use dark mode for applications. + + \value DarkModeWindowFrames The window frames will be switched to dark. + \value DarkModeStyle The Windows Vista style will be turned off and + a simple dark style will be used. + + \sa isDarkMode(), setDarkModeHandling() +*/ + +/*! + \fn bool QNativeInterface::Private::QWindowsApplication::isDarkMode() const = 0 + + Returns \c true if Windows 10 is configured to use dark mode for + applications. +*/ + +/*! + \fn void QNativeInterface::Private::QWindowsApplication::setDarkModeHandling(DarkModeHandling handling) = 0 + + Sets the dark mode handling to \a handling. +*/ + +/*! + \fn QNativeInterface::Private::QWindowsApplication::DarkModeHandling QNativeInterface::Private::QWindowsApplication::darkModeHandling() const + + Returns the currently set dark mode handling. +*/ + +/*! + \fn bool QNativeInterface::Private::QWindowsApplication::isWinTabEnabled() const = 0 + + Returns whether the \e{Tablet WinTab Driver} (\c Wintab32.dll) is used. +*/ + +/*! + \fn bool QNativeInterface::Private::QWindowsApplication::setWinTabEnabled(bool enabled) + + Sets whether the \e{Tablet WinTab Driver} (\c Wintab32.dll) should be used to \a enabled. + + Returns \c true on success, \c false otherwise. +*/ + +/*! + \fn bool QNativeInterface::Private::QWindowsApplication::registerMime(QWindowsMime *mime) + + Registers the converter \a mime to the system. + + \sa QNativeInterface::Private::QWindowsMime, unregisterMime() +*/ + +/*! + \fn void QNativeInterface::Private::QWindowsApplication::unregisterMime(QWindowsMime *mime) + + Unregisters the converter \a mime from the system. + + \sa QNativeInterface::Private::QWindowsMime, registerMime() +*/ + +/*! + \fn int QNativeInterface::Private::QWindowsApplication::registerMimeType(const QString &mime) + + Registers the MIME type \a mime, and returns an ID number + identifying the format on Windows. +*/ + +/*! + \fn HWND QNativeInterface::Private::QWindowsApplication::createMessageWindow(const QString &, const QString &, QFunctionPointer) const + \internal +*/ + +/*! + \fn bool QNativeInterface::Private::QWindowsApplication::asyncExpose() const + \internal +*/ + +/*! + \fn void QNativeInterface::Private::QWindowsApplication::setAsyncExpose(bool) + \internal +*/ + +/*! + \fn QVariant QNativeInterface::Private::QWindowsApplication::gpu() + \internal +*/ + +/*! + \fn QVariant QNativeInterface::Private::QWindowsApplication::gpuList() + \internal +*/ + +/*! + \class QNativeInterface::Private::QWindowsWindow + \since 6.0 + \internal + \brief Native interface to QPlatformWindow. + \inmodule QtGui + \ingroup native-interfaces +*/ + QT_DEFINE_PRIVATE_NATIVE_INTERFACE(QWindowsWindow); +/*! + \fn void QNativeInterface::Private::QWindowsWindow::setHasBorderInFullScreen(bool border) + + Sets whether the WS_BORDER flag will be set for the window in full screen mode + to \a border. + + See also \l [QtDoc] {Fullscreen OpenGL Based Windows} +*/ + +/*! + \fn bool QNativeInterface::Private::QWindowsWindow::hasBorderInFullScreen() const + + Returns whether the WS_BORDER flag will be set for the window in full screen + mode. +*/ + +/*! + \fn QMargins QNativeInterface::Private::QWindowsWindow::customMargins() const + + Returns the margin to be used when handling the \c WM_NCCALCSIZE message. +*/ + +/*! + \fn void QNativeInterface::Private::QWindowsWindow::setCustomMargins(const QMargins &margins) + + Sets the\a margins to be used when handling the \c WM_NCCALCSIZE message. It is + possible to remove a frame border by specifying a negative value. +*/ + QT_END_NAMESPACE |