@@ -260,9 +260,9 @@ void QgsRuleBasedRendererV2::Rule::setNormZLevels( const QMap<int, int>& zLevels
260260}
261261
262262
263- void QgsRuleBasedRendererV2::Rule::renderFeature ( QgsFeature* featPtr , QgsRenderContext& context, QgsRuleBasedRendererV2::RenderQueue& renderQueue )
263+ void QgsRuleBasedRendererV2::Rule::renderFeature ( QgsRuleBasedRendererV2::FeatureToRender& featToRender , QgsRenderContext& context, QgsRuleBasedRendererV2::RenderQueue& renderQueue )
264264{
265- if ( isFilterOK ( *featPtr ) )
265+ if ( isFilterOK ( featToRender. feat ) )
266266 {
267267 // create job for this feature and this symbol, add to list of jobs
268268 if ( mSymbol )
@@ -271,15 +271,15 @@ void QgsRuleBasedRendererV2::Rule::renderFeature( QgsFeature* featPtr, QgsRender
271271 foreach ( int normZLevel, mSymbolNormZLevels )
272272 {
273273 // QgsDebugMsg(QString("add job at level %1").arg(normZLevel));
274- renderQueue[normZLevel].jobs .append ( new RenderJob ( featPtr , mSymbol ) );
274+ renderQueue[normZLevel].jobs .append ( new RenderJob ( featToRender , mSymbol ) );
275275 }
276276 }
277277
278278 // process children
279279 for ( QList<Rule*>::iterator it = mActiveChildren .begin (); it != mActiveChildren .end (); ++it )
280280 {
281281 Rule* rule = *it;
282- rule->renderFeature ( featPtr , context, renderQueue );
282+ rule->renderFeature ( featToRender , context, renderQueue );
283283 }
284284 }
285285}
@@ -371,20 +371,12 @@ void QgsRuleBasedRendererV2::renderFeature( QgsFeature& feature,
371371 bool drawVertexMarker )
372372{
373373 Q_UNUSED ( layer );
374- Q_UNUSED ( selected );
375- Q_UNUSED ( drawVertexMarker );
376374
377- // TODO: selected features, vertex markers
378-
379- QgsFeature* featPtr = NULL ;
380- if ( !featPtr )
381- {
382- featPtr = new QgsFeature ( feature );
383- mCurrentFeatures .append ( featPtr );
384- }
375+ int flags = ( selected ? FeatIsSelected : 0 ) | ( drawVertexMarker ? FeatDrawMarkers : 0 );
376+ mCurrentFeatures .append ( FeatureToRender ( feature, flags ) );
385377
386378 // check each active rule
387- mRootRule ->renderFeature ( featPtr , context, mRenderQueue );
379+ mRootRule ->renderFeature ( mCurrentFeatures . last () , context, mRenderQueue );
388380}
389381
390382
@@ -415,10 +407,6 @@ void QgsRuleBasedRendererV2::stopRender( QgsRenderContext& context )
415407 // do the actual rendering
416408 //
417409
418- // TODO: selected, markers
419- bool selected = false ;
420- bool drawVertexMarker = false ;
421-
422410 // go through all levels
423411 foreach ( const RenderLevel& level, mRenderQueue )
424412 {
@@ -437,17 +425,14 @@ void QgsRuleBasedRendererV2::stopRender( QgsRenderContext& context )
437425 // but there are multiple transforms going on!
438426 if ( s->symbolLayer ( i )->renderingPass () == level.zIndex )
439427 {
440- renderFeatureWithSymbol ( *job->f , job->symbol , context, i, selected, drawVertexMarker );
428+ int flags = job->ftr .flags ;
429+ renderFeatureWithSymbol ( job->ftr .feat , job->symbol , context, i, flags & FeatIsSelected, flags & FeatDrawMarkers );
441430 }
442431 }
443432 }
444433 }
445434
446435 // clean current features
447- foreach ( QgsFeature* f, mCurrentFeatures )
448- {
449- delete f;
450- }
451436 mCurrentFeatures .clear ();
452437
453438 // clean render queue
0 commit comments