Skip to content

Commit

Permalink
Check if feature is rendered before displaying its map tips. Fixes #3…
Browse files Browse the repository at this point in the history
  • Loading branch information
pblottiere committed Oct 15, 2020
1 parent 252976b commit ece1dfa
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/gui/qgsmaptip.cpp
Expand Up @@ -23,6 +23,7 @@
#include "qgswebview.h"
#include "qgswebframe.h"
#include "qgsapplication.h"
#include "qgsrenderer.h"
#include "qgsexpressioncontextutils.h"

// Qt includes
Expand Down Expand Up @@ -212,12 +213,30 @@ QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPointXY &mapPosition, Qg
exp.prepare( &context );
request.setSubsetOfAttributes( exp.referencedColumns(), vlayer->fields() );
}

QgsRenderContext renderCtx = QgsRenderContext::fromMapSettings( mapCanvas->mapSettings() );
renderCtx.expressionContext() << QgsExpressionContextUtils::layerScope( vlayer );

std::unique_ptr< QgsFeatureRenderer > renderer;
if ( vlayer->renderer() )
{
renderer.reset( vlayer->renderer()->clone() );
renderer->startRender( renderCtx, vlayer->fields() );
}

QgsFeatureIterator it = vlayer->getFeatures( request );
QElapsedTimer timer;
timer.start();
while ( it.nextFeature( feature ) )
{
context.setFeature( feature );

renderCtx.expressionContext().setFeature( feature );
if ( renderer && !renderer->willRenderFeature( feature, renderCtx ) )
{
continue;
}

if ( !mapTip.isEmpty() )
{
tipString = QgsExpression::replaceExpressionText( mapTip, &context );
Expand All @@ -233,6 +252,9 @@ QString QgsMapTip::fetchFeature( QgsMapLayer *layer, QgsPointXY &mapPosition, Qg
}
}

if ( renderer )
renderer->stopRender( renderCtx );

return tipString;
}

Expand Down

0 comments on commit ece1dfa

Please sign in to comment.