diff options
Diffstat (limited to 'src/gui/kernel/qwindow_qpa.cpp')
-rw-r--r-- | src/gui/kernel/qwindow_qpa.cpp | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/src/gui/kernel/qwindow_qpa.cpp b/src/gui/kernel/qwindow_qpa.cpp index 15b0f9cd38..ad16179383 100644 --- a/src/gui/kernel/qwindow_qpa.cpp +++ b/src/gui/kernel/qwindow_qpa.cpp @@ -43,6 +43,8 @@ #include "qplatformwindow_qpa.h" #include "qwindowformat_qpa.h" +#include "qplatformglcontext_qpa.h" +#include "qwindowcontext_qpa.h" #include "qapplication_p.h" @@ -53,9 +55,10 @@ QT_BEGIN_NAMESPACE class QWindowPrivate : public QObjectPrivate { public: - QWindowPrivate(QWindow::WindowTypes types) + QWindowPrivate() : QObjectPrivate() - , windowTypes(types) + , windowType(QWindow::Window) + , surfaceType(QWindow::RasterSurface) , platformWindow(0) , glContext(0) , widget(0) @@ -68,19 +71,25 @@ public: } - QWindow::WindowTypes windowTypes; + QWindow::WindowType windowType; + QWindow::SurfaceType surfaceType; + QPlatformWindow *platformWindow; QWindowFormat requestedFormat; QString windowTitle; QRect geometry; - QGLContext *glContext; + QWindowContext *glContext; QWidget *widget; }; -QWindow::QWindow(WindowTypes types, QWindow *parent) - : QObject(*new QWindowPrivate(types), parent) +QWindow::QWindow(QWindow *parent) + : QObject(*new QWindowPrivate(), parent) { +} +QWindow::~QWindow() +{ + destroy(); } QWidget *QWindow::widget() const @@ -107,17 +116,16 @@ void QWindow::setVisible(bool visible) void QWindow::create() { Q_D(QWindow); - d->platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(this,d->requestedFormat); + d->platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(this); Q_ASSERT(d->platformWindow); } WId QWindow::winId() const { Q_D(const QWindow); - if(d->platformWindow) { - return d->platformWindow->winId(); - } - return 0; + if(!d->platformWindow) + const_cast<QWindow *>(this)->create(); + return d->platformWindow->winId(); } void QWindow::setParent(const QWindow *parent) @@ -148,14 +156,31 @@ QWindowFormat QWindow::requestedWindowFormat() const QWindowFormat QWindow::actualWindowFormat() const { + return glContext()->handle()->windowFormat(); +} + +void QWindow::setSurfaceType(SurfaceType type) +{ + Q_D(QWindow); + d->surfaceType = type; +} + +QWindow::SurfaceType QWindow::surfaceType() const +{ Q_D(const QWindow); - return d->requestedFormat; + return d->surfaceType; +} + +void QWindow::setWindowType(WindowType type) +{ + Q_D(QWindow); + d->windowType = type; } -QWindow::WindowTypes QWindow::types() const +QWindow::WindowType QWindow::type() const { Q_D(const QWindow); - return d->windowTypes; + return d->windowType; } void QWindow::setWindowTitle(const QString &title) @@ -262,9 +287,11 @@ void QWindow::setWindowIcon(const QImage &icon) const qDebug() << "unimplemented:" << __FILE__ << __LINE__; } -QGLContext * QWindow::glContext() const +QWindowContext * QWindow::glContext() const { Q_D(const QWindow); + if (!d->glContext) + const_cast<QWindowPrivate *>(d)->glContext = new QWindowContext(const_cast<QWindow *>(this)); return d->glContext; } @@ -281,13 +308,22 @@ QWindowFormat QWindow::format() const void QWindow::destroy() { + Q_D(QWindow); //JA, this will be solved later.... // if (QGLContext *context = extra->topextra->window->glContext()) { // context->deleteQGLContext(); Q_ASSERT(false); + delete d->glContext; + d->glContext = 0; // } } +QPlatformWindow *QWindow::handle() const +{ + Q_D(const QWindow); + return d->platformWindow; +} + void QWindow::showMinimized() { qDebug() << "unimplemented:" << __FILE__ << __LINE__; |