mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-17 00:04:02 -04:00
Fix loss of transparency information in style dock (fixes #15229)
This commit is contained in:
parent
5ae780241f
commit
cca79aa2f4
@ -57,6 +57,11 @@ class QgsRasterRenderer : QgsRasterInterface
|
|||||||
/** Sets base class members from xml. Usually called from create() methods of subclasses*/
|
/** Sets base class members from xml. Usually called from create() methods of subclasses*/
|
||||||
void readXML( const QDomElement& rendererElem );
|
void readXML( const QDomElement& rendererElem );
|
||||||
|
|
||||||
|
/** Copies common properties like opacity / transparency data from other renderer.
|
||||||
|
* Useful when cloning renderers.
|
||||||
|
* @note added in 2.16 */
|
||||||
|
void copyCommonProperties( const QgsRasterRenderer* other );
|
||||||
|
|
||||||
/** Returns a list of band numbers used by the renderer*/
|
/** Returns a list of band numbers used by the renderer*/
|
||||||
virtual QList<int> usesBands() const;
|
virtual QList<int> usesBands() const;
|
||||||
|
|
||||||
|
@ -38,12 +38,10 @@ QgsHillshadeRenderer::QgsHillshadeRenderer( QgsRasterInterface *input, int band,
|
|||||||
QgsHillshadeRenderer *QgsHillshadeRenderer::clone() const
|
QgsHillshadeRenderer *QgsHillshadeRenderer::clone() const
|
||||||
{
|
{
|
||||||
QgsHillshadeRenderer* r = new QgsHillshadeRenderer( nullptr, mBand, mLightAzimuth, mLightAngle );
|
QgsHillshadeRenderer* r = new QgsHillshadeRenderer( nullptr, mBand, mLightAzimuth, mLightAngle );
|
||||||
|
r->copyCommonProperties( this );
|
||||||
|
|
||||||
r->setZFactor( mZFactor );
|
r->setZFactor( mZFactor );
|
||||||
r->setMultiDirectional( mMultiDirectional );
|
r->setMultiDirectional( mMultiDirectional );
|
||||||
// "Effects"
|
|
||||||
r->setOpacity( mOpacity );
|
|
||||||
r->setAlphaBand( mAlphaBand );
|
|
||||||
r->setRasterTransparency( mRasterTransparency ? new QgsRasterTransparency( *mRasterTransparency ) : nullptr );
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,8 @@ QgsMultiBandColorRenderer::~QgsMultiBandColorRenderer()
|
|||||||
QgsMultiBandColorRenderer* QgsMultiBandColorRenderer::clone() const
|
QgsMultiBandColorRenderer* QgsMultiBandColorRenderer::clone() const
|
||||||
{
|
{
|
||||||
QgsMultiBandColorRenderer * renderer = new QgsMultiBandColorRenderer( nullptr, mRedBand, mGreenBand, mBlueBand );
|
QgsMultiBandColorRenderer * renderer = new QgsMultiBandColorRenderer( nullptr, mRedBand, mGreenBand, mBlueBand );
|
||||||
|
renderer->copyCommonProperties( this );
|
||||||
|
|
||||||
if ( mRedContrastEnhancement )
|
if ( mRedContrastEnhancement )
|
||||||
{
|
{
|
||||||
renderer->setRedContrastEnhancement( new QgsContrastEnhancement( *mRedContrastEnhancement ) );
|
renderer->setRedContrastEnhancement( new QgsContrastEnhancement( *mRedContrastEnhancement ) );
|
||||||
@ -60,9 +62,6 @@ QgsMultiBandColorRenderer* QgsMultiBandColorRenderer::clone() const
|
|||||||
{
|
{
|
||||||
renderer->setBlueContrastEnhancement( new QgsContrastEnhancement( *mBlueContrastEnhancement ) );
|
renderer->setBlueContrastEnhancement( new QgsContrastEnhancement( *mBlueContrastEnhancement ) );
|
||||||
}
|
}
|
||||||
renderer->setOpacity( mOpacity );
|
|
||||||
renderer->setAlphaBand( mAlphaBand );
|
|
||||||
renderer->setRasterTransparency( mRasterTransparency ? new QgsRasterTransparency( *mRasterTransparency ) : nullptr );
|
|
||||||
|
|
||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
|
@ -49,9 +49,8 @@ QgsPalettedRasterRenderer::~QgsPalettedRasterRenderer()
|
|||||||
QgsPalettedRasterRenderer* QgsPalettedRasterRenderer::clone() const
|
QgsPalettedRasterRenderer* QgsPalettedRasterRenderer::clone() const
|
||||||
{
|
{
|
||||||
QgsPalettedRasterRenderer * renderer = new QgsPalettedRasterRenderer( nullptr, mBand, rgbArray(), mNColors );
|
QgsPalettedRasterRenderer * renderer = new QgsPalettedRasterRenderer( nullptr, mBand, rgbArray(), mNColors );
|
||||||
renderer->setOpacity( mOpacity );
|
renderer->copyCommonProperties( this );
|
||||||
renderer->setAlphaBand( mAlphaBand );
|
|
||||||
renderer->setRasterTransparency( mRasterTransparency ? new QgsRasterTransparency( *mRasterTransparency ) : nullptr );
|
|
||||||
renderer->mLabels = mLabels;
|
renderer->mLabels = mLabels;
|
||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
|
@ -134,6 +134,16 @@ void QgsRasterRenderer::readXML( const QDomElement& rendererElem )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgsRasterRenderer::copyCommonProperties( const QgsRasterRenderer* other )
|
||||||
|
{
|
||||||
|
if ( !other )
|
||||||
|
return;
|
||||||
|
|
||||||
|
setOpacity( other->opacity() );
|
||||||
|
setAlphaBand( other->alphaBand() );
|
||||||
|
setRasterTransparency( other->rasterTransparency() ? new QgsRasterTransparency( *other->rasterTransparency() ) : nullptr );
|
||||||
|
}
|
||||||
|
|
||||||
QString QgsRasterRenderer::minMaxOriginName( int theOrigin )
|
QString QgsRasterRenderer::minMaxOriginName( int theOrigin )
|
||||||
{
|
{
|
||||||
if ( theOrigin == MinMaxUnknown )
|
if ( theOrigin == MinMaxUnknown )
|
||||||
|
@ -88,6 +88,11 @@ class CORE_EXPORT QgsRasterRenderer : public QgsRasterInterface
|
|||||||
/** Sets base class members from xml. Usually called from create() methods of subclasses*/
|
/** Sets base class members from xml. Usually called from create() methods of subclasses*/
|
||||||
void readXML( const QDomElement& rendererElem ) override;
|
void readXML( const QDomElement& rendererElem ) override;
|
||||||
|
|
||||||
|
/** Copies common properties like opacity / transparency data from other renderer.
|
||||||
|
* Useful when cloning renderers.
|
||||||
|
* @note added in 2.16 */
|
||||||
|
void copyCommonProperties( const QgsRasterRenderer* other );
|
||||||
|
|
||||||
/** Returns a list of band numbers used by the renderer*/
|
/** Returns a list of band numbers used by the renderer*/
|
||||||
virtual QList<int> usesBands() const { return QList<int>(); }
|
virtual QList<int> usesBands() const { return QList<int>(); }
|
||||||
|
|
||||||
|
@ -35,9 +35,7 @@ QgsSingleBandColorDataRenderer::~QgsSingleBandColorDataRenderer()
|
|||||||
QgsSingleBandColorDataRenderer* QgsSingleBandColorDataRenderer::clone() const
|
QgsSingleBandColorDataRenderer* QgsSingleBandColorDataRenderer::clone() const
|
||||||
{
|
{
|
||||||
QgsSingleBandColorDataRenderer * renderer = new QgsSingleBandColorDataRenderer( nullptr, mBand );
|
QgsSingleBandColorDataRenderer * renderer = new QgsSingleBandColorDataRenderer( nullptr, mBand );
|
||||||
renderer->setOpacity( mOpacity );
|
renderer->copyCommonProperties( this );
|
||||||
renderer->setAlphaBand( mAlphaBand );
|
|
||||||
renderer->setRasterTransparency( mRasterTransparency ? new QgsRasterTransparency( *mRasterTransparency ) : nullptr );
|
|
||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,9 +35,8 @@ QgsSingleBandGrayRenderer::~QgsSingleBandGrayRenderer()
|
|||||||
QgsSingleBandGrayRenderer* QgsSingleBandGrayRenderer::clone() const
|
QgsSingleBandGrayRenderer* QgsSingleBandGrayRenderer::clone() const
|
||||||
{
|
{
|
||||||
QgsSingleBandGrayRenderer * renderer = new QgsSingleBandGrayRenderer( nullptr, mGrayBand );
|
QgsSingleBandGrayRenderer * renderer = new QgsSingleBandGrayRenderer( nullptr, mGrayBand );
|
||||||
renderer->setOpacity( mOpacity );
|
renderer->copyCommonProperties( this );
|
||||||
renderer->setAlphaBand( mAlphaBand );
|
|
||||||
renderer->setRasterTransparency( mRasterTransparency ? new QgsRasterTransparency( *mRasterTransparency ) : nullptr );
|
|
||||||
renderer->setGradient( mGradient );
|
renderer->setGradient( mGradient );
|
||||||
if ( mContrastEnhancement )
|
if ( mContrastEnhancement )
|
||||||
{
|
{
|
||||||
|
@ -69,10 +69,7 @@ QgsSingleBandPseudoColorRenderer* QgsSingleBandPseudoColorRenderer::clone() cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
QgsSingleBandPseudoColorRenderer * renderer = new QgsSingleBandPseudoColorRenderer( nullptr, mBand, shader );
|
QgsSingleBandPseudoColorRenderer * renderer = new QgsSingleBandPseudoColorRenderer( nullptr, mBand, shader );
|
||||||
|
renderer->copyCommonProperties( this );
|
||||||
renderer->setOpacity( mOpacity );
|
|
||||||
renderer->setAlphaBand( mAlphaBand );
|
|
||||||
renderer->setRasterTransparency( mRasterTransparency ? new QgsRasterTransparency( *mRasterTransparency ) : nullptr );
|
|
||||||
|
|
||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,15 @@ void QgsRendererRasterPropertiesWidget::apply()
|
|||||||
QgsRasterRendererWidget* rendererWidget = dynamic_cast<QgsRasterRendererWidget*>( stackedWidget->currentWidget() );
|
QgsRasterRendererWidget* rendererWidget = dynamic_cast<QgsRasterRendererWidget*>( stackedWidget->currentWidget() );
|
||||||
if ( rendererWidget )
|
if ( rendererWidget )
|
||||||
{
|
{
|
||||||
mRasterLayer->setRenderer( rendererWidget->renderer() );
|
QgsRasterRenderer* newRenderer = rendererWidget->renderer();
|
||||||
|
|
||||||
|
// there are transparency related data stored in renderer instances, but they
|
||||||
|
// are not configured in the widget, so we need to copy them over from existing renderer
|
||||||
|
QgsRasterRenderer* oldRenderer = mRasterLayer->renderer();
|
||||||
|
if ( oldRenderer )
|
||||||
|
newRenderer->copyCommonProperties( oldRenderer );
|
||||||
|
|
||||||
|
mRasterLayer->setRenderer( newRenderer );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hue and saturation controls
|
// Hue and saturation controls
|
||||||
|
Loading…
x
Reference in New Issue
Block a user