// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QPLATFORMINTEGRATION_H #define QPLATFORMINTEGRATION_H // // W A R N I N G // ------------- // // This file is part of the QPA API and is not meant to be used // in applications. Usage of this API may make your code // source and binary incompatible with future versions of Qt. // #include #include #include #include #include QT_BEGIN_NAMESPACE class QPlatformWindow; class QWindow; class QPlatformBackingStore; class QPlatformFontDatabase; class QPlatformClipboard; class QPlatformNativeInterface; class QPlatformDrag; class QPlatformOpenGLContext; class QGuiGLFormat; class QAbstractEventDispatcher; class QPlatformInputContext; class QPlatformAccessibility; class QPlatformTheme; class QPlatformDialogHelper; class QPlatformSharedGraphicsCache; class QPlatformServices; class QPlatformSessionManager; class QKeyEvent; class QPlatformOffscreenSurface; class QOffscreenSurface; class QPlatformVulkanInstance; class QVulkanInstance; namespace QNativeInterface::Private { template struct QInterfaceProxyImp { template static R apply(T *obj, Args... args) { if (auto *iface = dynamic_cast(obj)) return (iface->*func)(args...); else return R(); } }; template struct QInterfaceProxy; template struct QInterfaceProxy : public QInterfaceProxyImp {}; template struct QInterfaceProxy : public QInterfaceProxyImp {}; } // QNativeInterface::Private class Q_GUI_EXPORT QPlatformIntegration { public: Q_DISABLE_COPY_MOVE(QPlatformIntegration) enum Capability { ThreadedPixmaps = 1, OpenGL, ThreadedOpenGL, SharedGraphicsCache, BufferQueueingOpenGL, WindowMasks, MultipleWindows, ApplicationState, ForeignWindows, NonFullScreenWindows, NativeWidgets, WindowManagement, WindowActivation, // whether requestActivate is supported SyncState, RasterGLSurface, AllGLFunctionsQueryable, ApplicationIcon, SwitchableWidgetComposition, TopStackedNativeChildWindows, OpenGLOnRasterSurface, MaximizeUsingFullscreenGeometry, PaintEvents, RhiBasedRendering, ScreenWindowGrabbing // whether QScreen::grabWindow() is supported }; virtual ~QPlatformIntegration() { } virtual bool hasCapability(Capability cap) const; virtual QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const; virtual QPlatformWindow *createPlatformWindow(QWindow *window) const = 0; virtual QPlatformWindow *createForeignWindow(QWindow *, WId) const { return nullptr; } virtual QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const = 0; #ifndef QT_NO_OPENGL virtual QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const; #endif virtual QPlatformSharedGraphicsCache *createPlatformSharedGraphicsCache(const char *cacheId) const; virtual QPaintEngine *createImagePaintEngine(QPaintDevice *paintDevice) const; // Event dispatcher: virtual QAbstractEventDispatcher *createEventDispatcher() const = 0; virtual void initialize(); virtual void destroy(); //Deeper window system integrations virtual QPlatformFontDatabase *fontDatabase() const; #ifndef QT_NO_CLIPBOARD virtual QPlatformClipboard *clipboard() const; #endif #if QT_CONFIG(draganddrop) virtual QPlatformDrag *drag() const; #endif virtual QPlatformInputContext *inputContext() const; #ifndef QT_NO_ACCESSIBILITY virtual QPlatformAccessibility *accessibility() const; #endif // Access native handles. The window handle is already available from Wid; virtual QPlatformNativeInterface *nativeInterface() const; virtual QPlatformServices *services() const; enum StyleHint { CursorFlashTime, KeyboardInputInterval, MouseDoubleClickInterval, StartDragDistance, StartDragTime, KeyboardAutoRepeatRate, ShowIsFullScreen, PasswordMaskDelay, FontSmoothingGamma, StartDragVelocity, UseRtlExtensions, PasswordMaskCharacter, SetFocusOnTouchRelease, ShowIsMaximized, MousePressAndHoldInterval, TabFocusBehavior, ReplayMousePressOutsidePopup, ItemViewActivateItemOnSingleClick, UiEffects, WheelScrollLines, ShowShortcutsInContextMenus, MouseQuickSelectionThreshold }; virtual QVariant styleHint(StyleHint hint) const; virtual Qt::WindowState defaultWindowState(Qt::WindowFlags) const; virtual Qt::KeyboardModifiers queryKeyboardModifiers() const; virtual QList possibleKeys(const QKeyEvent *) const; virtual QStringList themeNames() const; virtual QPlatformTheme *createPlatformTheme(const QString &name) const; virtual QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const; #ifndef QT_NO_SESSIONMANAGER virtual QPlatformSessionManager *createPlatformSessionManager(const QString &id, const QString &key) const; #endif virtual void sync(); #ifndef QT_NO_OPENGL virtual QOpenGLContext::OpenGLModuleType openGLModuleType(); #endif virtual void setApplicationIcon(const QIcon &icon) const; virtual void beep() const; virtual void quit() const; #if QT_CONFIG(vulkan) || defined(Q_CLANG_QDOC) virtual QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance) const; #endif template auto call(Args... args) { using namespace QNativeInterface::Private; return QInterfaceProxy::apply(this, args...); } protected: QPlatformIntegration() = default; }; QT_END_NAMESPACE #endif // QPLATFORMINTEGRATION_H