33
33
#include " qgssinglebandgrayrenderer.h"
34
34
35
35
36
+ #include " qgsmessagelog.h"
37
+
36
38
static void _initRendererWidgetFunctions ()
37
39
{
38
40
static bool initialized = false ;
@@ -319,11 +321,21 @@ void QgsRendererRasterPropertiesWidget::setRendererWidget( const QString &render
319
321
{
320
322
QgsDebugMsg ( " rendererName = " + rendererName );
321
323
QgsRasterRendererWidget* oldWidget = mRendererWidget ;
324
+ QgsRasterRenderer* oldRenderer = mRasterLayer ->renderer ();
325
+
326
+ int alphaBand = -1 ;
327
+ double opacity = 1 ;
328
+ if ( oldRenderer )
329
+ {
330
+ // Retain alpha band and opacity when switching renderer
331
+ alphaBand = oldRenderer->alphaBand ();
332
+ opacity = oldRenderer->opacity ();
333
+ }
322
334
323
335
QgsRasterRendererRegistryEntry rendererEntry;
324
336
if ( QgsApplication::rasterRendererRegistry ()->rendererData ( rendererName, rendererEntry ) )
325
337
{
326
- if ( rendererEntry.widgetCreateFunction ) // single band color data renderer e.g. has no widget
338
+ if ( rendererEntry.widgetCreateFunction ) // Single band color data renderer e.g. has no widget
327
339
{
328
340
QgsDebugMsg ( " renderer has widgetCreateFunction" );
329
341
// Current canvas extent (used to calc min/max) in layer CRS
@@ -341,22 +353,26 @@ void QgsRendererRasterPropertiesWidget::setRendererWidget( const QString &render
341
353
whileBlocking ( mRasterLayer )->setDefaultContrastEnhancement ();
342
354
}
343
355
}
356
+ mRasterLayer ->renderer ()->setAlphaBand ( alphaBand );
357
+ mRasterLayer ->renderer ()->setOpacity ( opacity );
344
358
mRendererWidget = rendererEntry.widgetCreateFunction ( mRasterLayer , myExtent );
345
359
mRendererWidget ->setMapCanvas ( mMapCanvas );
346
360
connect ( mRendererWidget , SIGNAL ( widgetChanged () ), this , SIGNAL ( widgetChanged () ) );
347
361
stackedWidget->addWidget ( mRendererWidget );
348
362
stackedWidget->setCurrentWidget ( mRendererWidget );
349
363
if ( oldWidget )
350
364
{
351
- // compare used bands in new and old renderer and reset transparency dialog if different
365
+ // Compare used bands in new and old renderer and reset transparency dialog if different
352
366
QgsRasterRenderer* oldRenderer = oldWidget->renderer ();
353
367
QgsRasterRenderer* newRenderer = mRendererWidget ->renderer ();
354
368
QList<int > oldBands = oldRenderer->usesBands ();
355
369
QList<int > newBands = newRenderer->usesBands ();
370
+
356
371
// if ( oldBands != newBands )
357
372
// {
358
373
// populateTransparencyTable( newRenderer );
359
374
// }
375
+
360
376
delete oldRenderer;
361
377
delete newRenderer;
362
378
}
0 commit comments