7676#include " qgsrendererv2.h"
7777#include " qgssymbolv2.h"
7878#include " qgssymbollayerv2.h"
79-
79+ # include " qgssinglesymbolrendererv2.h "
8080
8181#ifdef TESTPROVIDERLIB
8282#include < dlfcn.h>
@@ -668,16 +668,33 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
668668{
669669 mRendererV2 ->startRender (rendererContext, pendingFields ());
670670
671+ QgsSingleSymbolRendererV2* selRenderer = NULL ;
672+ if (!mSelectedFeatureIds .isEmpty ())
673+ {
674+ selRenderer = new QgsSingleSymbolRendererV2 ( QgsSymbolV2::defaultSymbol (geometryType ()) );
675+ selRenderer->symbol ()->setColor ( QgsRenderer::selectionColor () );
676+ selRenderer->startRender (rendererContext, pendingFields ());
677+ }
678+
671679 QgsFeature fet;
672680 while ( nextFeature ( fet ) )
673681 {
674- mRendererV2 ->renderFeature (fet, rendererContext);
682+ if (mSelectedFeatureIds .contains ( fet.id () ))
683+ selRenderer->renderFeature (fet, rendererContext);
684+ else
685+ mRendererV2 ->renderFeature (fet, rendererContext);
675686
676687 if ( labeling )
677688 mLabelingEngine ->registerFeature (this , fet);
678689 }
679690
680691 mRendererV2 ->stopRender (rendererContext);
692+
693+ if (selRenderer)
694+ {
695+ selRenderer->stopRender (rendererContext);
696+ delete selRenderer;
697+ }
681698}
682699
683700void QgsVectorLayer::drawRendererV2Levels ( QgsRenderContext& rendererContext, bool labeling )
@@ -687,6 +704,14 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
687704 // startRender must be called before symbolForFeature() calls to make sure renderer is ready
688705 mRendererV2 ->startRender (rendererContext, pendingFields ());
689706
707+ QgsSingleSymbolRendererV2* selRenderer = NULL ;
708+ if (!mSelectedFeatureIds .isEmpty ())
709+ {
710+ selRenderer = new QgsSingleSymbolRendererV2 ( QgsSymbolV2::defaultSymbol (geometryType ()) );
711+ selRenderer->symbol ()->setColor ( QgsRenderer::selectionColor () );
712+ selRenderer->startRender (rendererContext, pendingFields ());
713+ }
714+
690715 // 1. fetch features
691716 QgsFeature fet;
692717 while ( nextFeature (fet) )
@@ -734,11 +759,22 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
734759 QList<QgsFeature>& lst = features[item.symbol ()];
735760 QList<QgsFeature>::iterator fit;
736761 for ( fit = lst.begin (); fit != lst.end (); ++fit )
737- mRendererV2 ->renderFeature (*fit, rendererContext, layer);
762+ {
763+ if (mSelectedFeatureIds .contains ( fit->id () ))
764+ selRenderer->renderFeature (*fit, rendererContext);
765+ else
766+ mRendererV2 ->renderFeature (*fit, rendererContext, layer);
767+ }
738768 }
739769 }
740770
741771 mRendererV2 ->stopRender (rendererContext);
772+
773+ if (selRenderer)
774+ {
775+ selRenderer->stopRender (rendererContext);
776+ delete selRenderer;
777+ }
742778}
743779
744780bool QgsVectorLayer::draw ( QgsRenderContext& rendererContext )
0 commit comments