From d059866eb43a7415dd786a2bcba14f729d938675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 10 Dec 2012 17:11:15 +0100 Subject: 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 --- src/plugins/platforms/ios/qiosbackingstore.mm | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/plugins') diff --git a/src/plugins/platforms/ios/qiosbackingstore.mm b/src/plugins/platforms/ios/qiosbackingstore.mm index dfa41f0003..6bae08ce2b 100644 --- a/src/plugins/platforms/ios/qiosbackingstore.mm +++ b/src/plugins/platforms/ios/qiosbackingstore.mm @@ -69,12 +69,14 @@ void QIOSBackingStore::beginPaint(const QRegion &) window()->setSurfaceType(QSurface::OpenGLSurface); m_context->makeCurrent(window()); + + static_cast(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 -- cgit v1.2.3