diff options
author | Jørgen Lind <jorgen.lind@nokia.com> | 2011-04-26 12:43:11 +0200 |
---|---|---|
committer | Samuel Rødal <samuel.rodal@nokia.com> | 2011-04-28 15:38:48 +0200 |
commit | fbef41167aa4aede67bc1ec904142e2e5e12c7fc (patch) | |
tree | e8c77fbeab44e1d95ecf9870f9a323d7f9ce95c7 /src | |
parent | 25028e3b144a54435be437d452b65bfbd4f63309 (diff) |
Make QtGui compile again....
Comment out stuff in QWidget::create_sys
(cherry picked from commit 1bbc6a6bb2bf1175080e7a5ba6834ff642fd47ab)
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/kernel/kernel.pri | 6 | ||||
-rw-r--r-- | src/gui/kernel/qplatformglcontext_qpa.h | 4 | ||||
-rw-r--r-- | src/gui/kernel/qplatformwindow_qpa.cpp | 13 | ||||
-rw-r--r-- | src/gui/kernel/qplatformwindow_qpa.h | 7 | ||||
-rw-r--r-- | src/gui/kernel/qwidget.cpp | 3 | ||||
-rw-r--r-- | src/gui/kernel/qwidget.h | 8 | ||||
-rw-r--r-- | src/gui/kernel/qwidget_p.h | 5 | ||||
-rw-r--r-- | src/gui/kernel/qwidget_qpa.cpp | 164 | ||||
-rw-r--r-- | src/gui/kernel/qwindow_qpa.cpp | 77 | ||||
-rw-r--r-- | src/gui/kernel/qwindow_qpa.h | 27 | ||||
-rw-r--r-- | src/gui/kernel/qwindowformat_qpa.cpp | 792 | ||||
-rw-r--r-- | src/gui/kernel/qwindowformat_qpa.h | 53 |
12 files changed, 230 insertions, 929 deletions
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index f1a34a7de9..daf9c9405e 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -220,14 +220,14 @@ qpa { kernel/qplatformintegrationfactory_qpa_p.h \ kernel/qplatformintegrationplugin_qpa.h \ kernel/qplatformwindow_qpa.h \ - kernel/qwindowformat_qpa.h \ kernel/qplatformglcontext_qpa.h \ kernel/qdesktopwidget_qpa_p.h \ kernel/qplatformeventloopintegration_qpa.h \ kernel/qplatformcursor_qpa.h \ kernel/qplatformclipboard_qpa.h \ kernel/qplatformnativeinterface_qpa.h \ - kernel/qwindow_qpa.cpp + kernel/qwindowformat_qpa.h \ + kernel/qwindow_qpa.h SOURCES += \ kernel/qapplication_qpa.cpp \ @@ -246,13 +246,13 @@ qpa { kernel/qplatformintegrationfactory_qpa.cpp \ kernel/qplatformintegrationplugin_qpa.cpp \ kernel/qplatformwindow_qpa.cpp \ - kernel/qwindowformat_qpa.cpp \ kernel/qplatformeventloopintegration_qpa.cpp \ kernel/qplatformglcontext_qpa.cpp \ kernel/qplatformcursor_qpa.cpp \ kernel/qplatformclipboard_qpa.cpp \ kernel/qplatformnativeinterface_qpa.cpp \ kernel/qsessionmanager_qpa.cpp \ + kernel/qwindowformat_qpa.cpp \ kernel/qwindow_qpa.cpp contains(QT_CONFIG, glib) { diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 28923a9457..5a22bc769a 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -43,7 +43,7 @@ #define QPLATFORM_GL_CONTEXT_H #include <QtCore/qnamespace.h> -#include <QtGui/QPlatformWindowFormat> +#include <QtGui/QWindowFormat> QT_BEGIN_HEADER @@ -66,7 +66,7 @@ public: virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; - virtual QPlatformWindowFormat platformWindowFormat() const = 0; + virtual QWindowFormat windowFormat() const = 0; const static QPlatformGLContext *currentContext(); diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index 19bf7a9f29..e3caba1331 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -46,7 +46,7 @@ class QPlatformWindowPrivate { - QWidget *tlw; + QWindow *window; QRect rect; Qt::WindowFlags flags; friend class QPlatformWindow; @@ -56,12 +56,11 @@ class QPlatformWindowPrivate Constructs a platform window with the given top level widget. */ -QPlatformWindow::QPlatformWindow(QWidget *tlw) +QPlatformWindow::QPlatformWindow(QWindow *window) : d_ptr(new QPlatformWindowPrivate) { Q_D(QPlatformWindow); - d->tlw = tlw; - tlw->setPlatformWindow(this); + d->window = window; } /*! @@ -74,10 +73,10 @@ QPlatformWindow::~QPlatformWindow() /*! Returnes the widget which belongs to the QPlatformWindow */ -QWidget *QPlatformWindow::widget() const +QWindow *QPlatformWindow::window() const { Q_D(const QPlatformWindow); - return d->tlw; + return d->window; } /*! @@ -186,7 +185,7 @@ void QPlatformWindow::setOpacity(qreal level) */ void QPlatformWindow::requestActivateWindow() { - QWindowSystemInterface::handleWindowActivated(widget()); + QWindowSystemInterface::handleWindowActivated(window()->widget()); } /*! diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h index 1673db3e03..a6edf190cf 100644 --- a/src/gui/kernel/qplatformwindow_qpa.h +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -55,18 +55,17 @@ QT_BEGIN_NAMESPACE QT_MODULE(Gui) class QPlatformWindowPrivate; -class QWidget; +class QWindow; class QPlatformGLContext; class Q_GUI_EXPORT QPlatformWindow { Q_DECLARE_PRIVATE(QPlatformWindow) public: - QPlatformWindow(QWidget *tlw); - QPlatformWindow(Qt::HANDLE , QWidget *tlw); + QPlatformWindow(QWindow *window); virtual ~QPlatformWindow(); - QWidget *widget() const; + QWindow *window() const; virtual void setGeometry(const QRect &rect); virtual QRect geometry() const; diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 5705214762..f153860ba9 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1762,8 +1762,7 @@ void QWidgetPrivate::createTLExtra() qDebug() << "tlextra" << ++count; #endif #if defined(Q_WS_QPA) - x->platformWindow = 0; - x->platformWindowFormat = QPlatformWindowFormat::defaultFormat(); + x->window = 0; x->screenIndex = 0; #endif } diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index fe21fb8608..252f0ea413 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -57,6 +57,7 @@ #include <QtGui/qkeysequence.h> #ifdef Q_WS_QPA //should this go somewhere else? +#include <QtGui/qwindow_qpa.h> #include <QtGui/qwindowformat_qpa.h> #endif @@ -635,11 +636,8 @@ public: QWindowSurface *windowSurface() const; #if defined(Q_WS_QPA) - void setPlatformWindow(QPlatformWindow *window); - QPlatformWindow *platformWindow() const; - - void setPlatformWindowFormat(const QPlatformWindowFormat &format); - QPlatformWindowFormat platformWindowFormat() const; + void setWindowHandle(QWindow *window); + QWindow *windowHandle() const; friend class QDesktopScreenWidget; #endif diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 919f8bc3da..e9e9ff8c72 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -103,7 +103,7 @@ class QWSManager; class QCoreGraphicsPaintEnginePrivate; #endif #if defined(Q_WS_QPA) -class QPlatformWindow; +class QWindow; #endif class QPaintEngine; class QPixmap; @@ -233,8 +233,7 @@ struct QTLWExtra { uint inExpose : 1; // Prevents drawing recursion uint nativeWindowTransparencyEnabled : 1; // Tracks native window transparency #elif defined(Q_WS_QPA) - QPlatformWindow *platformWindow; - QPlatformWindowFormat platformWindowFormat; + QWindow *window; quint32 screenIndex; // index in qplatformscreenlist #endif }; diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 001810e0f4..b5a75155da 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE -void q_createNativeChildrenAndSetParent(QPlatformWindow *parentWindow, const QWidget *parentWidget) +void q_createNativeChildrenAndSetParent(QWindow *parentWindow, const QWidget *parentWidget) { QObjectList children = parentWidget->children(); for (int i = 0; i < children.size(); i++) { @@ -62,11 +62,11 @@ void q_createNativeChildrenAndSetParent(QPlatformWindow *parentWindow, const QWi const QWidget *childWidget = qobject_cast<const QWidget *>(children.at(i)); if (childWidget) { // should not be necessary if (childWidget->testAttribute(Qt::WA_NativeWindow)) { - if (!childWidget->platformWindow()) + if (!childWidget->windowHandle()) childWidget->winId(); } - if (childWidget->platformWindow()) { - childWidget->platformWindow()->setParent(parentWindow); + if (childWidget->windowHandle()) { + childWidget->windowHandle()->setParent(parentWindow); } else { q_createNativeChildrenAndSetParent(parentWindow,childWidget); } @@ -90,36 +90,36 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO return; // we only care about real toplevels QWindowSurface *surface = q->windowSurface(); - QPlatformWindow *platformWindow = q->platformWindow(); +// QPlatformWindow *platformWindow = q->platformWindow(); - if (!platformWindow) { - platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(q); - } - Q_ASSERT(platformWindow); +// if (!platformWindow) { +// platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(q); +// } +// Q_ASSERT(platformWindow); - if (!surface ) { - if (platformWindow && q->platformWindowFormat().hasWindowSurface()) { - surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); - } else { - q->setAttribute(Qt::WA_PaintOnScreen,true); - } - } +// if (!surface ) { +// if (platformWindow && q->platformWindowFormat().hasWindowSurface()) { +// surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); +// } else { +// q->setAttribute(Qt::WA_PaintOnScreen,true); +// } +// } - data.window_flags = q->platformWindow()->setWindowFlags(data.window_flags); +// data.window_flags = q->windowHandle()->setWindowFlags(data.window_flags); - setWinId(q->platformWindow()->winId()); +// setWinId(q->platformWindow()->winId()); //first check children. and create them if necessary - q_createNativeChildrenAndSetParent(q->platformWindow(),q); +// q_createNativeChildrenAndSetParent(q->platformWindow(),q); - //if we we have a parent, then set correct parent; - if (!q->isWindow()) { - if (QWidget *nativeParent = q->nativeParentWidget()) { - if (nativeParent->platformWindow()) { - platformWindow->setParent(nativeParent->platformWindow()); - } - } - } +// //if we we have a parent, then set correct parent; +// if (!q->isWindow()) { +// if (QWidget *nativeParent = q->nativeParentWidget()) { +// if (nativeParent->platformWindow()) { +// platformWindow->setParent(nativeParent->platformWindow()); +// } +// } +// } QApplicationPrivate::platformIntegration()->moveToScreen(q, topData()->screenIndex); // qDebug() << "create_sys" << q << q->internalWinId(); @@ -142,7 +142,7 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) for (int i = 0; i < childList.size(); i++) { QWidget *widget = qobject_cast<QWidget *>(childList.at(i)); if (widget && widget->testAttribute(Qt::WA_NativeWindow)) { - if (widget->platformWindow()) { + if (widget->windowHandle()) { widget->destroy(); } } @@ -177,10 +177,10 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (parent != newparent) { QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? - if (q->platformWindow() && newparent) { - QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget(); - if (parentWithWindow && parentWithWindow->platformWindow()) { - q->platformWindow()->setParent(parentWithWindow->platformWindow()); + if (q->windowHandle() && newparent) { + QWidget * parentWithWindow = newparent->windowHandle()? newparent : newparent->nativeParentWidget(); + if (parentWithWindow && parentWithWindow->windowHandle()) { + q->windowHandle()->setParent(parentWithWindow->windowHandle()); } } @@ -209,8 +209,9 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (f & Qt::Window) { //qDebug() << "setParent_sys" << q << newparent << hex << f; - if (QPlatformWindow *window = q->platformWindow()) - data.window_flags = window->setWindowFlags(data.window_flags); +// if (QPlatformWindow *window = q->platformWindow()) +// data.window_flags = window->setWindowFlags(data.window_flags); + Q_ASSERT(false); } if (q->isWindow() || (!newparent || newparent->isVisible()) || explicitlyHidden) @@ -284,7 +285,7 @@ void QWidgetPrivate::setWindowTitle_sys(const QString &caption) if (!q->isWindow()) return; - if (QPlatformWindow *window = q->platformWindow()) + if (QWindow *window = q->windowHandle()) window->setWindowTitle(caption); } @@ -371,8 +372,8 @@ QWidget *QWidget::keyboardGrabber() void QWidget::activateWindow() { - if (platformWindow()) - platformWindow()->requestActivateWindow(); + if (windowHandle()) + windowHandle()->requestActivateWindow(); } void QWidgetPrivate::show_sys() @@ -386,7 +387,7 @@ void QWidgetPrivate::show_sys() QApplication::postEvent(q, new QUpdateLaterEvent(q->rect())); - QPlatformWindow *window = q->platformWindow(); + QWindow *window = q->windowHandle(); if (window) { QRect geomRect = q->geometry(); if (!q->isWindow()) { @@ -419,7 +420,7 @@ void QWidgetPrivate::hide_sys() } return; } - if (QPlatformWindow *window = q->platformWindow()) { + if (QWindow *window = q->windowHandle()) { window->setVisible(false); } @@ -526,7 +527,7 @@ void QWidgetPrivate::raise_sys() { Q_Q(QWidget); if (q->isWindow()) { - q->platformWindow()->raise(); + q->windowHandle()->raise(); } } @@ -535,7 +536,7 @@ void QWidgetPrivate::lower_sys() Q_Q(QWidget); if (q->isWindow()) { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - q->platformWindow()->lower(); + q->windowHandle()->lower(); } else if (QWidget *p = q->parentWidget()) { setDirtyOpaqueRegion(); p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); @@ -585,12 +586,12 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) data.crect = r; if (q->isVisible()) { - if (q->platformWindow()) { + if (q->windowHandle()) { if (q->isWindow()) { - q->platformWindow()->setGeometry(q->geometry()); + q->windowHandle()->setGeometry(q->geometry()); } else { QPoint posInNativeParent = q->mapTo(q->nativeParentWidget(),QPoint()); - q->platformWindow()->setGeometry(QRect(posInNativeParent,r.size())); + q->windowHandle()->setGeometry(QRect(posInNativeParent,r.size())); } const QWidgetBackingStore *bs = maybeBackingStore(); if (bs->windowSurface) { @@ -611,7 +612,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) if (isResize) { QResizeEvent e(r.size(), olds); QApplication::sendEvent(q, &e); - if (q->platformWindow()) + if (q->windowHandle()) q->update(); } } else { // not visible @@ -681,64 +682,18 @@ int QWidget::metric(PaintDeviceMetric m) const /*! \preliminary - Sets the window to be the \a window specified. - The QWidget takes ownership of the \a surface. -*/ -void QWidget::setPlatformWindow(QPlatformWindow *window) -{ - Q_D(QWidget); - - QTLWExtra *topData = d->topData(); - if (topData->platformWindow == window) - return; - - delete topData->platformWindow; - topData->platformWindow = window; -} - -/*! - \preliminary - Returns the QPlatformWindow this widget will be drawn into. */ -QPlatformWindow *QWidget::platformWindow() const +QWindow *QWidget::windowHandle() const { Q_D(const QWidget); QTLWExtra *extra = d->maybeTopData(); - if (extra && extra->platformWindow) - return extra->platformWindow; + if (extra && extra->window) + return extra->window; return 0; } -void QWidget::setPlatformWindowFormat(const QPlatformWindowFormat &format) -{ - if (isWindow() || testAttribute(Qt::WA_NativeWindow)) { - Q_D(QWidget); - QTLWExtra *topData = d->topData(); - topData->platformWindowFormat = format; - if (testAttribute(Qt::WA_WState_Created)) { - bool wasVisible = testAttribute(Qt::WA_WState_Visible); - destroy(); - d->create_sys(0,true,true); - if (wasVisible) - topData->platformWindow->setVisible(true); - } - } -} - -QPlatformWindowFormat QWidget::platformWindowFormat() const -{ - Q_D(const QWidget); - - QTLWExtra *extra = d->maybeTopData(); - if (extra){ - return extra->platformWindowFormat; - } else { - return QPlatformWindowFormat::defaultFormat(); - } -} - void QWidgetPrivate::createSysExtra() { } @@ -759,14 +714,13 @@ void QWidgetPrivate::deleteTLSysExtra() //delete the qglcontext before we delete the qplatformglcontext. //One unfortunate thing about this is that we potentially create a glContext just to //delete it straight afterwards. - if (extra->topextra->platformWindow) { - if (QPlatformGLContext *context = extra->topextra->platformWindow->glContext()) { - context->deleteQGLContext(); - } + if (extra->topextra->window) { + extra->topextra->window->destroy(); } setWinId(0); - delete extra->topextra->platformWindow; - extra->topextra->platformWindow = 0; + //hmmm. should we delete window.. + delete extra->topextra->window; + extra->topextra->window = 0; } } @@ -789,7 +743,7 @@ void QWidgetPrivate::updateFrameStrut() void QWidgetPrivate::setWindowOpacity_sys(qreal level) { Q_Q(QWidget); - q->platformWindow()->setOpacity(level); + q->windowHandle()->setOpacity(level); } void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect) @@ -807,11 +761,9 @@ QPaintEngine *QWidget::paintEngine() const QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys() { - Q_Q(QWidget); - if (q->platformWindowFormat().hasWindowSurface()) - return QApplicationPrivate::platformIntegration()->createWindowSurface(q,0); - else - return 0; + //This function should not be called. + Q_ASSERT(false); + return 0; } void QWidgetPrivate::setModal_sys() diff --git a/src/gui/kernel/qwindow_qpa.cpp b/src/gui/kernel/qwindow_qpa.cpp index dff009931c..15b0f9cd38 100644 --- a/src/gui/kernel/qwindow_qpa.cpp +++ b/src/gui/kernel/qwindow_qpa.cpp @@ -50,12 +50,15 @@ QT_BEGIN_NAMESPACE -class QWindowPrivate : public QObjectPrivate{ - QWindowPrivate() +class QWindowPrivate : public QObjectPrivate +{ +public: + QWindowPrivate(QWindow::WindowTypes types) : QObjectPrivate() - , types(0) + , windowTypes(types) , platformWindow(0) , glContext(0) + , widget(0) { } @@ -65,20 +68,31 @@ class QWindowPrivate : public QObjectPrivate{ } -private: QWindow::WindowTypes windowTypes; QPlatformWindow *platformWindow; QWindowFormat requestedFormat; QString windowTitle; QRect geometry; QGLContext *glContext; + QWidget *widget; }; QWindow::QWindow(WindowTypes types, QWindow *parent) - : QObject(*new QWindowPrivate(format), parent) + : QObject(*new QWindowPrivate(types), parent) +{ + +} + +QWidget *QWindow::widget() const +{ + Q_D(const QWindow); + return d->widget; +} + +void QWindow::setWidget(QWidget *widget) { Q_D(QWindow); - d->windowTypes = types; + d->widget = widget; } void QWindow::setVisible(bool visible) @@ -99,7 +113,7 @@ void QWindow::create() WId QWindow::winId() const { - Q_D(QWindow); + Q_D(const QWindow); if(d->platformWindow) { return d->platformWindow->winId(); } @@ -111,7 +125,7 @@ void QWindow::setParent(const QWindow *parent) Q_D(QWindow); //How should we support lazy init when setting parent if (!parent->d_func()->platformWindow) { - parent->create(); + const_cast<QWindow *>(parent)->create(); } if(!d->platformWindow) { @@ -138,7 +152,7 @@ QWindowFormat QWindow::actualWindowFormat() const return d->requestedFormat; } -WindowTypes QWindow::types() const +QWindow::WindowTypes QWindow::types() const { Q_D(const QWindow); return d->windowTypes; @@ -194,30 +208,36 @@ void QWindow::requestActivateWindow() Qt::WindowStates QWindow::windowState() const { qDebug() << "unimplemented:" << __FILE__ << __LINE__; + return Qt::WindowNoState; } void QWindow::setWindowState(Qt::WindowStates state) { + Q_UNUSED(state); qDebug() << "unimplemented:" << __FILE__ << __LINE__; } QSize QWindow::minimumSize() const { qDebug() << "unimplemented:" << __FILE__ << __LINE__; + return QSize(); } QSize QWindow::maximumSize() const { qDebug() << "unimplemented:" << __FILE__ << __LINE__; + return QSize(); } void QWindow::setMinimumSize(const QSize &size) const { + Q_UNUSED(size); qDebug() << "unimplemented:" << __FILE__ << __LINE__; } void QWindow::setMaximumSize(const QSize &size) const { + Q_UNUSED(size); qDebug() << "unimplemented:" << __FILE__ << __LINE__; } @@ -238,49 +258,71 @@ QRect QWindow::geometry() const void QWindow::setWindowIcon(const QImage &icon) const { + Q_UNUSED(icon); qDebug() << "unimplemented:" << __FILE__ << __LINE__; } QGLContext * QWindow::glContext() const { - Q_D(QWindow); + Q_D(const QWindow); return d->glContext; } +void QWindow::setRequestFormat(const QWindowFormat &format) +{ + Q_D(QWindow); + d->requestedFormat = format; +} + +QWindowFormat QWindow::format() const +{ + return QWindowFormat(); +} + +void QWindow::destroy() +{ + //JA, this will be solved later.... + // if (QGLContext *context = extra->topextra->window->glContext()) { + // context->deleteQGLContext(); + Q_ASSERT(false); + // } +} + void QWindow::showMinimized() { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + qDebug() << "unimplemented:" << __FILE__ << __LINE__; } void QWindow::showMaximized() { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + qDebug() << "unimplemented:" << __FILE__ << __LINE__; } void QWindow::showFullScreen() { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + qDebug() << "unimplemented:" << __FILE__ << __LINE__; } void QWindow::showNormal() { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + qDebug() << "unimplemented:" << __FILE__ << __LINE__; } bool QWindow::close() { //should we have close? - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + qDebug() << "unimplemented:" << __FILE__ << __LINE__; + return true; } void QWindow::resizeEvent(QResizeEvent *) { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + qDebug() << "unimplemented:" << __FILE__ << __LINE__; } void QWindow::showEvent(QShowEvent *) { - qDebug() << "unimplemented:" << __FILE__ << __LINE__; + qDebug() << "unimplemented:" << __FILE__ << __LINE__; } void QWindow::hideEvent(QHideEvent *) @@ -291,6 +333,7 @@ void QWindow::hideEvent(QHideEvent *) bool QWindow::event(QEvent *) { qDebug() << "unimplemented:" << __FILE__ << __LINE__; + return false; } void QWindow::keyPressEvent(QKeyEvent *) diff --git a/src/gui/kernel/qwindow_qpa.h b/src/gui/kernel/qwindow_qpa.h index c191de3bde..d745fb0b4c 100644 --- a/src/gui/kernel/qwindow_qpa.h +++ b/src/gui/kernel/qwindow_qpa.h @@ -42,8 +42,8 @@ #ifndef QWINDOW_QPA_H #define QWINDOW_QPA_H -#include <QObject> - +#include <QtCore/QObject> +#include <QtCore/QEvent> #include <QtGui/qwindowformat_qpa.h> QT_BEGIN_HEADER @@ -54,6 +54,17 @@ QT_MODULE(Gui) class QWindowPrivate; class QGLContext; +class QWidget; + +class QResizeEvent; +class QShowEvent; +class QHideEvent; +class QKeyEvent; +class QInputMethodEvent; +class QMouseEvent; +#ifndef QT_NO_WHEELEVENT +class QWheelEvent; +#endif class Q_GUI_EXPORT QWindow : public QObject { @@ -71,7 +82,12 @@ public: }; Q_DECLARE_FLAGS(WindowTypes, WindowType) - QWindow(WindowTypes types = Window, QWindow *parent = 0); + QWindow(QWindow::WindowTypes types = Window, QWindow *parent = 0); + + // to be removed at some poitn in the future + QWidget *widget() const; + void setWidget(QWidget *widget); + void setVisible(bool visible); void create(); @@ -105,6 +121,11 @@ public: QGLContext *glContext() const; + void setRequestFormat(const QWindowFormat &format); + QWindowFormat format() const; + + void destroy(); + public Q_SLOTS: inline void show() { setVisible(true); } inline void hide() { setVisible(false); } diff --git a/src/gui/kernel/qwindowformat_qpa.cpp b/src/gui/kernel/qwindowformat_qpa.cpp index 4cc1f77e58..831e1a91b8 100644 --- a/src/gui/kernel/qwindowformat_qpa.cpp +++ b/src/gui/kernel/qwindowformat_qpa.cpp @@ -43,196 +43,59 @@ #include <QtCore/QDebug> -Q_GLOBAL_STATIC(QPlatformWindowFormat, q_platformwindow_default_format); - -class QPlatformWindowFormatPrivate +class QWindowFormatPrivate { public: - QPlatformWindowFormatPrivate() + QWindowFormatPrivate() : ref(1) - , opts(QPlatformWindowFormat::DoubleBuffer | QPlatformWindowFormat::DepthBuffer - | QPlatformWindowFormat::Rgba | QPlatformWindowFormat::DirectRendering - | QPlatformWindowFormat::StencilBuffer | QPlatformWindowFormat::DeprecatedFunctions - | QPlatformWindowFormat::HasWindowSurface) + , opts(QWindowFormat::DoubleBuffer | QWindowFormat::WindowSurface) , depthSize(-1) - , accumSize(-1) , stencilSize(-1) - , redSize(-1) - , greenSize(-1) - , blueSize(-1) - , alphaSize(-1) + , colorFormat(QWindowFormat::RGB888) , numSamples(-1) - , swapInterval(-1) - , windowApi(QPlatformWindowFormat::Raster) , sharedContext(0) { } - QPlatformWindowFormatPrivate(const QPlatformWindowFormatPrivate *other) + QWindowFormatPrivate(const QWindowFormatPrivate *other) : ref(1), opts(other->opts), depthSize(other->depthSize), - accumSize(other->accumSize), stencilSize(other->stencilSize), - redSize(other->redSize), - greenSize(other->greenSize), - blueSize(other->blueSize), - alphaSize(other->alphaSize), + colorFormat(other->colorFormat), + swapBehavior(other->swapBehavior), numSamples(other->numSamples), - swapInterval(other->swapInterval), - windowApi(other->windowApi), sharedContext(other->sharedContext) { } QAtomicInt ref; - QPlatformWindowFormat::FormatOptions opts; + QWindowFormat::FormatOptions opts; int depthSize; - int accumSize; int stencilSize; - int redSize; - int greenSize; - int blueSize; - int alphaSize; + QWindowFormat::ColorFormat colorFormat; + QWindowFormat::SwapBehavior swapBehavior; int numSamples; - int swapInterval; - QPlatformWindowFormat::WindowApi windowApi; QPlatformGLContext *sharedContext; }; -/*! - \class QPlatformWindowFormat - \brief The QPlatformWindowFormat class specifies the display format of an OpenGL - rendering context and if possible attributes of the corresponding QPlatformWindow. - - \ingroup painting - - QWidget has a setter and getter function for QPlatformWindowFormat. These functions can be used - by the application programmer to signal what kind of format he wants to the window and glcontext - should have. However, it is not always possible to fulfill these requirements. The application - programmer should therefore check the resulting QPlatformWindowFormat from QPlatformGLContext - to see the format that was actually created. - - A display format has several characteristics: - \list - \i \link setDoubleBuffer() Double or single buffering.\endlink - \i \link setDepth() Depth buffer.\endlink - \i \link setRgba() RGBA or color index mode.\endlink - \i \link setAlpha() Alpha channel.\endlink - \i \link setAccum() Accumulation buffer.\endlink - \i \link setStencil() Stencil buffer.\endlink - \i \link setStereo() Stereo buffers.\endlink - \i \link setDirectRendering() Direct rendering.\endlink - \i \link setOverlay() Presence of an overlay.\endlink - \i \link setPlane() Plane of an overlay.\endlink - \i \link setSampleBuffers() Multisample buffers.\endlink - \endlist - - You can also specify preferred bit depths for the color buffer, - depth buffer, alpha buffer, accumulation buffer and the stencil - buffer with the functions: setRedBufferSize(), setGreenBufferSize(), - setBlueBufferSize(), setDepthBufferSize(), setAlphaBufferSize(), - setAccumBufferSize() and setStencilBufferSize(). - - Note that even if you specify that you prefer a 32 bit depth - buffer (e.g. with setDepthBufferSize(32)), the format that is - chosen may not have a 32 bit depth buffer, even if there is a - format available with a 32 bit depth buffer. The main reason for - this is how the system dependant picking algorithms work on the - different platforms, and some format options may have higher - precedence than others. - - You create and tell a QPlatformWindowFormat object what rendering options you - want from an OpenGL rendering context. - - OpenGL drivers or accelerated hardware may or may not support - advanced features such as alpha channel or stereographic viewing. - If you request some features that the driver/hardware does not - provide when you create a QGLWidget, you will get a rendering - context with the nearest subset of features. - - There are different ways to define the display characteristics of - a rendering context. One is to create a QPlatformWindowFormat and make it the - default for the entire application: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 0 - - Or you can specify the desired format when creating an object of - your QGLWidget subclass: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 1 - - After the widget has been created, you can find out which of the - requested features the system was able to provide: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 2 - - \legalese - OpenGL is a trademark of Silicon Graphics, Inc. in the - United States and other countries. - \endlegalese - - \sa QPlatformContext, QWidget -*/ - -/*! - Constructs a QPlatformWindowFormat object with the following default settings: - \list - \i \link setDoubleBuffer() Double buffer:\endlink Enabled. - \i \link setDepth() Depth buffer:\endlink Enabled. - \i \link setRgba() RGBA:\endlink Enabled (i.e., color index disabled). - \i \link setAlpha() Alpha channel:\endlink Disabled. - \i \link setAccum() Accumulator buffer:\endlink Disabled. - \i \link setStencil() Stencil buffer:\endlink Enabled. - \i \link setStereo() Stereo:\endlink Disabled. - \i \link setDirectRendering() Direct rendering:\endlink Enabled. - \i \link setOverlay() Overlay:\endlink Disabled. - \i \link setPlane() Plane:\endlink 0 (i.e., normal plane). - \i \link setSampleBuffers() Multisample buffers:\endlink Disabled. - \endlist -*/ - -QPlatformWindowFormat::QPlatformWindowFormat() +QWindowFormat::QWindowFormat() { - d = new QPlatformWindowFormatPrivate; + d = new QWindowFormatPrivate; } - -/*! - Creates a QPlatformWindowFormat object that is a copy of the current - defaultFormat(). - - If \a options is not 0, the default format is modified by the - specified format options. The \a options parameter should be - QGL::FormatOption values OR'ed together. - - This constructor makes it easy to specify a certain desired format - in classes derived from QGLWidget, for example: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 3 - - Note that there are QGL::FormatOption values to turn format settings - both on and off, e.g. QGL::DepthBuffer and QGL::NoDepthBuffer, - QGL::DirectRendering and QGL::IndirectRendering, etc. - - The \a plane parameter defaults to 0 and is the plane which this - format should be associated with. Not all OpenGL implementations - supports overlay/underlay rendering planes. - - \sa defaultFormat(), setOption(), setPlane() -*/ - -QPlatformWindowFormat::QPlatformWindowFormat(QPlatformWindowFormat::FormatOptions options) +QWindowFormat::QWindowFormat(QWindowFormat::FormatOptions options) { - d = new QPlatformWindowFormatPrivate; - QPlatformWindowFormat::FormatOptions newOpts = options; - d->opts = defaultFormat().d->opts; - d->opts |= (newOpts & 0xffff); - d->opts &= ~(newOpts >> 16); + d = new QWindowFormatPrivate; + d->opts = options; } /*! \internal */ -void QPlatformWindowFormat::detach() +void QWindowFormat::detach() { if (d->ref != 1) { - QPlatformWindowFormatPrivate *newd = new QPlatformWindowFormatPrivate(d); + QWindowFormatPrivate *newd = new QWindowFormatPrivate(d); if (!d->ref.deref()) delete d; d = newd; @@ -243,7 +106,7 @@ void QPlatformWindowFormat::detach() Constructs a copy of \a other. */ -QPlatformWindowFormat::QPlatformWindowFormat(const QPlatformWindowFormat &other) +QWindowFormat::QWindowFormat(const QWindowFormat &other) { d = other.d; d->ref.ref(); @@ -253,7 +116,7 @@ QPlatformWindowFormat::QPlatformWindowFormat(const QPlatformWindowFormat &other) Assigns \a other to this object. */ -QPlatformWindowFormat &QPlatformWindowFormat::operator=(const QPlatformWindowFormat &other) +QWindowFormat &QWindowFormat::operator=(const QWindowFormat &other) { if (d != other.d) { other.d->ref.ref(); @@ -265,190 +128,16 @@ QPlatformWindowFormat &QPlatformWindowFormat::operator=(const QPlatformWindowFor } /*! - Destroys the QPlatformWindowFormat. + Destroys the QWindowFormat. */ -QPlatformWindowFormat::~QPlatformWindowFormat() +QWindowFormat::~QWindowFormat() { if (!d->ref.deref()) delete d; } /*! - \fn bool QPlatformWindowFormat::doubleBuffer() const - - Returns true if double buffering is enabled; otherwise returns - false. Double buffering is enabled by default. - - \sa setDoubleBuffer() -*/ - -/*! - If \a enable is true sets double buffering; otherwise sets single - buffering. - - Double buffering is enabled by default. - - Double buffering is a technique where graphics are rendered on an - off-screen buffer and not directly to the screen. When the drawing - has been completed, the program calls a swapBuffers() function to - exchange the screen contents with the buffer. The result is - flicker-free drawing and often better performance. - - \sa doubleBuffer(), QGLContext::swapBuffers(), - QGLWidget::swapBuffers() -*/ - -void QPlatformWindowFormat::setDoubleBuffer(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::DoubleBuffer : QPlatformWindowFormat::SingleBuffer); -} - - -/*! - \fn bool QPlatformWindowFormat::depth() const - - Returns true if the depth buffer is enabled; otherwise returns - false. The depth buffer is enabled by default. - - \sa setDepth(), setDepthBufferSize() -*/ - -/*! - If \a enable is true enables the depth buffer; otherwise disables - the depth buffer. - - The depth buffer is enabled by default. - - The purpose of a depth buffer (or Z-buffering) is to remove hidden - surfaces. Pixels are assigned Z values based on the distance to - the viewer. A pixel with a high Z value is closer to the viewer - than a pixel with a low Z value. This information is used to - decide whether to draw a pixel or not. - - \sa depth(), setDepthBufferSize() -*/ - -void QPlatformWindowFormat::setDepth(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::DepthBuffer : QPlatformWindowFormat::NoDepthBuffer); -} - - -/*! - \fn bool QPlatformWindowFormat::rgba() const - - Returns true if RGBA color mode is set. Returns false if color - index mode is set. The default color mode is RGBA. - - \sa setRgba() -*/ - -/*! - If \a enable is true sets RGBA mode. If \a enable is false sets - color index mode. - - The default color mode is RGBA. - - RGBA is the preferred mode for most OpenGL applications. In RGBA - color mode you specify colors as red + green + blue + alpha - quadruplets. - - In color index mode you specify an index into a color lookup - table. - - \sa rgba() -*/ - -void QPlatformWindowFormat::setRgba(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::Rgba : QPlatformWindowFormat::ColorIndex); -} - - -/*! - \fn bool QPlatformWindowFormat::alpha() const - - Returns true if the alpha buffer in the framebuffer is enabled; - otherwise returns false. The alpha buffer is disabled by default. - - \sa setAlpha(), setAlphaBufferSize() -*/ - -/*! - If \a enable is true enables the alpha buffer; otherwise disables - the alpha buffer. - - The alpha buffer is disabled by default. - - The alpha buffer is typically used for implementing transparency - or translucency. The A in RGBA specifies the transparency of a - pixel. - - \sa alpha(), setAlphaBufferSize() -*/ - -void QPlatformWindowFormat::setAlpha(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::AlphaChannel : QPlatformWindowFormat::NoAlphaChannel); -} - - -/*! - \fn bool QPlatformWindowFormat::accum() const - - Returns true if the accumulation buffer is enabled; otherwise - returns false. The accumulation buffer is disabled by default. - - \sa setAccum(), setAccumBufferSize() -*/ - -/*! - If \a enable is true enables the accumulation buffer; otherwise - disables the accumulation buffer. - - The accumulation buffer is disabled by default. - - The accumulation buffer is used to create blur effects and - multiple exposures. - - \sa accum(), setAccumBufferSize() -*/ - -void QPlatformWindowFormat::setAccum(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::AccumBuffer : QPlatformWindowFormat::NoAccumBuffer); -} - - -/*! - \fn bool QPlatformWindowFormat::stencil() const - - Returns true if the stencil buffer is enabled; otherwise returns - false. The stencil buffer is enabled by default. - - \sa setStencil(), setStencilBufferSize() -*/ - -/*! - If \a enable is true enables the stencil buffer; otherwise - disables the stencil buffer. - - The stencil buffer is enabled by default. - - The stencil buffer masks certain parts of the drawing area so that - masked parts are not drawn on. - - \sa stencil(), setStencilBufferSize() -*/ - -void QPlatformWindowFormat::setStencil(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::StencilBuffer: QPlatformWindowFormat::NoStencilBuffer); -} - - -/*! - \fn bool QPlatformWindowFormat::stereo() const + \fn bool QWindowFormat::stereo() const Returns true if stereo buffering is enabled; otherwise returns false. Stereo buffering is disabled by default. @@ -468,61 +157,13 @@ void QPlatformWindowFormat::setStencil(bool enable) \sa stereo() */ -void QPlatformWindowFormat::setStereo(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::StereoBuffers : QPlatformWindowFormat::NoStereoBuffers); -} - - -/*! - \fn bool QPlatformWindowFormat::directRendering() const - - Returns true if direct rendering is enabled; otherwise returns - false. - - Direct rendering is enabled by default. - - \sa setDirectRendering() -*/ - -/*! - If \a enable is true enables direct rendering; otherwise disables - direct rendering. - - Direct rendering is enabled by default. - - Enabling this option will make OpenGL bypass the underlying window - system and render directly from hardware to the screen, if this is - supported by the system. - - \sa directRendering() -*/ - -void QPlatformWindowFormat::setDirectRendering(bool enable) -{ - setOption(enable ? QPlatformWindowFormat::DirectRendering : QPlatformWindowFormat::IndirectRendering); -} - -/*! - \fn bool QPlatformWindowFormat::sampleBuffers() const - - Returns true if multisample buffer support is enabled; otherwise - returns false. - - The multisample buffer is disabled by default. - - \sa setSampleBuffers() -*/ - -/*! - If \a enable is true, a GL context with multisample buffer support - is picked; otherwise ignored. - - \sa sampleBuffers(), setSamples(), samples() -*/ -void QPlatformWindowFormat::setSampleBuffers(bool enable) +void QWindowFormat::setStereo(bool enable) { - setOption(enable ? QPlatformWindowFormat::SampleBuffers : QPlatformWindowFormat::NoSampleBuffers); + if (enable) { + d->opts |= QWindowFormat::StereoBuffers; + } else { + d->opts &= ~QWindowFormat::StereoBuffers; + } } /*! @@ -532,7 +173,7 @@ void QPlatformWindowFormat::setSampleBuffers(bool enable) \sa setSampleBuffers(), sampleBuffers(), setSamples() */ -int QPlatformWindowFormat::samples() const +int QWindowFormat::samples() const { return d->numSamples; } @@ -544,75 +185,26 @@ int QPlatformWindowFormat::samples() const \sa setSampleBuffers(), sampleBuffers(), samples() */ -void QPlatformWindowFormat::setSamples(int numSamples) +void QWindowFormat::setSamples(int numSamples) { detach(); - if (numSamples < 0) { - qWarning("QPlatformWindowFormat::setSamples: Cannot have negative number of samples per pixel %d", numSamples); - return; - } d->numSamples = numSamples; - setSampleBuffers(numSamples > 0); } -/*! - \since 4.2 - - Set the preferred swap interval. This can be used to sync the GL - drawing into a system window to the vertical refresh of the screen. - Setting an \a interval value of 0 will turn the vertical refresh syncing - off, any value higher than 0 will turn the vertical syncing on. - - Under Windows and under X11, where the \c{WGL_EXT_swap_control} - and \c{GLX_SGI_video_sync} extensions are used, the \a interval - parameter can be used to set the minimum number of video frames - that are displayed before a buffer swap will occur. In effect, - setting the \a interval to 10, means there will be 10 vertical - retraces between every buffer swap. - - Under Windows the \c{WGL_EXT_swap_control} extension has to be present, - and under X11 the \c{GLX_SGI_video_sync} extension has to be present. -*/ -void QPlatformWindowFormat::setSwapInterval(int interval) -{ - detach(); - d->swapInterval = interval; -} - -/*! - \since 4.2 - - Returns the currently set swap interval. -1 is returned if setting - the swap interval isn't supported in the system GL implementation. -*/ -int QPlatformWindowFormat::swapInterval() const -{ - return d->swapInterval; -} - -void QPlatformWindowFormat::setWindowApi(QPlatformWindowFormat::WindowApi api) -{ - detach(); - d->windowApi = api; -} -QPlatformWindowFormat::WindowApi QPlatformWindowFormat::windowApi() const -{ - return d->windowApi; -} -void QPlatformWindowFormat::setSharedContext(QPlatformGLContext *context) +void QWindowFormat::setSharedContext(QPlatformGLContext *context) { d->sharedContext = context; } -QPlatformGLContext *QPlatformWindowFormat::sharedGLContext() const +QPlatformGLContext *QWindowFormat::sharedGLContext() const { return d->sharedContext; } /*! - \fn bool QPlatformWindowFormat::hasWindowSurface() const + \fn bool QWindowFormat::hasWindowSurface() const Returns true if the corresponding widget has an instance of QWindowSurface. @@ -623,19 +215,13 @@ QPlatformGLContext *QPlatformWindowFormat::sharedGLContext() const \sa setOverlay() */ -/*! - If \a enable is true a top level QWidget will create a QWindowSurface at creation; - - otherwise the QWidget will only have a QPlatformWindow. - - This is useful for ie. QGLWidget where the QPlatformGLContext controls the surface. - - \sa hasOverlay() -*/ - -void QPlatformWindowFormat::setWindowSurface(bool enable) +void QWindowFormat::setWindowSurface(bool enable) { - setOption(enable ? QPlatformWindowFormat::HasWindowSurface : QPlatformWindowFormat::NoWindowSurface); + if (enable) { + d->opts |= QWindowFormat::WindowSurface; + } else { + d->opts &= ~QWindowFormat::WindowSurface; + } } /*! @@ -644,29 +230,21 @@ void QPlatformWindowFormat::setWindowSurface(bool enable) \sa testOption() */ -void QPlatformWindowFormat::setOption(QPlatformWindowFormat::FormatOptions opt) +void QWindowFormat::setOption(QWindowFormat::FormatOptions opt) { detach(); - if (opt & 0xffff) - d->opts |= opt; - else - d->opts &= ~(opt >> 16); + d->opts |= opt; } - - /*! Returns true if format option \a opt is set; otherwise returns false. \sa setOption() */ -bool QPlatformWindowFormat::testOption(QPlatformWindowFormat::FormatOptions opt) const +bool QWindowFormat::testOption(QWindowFormat::FormatOptions opt) const { - if (opt & 0xffff) - return (d->opts & opt) != 0; - else - return (d->opts & (opt >> 16)) == 0; + return d->opts & opt; } /*! @@ -674,15 +252,10 @@ bool QPlatformWindowFormat::testOption(QPlatformWindowFormat::FormatOptions opt) \sa depthBufferSize(), setDepth(), depth() */ -void QPlatformWindowFormat::setDepthBufferSize(int size) +void QWindowFormat::setDepthBufferSize(int size) { detach(); - if (size < 0) { - qWarning("QPlatformWindowFormat::setDepthBufferSize: Cannot set negative depth buffer size %d", size); - return; - } d->depthSize = size; - setDepth(size > 0); } /*! @@ -690,150 +263,20 @@ void QPlatformWindowFormat::setDepthBufferSize(int size) \sa depth(), setDepth(), setDepthBufferSize() */ -int QPlatformWindowFormat::depthBufferSize() const +int QWindowFormat::depthBufferSize() const { return d->depthSize; } -/*! - \since 4.2 - - Set the preferred red buffer size to \a size. - - \sa setGreenBufferSize(), setBlueBufferSize(), setAlphaBufferSize() -*/ -void QPlatformWindowFormat::setRedBufferSize(int size) +void QWindowFormat::setColorFormat(ColorFormat format) { detach(); - if (size < 0) { - qWarning("QPlatformWindowFormat::setRedBufferSize: Cannot set negative red buffer size %d", size); - return; - } - d->redSize = size; + d->colorFormat = format; } -/*! - \since 4.2 - - Returns the red buffer size. - - \sa setRedBufferSize() -*/ -int QPlatformWindowFormat::redBufferSize() const +QWindowFormat::ColorFormat QWindowFormat::colorFormat() const { - return d->redSize; -} - -/*! - \since 4.2 - - Set the preferred green buffer size to \a size. - - \sa setRedBufferSize(), setBlueBufferSize(), setAlphaBufferSize() -*/ -void QPlatformWindowFormat::setGreenBufferSize(int size) -{ - detach(); - if (size < 0) { - qWarning("QPlatformWindowFormat::setGreenBufferSize: Cannot set negative green buffer size %d", size); - return; - } - d->greenSize = size; -} - -/*! - \since 4.2 - - Returns the green buffer size. - - \sa setGreenBufferSize() -*/ -int QPlatformWindowFormat::greenBufferSize() const -{ - return d->greenSize; -} - -/*! - \since 4.2 - - Set the preferred blue buffer size to \a size. - - \sa setRedBufferSize(), setGreenBufferSize(), setAlphaBufferSize() -*/ -void QPlatformWindowFormat::setBlueBufferSize(int size) -{ - detach(); - if (size < 0) { - qWarning("QPlatformWindowFormat::setBlueBufferSize: Cannot set negative blue buffer size %d", size); - return; - } - d->blueSize = size; -} - -/*! - \since 4.2 - - Returns the blue buffer size. - - \sa setBlueBufferSize() -*/ -int QPlatformWindowFormat::blueBufferSize() const -{ - return d->blueSize; -} - -/*! - Set the preferred alpha buffer size to \a size. - This function implicitly enables the alpha channel. - - \sa setRedBufferSize(), setGreenBufferSize(), alphaBufferSize() -*/ -void QPlatformWindowFormat::setAlphaBufferSize(int size) -{ - detach(); - if (size < 0) { - qWarning("QPlatformWindowFormat::setAlphaBufferSize: Cannot set negative alpha buffer size %d", size); - return; - } - d->alphaSize = size; - setAlpha(size > 0); -} - -/*! - Returns the alpha buffer size. - - \sa alpha(), setAlpha(), setAlphaBufferSize() -*/ -int QPlatformWindowFormat::alphaBufferSize() const -{ - return d->alphaSize; -} - -/*! - Set the preferred accumulation buffer size, where \a size is the - bit depth for each RGBA component. - - \sa accum(), setAccum(), accumBufferSize() -*/ -void QPlatformWindowFormat::setAccumBufferSize(int size) -{ - detach(); - if (size < 0) { - qWarning("QPlatformWindowFormat::setAccumBufferSize: Cannot set negative accumulate buffer size %d", size); - return; - } - d->accumSize = size; - setAccum(size > 0); -} - -/*! - Returns the accumulation buffer size. - - \sa setAccumBufferSize(), accum(), setAccum() -*/ -int QPlatformWindowFormat::accumBufferSize() const -{ - return d->accumSize; + return d->colorFormat; } /*! @@ -841,15 +284,10 @@ int QPlatformWindowFormat::accumBufferSize() const \sa stencilBufferSize(), setStencil(), stencil() */ -void QPlatformWindowFormat::setStencilBufferSize(int size) +void QWindowFormat::setStencilBufferSize(int size) { detach(); - if (size < 0) { - qWarning("QPlatformWindowFormat::setStencilBufferSize: Cannot set negative stencil buffer size %d", size); - return; - } d->stencilSize = size; - setStencil(size > 0); } /*! @@ -857,150 +295,48 @@ void QPlatformWindowFormat::setStencilBufferSize(int size) \sa stencil(), setStencil(), setStencilBufferSize() */ -int QPlatformWindowFormat::stencilBufferSize() const +int QWindowFormat::stencilBufferSize() const { return d->stencilSize; } -/*! - Returns the default QPlatformWindowFormat for the application. All QGLWidget - objects that are created use this format unless another format is - specified, e.g. when they are constructed. - - If no special default format has been set using - setDefaultFormat(), the default format is the same as that created - with QPlatformWindowFormat(). - - \sa setDefaultFormat() -*/ - -QPlatformWindowFormat QPlatformWindowFormat::defaultFormat() -{ - return *q_platformwindow_default_format(); -} - -/*! - Sets a new default QPlatformWindowFormat for the application to \a f. For - example, to set single buffering as the default instead of double - buffering, your main() might contain code like this: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 4 - - \sa defaultFormat() -*/ - -void QPlatformWindowFormat::setDefaultFormat(const QPlatformWindowFormat &f) -{ - *q_platformwindow_default_format() = f; -} - - -/*! - Returns the default QPlatformWindowFormat for overlay contexts. - - The default overlay format is: - \list - \i \link setDoubleBuffer() Double buffer:\endlink Disabled. - \i \link setDepth() Depth buffer:\endlink Disabled. - \i \link setRgba() RGBA:\endlink Disabled (i.e., color index enabled). - \i \link setAlpha() Alpha channel:\endlink Disabled. - \i \link setAccum() Accumulator buffer:\endlink Disabled. - \i \link setStencil() Stencil buffer:\endlink Disabled. - \i \link setStereo() Stereo:\endlink Disabled. - \i \link setDirectRendering() Direct rendering:\endlink Enabled. - \i \link setOverlay() Overlay:\endlink Disabled. - \i \link setSampleBuffers() Multisample buffers:\endlink Disabled. - \i \link setPlane() Plane:\endlink 1 (i.e., first overlay plane). - \endlist - - \sa setDefaultFormat() -*/ - -//QPlatformWindowFormat QPlatformWindowFormat::defaultOverlayFormat() -//{ -// return *defaultOverlayFormatInstance(); -//} - -///*! -// Sets a new default QPlatformWindowFormat for overlay contexts to \a f. This -// format is used whenever a QGLWidget is created with a format that -// hasOverlay() enabled. - -// For example, to get a double buffered overlay context (if -// available), use code like this: - -// \snippet doc/src/snippets/code/src_opengl_qgl.cpp 5 - -// As usual, you can find out after widget creation whether the -// underlying OpenGL system was able to provide the requested -// specification: - -// \snippet doc/src/snippets/code/src_opengl_qgl.cpp 6 - -// \sa defaultOverlayFormat() -//*/ - -//void QPlatformWindowFormat::setDefaultOverlayFormat(const QPlatformWindowFormat &f) -//{ -// QPlatformWindowFormat *defaultFormat = defaultOverlayFormatInstance(); -// *defaultFormat = f; -// // Make sure the user doesn't request that the overlays themselves -// // have overlays, since it is unlikely that the system supports -// // infinitely many planes... -// defaultFormat->setOverlay(false); -//} - - -/*! - Returns true if all the options of the two QPlatformWindowFormat objects - \a a and \a b are equal; otherwise returns false. - - \relates QPlatformWindowFormat -*/ - -bool operator==(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) +bool operator==(const QWindowFormat& a, const QWindowFormat& b) { return (a.d == b.d) || ((int) a.d->opts == (int) b.d->opts - && a.d->alphaSize == b.d->alphaSize - && a.d->accumSize == b.d->accumSize && a.d->stencilSize == b.d->stencilSize && a.d->depthSize == b.d->depthSize - && a.d->redSize == b.d->redSize - && a.d->greenSize == b.d->greenSize - && a.d->blueSize == b.d->blueSize + && a.d->colorFormat == b.d->colorFormat && a.d->numSamples == b.d->numSamples - && a.d->swapInterval == b.d->swapInterval - && a.d->windowApi == b.d->windowApi); + && a.d->swapBehavior == b.d->swapBehavior + && a.d->sharedContext == b.d->sharedContext); } /*! - Returns false if all the options of the two QPlatformWindowFormat objects + Returns false if all the options of the two QWindowFormat objects \a a and \a b are equal; otherwise returns true. - \relates QPlatformWindowFormat + \relates QWindowFormat */ -bool operator!=(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) +bool operator!=(const QWindowFormat& a, const QWindowFormat& b) { return !(a == b); } #ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug dbg, const QPlatformWindowFormat &f) +QDebug operator<<(QDebug dbg, const QWindowFormat &f) { - const QPlatformWindowFormatPrivate * const d = f.d; + const QWindowFormatPrivate * const d = f.d; - dbg.nospace() << "QGLFormat(" + dbg.nospace() << "QWindowFormat(" << "options " << d->opts << ", depthBufferSize " << d->depthSize - << ", accumBufferSize " << d->accumSize << ", stencilBufferSize " << d->stencilSize - << ", redBufferSize " << d->redSize - << ", greenBufferSize " << d->greenSize - << ", blueBufferSize " << d->blueSize - << ", alphaBufferSize " << d->alphaSize + << ", colorFormat " << d->colorFormat << ", samples " << d->numSamples - << ", swapInterval " << d->swapInterval + << ", swapBehavior " << d->swapBehavior + << ", sharedContext " << d->sharedContext << ')'; return dbg.space(); diff --git a/src/gui/kernel/qwindowformat_qpa.h b/src/gui/kernel/qwindowformat_qpa.h index d4eb09c897..a1fdc9f576 100644 --- a/src/gui/kernel/qwindowformat_qpa.h +++ b/src/gui/kernel/qwindowformat_qpa.h @@ -66,7 +66,7 @@ public: RGBA5658, RGBA5551, RGB888, - RGBA5658, + RGBA8888 }; enum SwapBehavior { @@ -109,13 +109,9 @@ public: void setSharedContext(QPlatformGLContext *context); QPlatformGLContext *sharedGLContext() const; - bool depth() const; - void setDepth(bool enable); - bool stencil() const; - void setStencil(bool enable); bool stereo() const; void setStereo(bool enable); - bool hasWindowSurface() const; + bool windowSurface() const; void setWindowSurface(bool enable); void setOption(QWindowFormat::FormatOptions opt); @@ -141,56 +137,15 @@ Q_OPENGL_EXPORT QDebug operator<<(QDebug, const QWindowFormat &); #endif Q_DECLARE_OPERATORS_FOR_FLAGS(QWindowFormat::FormatOptions) -Q_DECLARE_OPERATORS_FOR_FLAGS(QWindowFormat::WindowTypes) - -inline bool QWindowFormat::doubleBuffer() const -{ - return testOption(QWindowFormat::DoubleBuffer); -} - -inline bool QWindowFormat::depth() const -{ - return testOption(QWindowFormat::DepthBuffer); -} - -inline bool QWindowFormat::rgba() const -{ - return testOption(QWindowFormat::Rgba); -} - -inline bool QWindowFormat::alpha() const -{ - return testOption(QWindowFormat::AlphaChannel); -} - -inline bool QWindowFormat::accum() const -{ - return testOption(QWindowFormat::AccumBuffer); -} - -inline bool QWindowFormat::stencil() const -{ - return testOption(QWindowFormat::StencilBuffer); -} inline bool QWindowFormat::stereo() const { return testOption(QWindowFormat::StereoBuffers); } -inline bool QWindowFormat::directRendering() const -{ - return testOption(QWindowFormat::DirectRendering); -} - -inline bool QWindowFormat::hasWindowSurface() const -{ - return testOption(QWindowFormat::HasWindowSurface); -} - -inline bool QWindowFormat::sampleBuffers() const +inline bool QWindowFormat::windowSurface() const { - return testOption(QWindowFormat::SampleBuffers); + return testOption(QWindowFormat::WindowSurface); } QT_END_NAMESPACE |