summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-05-16 16:39:50 +0200
committerSamuel Rødal <samuel.rodal@nokia.com>2011-05-16 16:40:32 +0200
commit25f70314e0e2aa5cb913aba108d2e9c16117004a (patch)
tree3a7a3a115ade70e24cf3b2a8887cf356da58cfe6 /src/gui/kernel
parent276d60a4d6c9d1b72c4aa7df1f86e7ce9097beeb (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.cpp8
-rw-r--r--src/gui/kernel/qplatformwindow_qpa.h2
-rw-r--r--src/gui/kernel/qwindow.cpp76
-rw-r--r--src/gui/kernel/qwindow.h11
-rw-r--r--src/gui/kernel/qwindow_p.h10
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;
};