When temporal range changes we must invalidate the previous labeling

solution if any time-enabled vector layers have labels enabled

Fixes #45160
This commit is contained in:
Nyall Dawson 2022-02-01 16:45:58 +10:00
parent e0e611e5a4
commit d61cab28c1

View File

@ -888,17 +888,30 @@ void QgsMapCanvas::clearTemporalCache()
{ {
if ( mCache ) if ( mCache )
{ {
bool invalidateLabels = false;
const QList<QgsMapLayer *> layerList = mapSettings().layers(); const QList<QgsMapLayer *> layerList = mapSettings().layers();
for ( QgsMapLayer *layer : layerList ) for ( QgsMapLayer *layer : layerList )
{ {
if ( layer->temporalProperties() && layer->temporalProperties()->isActive() ) if ( layer->temporalProperties() && layer->temporalProperties()->isActive() )
{ {
if ( QgsVectorLayer *vl = qobject_cast< QgsVectorLayer * >( layer ) )
{
if ( vl->labelsEnabled() || vl->diagramsEnabled() )
invalidateLabels = true;
}
if ( layer->temporalProperties()->flags() & QgsTemporalProperty::FlagDontInvalidateCachedRendersWhenRangeChanges ) if ( layer->temporalProperties()->flags() & QgsTemporalProperty::FlagDontInvalidateCachedRendersWhenRangeChanges )
continue; continue;
mCache->invalidateCacheForLayer( layer ); mCache->invalidateCacheForLayer( layer );
} }
} }
if ( invalidateLabels )
{
mCache->clearCacheImage( QStringLiteral( "_labels_" ) );
mCache->clearCacheImage( QStringLiteral( "_preview_labels_" ) );
}
} }
} }
@ -906,17 +919,30 @@ void QgsMapCanvas::clearElevationCache()
{ {
if ( mCache ) if ( mCache )
{ {
bool invalidateLabels = false;
const QList<QgsMapLayer *> layerList = mapSettings().layers(); const QList<QgsMapLayer *> layerList = mapSettings().layers();
for ( QgsMapLayer *layer : layerList ) for ( QgsMapLayer *layer : layerList )
{ {
if ( layer->elevationProperties() && layer->elevationProperties()->hasElevation() ) if ( layer->elevationProperties() && layer->elevationProperties()->hasElevation() )
{ {
if ( QgsVectorLayer *vl = qobject_cast< QgsVectorLayer * >( layer ) )
{
if ( vl->labelsEnabled() || vl->diagramsEnabled() )
invalidateLabels = true;
}
if ( layer->elevationProperties()->flags() & QgsMapLayerElevationProperties::FlagDontInvalidateCachedRendersWhenRangeChanges ) if ( layer->elevationProperties()->flags() & QgsMapLayerElevationProperties::FlagDontInvalidateCachedRendersWhenRangeChanges )
continue; continue;
mCache->invalidateCacheForLayer( layer ); mCache->invalidateCacheForLayer( layer );
} }
} }
if ( invalidateLabels )
{
mCache->clearCacheImage( QStringLiteral( "_labels_" ) );
mCache->clearCacheImage( QStringLiteral( "_preview_labels_" ) );
}
} }
} }