1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2017 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtGui module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 #ifndef QPLATFORMWINDOW_H 40 #define QPLATFORMWINDOW_H 41 42 // 43 // W A R N I N G 44 // ------------- 45 // 46 // This file is part of the QPA API and is not meant to be used 47 // in applications. Usage of this API may make your code 48 // source and binary incompatible with future versions of Qt. 49 // 50 51 #include <QtGui/qtguiglobal.h> 52 #include <QtCore/qscopedpointer.h> 53 #include <QtCore/qrect.h> 54 #include <QtCore/qmargins.h> 55 #include <QtCore/qstring.h> 56 #include <QtGui/qwindowdefs.h> 57 #include <QtGui/qwindow.h> 58 #include <qpa/qplatformopenglcontext.h> 59 #include <qpa/qplatformsurface.h> 60 61 QT_BEGIN_NAMESPACE 62 63 64 class QPlatformScreen; 65 class QPlatformWindowPrivate; 66 class QScreen; 67 class QWindow; 68 class QIcon; 69 class QRegion; 70 71 class Q_GUI_EXPORT QPlatformWindow : public QPlatformSurface 72 { 73 Q_DECLARE_PRIVATE(QPlatformWindow) 74 public: 75 Q_DISABLE_COPY_MOVE(QPlatformWindow) 76 77 explicit QPlatformWindow(QWindow *window); 78 ~QPlatformWindow() override; 79 80 virtual void initialize(); 81 82 QWindow *window() const; 83 QPlatformWindow *parent() const; 84 85 QPlatformScreen *screen() const override; 86 87 virtual QSurfaceFormat format() const override; 88 89 virtual void setGeometry(const QRect &rect); 90 virtual QRect geometry() const; 91 virtual QRect normalGeometry() const; 92 93 virtual QMargins frameMargins() const; 94 virtual QMargins safeAreaMargins() const; 95 96 virtual void setVisible(bool visible); 97 virtual void setWindowFlags(Qt::WindowFlags flags); 98 virtual void setWindowState(Qt::WindowStates state); 99 100 virtual WId winId() const; 101 virtual void setParent(const QPlatformWindow *window); 102 103 virtual void setWindowTitle(const QString &title); 104 virtual void setWindowFilePath(const QString &title); 105 virtual void setWindowIcon(const QIcon &icon); 106 virtual bool close(); 107 virtual void raise(); 108 virtual void lower(); 109 110 virtual bool isExposed() const; 111 virtual bool isActive() const; 112 virtual bool isAncestorOf(const QPlatformWindow *child) const; 113 virtual bool isEmbedded() const; isForeignWindow()114 virtual bool isForeignWindow() const { return false; }; 115 virtual QPoint mapToGlobal(const QPoint &pos) const; 116 virtual QPoint mapFromGlobal(const QPoint &pos) const; 117 118 virtual void propagateSizeHints(); 119 120 virtual void setOpacity(qreal level); 121 virtual void setMask(const QRegion ®ion); 122 virtual void requestActivateWindow(); 123 124 virtual void handleContentOrientationChange(Qt::ScreenOrientation orientation); 125 126 virtual qreal devicePixelRatio() const; 127 128 virtual bool setKeyboardGrabEnabled(bool grab); 129 virtual bool setMouseGrabEnabled(bool grab); 130 131 virtual bool setWindowModified(bool modified); 132 133 virtual bool windowEvent(QEvent *event); 134 135 virtual bool startSystemResize(Qt::Edges edges); 136 virtual bool startSystemMove(); 137 138 virtual void setFrameStrutEventsEnabled(bool enabled); 139 virtual bool frameStrutEventsEnabled() const; 140 141 virtual void setAlertState(bool enabled); 142 virtual bool isAlertState() const; 143 144 virtual void invalidateSurface(); 145 146 static QRect initialGeometry(const QWindow *w, const QRect &initialGeometry, 147 int defaultWidth, int defaultHeight, 148 const QScreen **resultingScreenReturn = nullptr); 149 150 virtual void requestUpdate(); 151 bool hasPendingUpdateRequest() const; 152 virtual void deliverUpdateRequest(); 153 154 // Window property accessors. Platform plugins should use these 155 // instead of accessing QWindow directly. 156 QSize windowMinimumSize() const; 157 QSize windowMaximumSize() const; 158 QSize windowBaseSize() const; 159 QSize windowSizeIncrement() const; 160 QRect windowGeometry() const; 161 QRect windowFrameGeometry() const; 162 QRectF windowClosestAcceptableGeometry(const QRectF &nativeRect) const; 163 static QRectF closestAcceptableGeometry(const QWindow *w, const QRectF &nativeRect); 164 165 protected: 166 static QString formatWindowTitle(const QString &title, const QString &separator); 167 QPlatformScreen *screenForGeometry(const QRect &newGeometry) const; 168 static QSize constrainWindowSize(const QSize &size); 169 170 QScopedPointer<QPlatformWindowPrivate> d_ptr; 171 }; 172 173 QT_END_NAMESPACE 174 175 #endif //QPLATFORMWINDOW_H 176