@@ -223,9 +223,9 @@ void QgsMapRendererCustomPainterJob::startRender()
223
223
224
224
// Store the painter in case we need to swap it out for the
225
225
// cache painter
226
- // QPainter * mypContextPainter = mRenderContext.painter();
226
+ QPainter * mypContextPainter = mRenderContext .painter ();
227
227
// Flattened image for drawing when a blending mode is set
228
- // QImage * mypFlattenedImage = 0;
228
+ QImage * mypFlattenedImage = 0 ;
229
229
230
230
QString layerId = li.previous ();
231
231
@@ -248,12 +248,12 @@ void QgsMapRendererCustomPainterJob::startRender()
248
248
.arg ( ml->blendMode () )
249
249
);
250
250
251
- /* if ( mRenderContext.useAdvancedEffects() )
251
+ if ( mRenderContext .useAdvancedEffects () )
252
252
{
253
253
// Set the QPainter composition mode so that this layer is rendered using
254
254
// the desired blending mode
255
255
mypContextPainter->setCompositionMode ( ml->blendMode () );
256
- }*/
256
+ }
257
257
258
258
if ( !ml->hasScaleBasedVisibility () || ( ml->minimumScale () <= mSettings .scale () && mSettings .scale () < ml->maximumScale () ) ) // || mOverview )
259
259
{
@@ -284,56 +284,14 @@ void QgsMapRendererCustomPainterJob::startRender()
284
284
285
285
mRenderContext .setCoordinateTransform ( ct );
286
286
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
-
327
287
// If we are drawing with an alternative blending mode then we need to render to a separate image
328
288
// before compositing this on the map. This effectively flattens the layer and prevents
329
289
// 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 ;
332
291
if (( mRenderContext .useAdvancedEffects () ) && ( ml->type () == QgsMapLayer::VectorLayer ) )
333
292
{
334
293
QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml );
335
- if (( !useRenderCaching )
336
- && (( vl->blendMode() != QPainter::CompositionMode_SourceOver )
294
+ if ( (( vl->blendMode () != QPainter::CompositionMode_SourceOver )
337
295
|| ( vl->featureBlendMode () != QPainter::CompositionMode_SourceOver )
338
296
|| ( vl->layerTransparency () != 0 ) ) )
339
297
{
@@ -343,23 +301,22 @@ void QgsMapRendererCustomPainterJob::startRender()
343
301
if ( mypFlattenedImage->isNull () )
344
302
{
345
303
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
348
306
return ;
349
307
}
350
308
mypFlattenedImage->fill ( 0 );
351
309
QPainter * mypPainter = new QPainter ( mypFlattenedImage );
352
- if ( mySettings.value( "/qgis/enable_anti_aliasing", true ).toBool( ) )
310
+ if ( mSettings . testFlag ( QgsMapSettings::Antialiasing ) )
353
311
{
354
312
mypPainter->setRenderHint ( QPainter::Antialiasing );
355
313
}
356
- mypPainter->scale( rasterScaleFactor, rasterScaleFactor );
357
314
mRenderContext .setPainter ( mypPainter );
358
315
}
359
- }*/
316
+ }
360
317
361
318
// Per feature blending mode
362
- /* if (( mRenderContext.useAdvancedEffects() ) && ( ml->type() == QgsMapLayer::VectorLayer ) )
319
+ if (( mRenderContext .useAdvancedEffects () ) && ( ml->type () == QgsMapLayer::VectorLayer ) )
363
320
{
364
321
QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml );
365
322
if ( vl->featureBlendMode () != QPainter::CompositionMode_SourceOver )
@@ -368,7 +325,7 @@ void QgsMapRendererCustomPainterJob::startRender()
368
325
// on this layer will interact and blend with each other
369
326
mRenderContext .painter ()->setCompositionMode ( vl->featureBlendMode () );
370
327
}
371
- }*/
328
+ }
372
329
373
330
if ( !ml->draw ( mRenderContext ) )
374
331
{
@@ -389,7 +346,7 @@ void QgsMapRendererCustomPainterJob::startRender()
389
346
}
390
347
391
348
// apply layer transparency for vector layers
392
- /* if (( mRenderContext.useAdvancedEffects() ) && ( ml->type() == QgsMapLayer::VectorLayer ) )
349
+ if (( mRenderContext .useAdvancedEffects () ) && ( ml->type () == QgsMapLayer::VectorLayer ) )
393
350
{
394
351
QgsVectorLayer* vl = qobject_cast<QgsVectorLayer *>( ml );
395
352
if ( vl->layerTransparency () != 0 )
@@ -402,30 +359,17 @@ void QgsMapRendererCustomPainterJob::startRender()
402
359
mRenderContext .painter ()->fillRect ( 0 , 0 , mRenderContext .painter ()->device ()->width (),
403
360
mRenderContext .painter ()->device ()->height (), transparentFillColor );
404
361
}
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() ) );
416
362
}
417
- else if ( flattenedLayer )
363
+
364
+ if ( flattenedLayer )
418
365
{
419
366
// If we flattened this layer for alternate blend modes, composite it now
420
367
delete mRenderContext .painter ();
421
368
mRenderContext .setPainter ( mypContextPainter );
422
- mypContextPainter->save();
423
- mypContextPainter->scale( 1.0 / rasterScaleFactor, 1.0 / rasterScaleFactor );
424
369
mypContextPainter->drawImage ( 0 , 0 , *( mypFlattenedImage ) );
425
- mypContextPainter->restore();
426
370
delete mypFlattenedImage;
427
371
mypFlattenedImage = 0 ;
428
- }*/
372
+ }
429
373
430
374
}
431
375
else // layer not visible due to scale
@@ -441,7 +385,8 @@ void QgsMapRendererCustomPainterJob::startRender()
441
385
// Reset the composition mode before rendering the labels
442
386
mRenderContext .painter ()->setCompositionMode ( QPainter::CompositionMode_SourceOver );
443
387
444
- /* if ( !mOverview )
388
+ // old labeling - to be removed at some point...
389
+ if ( mSettings .testFlag ( QgsMapSettings::DrawLabeling ) )
445
390
{
446
391
// render all labels for vector layers in the stack, starting at the base
447
392
li.toBack ();
@@ -456,40 +401,40 @@ void QgsMapRendererCustomPainterJob::startRender()
456
401
457
402
QgsMapLayer *ml = QgsMapLayerRegistry::instance ()->mapLayer ( layerId );
458
403
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 ;
466
406
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 ;
478
411
479
- mRenderContext.setCoordinateTransform( ct ) ;
412
+ bool split = false ;
480
413
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 );
488
433
}
489
434
}
490
- } // if (!mOverview) */
435
+ }
491
436
492
- if ( mLabelingEngine )
437
+ if ( mSettings . testFlag ( QgsMapSettings::DrawLabeling ) && mLabelingEngine )
493
438
{
494
439
// set correct extent
495
440
mRenderContext .setExtent ( mSettings .visibleExtent () );
0 commit comments