iOS: Keep QIOSBackingStore's paint device size in sync with the window

Treating the paint-device as a thing wrapper around the OpenGL paint engine
failed when the window was resized, as the paint engine would clip the
drawing to the old size. We need to update the size in beginPaint.

QBackingStore resize still behaves like before, and we emit a warning if
the user tries to resize the backing-store to some other size than the
window size, as that's not a supported use-case for our iOS backing store.

Change-Id: I1a0eeb65fa9db8b5538dc69963d6fc84be6e63f1
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
bb10
Tor Arne Vestbø 2012-12-10 17:11:15 +01:00
parent 8dde67fcd3
commit d059866eb4
1 changed files with 11 additions and 5 deletions

View File

@ -69,12 +69,14 @@ void QIOSBackingStore::beginPaint(const QRegion &)
window()->setSurfaceType(QSurface::OpenGLSurface);
m_context->makeCurrent(window());
static_cast<QOpenGLPaintDevice *>(paintDevice())->setSize(window()->size());
}
QPaintDevice *QIOSBackingStore::paintDevice()
{
if (!m_device)
m_device = new QOpenGLPaintDevice(window()->size());
m_device = new QOpenGLPaintDevice;
return m_device;
}
@ -95,12 +97,16 @@ void QIOSBackingStore::endPaint()
void QIOSBackingStore::resize(const QSize &size, const QRegion &staticContents)
{
Q_UNUSED(size);
Q_UNUSED(staticContents);
// We don't need to resize the QOpenGLPaintDevice, as it's just a thin wrapper
// around the OpenGL paint-engine, and the real geometry is handled by the
// context and window.
// Resizing the backing store would in our case mean resizing the QWindow,
// as we cheat and use an QOpenGLPaintDevice that we target at the window.
// That's probably not what the user intended, so we ignore resizes of the
// backing store and always keep the paint device's size in sync with the
// window size in beginPaint().
if (size != window()->size())
qWarning() << "QIOSBackingStore needs to have the same size as its window";
}
QT_END_NAMESPACE