summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@nokia.com>2012-01-19 12:51:43 +0100
committerQt by Nokia <qt-info@nokia.com>2012-02-02 17:20:24 +0100
commit75711510b1ad7d4ac4434ad41a0ed71cfc0344dc (patch)
treefc8fae2ea9c623d76cb670e3b9cda9a0e125f573 /src
parent6181676ca61f39f389a8c3ca293c369e7f80b1e8 (diff)
Improve QSurface / QWindow API a bit and use that to avoid errors
Change-Id: Iadba1c3a7b8e6bc7f145455132cefed2a905c11d Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qopenglcontext.cpp11
-rw-r--r--src/gui/kernel/qplatformsurface_qpa.cpp4
-rw-r--r--src/gui/kernel/qplatformsurface_qpa.h6
-rw-r--r--src/gui/kernel/qsurface.cpp47
-rw-r--r--src/gui/kernel/qsurface.h25
-rw-r--r--src/gui/kernel/qwindow.h1
6 files changed, 79 insertions, 15 deletions
diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp
index f6481d3bb0..1b6d1d34c4 100644
--- a/src/gui/kernel/qopenglcontext.cpp
+++ b/src/gui/kernel/qopenglcontext.cpp
@@ -288,6 +288,12 @@ bool QOpenGLContext::makeCurrent(QSurface *surface)
if (!surface->surfaceHandle())
return false;
+ if (surface->surfaceType() != QSurface::OpenGLSurface) {
+ qWarning() << "QOpenGLContext::makeBuffers() called with non-opengl surface";
+ return false;
+ }
+
+
if (d->platformGLContext->makeCurrent(surface->surfaceHandle())) {
QOpenGLContextPrivate::setCurrentContext(this);
d->surface = surface;
@@ -354,6 +360,11 @@ void QOpenGLContext::swapBuffers(QSurface *surface)
return;
}
+ if (surface->surfaceType() != QSurface::OpenGLSurface) {
+ qWarning() << "QOpenGLContext::swapBuffers() called with non-opengl surface";
+ return;
+ }
+
QPlatformSurface *surfaceHandle = surface->surfaceHandle();
if (!surfaceHandle)
return;
diff --git a/src/gui/kernel/qplatformsurface_qpa.cpp b/src/gui/kernel/qplatformsurface_qpa.cpp
index 56b8f615c0..aeb73da2a3 100644
--- a/src/gui/kernel/qplatformsurface_qpa.cpp
+++ b/src/gui/kernel/qplatformsurface_qpa.cpp
@@ -43,12 +43,12 @@
QT_BEGIN_NAMESPACE
-QSurface::SurfaceType QPlatformSurface::surfaceType() const
+QSurface::SurfaceClass QPlatformSurface::surfaceClass() const
{
return m_type;
}
-QPlatformSurface::QPlatformSurface(QSurface::SurfaceType type) : m_type(type)
+QPlatformSurface::QPlatformSurface(QSurface::SurfaceClass type) : m_type(type)
{
}
diff --git a/src/gui/kernel/qplatformsurface_qpa.h b/src/gui/kernel/qplatformsurface_qpa.h
index b57bbea6ea..af23ad3a85 100644
--- a/src/gui/kernel/qplatformsurface_qpa.h
+++ b/src/gui/kernel/qplatformsurface_qpa.h
@@ -56,12 +56,12 @@ class Q_GUI_EXPORT QPlatformSurface
public:
virtual QSurfaceFormat format() const = 0;
- QSurface::SurfaceType surfaceType() const;
+ QSurface::SurfaceClass surfaceClass() const;
private:
- QPlatformSurface(QSurface::SurfaceType type);
+ QPlatformSurface(QSurface::SurfaceClass type);
- QSurface::SurfaceType m_type;
+ QSurface::SurfaceClass m_type;
friend class QPlatformWindow;
};
diff --git a/src/gui/kernel/qsurface.cpp b/src/gui/kernel/qsurface.cpp
index 24079c55ab..eb2676802b 100644
--- a/src/gui/kernel/qsurface.cpp
+++ b/src/gui/kernel/qsurface.cpp
@@ -43,12 +43,53 @@
QT_BEGIN_NAMESPACE
-QSurface::QSurface(SurfaceType type)
- : m_type(type)
+
+/*!
+ \class QSurface
+ \brief The QSurface class is an abstraction of renderable surfaces in Qt.
+
+ The size of the surface is accessible with the size() function. The rendering
+ specific attributes of the surface are accessible through the format() function.
+ */
+
+
+/*!
+ \enum QSurface::SurfaceClass
+
+ The SurfaceClass enum describes the actual subclass of the surface.
+
+ \value Window The surface is an instance of QWindow.
+ */
+
+
+/*!
+ \enum QSurface::SurfaceType
+
+ The SurfaceType enum describes what type of surface the.
+
+ \value RasterSurface The surface is is composed of pixels and can be rendered to using
+ a software rasterizer like Qt's raster paint engine.
+ \value OpenGLSurface The surface is an OpenGL compatible surface and can be used
+ in conjunction with QOpenGLContext.
+ */
+
+
+/*!
+ QSize QSurface::size() const
+
+ Returns the size of the surface in pixels.
+ */
+
+
+
+QSurface::QSurface(SurfaceClass type)
+ : m_type(type), m_reserved(0)
{
}
-QSurface::SurfaceType QSurface::surfaceType() const
+
+
+QSurface::SurfaceClass QSurface::surfaceClass() const
{
return m_type;
}
diff --git a/src/gui/kernel/qsurface.h b/src/gui/kernel/qsurface.h
index fd8eaaf058..a8900fde33 100644
--- a/src/gui/kernel/qsurface.h
+++ b/src/gui/kernel/qsurface.h
@@ -45,6 +45,8 @@
#include <QtCore/qnamespace.h>
#include <QtGui/qsurfaceformat.h>
+#include <QtCore/qsize.h>
+
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -52,26 +54,37 @@ QT_BEGIN_NAMESPACE
class QPlatformSurface;
+class QSurfacePrivate;
+
class Q_GUI_EXPORT QSurface
{
public:
- enum SurfaceType {
+ enum SurfaceClass {
Window
};
+ enum SurfaceType {
+ RasterSurface,
+ OpenGLSurface
+ };
+
virtual ~QSurface();
- SurfaceType surfaceType() const;
+ SurfaceClass surfaceClass() const;
virtual QSurfaceFormat format() const = 0;
virtual QPlatformSurface *surfaceHandle() const = 0;
-private:
- QSurface(SurfaceType type);
+ virtual SurfaceType surfaceType() const = 0;
+
+ virtual QSize size() const = 0;
+
+protected:
+ QSurface(SurfaceClass type);
- SurfaceType m_type;
+ SurfaceClass m_type;
- friend class QWindow;
+ QSurfacePrivate *m_reserved;
};
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h
index 4e6a8591d8..98b468b142 100644
--- a/src/gui/kernel/qwindow.h
+++ b/src/gui/kernel/qwindow.h
@@ -93,7 +93,6 @@ class Q_GUI_EXPORT QWindow : public QObject, public QSurface
Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation WRITE reportContentOrientationChange NOTIFY contentOrientationChanged)
public:
- enum SurfaceType { RasterSurface, OpenGLSurface };
QWindow(QScreen *screen = 0);
QWindow(QWindow *parent);