@@ -370,7 +370,7 @@ void QgsMapCanvas::setLayerSet( QList<QgsMapCanvasLayer> &layers )
370370 // Add check if vector layer when disconnecting from selectionChanged slot
371371 // Ticket #811 - racicot
372372 QgsMapLayer *currentLayer = layer ( i );
373- disconnect ( currentLayer, SIGNAL ( repaintRequested () ), this , SLOT ( refresh () ) );
373+ disconnect ( currentLayer, SIGNAL ( repaintRequested () ), this , SLOT ( layerRequestedRepaint () ) );
374374 QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
375375 if ( isVectLyr )
376376 {
@@ -385,7 +385,7 @@ void QgsMapCanvas::setLayerSet( QList<QgsMapCanvasLayer> &layers )
385385 // Add check if vector layer when connecting to selectionChanged slot
386386 // Ticket #811 - racicot
387387 QgsMapLayer *currentLayer = layer ( i );
388- connect ( currentLayer, SIGNAL ( repaintRequested () ), this , SLOT ( refresh () ) );
388+ connect ( currentLayer, SIGNAL ( repaintRequested () ), this , SLOT ( layerRequestedRepaint () ) );
389389 QgsVectorLayer *isVectLyr = qobject_cast<QgsVectorLayer *>( currentLayer );
390390 if ( isVectLyr )
391391 {
@@ -509,6 +509,12 @@ bool QgsMapCanvas::isCachingEnabled() const
509509 return mCache != 0 ;
510510}
511511
512+ void QgsMapCanvas::clearCache ()
513+ {
514+ if ( mCache )
515+ mCache ->clear ();
516+ }
517+
512518void QgsMapCanvas::setParallelRenderingEnabled ( bool enabled )
513519{
514520 mUseParallelRendering = enabled;
@@ -640,6 +646,19 @@ void QgsMapCanvas::refreshMap()
640646 mMapUpdateTimer .start ();
641647}
642648
649+ void QgsMapCanvas::layerRequestedRepaint ()
650+ {
651+ // make sure to clear the cached image
652+ if ( mCache )
653+ {
654+ QgsMapLayer* layer = qobject_cast<QgsMapLayer*>( sender () );
655+ if ( layer )
656+ mCache ->setCacheImage ( layer->id (), QImage () );
657+ }
658+
659+ refresh ();
660+ }
661+
643662void QgsMapCanvas::rendererJobFinished ()
644663{
645664 qDebug (" CANVAS finish! %d" , !mJobCancelled );
0 commit comments