Skip to content

Commit

Permalink
Don't show map tips for features outside of canvas temporal range
Browse files Browse the repository at this point in the history
Fixes #40791

(cherry picked from commit 2df9cee)
  • Loading branch information
nyalldawson committed Jan 15, 2021
1 parent 0db8970 commit 85ef809
Showing 1 changed file with 22 additions and 3 deletions.
25 changes: 22 additions & 3 deletions src/gui/qgsmaptip.cpp
Expand Up @@ -25,6 +25,8 @@
#include "qgsapplication.h"
#include "qgsrenderer.h"
#include "qgsexpressioncontextutils.h"
#include "qgsmaplayertemporalproperties.h"
#include "qgsvectorlayertemporalproperties.h"

// Qt includes
#include <QPoint>
Expand Down Expand Up @@ -134,7 +136,7 @@ void QgsMapTip::showMapTip( QgsMapLayer *pLayer,
"background-color: %1;"
"margin: 0;"
"font: %2pt \"%3\";"
"color: %4;" ).arg( backgroundColor ).arg( mFontSize ).arg( mFontFamily ).arg( textColor );
"color: %4;" ).arg( backgroundColor ).arg( mFontSize ).arg( mFontFamily, textColor );

containerStyle = QString(
"display: inline-block;"
Expand Down Expand Up @@ -208,11 +210,28 @@ QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPointXY &mapPosition, Qg
QgsExpressionContext context( QgsExpressionContextUtils::globalProjectLayerScopes( vlayer ) );
context.appendScope( QgsExpressionContextUtils::mapSettingsScope( mapCanvas->mapSettings() ) );

QString temporalFilter;
if ( mapCanvas->mapSettings().isTemporal() )
{
if ( !layer->temporalProperties()->isVisibleInTemporalRange( mapCanvas->temporalRange() ) )
return QString();

QgsVectorLayerTemporalContext temporalContext;
temporalContext.setLayer( vlayer );
temporalFilter = qobject_cast< const QgsVectorLayerTemporalProperties * >( layer->temporalProperties() )->createFilterString( temporalContext, mapCanvas->temporalRange() );
}

QString mapTip = vlayer->mapTipTemplate();
QString tipString;
QgsExpression exp( vlayer->displayExpression() );
QgsFeature feature;
QgsFeatureRequest request = QgsFeatureRequest().setFilterRect( r ).setFlags( QgsFeatureRequest::ExactIntersect );

QgsFeatureRequest request;
request.setFilterRect( r );
request.setFlags( QgsFeatureRequest::ExactIntersect );
if ( !temporalFilter.isEmpty() )
request.setFilterExpression( temporalFilter );

if ( mapTip.isEmpty() )
{
exp.prepare( &context );
Expand All @@ -233,7 +252,7 @@ QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPointXY &mapPosition, Qg
const QString filterExpression = renderer->filter( vlayer->fields() );
if ( ! filterExpression.isEmpty() )
{
request.setFilterExpression( filterExpression );
request.combineFilterExpression( filterExpression );
}
}

Expand Down

0 comments on commit 85ef809

Please sign in to comment.