1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3#ifndef QPLATFORMWINDOW_H
4#define QPLATFORMWINDOW_H
5
6//
7// W A R N I N G
8// -------------
9//
10// This file is part of the QPA API and is not meant to be used
11// in applications. Usage of this API may make your code
12// source and binary incompatible with future versions of Qt.
13//
14
15#include <QtGui/qtguiglobal.h>
16#include <QtCore/qscopedpointer.h>
17#include <QtCore/qrect.h>
18#include <QtCore/qmargins.h>
19#include <QtCore/qstring.h>
20#include <QtGui/qwindowdefs.h>
21#include <QtGui/qwindow.h>
22#include <qpa/qplatformopenglcontext.h>
23#include <qpa/qplatformsurface.h>
24
25QT_BEGIN_NAMESPACE
26
27#define QWINDOWSIZE_MAX ((1<<24)-1)
28
29class QPlatformScreen;
30class QPlatformWindowPrivate;
31class QScreen;
32class QWindow;
33class QIcon;
34class QRegion;
35
36class Q_GUI_EXPORT QPlatformWindow : public QPlatformSurface
37{
38 Q_DECLARE_PRIVATE(QPlatformWindow)
39public:
40 Q_DISABLE_COPY_MOVE(QPlatformWindow)
41
42 explicit QPlatformWindow(QWindow *window);
43 ~QPlatformWindow() override;
44
45 virtual void initialize();
46
47 QWindow *window() const;
48 QPlatformWindow *parent() const;
49
50 QPlatformScreen *screen() const override;
51
52 virtual QSurfaceFormat format() const override;
53
54 virtual void setGeometry(const QRect &rect);
55 virtual QRect geometry() const;
56 virtual QRect normalGeometry() const;
57
58 virtual QMargins frameMargins() const;
59 virtual QMargins safeAreaMargins() const;
60
61 virtual void setVisible(bool visible);
62 virtual void setWindowFlags(Qt::WindowFlags flags);
63 virtual void setWindowState(Qt::WindowStates state);
64
65 virtual WId winId() const;
66 virtual void setParent(const QPlatformWindow *window);
67
68 virtual void setWindowTitle(const QString &title);
69 virtual QString windowTitle() const;
70 virtual void setWindowFilePath(const QString &title);
71 virtual void setWindowIcon(const QIcon &icon);
72 virtual bool close();
73 virtual void raise();
74 virtual void lower();
75
76 virtual bool isExposed() const;
77 virtual bool isActive() const;
78 virtual bool isAncestorOf(const QPlatformWindow *child) const;
79 virtual bool isEmbedded() const;
80 virtual bool isForeignWindow() const { return false; }
81 virtual QPoint mapToGlobal(const QPoint &pos) const;
82 QPointF mapToGlobalF(const QPointF &pos) const;
83 virtual QPoint mapFromGlobal(const QPoint &pos) const;
84 QPointF mapFromGlobalF(const QPointF &pos) const;
85
86 virtual void propagateSizeHints();
87
88 virtual void setOpacity(qreal level);
89 virtual void setMask(const QRegion &region);
90 virtual void requestActivateWindow();
91
92 virtual void handleContentOrientationChange(Qt::ScreenOrientation orientation);
93
94 virtual qreal devicePixelRatio() const;
95
96 virtual bool setKeyboardGrabEnabled(bool grab);
97 virtual bool setMouseGrabEnabled(bool grab);
98
99 virtual bool setWindowModified(bool modified);
100
101 virtual bool windowEvent(QEvent *event);
102
103 virtual bool startSystemResize(Qt::Edges edges);
104 virtual bool startSystemMove();
105
106 virtual void setFrameStrutEventsEnabled(bool enabled);
107 virtual bool frameStrutEventsEnabled() const;
108
109 virtual void setAlertState(bool enabled);
110 virtual bool isAlertState() const;
111
112 virtual void invalidateSurface();
113
114 static QRect initialGeometry(const QWindow *w, const QRect &initialGeometry,
115 int defaultWidth, int defaultHeight,
116 const QScreen **resultingScreenReturn = nullptr);
117
118 virtual void requestUpdate();
119 bool hasPendingUpdateRequest() const;
120 virtual void deliverUpdateRequest();
121 virtual bool allowsIndependentThreadedRendering() const;
122
123 // Window property accessors. Platform plugins should use these
124 // instead of accessing QWindow directly.
125 QSize windowMinimumSize() const;
126 QSize windowMaximumSize() const;
127 QSize windowBaseSize() const;
128 QSize windowSizeIncrement() const;
129 QRect windowGeometry() const;
130 QRect windowFrameGeometry() const;
131 QRectF windowClosestAcceptableGeometry(const QRectF &nativeRect) const;
132 static QRectF closestAcceptableGeometry(const QWindow *w, const QRectF &nativeRect);
133
134protected:
135 static QString formatWindowTitle(const QString &title, const QString &separator);
136 QPlatformScreen *screenForGeometry(const QRect &newGeometry) const;
137 static QSize constrainWindowSize(const QSize &size);
138
139 QScopedPointer<QPlatformWindowPrivate> d_ptr;
140};
141
142QT_END_NAMESPACE
143
144#endif //QPLATFORMWINDOW_H
145

source code of qtbase/src/gui/kernel/qplatformwindow.h