From cc6556c62c2e06f6d0b15383165772d06aa26066 Mon Sep 17 00:00:00 2001 From: Charles Yin Date: Wed, 7 Mar 2012 09:34:18 +1000 Subject: [PATCH] Repaint the canvas item properly when canvas resized Task-number:QTBUG-23594 Change-Id: I703a5190b5b306666ffd61001ff94f296399465f Reviewed-by: Michael Brasser --- src/quick/items/context2d/qquickcanvasitem.cpp | 25 +++++++++---------- .../items/context2d/qquickcontext2dtexture.cpp | 1 + 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp index e2f57fe..ed16ea0 100644 --- a/src/quick/items/context2d/qquickcanvasitem.cpp +++ b/src/quick/items/context2d/qquickcanvasitem.cpp @@ -463,30 +463,29 @@ void QQuickCanvasItem::sceneGraphInitialized() void QQuickCanvasItem::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QQuickCanvasItem); - QQuickItem::geometryChanged(newGeometry, oldGeometry); - const qreal w = newGeometry.width(); - const qreal h = newGeometry.height(); + QQuickItem::geometryChanged(newGeometry, oldGeometry); - if (!d->hasCanvasSize) { - d->canvasSize = QSizeF(w, h); + QSizeF newSize = newGeometry.size(); + if (!d->hasCanvasSize && d->canvasSize != newSize) { + d->canvasSize = newSize; emit canvasSizeChanged(); } - if (!d->hasTileSize) { - d->tileSize = d->canvasSize.toSize(); + if (!d->hasTileSize && d->tileSize != newSize) { + d->tileSize = newSize.toSize(); emit tileSizeChanged(); } - if (!d->hasCanvasWindow) { - d->canvasWindow = QRectF(0, 0, w, h); + const QRectF rect = QRectF(QPointF(0, 0), newSize); + + if (!d->hasCanvasWindow && d->canvasWindow != rect) { + d->canvasWindow = rect; emit canvasWindowChanged(); } - if (d->available) { - polish(); - update(); - } + if (d->available) + requestPaint(); } void QQuickCanvasItem::componentComplete() diff --git a/src/quick/items/context2d/qquickcontext2dtexture.cpp b/src/quick/items/context2d/qquickcontext2dtexture.cpp index 60f5854..bdf1471 100644 --- a/src/quick/items/context2d/qquickcontext2dtexture.cpp +++ b/src/quick/items/context2d/qquickcontext2dtexture.cpp @@ -177,6 +177,7 @@ void QQuickContext2DTexture::canvasChanged(const QSize& canvasSize, const QSize& setCanvasSize(canvasSize); setTileSize(ts); + setCanvasWindow(canvasWindow); if (canvasSize == canvasWindow.size()) { m_tiledCanvas = false; -- 1.7.2.5