diff options
author | Samuel Rødal <samuel.rodal@nokia.com> | 2011-05-16 16:39:50 +0200 |
---|---|---|
committer | Samuel Rødal <samuel.rodal@nokia.com> | 2011-05-16 16:40:32 +0200 |
commit | 25f70314e0e2aa5cb913aba108d2e9c16117004a (patch) | |
tree | 3a7a3a115ade70e24cf3b2a8887cf356da58cfe6 /src/gui/kernel | |
parent | 276d60a4d6c9d1b72c4aa7df1f86e7ce9097beeb (diff) |
Implement QWindow minimum/maximum/base size hints and size increments.
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qplatformwindow_qpa.cpp | 8 | ||||
-rw-r--r-- | src/gui/kernel/qplatformwindow_qpa.h | 2 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 76 | ||||
-rw-r--r-- | src/gui/kernel/qwindow.h | 11 | ||||
-rw-r--r-- | src/gui/kernel/qwindow_p.h | 10 |
5 files changed, 94 insertions, 13 deletions
diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index d7d1d96f42..afbff2ad5d 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -161,6 +161,14 @@ void QPlatformWindow::raise() { qWarning("This plugin does not support raise()") void QPlatformWindow::lower() { qWarning("This plugin does not support lower()"); } /*! + Reimplement to propagate the size hints of the QWindow. + + The size hints include QWindow::minimumSize(), QWindow::maximumSize(), + QWindow::sizeIncrement(), and QWindow::baseSize(). +*/ +void QPlatformWindow::propagateSizeHints() {qWarning("This plugin does not support propagateSizeHints()"); } + +/*! Reimplement to be able to let Qt set the opacity level of a window */ void QPlatformWindow::setOpacity(qreal level) diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h index c74e96695d..de3174bde9 100644 --- a/src/gui/kernel/qplatformwindow_qpa.h +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -80,6 +80,8 @@ public: virtual void raise(); virtual void lower(); + virtual void propagateSizeHints(); + virtual void setOpacity(qreal level); virtual void requestActivateWindow(); diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index 897b370cf5..5d4fd763b8 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -143,6 +143,15 @@ void QWindow::setParent(QWindow *parent) d->parentWindow = parent; } +/*! + Returns whether the window is top level, i.e. parent-less. + */ +bool QWindow::isTopLevel() const +{ + Q_D(const QWindow); + return d->parentWindow == 0; +} + void QWindow::setWindowFormat(const QWindowFormat &format) { Q_D(QWindow); @@ -256,26 +265,68 @@ void QWindow::setWindowState(Qt::WindowState state) QSize QWindow::minimumSize() const { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; - return QSize(); + Q_D(const QWindow); + return d->minimumSize; } QSize QWindow::maximumSize() const { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; - return QSize(); + Q_D(const QWindow); + return d->maximumSize; } -void QWindow::setMinimumSize(const QSize &size) const +QSize QWindow::baseSize() const { - Q_UNUSED(size); - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + Q_D(const QWindow); + return d->baseSize; } -void QWindow::setMaximumSize(const QSize &size) const +QSize QWindow::sizeIncrement() const { - Q_UNUSED(size); - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + Q_D(const QWindow); + return d->sizeIncrement; +} + +void QWindow::setMinimumSize(const QSize &size) +{ + Q_D(QWindow); + QSize adjustedSize = QSize(qBound(0, size.width(), QWINDOWSIZE_MAX), qBound(0, size.height(), QWINDOWSIZE_MAX)); + if (d->minimumSize == adjustedSize) + return; + d->minimumSize = adjustedSize; + if (d->platformWindow && isTopLevel()) + d->platformWindow->propagateSizeHints(); +} + +void QWindow::setMaximumSize(const QSize &size) +{ + Q_D(QWindow); + QSize adjustedSize = QSize(qBound(0, size.width(), QWINDOWSIZE_MAX), qBound(0, size.height(), QWINDOWSIZE_MAX)); + if (d->maximumSize == adjustedSize) + return; + d->maximumSize = adjustedSize; + if (d->platformWindow && isTopLevel()) + d->platformWindow->propagateSizeHints(); +} + +void QWindow::setBaseSize(const QSize &size) +{ + Q_D(QWindow); + if (d->baseSize == size) + return; + d->baseSize = size; + if (d->platformWindow && isTopLevel()) + d->platformWindow->propagateSizeHints(); +} + +void QWindow::setSizeIncrement(const QSize &size) +{ + Q_D(QWindow); + if (d->sizeIncrement == size) + return; + d->sizeIncrement = size; + if (d->platformWindow && isTopLevel()) + d->platformWindow->propagateSizeHints(); } void QWindow::setGeometry(const QRect &rect) @@ -464,4 +515,9 @@ void QWindow::wheelEvent(QWheelEvent *) } #endif //QT_NO_WHEELEVENT +Q_GUI_EXPORT QWindowPrivate *qt_window_private(QWindow *window) +{ + return window->d_func(); +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h index 70227106b1..e0a1871ea1 100644 --- a/src/gui/kernel/qwindow.h +++ b/src/gui/kernel/qwindow.h @@ -94,6 +94,8 @@ public: QWindow *parent() const; void setParent(QWindow *parent); + bool isTopLevel() const; + QWindow *topLevelWindow() const; void setWindowFormat(const QWindowFormat &format); @@ -116,9 +118,13 @@ public: QSize minimumSize() const; QSize maximumSize() const; + QSize baseSize() const; + QSize sizeIncrement() const; - void setMinimumSize(const QSize &size) const; - void setMaximumSize(const QSize &size) const; + void setMinimumSize(const QSize &size); + void setMaximumSize(const QSize &size); + void setBaseSize(const QSize &size); + void setSizeIncrement(const QSize &size); void setGeometry(const QRect &rect); QRect geometry() const; @@ -177,6 +183,7 @@ private: friend class QGuiApplication; friend class QGuiApplicationPrivate; friend class QWindowSurface; + friend Q_GUI_EXPORT QWindowPrivate *qt_window_private(QWindow *window); }; QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindow_p.h b/src/gui/kernel/qwindow_p.h index b6227741ba..215a18d27e 100644 --- a/src/gui/kernel/qwindow_p.h +++ b/src/gui/kernel/qwindow_p.h @@ -52,7 +52,9 @@ QT_BEGIN_NAMESPACE QT_MODULE(Gui) -class QWindowPrivate : public QObjectPrivate +#define QWINDOWSIZE_MAX ((1<<24)-1) + +class Q_GUI_EXPORT QWindowPrivate : public QObjectPrivate { public: QWindowPrivate() @@ -65,6 +67,7 @@ public: , glContext(0) , surface(0) , windowState(Qt::WindowNoState) + , maximumSize(QWINDOWSIZE_MAX, QWINDOWSIZE_MAX) { isWindow = true; } @@ -84,6 +87,11 @@ public: QWindowContext *glContext; QWindowSurface *surface; Qt::WindowState windowState; + + QSize minimumSize; + QSize maximumSize; + QSize baseSize; + QSize sizeIncrement; }; |