@@ -223,9 +223,9 @@ void QgsMapRendererCustomPainterJob::startRender()
223223
224224 // Store the painter in case we need to swap it out for the
225225 // cache painter
226- // QPainter * mypContextPainter = mRenderContext.painter();
226+ QPainter * mypContextPainter = mRenderContext .painter ();
227227 // Flattened image for drawing when a blending mode is set
228- // QImage * mypFlattenedImage = 0;
228+ QImage * mypFlattenedImage = 0 ;
229229
230230 QString layerId = li.previous ();
231231
@@ -248,12 +248,12 @@ void QgsMapRendererCustomPainterJob::startRender()
248248 .arg ( ml->blendMode () )
249249 );
250250
251- /* if ( mRenderContext.useAdvancedEffects() )
251+ if ( mRenderContext .useAdvancedEffects () )
252252 {
253253 // Set the QPainter composition mode so that this layer is rendered using
254254 // the desired blending mode
255255 mypContextPainter->setCompositionMode ( ml->blendMode () );
256- }*/
256+ }
257257
258258 if ( !ml->hasScaleBasedVisibility () || ( ml->minimumScale () <= mSettings .scale () && mSettings .scale () < ml->maximumScale () ) ) // || mOverview )
259259 {
@@ -284,56 +284,14 @@ void QgsMapRendererCustomPainterJob::startRender()
284284
285285 mRenderContext .setCoordinateTransform ( ct );
286286
287- /* QSettings mySettings;
288- bool useRenderCaching = false;
289- if ( ! split )//render caching does not yet cater for split extents
290- {
291- if ( mySettings.value( "/qgis/enable_render_caching", false ).toBool() )
292- {
293- useRenderCaching = true;
294- if ( !mySameAsLastFlag || ml->cacheImage() == 0 )
295- {
296- QgsDebugMsg( "Caching enabled but layer redraw forced by extent change or empty cache" );
297- QImage * mypImage = new QImage( mRenderContext.painter()->device()->width(),
298- mRenderContext.painter()->device()->height(), QImage::Format_ARGB32 );
299- if ( mypImage->isNull() )
300- {
301- QgsDebugMsg( "insufficient memory for image " + QString::number( mRenderContext.painter()->device()->width() ) + "x" + QString::number( mRenderContext.painter()->device()->height() ) );
302- emit drawError( ml );
303- painter->end(); // drawError is not caught by anyone, so we end painting to notify caller
304- return;
305- }
306- mypImage->fill( 0 );
307- ml->setCacheImage( mypImage ); //no need to delete the old one, maplayer does it for you
308- QPainter * mypPainter = new QPainter( ml->cacheImage() );
309- // Changed to enable anti aliasing by default in QGIS 1.7
310- if ( mySettings.value( "/qgis/enable_anti_aliasing", true ).toBool() )
311- {
312- mypPainter->setRenderHint( QPainter::Antialiasing );
313- }
314- mRenderContext.setPainter( mypPainter );
315- }
316- else if ( mySameAsLastFlag )
317- {
318- //draw from cached image
319- QgsDebugMsg( "Caching enabled --- drawing layer from cached image" );
320- mypContextPainter->drawImage( 0, 0, *( ml->cacheImage() ) );
321- //short circuit as there is nothing else to do...
322- continue;
323- }
324- }
325- }*/
326-
327287 // If we are drawing with an alternative blending mode then we need to render to a separate image
328288 // before compositing this on the map. This effectively flattens the layer and prevents
329289 // blending occuring between objects on the layer
330- // (this is not required for raster layers or when layer caching is enabled, since that has the same effect)
331- /* bool flattenedLayer = false;
290+ bool flattenedLayer = false ;
332291 if (( mRenderContext .useAdvancedEffects () ) && ( ml->type () == QgsMapLayer::VectorLayer ) )
333292 {
334293 QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml );
335- if (( !useRenderCaching )
336- && (( vl->blendMode() != QPainter::CompositionMode_SourceOver )
294+ if ( (( vl->blendMode () != QPainter::CompositionMode_SourceOver )
337295 || ( vl->featureBlendMode () != QPainter::CompositionMode_SourceOver )
338296 || ( vl->layerTransparency () != 0 ) ) )
339297 {
@@ -343,23 +301,22 @@ void QgsMapRendererCustomPainterJob::startRender()
343301 if ( mypFlattenedImage->isNull () )
344302 {
345303 QgsDebugMsg ( " insufficient memory for image " + QString::number ( mRenderContext .painter ()->device ()->width () ) + " x" + QString::number ( mRenderContext .painter ()->device ()->height () ) );
346- emit drawError( ml );
347- painter ->end(); // drawError is not caught by anyone, so we end painting to notify caller
304+ // TODO emit drawError( ml );
305+ mPainter ->end (); // drawError is not caught by anyone, so we end painting to notify caller
348306 return ;
349307 }
350308 mypFlattenedImage->fill ( 0 );
351309 QPainter * mypPainter = new QPainter ( mypFlattenedImage );
352- if ( mySettings.value( "/qgis/enable_anti_aliasing", true ).toBool( ) )
310+ if ( mSettings . testFlag ( QgsMapSettings::Antialiasing ) )
353311 {
354312 mypPainter->setRenderHint ( QPainter::Antialiasing );
355313 }
356- mypPainter->scale( rasterScaleFactor, rasterScaleFactor );
357314 mRenderContext .setPainter ( mypPainter );
358315 }
359- }*/
316+ }
360317
361318 // Per feature blending mode
362- /* if (( mRenderContext.useAdvancedEffects() ) && ( ml->type() == QgsMapLayer::VectorLayer ) )
319+ if (( mRenderContext .useAdvancedEffects () ) && ( ml->type () == QgsMapLayer::VectorLayer ) )
363320 {
364321 QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml );
365322 if ( vl->featureBlendMode () != QPainter::CompositionMode_SourceOver )
@@ -368,7 +325,7 @@ void QgsMapRendererCustomPainterJob::startRender()
368325 // on this layer will interact and blend with each other
369326 mRenderContext .painter ()->setCompositionMode ( vl->featureBlendMode () );
370327 }
371- }*/
328+ }
372329
373330 if ( !ml->draw ( mRenderContext ) )
374331 {
@@ -389,7 +346,7 @@ void QgsMapRendererCustomPainterJob::startRender()
389346 }
390347
391348 // apply layer transparency for vector layers
392- /* if (( mRenderContext.useAdvancedEffects() ) && ( ml->type() == QgsMapLayer::VectorLayer ) )
349+ if (( mRenderContext .useAdvancedEffects () ) && ( ml->type () == QgsMapLayer::VectorLayer ) )
393350 {
394351 QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml );
395352 if ( vl->layerTransparency () != 0 )
@@ -402,30 +359,17 @@ void QgsMapRendererCustomPainterJob::startRender()
402359 mRenderContext .painter ()->fillRect ( 0 , 0 , mRenderContext .painter ()->device ()->width (),
403360 mRenderContext .painter ()->device ()->height (), transparentFillColor );
404361 }
405- }*/
406-
407- /* if ( useRenderCaching )
408- {
409- // composite the cached image into our view and then clean up from caching
410- // by reinstating the painter as it was swapped out for caching renders
411- delete mRenderContext.painter();
412- mRenderContext.setPainter( mypContextPainter );
413- //draw from cached image that we created further up
414- if ( ml->cacheImage() )
415- mypContextPainter->drawImage( 0, 0, *( ml->cacheImage() ) );
416362 }
417- else if ( flattenedLayer )
363+
364+ if ( flattenedLayer )
418365 {
419366 // If we flattened this layer for alternate blend modes, composite it now
420367 delete mRenderContext .painter ();
421368 mRenderContext .setPainter ( mypContextPainter );
422- mypContextPainter->save();
423- mypContextPainter->scale( 1.0 / rasterScaleFactor, 1.0 / rasterScaleFactor );
424369 mypContextPainter->drawImage ( 0 , 0 , *( mypFlattenedImage ) );
425- mypContextPainter->restore();
426370 delete mypFlattenedImage;
427371 mypFlattenedImage = 0 ;
428- }*/
372+ }
429373
430374 }
431375 else // layer not visible due to scale
@@ -441,7 +385,8 @@ void QgsMapRendererCustomPainterJob::startRender()
441385 // Reset the composition mode before rendering the labels
442386 mRenderContext .painter ()->setCompositionMode ( QPainter::CompositionMode_SourceOver );
443387
444- /* if ( !mOverview )
388+ // old labeling - to be removed at some point...
389+ if ( mSettings .testFlag ( QgsMapSettings::DrawLabeling ) )
445390 {
446391 // render all labels for vector layers in the stack, starting at the base
447392 li.toBack ();
@@ -456,40 +401,40 @@ void QgsMapRendererCustomPainterJob::startRender()
456401
457402 QgsMapLayer *ml = QgsMapLayerRegistry::instance ()->mapLayer ( layerId );
458403
459- if ( ml && ( ml->type() != QgsMapLayer::RasterLayer ) )
460- {
461- // only make labels if the layer is visible
462- // after scale dep viewing settings are checked
463- if ( !ml->hasScaleBasedVisibility() || ( ml->minimumScale() < mScale && mScale < ml->maximumScale() ) )
464- {
465- bool split = false;
404+ if ( !ml || ( ml->type () != QgsMapLayer::VectorLayer ) )
405+ continue ;
466406
467- if ( hasCrsTransformEnabled() )
468- {
469- QgsRectangle r1 = mExtent;
470- split = splitLayersExtent( ml, r1, r2 );
471- ct = new QgsCoordinateTransform( ml->crs(), *mDestCRS );
472- mRenderContext.setExtent( r1 );
473- }
474- else
475- {
476- ct = NULL;
477- }
407+ // only make labels if the layer is visible
408+ // after scale dep viewing settings are checked
409+ if ( ml->hasScaleBasedVisibility () && ( mSettings .scale () < ml->minimumScale () || mSettings .scale () > ml->maximumScale () ) )
410+ continue ;
478411
479- mRenderContext.setCoordinateTransform( ct ) ;
412+ bool split = false ;
480413
481- ml->drawLabels( mRenderContext );
482- if ( split )
483- {
484- mRenderContext.setExtent( r2 );
485- ml->drawLabels( mRenderContext );
486- }
487- }
414+ if ( mSettings .hasCrsTransformEnabled () )
415+ {
416+ QgsRectangle r1 = mSettings .visibleExtent ();
417+ ct = QgsCoordinateTransformCache::instance ()->transform ( ml->crs ().authid (), mSettings .destinationCrs ().authid () );
418+ split = reprojectToLayerExtent ( ct, ml->crs ().geographicFlag (), r1, r2 );
419+ mRenderContext .setExtent ( r1 );
420+ }
421+ else
422+ {
423+ ct = NULL ;
424+ }
425+
426+ mRenderContext .setCoordinateTransform ( ct );
427+
428+ ml->drawLabels ( mRenderContext );
429+ if ( split )
430+ {
431+ mRenderContext .setExtent ( r2 );
432+ ml->drawLabels ( mRenderContext );
488433 }
489434 }
490- } // if (!mOverview) */
435+ }
491436
492- if ( mLabelingEngine )
437+ if ( mSettings . testFlag ( QgsMapSettings::DrawLabeling ) && mLabelingEngine )
493438 {
494439 // set correct extent
495440 mRenderContext .setExtent ( mSettings .visibleExtent () );
0 commit comments