summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/kernel.pri6
-rw-r--r--src/gui/kernel/qplatformglcontext_qpa.h4
-rw-r--r--src/gui/kernel/qplatformwindow_qpa.cpp13
-rw-r--r--src/gui/kernel/qplatformwindow_qpa.h7
-rw-r--r--src/gui/kernel/qwidget.cpp3
-rw-r--r--src/gui/kernel/qwidget.h8
-rw-r--r--src/gui/kernel/qwidget_p.h5
-rw-r--r--src/gui/kernel/qwidget_qpa.cpp164
-rw-r--r--src/gui/kernel/qwindow_qpa.cpp77
-rw-r--r--src/gui/kernel/qwindow_qpa.h27
-rw-r--r--src/gui/kernel/qwindowformat_qpa.cpp792
-rw-r--r--src/gui/kernel/qwindowformat_qpa.h53
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