5#ifndef QPLATFORMINTEGRATION_H
6#define QPLATFORMINTEGRATION_H
17#include <QtGui/qtguiglobal.h>
18#include <QtGui/qwindowdefs.h>
19#include <qpa/qplatformscreen.h>
20#include <QtGui/qsurfaceformat.h>
21#include <QtGui/qopenglcontext.h>
28class QPlatformBackingStore;
29class QPlatformFontDatabase;
30class QPlatformClipboard;
31class QPlatformNativeInterface;
33class QPlatformOpenGLContext;
35class QAbstractEventDispatcher;
36class QPlatformInputContext;
37class QPlatformKeyMapper;
38class QPlatformAccessibility;
40class QPlatformDialogHelper;
41class QPlatformSharedGraphicsCache;
42class QPlatformServices;
43class QPlatformSessionManager;
45class QPlatformOffscreenSurface;
46class QOffscreenSurface;
47class QPlatformVulkanInstance;
50namespace QNativeInterface::
Private {
52template <
typename R,
typename I,
auto func,
typename... Args>
56 static R
apply(T *obj, Args... args)
58 if (
auto *iface =
dynamic_cast<I*>(obj))
59 return (iface->*func)(args...);
69template <
typename R,
typename I,
typename...
Args,
R(
I::*
func)(
Args...)
const>
77 Q_DISABLE_COPY_MOVE(QPlatformIntegration)
94#if QT_REMOVAL_QT7_DEPRECATED_SINCE(6
, 11
)
95 RasterGLSurface Q_DECL_ENUMERATOR_DEPRECATED_X(
"This capability is no longer used"),
97 AllGLFunctionsQueryable,
99 SwitchableWidgetComposition,
100 TopStackedNativeChildWindows,
101 OpenGLOnRasterSurface,
102 MaximizeUsingFullscreenGeometry,
105 ScreenWindowGrabbing,
106 BackingStoreStaticContents,
110 virtual ~QPlatformIntegration() { }
112 virtual bool hasCapability(Capability cap)
const;
114 virtual QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type)
const;
115 virtual QPlatformWindow *createPlatformWindow(QWindow *window)
const = 0;
116 virtual QPlatformWindow *createForeignWindow(QWindow *, WId)
const {
return nullptr; }
117 virtual QPlatformBackingStore *createPlatformBackingStore(QWindow *window)
const = 0;
119 virtual QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context)
const;
121 virtual QPlatformSharedGraphicsCache *createPlatformSharedGraphicsCache(
const char *cacheId)
const;
122 virtual QPaintEngine *createImagePaintEngine(QPaintDevice *paintDevice)
const;
125 virtual QAbstractEventDispatcher *createEventDispatcher()
const = 0;
126 virtual void initialize();
127 virtual void destroy();
130 virtual QPlatformFontDatabase *fontDatabase()
const;
131#ifndef QT_NO_CLIPBOARD
132 virtual QPlatformClipboard *clipboard()
const;
134#if QT_CONFIG(draganddrop)
135 virtual QPlatformDrag *drag()
const;
137 virtual QPlatformInputContext *inputContext()
const;
138#if QT_CONFIG(accessibility)
139 virtual QPlatformAccessibility *accessibility()
const;
143 virtual QPlatformNativeInterface *nativeInterface()
const;
145 virtual QPlatformServices *services()
const;
149 KeyboardInputInterval,
150 MouseDoubleClickInterval,
153 KeyboardAutoRepeatRate,
159 PasswordMaskCharacter,
160 SetFocusOnTouchRelease,
162 MousePressAndHoldInterval,
164 ReplayMousePressOutsidePopup,
165 ItemViewActivateItemOnSingleClick,
168 ShowShortcutsInContextMenus,
169 MouseQuickSelectionThreshold,
170 MouseDoubleClickDistance,
172 FlickMaximumVelocity,
177 virtual QVariant styleHint(StyleHint hint)
const;
178 virtual Qt::WindowState defaultWindowState(Qt::WindowFlags)
const;
181 virtual Qt::KeyboardModifiers queryKeyboardModifiers()
const;
182 virtual QList<
int> possibleKeys(
const QKeyEvent *)
const;
183 friend class QPlatformKeyMapper;
185 virtual QPlatformKeyMapper *keyMapper()
const;
187 virtual QStringList themeNames()
const;
188 virtual QPlatformTheme *createPlatformTheme(
const QString &name)
const;
190 virtual QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface)
const;
192#ifndef QT_NO_SESSIONMANAGER
193 virtual QPlatformSessionManager *createPlatformSessionManager(
const QString &id,
const QString &key)
const;
199 virtual QOpenGLContext::OpenGLModuleType openGLModuleType();
201 virtual void setApplicationIcon(
const QIcon &icon)
const;
202 virtual void setApplicationBadge(qint64 number);
204 virtual void beep()
const;
205 virtual void quit()
const;
207#if QT_CONFIG(vulkan) || defined(Q_QDOC)
208 virtual QPlatformVulkanInstance *createPlatformVulkanInstance(QVulkanInstance *instance)
const;
211 template <
auto func,
typename... Args>
212 auto call(Args... args)
214 using namespace QNativeInterface::Private;
215 return QInterfaceProxy<func>::apply(
this, args...);
219 QPlatformIntegration() =
default;
Collection of utility functions for UI scaling.
T toNativePixels(const T &value, const C *context)
QHighDpiScaling::Point position(T, QHighDpiScaling::Point::Kind)
QList< T > scale(const QList< T > &list, qreal scaleFactor, QPoint origin=QPoint(0, 0))
T toNativeLocalPosition(const T &value, const C *context)
QSize scale(const QSize &value, qreal scaleFactor, QPointF=QPointF(0, 0))
T toNativeGlobalPosition(const T &value, const C *context)
T fromNativeLocalPosition(const T &value, const C *context)
T fromNativeGlobalPosition(const T &value, const C *context)
T toNative(const T &value, qreal scaleFactor, QPoint origin=QPoint(0, 0))
QRect fromNativeScreenGeometry(const QRect &nativeScreenGeometry, const QScreen *screen)
QRect fromNative(const QRect &rect, const QScreen *screen, const QPoint &screenOrigin)
QRegion fromNativeLocalExposedRegion(const QRegion &pixelRegion, const QWindow *window)
QRegion fromNativeLocalRegion(const QRegion &pixelRegion, const QWindow *window)
qreal scale(qreal value, qreal scaleFactor, QPointF=QPointF(0, 0))
T fromNativePixels(const T &value, const C *context)
QHighDpiScaling::Point position(QPoint point, QHighDpiScaling::Point::Kind kind)
QRegion toNativeLocalRegion(const QRegion &pointRegion, const QWindow *window)
T fromNative(const T &value, qreal scaleFactor, QPoint origin=QPoint(0, 0))
T toNativeWindowGeometry(const T &value, const C *context)
T fromNativeWindowGeometry(const T &value, const C *context)
Combined button and popup list for selecting options.
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
static const char screenFactorsEnvVar[]
static const char dpiAdjustmentPolicyEnvVar[]
static const ScaleFactorRoundingPolicyLookup scaleFactorRoundingPolicyLookup[]
static bool operator==(const EnumLookup< EnumType > &e1, const EnumLookup< EnumType > &e2)
static const char scaleFactorRoundingPolicyEnvVar[]
static std::optional< qreal > qEnvironmentVariableOptionalReal(const char *name)
static Qt::HighDpiScaleFactorRoundingPolicy lookupScaleFactorRoundingPolicy(const QByteArray &v)
static const char enableHighDpiScalingEnvVar[]
static const DpiAdjustmentPolicyLookup dpiAdjustmentPolicyLookup[]
static const char usePhysicalDpiEnvVar[]
static std::optional< QString > qEnvironmentVariableOptionalString(const char *name)
static std::optional< QByteArray > qEnvironmentVariableOptionalByteArray(const char *name)
static QByteArray joinEnumValues(const EnumLookup< EnumType > *i1, const EnumLookup< EnumType > *i2)
static const char scaleFactorEnvVar[]
static const char scaleFactorProperty[]
static QHighDpiScaling::DpiAdjustmentPolicy lookupDpiAdjustmentPolicy(const QByteArray &v)
std::pair< qreal, qreal > QDpi
QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcQIORing)
static R apply(T *obj, Args... args)