Skip to content

Commit bcf4026

Browse files
committedMay 29, 2017
Flip QgsVectorLayer from transparency to opacity
1 parent b7352bb commit bcf4026

16 files changed

+168
-97
lines changed
 

‎doc/api_break.dox

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2303,6 +2303,7 @@ displayExpression instead. For the map tip use mapTipTemplate() instead.
23032303
- addFeature() no longer accepts an alsoUpdateExtent boolean - this extra argument has been ignored for some time
23042304
- addFeatures() no longer accepts a makeSelected boolean, and will not automatically select newly added features. If desired, features must be manually selected by calling selectByIds() after addFeatures()
23052305
- annotationForm() and setAnnotationForm() have been removed. Form path is stored in individual QgsFormAnnotation objects.
2306+
- setLayerTransparency, layerTransparency, and layerTransparencyChanged were removed. Use opacity, setOpacity and opacityChanged instead.
23062307

23072308

23082309
QgsVectorLayerEditBuffer {#qgis_api_break_3_0_QgsVectorLayerEditBuffer}

‎python/core/qgsvectorlayer.sip

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1615,14 +1615,23 @@ Returns the current blending mode for features
16151615
:rtype: QPainter.CompositionMode
16161616
%End
16171617

1618-
void setLayerTransparency( int layerTransparency );
1618+
void setOpacity( double opacity );
16191619
%Docstring
1620-
Set the transparency for the vector layer
1620+
Sets the ``opacity`` for the vector layer, where ``opacity`` is a value between 0 (totally transparent)
1621+
and 1.0 (fully opaque).
1622+
.. seealso:: opacity()
1623+
.. seealso:: opacityChanged()
1624+
.. versionadded:: 3.0
16211625
%End
1622-
int layerTransparency() const;
1626+
1627+
double opacity() const;
16231628
%Docstring
1624-
Returns the current transparency for the vector layer
1625-
:rtype: int
1629+
Returns the opacity for the vector layer, where opacity is a value between 0 (totally transparent)
1630+
and 1.0 (fully opaque).
1631+
.. seealso:: setOpacity()
1632+
.. seealso:: opacityChanged()
1633+
.. versionadded:: 3.0
1634+
:rtype: float
16261635
%End
16271636

16281637
virtual QString htmlMetadata() const;
@@ -1952,9 +1961,13 @@ Emitted when the font family defined for labeling layer is not found on system
19521961
Signal emitted when setFeatureBlendMode() is called
19531962
%End
19541963

1955-
void layerTransparencyChanged( int layerTransparency );
1964+
void opacityChanged( double opacity );
19561965
%Docstring
1957-
Signal emitted when setLayerTransparency() is called
1966+
Emitted when the layer's opacity is changed, where ``opacity`` is a value between 0 (transparent)
1967+
and 1 (opaque).
1968+
.. versionadded:: 3.0
1969+
.. seealso:: setOpacity()
1970+
.. seealso:: opacity()
19581971
%End
19591972

19601973
void editCommandStarted( const QString &text );

‎src/core/layertree/qgslayertreemodellegendnode.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ QSizeF QgsSymbolLegendNode::drawSymbol( const QgsLegendSettings &settings, ItemC
387387

388388
int opacity = 255;
389389
if ( QgsVectorLayer *vectorLayer = dynamic_cast<QgsVectorLayer *>( layerNode()->layer() ) )
390-
opacity = 255 - ( 255 * vectorLayer->layerTransparency() / 100 );
390+
opacity = ( 255 * vectorLayer->opacity() );
391391

392392
p->save();
393393
p->setRenderHint( QPainter::Antialiasing );

‎src/core/qgsmaprenderercustompainterjob.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ bool QgsMapRendererJob::needTemporaryImage( QgsMapLayer *ml )
354354
if ( mSettings.testFlag( QgsMapSettings::UseAdvancedEffects ) &&
355355
( ( vl->blendMode() != QPainter::CompositionMode_SourceOver )
356356
|| ( vl->featureBlendMode() != QPainter::CompositionMode_SourceOver )
357-
|| ( vl->layerTransparency() != 0 ) ) )
357+
|| ( !qgsDoubleNear( vl->opacity(), 1.0 ) ) ) )
358358
{
359359
//layer properties require rasterization
360360
return true;

‎src/core/qgsmaprendererjob.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn
280280
job.opacity = 1.0;
281281
if ( QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( ml ) )
282282
{
283-
job.opacity = 1.0 - vl->layerTransparency() / 100.0;
283+
job.opacity = vl->opacity();
284284
}
285285
job.layer = ml;
286286
job.renderingTime = -1;

‎src/core/qgsmapsettingsutils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ const QStringList QgsMapSettingsUtils::containsAdvancedEffects( const QgsMapSett
4040
QgsVectorLayer *currentVectorLayer = qobject_cast<QgsVectorLayer *>( layer );
4141
if ( currentVectorLayer )
4242
{
43-
if ( currentVectorLayer->layerTransparency() != 0 )
43+
if ( !qgsDoubleNear( currentVectorLayer->opacity(), 1.0 ) )
4444
{
4545
layers << layer->name();
4646
}

‎src/core/qgspallabeling.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ void QgsPalLayerSettings::initPropertyDefinitions()
114114
"e.g. Bold Condensed or Light Italic" ) )
115115
},
116116
{ QgsPalLayerSettings::FontSizeUnit, QgsPropertyDefinition( "FontSizeUnit", QObject::tr( "Font size units" ), QgsPropertyDefinition::RenderUnits ) },
117-
{ QgsPalLayerSettings::FontTransp, QgsPropertyDefinition( "FontTransp", QObject::tr( "Text transparency" ), QgsPropertyDefinition::Transparency ) },
118-
{ QgsPalLayerSettings::FontOpacity, QgsPropertyDefinition( "FontOpacity", QObject::tr( "Text opacity" ), QgsPropertyDefinition::Transparency ) },
117+
{ QgsPalLayerSettings::FontTransp, QgsPropertyDefinition( "FontTransp", QObject::tr( "Text transparency" ), QgsPropertyDefinition::Opacity ) },
118+
{ QgsPalLayerSettings::FontOpacity, QgsPropertyDefinition( "FontOpacity", QObject::tr( "Text opacity" ), QgsPropertyDefinition::Opacity ) },
119119
{ QgsPalLayerSettings::FontCase, QgsPropertyDefinition( "FontCase", QgsPropertyDefinition::DataTypeString, QObject::tr( "Font case" ), QObject::tr( "string " ) + QStringLiteral( "[<b>NoChange</b>|<b>Upper</b>|<br><b>Lower</b>|<b>Capitalize</b>]" ) ) },
120120
{ QgsPalLayerSettings::FontLetterSpacing, QgsPropertyDefinition( "FontLetterSpacing", QObject::tr( "Letter spacing" ), QgsPropertyDefinition::Double ) },
121121
{ QgsPalLayerSettings::FontWordSpacing, QgsPropertyDefinition( "FontWordSpacing", QObject::tr( "Word spacing" ), QgsPropertyDefinition::Double ) },
@@ -135,8 +135,8 @@ void QgsPalLayerSettings::initPropertyDefinitions()
135135
{ QgsPalLayerSettings::BufferSize, QgsPropertyDefinition( "BufferSize", QObject::tr( "Symbol size" ), QgsPropertyDefinition::DoublePositive ) },
136136
{ QgsPalLayerSettings::BufferUnit, QgsPropertyDefinition( "BufferUnit", QObject::tr( "Buffer units" ), QgsPropertyDefinition::RenderUnits ) },
137137
{ QgsPalLayerSettings::BufferColor, QgsPropertyDefinition( "BufferColor", QObject::tr( "Buffer color" ), QgsPropertyDefinition::ColorNoAlpha ) },
138-
{ QgsPalLayerSettings::BufferTransp, QgsPropertyDefinition( "BufferTransp", QObject::tr( "Buffer transparency" ), QgsPropertyDefinition::Transparency ) },
139-
{ QgsPalLayerSettings::BufferOpacity, QgsPropertyDefinition( "BufferOpacity", QObject::tr( "Buffer opacity" ), QgsPropertyDefinition::Transparency ) },
138+
{ QgsPalLayerSettings::BufferTransp, QgsPropertyDefinition( "BufferTransp", QObject::tr( "Buffer transparency" ), QgsPropertyDefinition::Opacity ) },
139+
{ QgsPalLayerSettings::BufferOpacity, QgsPropertyDefinition( "BufferOpacity", QObject::tr( "Buffer opacity" ), QgsPropertyDefinition::Opacity ) },
140140
{ QgsPalLayerSettings::BufferJoinStyle, QgsPropertyDefinition( "BufferJoinStyle", QObject::tr( "Buffer join style" ), QgsPropertyDefinition::PenJoinStyle ) },
141141
{ QgsPalLayerSettings::BufferBlendMode, QgsPropertyDefinition( "BufferBlendMode", QObject::tr( "Buffer blend mode" ), QgsPropertyDefinition::BlendMode ) },
142142
{ QgsPalLayerSettings::ShapeDraw, QgsPropertyDefinition( "ShapeDraw", QObject::tr( "Draw shape" ), QgsPropertyDefinition::Boolean ) },
@@ -155,8 +155,8 @@ void QgsPalLayerSettings::initPropertyDefinitions()
155155
{ QgsPalLayerSettings::ShapeOffsetUnits, QgsPropertyDefinition( "ShapeOffsetUnits", QObject::tr( "Shape offset units" ), QgsPropertyDefinition::RenderUnits ) },
156156
{ QgsPalLayerSettings::ShapeRadii, QgsPropertyDefinition( "ShapeRadii", QObject::tr( "Shape radii" ), QgsPropertyDefinition::Size2D ) },
157157
{ QgsPalLayerSettings::ShapeRadiiUnits, QgsPropertyDefinition( "ShapeRadiiUnits", QObject::tr( "Symbol radii units" ), QgsPropertyDefinition::RenderUnits ) },
158-
{ QgsPalLayerSettings::ShapeTransparency, QgsPropertyDefinition( "ShapeTransparency", QObject::tr( "Shape transparency" ), QgsPropertyDefinition::Transparency ) },
159-
{ QgsPalLayerSettings::ShapeOpacity, QgsPropertyDefinition( "ShapeOpacity", QObject::tr( "Shape opacity" ), QgsPropertyDefinition::Transparency ) },
158+
{ QgsPalLayerSettings::ShapeTransparency, QgsPropertyDefinition( "ShapeTransparency", QObject::tr( "Shape transparency" ), QgsPropertyDefinition::Opacity ) },
159+
{ QgsPalLayerSettings::ShapeOpacity, QgsPropertyDefinition( "ShapeOpacity", QObject::tr( "Shape opacity" ), QgsPropertyDefinition::Opacity ) },
160160
{ QgsPalLayerSettings::ShapeBlendMode, QgsPropertyDefinition( "ShapeBlendMode", QObject::tr( "Shape blend mode" ), QgsPropertyDefinition::BlendMode ) },
161161
{ QgsPalLayerSettings::ShapeFillColor, QgsPropertyDefinition( "ShapeFillColor", QObject::tr( "Shape fill color" ), QgsPropertyDefinition::ColorWithAlpha ) },
162162
{ QgsPalLayerSettings::ShapeStrokeColor, QgsPropertyDefinition( "ShapeBorderColor", QObject::tr( "Shape stroke color" ), QgsPropertyDefinition::ColorWithAlpha ) },
@@ -173,8 +173,8 @@ void QgsPalLayerSettings::initPropertyDefinitions()
173173
{ QgsPalLayerSettings::ShadowOffsetUnits, QgsPropertyDefinition( "ShadowOffsetUnits", QObject::tr( "Shadow offset units" ), QgsPropertyDefinition::RenderUnits ) },
174174
{ QgsPalLayerSettings::ShadowRadius, QgsPropertyDefinition( "ShadowRadius", QObject::tr( "Shadow blur radius" ), QgsPropertyDefinition::DoublePositive ) },
175175
{ QgsPalLayerSettings::ShadowRadiusUnits, QgsPropertyDefinition( "ShadowRadiusUnits", QObject::tr( "Shadow blur units" ), QgsPropertyDefinition::RenderUnits ) },
176-
{ QgsPalLayerSettings::ShadowTransparency, QgsPropertyDefinition( "ShadowTransparency", QObject::tr( "Shadow transparency" ), QgsPropertyDefinition::Transparency ) },
177-
{ QgsPalLayerSettings::ShadowOpacity, QgsPropertyDefinition( "ShadowOpacity", QObject::tr( "Shadow opacity" ), QgsPropertyDefinition::Transparency ) },
176+
{ QgsPalLayerSettings::ShadowTransparency, QgsPropertyDefinition( "ShadowTransparency", QObject::tr( "Shadow transparency" ), QgsPropertyDefinition::Opacity ) },
177+
{ QgsPalLayerSettings::ShadowOpacity, QgsPropertyDefinition( "ShadowOpacity", QObject::tr( "Shadow opacity" ), QgsPropertyDefinition::Opacity ) },
178178
{ QgsPalLayerSettings::ShadowScale, QgsPropertyDefinition( "ShadowScale", QObject::tr( "Shadow scale" ), QgsPropertyDefinition::IntegerPositive ) },
179179
{ QgsPalLayerSettings::ShadowColor, QgsPropertyDefinition( "ShadowColor", QObject::tr( "Shadow color" ), QgsPropertyDefinition::ColorNoAlpha ) },
180180
{ QgsPalLayerSettings::ShadowBlendMode, QgsPropertyDefinition( "ShadowBlendMode", QObject::tr( "Shadow blend mode" ), QgsPropertyDefinition::BlendMode ) },

‎src/core/qgsvectorlayer.cpp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ QgsVectorLayer::QgsVectorLayer( const QString &vectorLayerPath,
143143
, mLabeling( nullptr )
144144
, mLabelFontNotFoundNotified( false )
145145
, mFeatureBlendMode( QPainter::CompositionMode_SourceOver ) // Default to normal feature blending
146-
, mLayerTransparency( 0 )
147146
, mVertexMarkerOnlyForSelection( false )
148147
, mEditBuffer( nullptr )
149148
, mJoinBuffer( nullptr )
@@ -222,7 +221,7 @@ QgsVectorLayer *QgsVectorLayer::clone() const
222221
layer->setExcludeAttributesWfs( excludeAttributesWfs() );
223222
layer->setAttributeTableConfig( attributeTableConfig() );
224223
layer->setFeatureBlendMode( featureBlendMode() );
225-
layer->setLayerTransparency( layerTransparency() );
224+
layer->setOpacity( opacity() );
226225

227226
Q_FOREACH ( const QgsAction &action, actions()->actions() )
228227
{
@@ -1887,7 +1886,13 @@ bool QgsVectorLayer::readStyle( const QDomNode &node, QString &errorMessage, con
18871886
if ( !layerTransparencyNode.isNull() )
18881887
{
18891888
QDomElement e = layerTransparencyNode.toElement();
1890-
setLayerTransparency( e.text().toInt() );
1889+
setOpacity( 1.0 - e.text().toInt() / 100.0 );
1890+
}
1891+
QDomNode layerOpacityNode = node.namedItem( QStringLiteral( "layerOpacity" ) );
1892+
if ( !layerOpacityNode.isNull() )
1893+
{
1894+
QDomElement e = layerOpacityNode.toElement();
1895+
setOpacity( e.text().toDouble() );
18911896
}
18921897

18931898
QDomElement e = node.toElement();
@@ -2153,11 +2158,11 @@ bool QgsVectorLayer::writeStyle( QDomNode &node, QDomDocument &doc, QString &err
21532158
featureBlendModeElem.appendChild( featureBlendModeText );
21542159
node.appendChild( featureBlendModeElem );
21552160

2156-
// add the layer transparency
2157-
QDomElement layerTransparencyElem = doc.createElement( QStringLiteral( "layerTransparency" ) );
2158-
QDomText layerTransparencyText = doc.createTextNode( QString::number( layerTransparency() ) );
2159-
layerTransparencyElem.appendChild( layerTransparencyText );
2160-
node.appendChild( layerTransparencyElem );
2161+
// add the layer opacity
2162+
QDomElement layerOpacityElem = doc.createElement( QStringLiteral( "layerOpacity" ) );
2163+
QDomText layerOpacityText = doc.createTextNode( QString::number( opacity() ) );
2164+
layerOpacityElem.appendChild( layerOpacityText );
2165+
node.appendChild( layerOpacityElem );
21612166

21622167
if ( mDiagramRenderer )
21632168
{
@@ -3535,16 +3540,16 @@ QPainter::CompositionMode QgsVectorLayer::featureBlendMode() const
35353540
return mFeatureBlendMode;
35363541
}
35373542

3538-
void QgsVectorLayer::setLayerTransparency( int layerTransparency )
3543+
void QgsVectorLayer::setOpacity( double opacity )
35393544
{
3540-
mLayerTransparency = layerTransparency;
3541-
emit layerTransparencyChanged( layerTransparency );
3545+
mLayerOpacity = opacity;
3546+
emit opacityChanged( opacity );
35423547
emit styleChanged();
35433548
}
35443549

3545-
int QgsVectorLayer::layerTransparency() const
3550+
double QgsVectorLayer::opacity() const
35463551
{
3547-
return mLayerTransparency;
3552+
return mLayerOpacity;
35483553
}
35493554

35503555

‎src/core/qgsvectorlayer.h

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,7 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
355355
Q_PROPERTY( QString mapTipTemplate READ mapTipTemplate WRITE setMapTipTemplate NOTIFY mapTipTemplateChanged )
356356
Q_PROPERTY( QgsEditFormConfig editFormConfig READ editFormConfig WRITE setEditFormConfig NOTIFY editFormConfigChanged )
357357
Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged )
358+
Q_PROPERTY( double opacity READ opacity WRITE setOpacity NOTIFY opacityChanged )
358359

359360
public:
360361

@@ -1508,10 +1509,23 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
15081509
//! Returns the current blending mode for features
15091510
QPainter::CompositionMode featureBlendMode() const;
15101511

1511-
//! Set the transparency for the vector layer
1512-
void setLayerTransparency( int layerTransparency );
1513-
//! Returns the current transparency for the vector layer
1514-
int layerTransparency() const;
1512+
/**
1513+
* Sets the \a opacity for the vector layer, where \a opacity is a value between 0 (totally transparent)
1514+
* and 1.0 (fully opaque).
1515+
* \see opacity()
1516+
* \see opacityChanged()
1517+
* \since QGIS 3.0
1518+
*/
1519+
void setOpacity( double opacity );
1520+
1521+
/**
1522+
* Returns the opacity for the vector layer, where opacity is a value between 0 (totally transparent)
1523+
* and 1.0 (fully opaque).
1524+
* \see setOpacity()
1525+
* \see opacityChanged()
1526+
* \since QGIS 3.0
1527+
*/
1528+
double opacity() const;
15151529

15161530
QString htmlMetadata() const override;
15171531

@@ -1795,8 +1809,14 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
17951809
//! Signal emitted when setFeatureBlendMode() is called
17961810
void featureBlendModeChanged( QPainter::CompositionMode blendMode );
17971811

1798-
//! Signal emitted when setLayerTransparency() is called
1799-
void layerTransparencyChanged( int layerTransparency );
1812+
/**
1813+
* Emitted when the layer's opacity is changed, where \a opacity is a value between 0 (transparent)
1814+
* and 1 (opaque).
1815+
* \since QGIS 3.0
1816+
* \see setOpacity()
1817+
* \see opacity()
1818+
*/
1819+
void opacityChanged( double opacity );
18001820

18011821
/**
18021822
* Signal emitted when a new edit command has been started
@@ -1994,8 +2014,8 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
19942014
//! Blend mode for features
19952015
QPainter::CompositionMode mFeatureBlendMode;
19962016

1997-
//! Layer transparency
1998-
int mLayerTransparency;
2017+
//! Layer opacity
2018+
double mLayerOpacity = 1.0;
19992019

20002020
//! Flag if the vertex markers should be drawn only for selection (true) or for all features (false)
20012021
bool mVertexMarkerOnlyForSelection;

‎src/gui/layertree/qgslayertreeembeddedwidgetregistry.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
QgsLayerTreeEmbeddedWidgetRegistry::QgsLayerTreeEmbeddedWidgetRegistry()
2222
{
2323
// populate with default implementations
24-
addProvider( new QgsLayerTreeTransparencyWidget::Provider() );
24+
addProvider( new QgsLayerTreeOpacityWidget::Provider() );
2525
}
2626

2727
QgsLayerTreeEmbeddedWidgetRegistry::~QgsLayerTreeEmbeddedWidgetRegistry()

‎src/gui/layertree/qgslayertreeembeddedwidgetsimpl.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@
2727

2828
///@cond PRIVATE
2929

30-
QgsLayerTreeTransparencyWidget::QgsLayerTreeTransparencyWidget( QgsMapLayer *layer )
30+
QgsLayerTreeOpacityWidget::QgsLayerTreeOpacityWidget( QgsMapLayer *layer )
3131
: mLayer( layer )
3232
{
3333
setAutoFillBackground( true ); // override the content from model
34-
QLabel *l = new QLabel( QStringLiteral( "Transparency" ), this );
34+
QLabel *l = new QLabel( QStringLiteral( "Opacity" ), this );
3535
mSlider = new QSlider( Qt::Horizontal, this );
36-
mSlider->setRange( 0, 100 );
36+
mSlider->setRange( 0, 1000 );
3737
QHBoxLayout *lay = new QHBoxLayout();
3838
lay->addWidget( l );
3939
lay->addWidget( mSlider );
@@ -43,31 +43,31 @@ QgsLayerTreeTransparencyWidget::QgsLayerTreeTransparencyWidget( QgsMapLayer *lay
4343
mTimer = new QTimer( this );
4444
mTimer->setSingleShot( true );
4545
mTimer->setInterval( 100 );
46-
connect( mTimer, &QTimer::timeout, this, &QgsLayerTreeTransparencyWidget::updateTransparencyFromSlider );
46+
connect( mTimer, &QTimer::timeout, this, &QgsLayerTreeOpacityWidget::updateOpacityFromSlider );
4747

48-
connect( mSlider, &QAbstractSlider::valueChanged, this, &QgsLayerTreeTransparencyWidget::sliderValueChanged );
48+
connect( mSlider, &QAbstractSlider::valueChanged, this, &QgsLayerTreeOpacityWidget::sliderValueChanged );
4949

5050
// init from layer
5151
if ( mLayer->type() == QgsMapLayer::VectorLayer )
5252
{
5353
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( mLayer );
54-
mSlider->setValue( vl->layerTransparency() );
55-
connect( vl, &QgsVectorLayer::layerTransparencyChanged, this, &QgsLayerTreeTransparencyWidget::layerTrChanged );
54+
mSlider->setValue( vl->opacity() * 1000.0 );
55+
connect( vl, &QgsVectorLayer::opacityChanged, this, &QgsLayerTreeOpacityWidget::layerTrChanged );
5656
}
5757
else if ( mLayer->type() == QgsMapLayer::RasterLayer )
5858
{
59-
mSlider->setValue( 100 - qobject_cast<QgsRasterLayer *>( mLayer )->renderer()->opacity() * 100 );
59+
mSlider->setValue( 1000 - qobject_cast<QgsRasterLayer *>( mLayer )->renderer()->opacity() * 1000 );
6060
// TODO: there is no signal for raster layers
6161
}
6262
}
6363

64-
QSize QgsLayerTreeTransparencyWidget::sizeHint() const
64+
QSize QgsLayerTreeOpacityWidget::sizeHint() const
6565
{
6666
return QWidget::sizeHint();
6767
//return QSize(200,200); // horizontal seems ignored, vertical is used for spacing
6868
}
6969

70-
void QgsLayerTreeTransparencyWidget::sliderValueChanged( int value )
70+
void QgsLayerTreeOpacityWidget::sliderValueChanged( int value )
7171
{
7272
Q_UNUSED( value );
7373

@@ -76,48 +76,48 @@ void QgsLayerTreeTransparencyWidget::sliderValueChanged( int value )
7676
mTimer->start();
7777
}
7878

79-
void QgsLayerTreeTransparencyWidget::updateTransparencyFromSlider()
79+
void QgsLayerTreeOpacityWidget::updateOpacityFromSlider()
8080
{
8181
int value = mSlider->value();
8282

8383
if ( mLayer->type() == QgsMapLayer::VectorLayer )
8484
{
85-
qobject_cast<QgsVectorLayer *>( mLayer )->setLayerTransparency( value );
85+
qobject_cast<QgsVectorLayer *>( mLayer )->setOpacity( value / 1000.0 );
8686
}
8787
else if ( mLayer->type() == QgsMapLayer::RasterLayer )
8888
{
89-
qobject_cast<QgsRasterLayer *>( mLayer )->renderer()->setOpacity( 1 - value / 100. );
89+
qobject_cast<QgsRasterLayer *>( mLayer )->renderer()->setOpacity( 1 - value / 1000.0 );
9090
}
9191

9292
mLayer->triggerRepaint();
9393
}
9494

95-
void QgsLayerTreeTransparencyWidget::layerTrChanged()
95+
void QgsLayerTreeOpacityWidget::layerTrChanged()
9696
{
9797
mSlider->blockSignals( true );
98-
mSlider->setValue( qobject_cast<QgsVectorLayer *>( mLayer )->layerTransparency() );
98+
mSlider->setValue( qobject_cast<QgsVectorLayer *>( mLayer )->opacity() * 1000.0 );
9999
mSlider->blockSignals( false );
100100
}
101101

102102
//
103103

104-
QString QgsLayerTreeTransparencyWidget::Provider::id() const
104+
QString QgsLayerTreeOpacityWidget::Provider::id() const
105105
{
106106
return QStringLiteral( "transparency" );
107107
}
108108

109-
QString QgsLayerTreeTransparencyWidget::Provider::name() const
109+
QString QgsLayerTreeOpacityWidget::Provider::name() const
110110
{
111-
return tr( "Transparency slider" );
111+
return tr( "Opacity slider" );
112112
}
113113

114-
QgsLayerTreeTransparencyWidget *QgsLayerTreeTransparencyWidget::Provider::createWidget( QgsMapLayer *layer, int widgetIndex )
114+
QgsLayerTreeOpacityWidget *QgsLayerTreeOpacityWidget::Provider::createWidget( QgsMapLayer *layer, int widgetIndex )
115115
{
116116
Q_UNUSED( widgetIndex );
117-
return new QgsLayerTreeTransparencyWidget( layer );
117+
return new QgsLayerTreeOpacityWidget( layer );
118118
}
119119

120-
bool QgsLayerTreeTransparencyWidget::Provider::supportsLayer( QgsMapLayer *layer )
120+
bool QgsLayerTreeOpacityWidget::Provider::supportsLayer( QgsMapLayer *layer )
121121
{
122122
return layer->type() == QgsMapLayer::VectorLayer || layer->type() == QgsMapLayer::RasterLayer;
123123
}

‎src/gui/layertree/qgslayertreeembeddedwidgetsimpl.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ class QgsMapLayer;
3131
*
3232
* \note private class - not in QGIS API
3333
*/
34-
class QgsLayerTreeTransparencyWidget : public QWidget
34+
class QgsLayerTreeOpacityWidget : public QWidget
3535
{
3636
Q_OBJECT
3737
public:
38-
QgsLayerTreeTransparencyWidget( QgsMapLayer *layer );
38+
QgsLayerTreeOpacityWidget( QgsMapLayer *layer );
3939

4040
virtual QSize sizeHint() const override;
4141

@@ -44,13 +44,13 @@ class QgsLayerTreeTransparencyWidget : public QWidget
4444
public:
4545
virtual QString id() const override;
4646
virtual QString name() const override;
47-
virtual QgsLayerTreeTransparencyWidget *createWidget( QgsMapLayer *layer, int widgetIndex ) override;
47+
virtual QgsLayerTreeOpacityWidget *createWidget( QgsMapLayer *layer, int widgetIndex ) override;
4848
virtual bool supportsLayer( QgsMapLayer *layer ) override;
4949
};
5050

5151
public slots:
5252
void sliderValueChanged( int value );
53-
void updateTransparencyFromSlider();
53+
void updateOpacityFromSlider();
5454
void layerTrChanged();
5555

5656
private:

‎src/gui/symbology-ng/qgsrendererpropertiesdialog.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ QgsRendererPropertiesDialog::QgsRendererPropertiesDialog( QgsVectorLayer *layer,
9292
{
9393
setupUi( this );
9494
mLayerRenderingGroupBox->setSettingGroup( QStringLiteral( "layerRenderingGroupBox" ) );
95+
mLayerOpacitySpnBx->setClearValue( 100.0 );
9596

9697
// can be embedded in vector layer properties
9798
if ( embedded )
@@ -115,9 +116,9 @@ QgsRendererPropertiesDialog::QgsRendererPropertiesDialog( QgsVectorLayer *layer,
115116

116117
connect( buttonBox, &QDialogButtonBox::accepted, this, &QgsRendererPropertiesDialog::onOK );
117118

118-
// connect layer transparency slider and spin box
119-
connect( mLayerTransparencySlider, &QAbstractSlider::valueChanged, mLayerTransparencySpnBx, &QSpinBox::setValue );
120-
connect( mLayerTransparencySpnBx, static_cast < void ( QSpinBox::* )( int ) > ( &QSpinBox::valueChanged ), mLayerTransparencySlider, &QAbstractSlider::setValue );
119+
// connect layer opacity slider and spin box
120+
connect( mLayerOpacitySlider, &QAbstractSlider::valueChanged, this, [ = ]( int value ) { mLayerOpacitySpnBx->setValue( value / 10.0 ); } );
121+
connect( mLayerOpacitySpnBx, static_cast < void ( QgsDoubleSpinBox::* )( double ) > ( &QgsDoubleSpinBox::valueChanged ), this, [ = ]( double value ) { mLayerOpacitySlider->setValue( value * 10 ); } );
121122

122123
connect( cboRenderers, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsRendererPropertiesDialog::rendererChanged );
123124
connect( checkboxEnableOrderBy, &QAbstractButton::toggled, btnOrderBy, &QWidget::setEnabled );
@@ -126,7 +127,7 @@ QgsRendererPropertiesDialog::QgsRendererPropertiesDialog( QgsVectorLayer *layer,
126127
syncToLayer();
127128

128129
QList<QWidget *> widgets;
129-
widgets << mLayerTransparencySpnBx
130+
widgets << mLayerOpacitySpnBx
130131
<< cboRenderers
131132
<< checkboxEnableOrderBy
132133
<< mBlendModeComboBox
@@ -294,8 +295,8 @@ void QgsRendererPropertiesDialog::apply()
294295
mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
295296
mLayer->setFeatureBlendMode( mFeatureBlendComboBox->blendMode() );
296297

297-
// set transparency for the layer
298-
mLayer->setLayerTransparency( mLayerTransparencySlider->value() );
298+
// set opacity for the layer
299+
mLayer->setOpacity( mLayerOpacitySlider->value() / 1000.0 );
299300
}
300301

301302
void QgsRendererPropertiesDialog::onOK()
@@ -340,9 +341,9 @@ void QgsRendererPropertiesDialog::syncToLayer()
340341
// Feature blend mode
341342
mFeatureBlendComboBox->setBlendMode( mLayer->featureBlendMode() );
342343

343-
// Layer transparency
344-
mLayerTransparencySlider->setValue( mLayer->layerTransparency() );
345-
mLayerTransparencySpnBx->setValue( mLayer->layerTransparency() );
344+
// Layer opacity
345+
mLayerOpacitySlider->setValue( mLayer->opacity() * 1000.0 );
346+
mLayerOpacitySpnBx->setValue( mLayer->opacity() * 100.0 );
346347

347348
//paint effect widget
348349
if ( mLayer->renderer() )

‎src/ui/qgsrendererv2propsdialogbase.ui

Lines changed: 49 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,43 @@
117117
<item row="0" column="1" colspan="3">
118118
<layout class="QHBoxLayout" name="horizontalLayout_2">
119119
<item>
120-
<widget class="QSlider" name="mLayerTransparencySlider">
120+
<widget class="QSlider" name="mLayerOpacitySlider">
121121
<property name="maximum">
122+
<number>1000</number>
123+
</property>
124+
<property name="singleStep">
125+
<number>10</number>
126+
</property>
127+
<property name="pageStep">
122128
<number>100</number>
123129
</property>
130+
<property name="value">
131+
<number>1000</number>
132+
</property>
124133
<property name="orientation">
125134
<enum>Qt::Horizontal</enum>
126135
</property>
127136
</widget>
128137
</item>
129138
<item>
130-
<widget class="QSpinBox" name="mLayerTransparencySpnBx">
139+
<widget class="QgsDoubleSpinBox" name="mLayerOpacitySpnBx">
140+
<property name="minimumSize">
141+
<size>
142+
<width>100</width>
143+
<height>0</height>
144+
</size>
145+
</property>
146+
<property name="suffix">
147+
<string> %</string>
148+
</property>
149+
<property name="decimals">
150+
<number>1</number>
151+
</property>
131152
<property name="maximum">
132-
<number>100</number>
153+
<double>100.000000000000000</double>
154+
</property>
155+
<property name="value">
156+
<double>100.000000000000000</double>
133157
</property>
134158
</widget>
135159
</item>
@@ -138,7 +162,7 @@
138162
<item row="0" column="0">
139163
<widget class="QLabel" name="lblTransparency">
140164
<property name="text">
141-
<string>Transparency</string>
165+
<string>Opacity</string>
142166
</property>
143167
</widget>
144168
</item>
@@ -151,15 +175,15 @@
151175
</item>
152176
<item row="1" column="1" colspan="3">
153177
<layout class="QGridLayout" name="gridLayout_1">
154-
<property name="spacing">
155-
<number>1</number>
156-
</property>
157178
<property name="leftMargin">
158179
<number>0</number>
159180
</property>
160181
<property name="rightMargin">
161182
<number>0</number>
162183
</property>
184+
<property name="spacing">
185+
<number>1</number>
186+
</property>
163187
<item row="0" column="0">
164188
<widget class="QLabel" name="lblLayerBlend">
165189
<property name="text">
@@ -175,7 +199,7 @@
175199
</widget>
176200
</item>
177201
<item row="1" column="0">
178-
<widget class="QgsBlendModeComboBox" name="mBlendModeComboBox">
202+
<widget class="QgsBlendModeComboBox" name="mBlendModeComboBox">
179203
<property name="sizePolicy">
180204
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
181205
<horstretch>4</horstretch>
@@ -207,13 +231,13 @@
207231
</item>
208232
<item>
209233
<widget class="QToolButton" name="btnOrderBy">
234+
<property name="text">
235+
<string>...</string>
236+
</property>
210237
<property name="icon">
211238
<iconset resource="../../images/images.qrc">
212239
<normaloff>:/images/themes/default/sort.svg</normaloff>:/images/themes/default/sort.svg</iconset>
213240
</property>
214-
<property name="text">
215-
<string>...</string>
216-
</property>
217241
</widget>
218242
</item>
219243
</layout>
@@ -248,16 +272,21 @@
248272
</widget>
249273
<customwidgets>
250274
<customwidget>
251-
<class>QgsCollapsibleGroupBox</class>
252-
<extends>QGroupBox</extends>
253-
<header>qgscollapsiblegroupbox.h</header>
254-
<container>1</container>
275+
<class>QgsDoubleSpinBox</class>
276+
<extends>QDoubleSpinBox</extends>
277+
<header>qgsdoublespinbox.h</header>
255278
</customwidget>
256279
<customwidget>
257280
<class>QgsBlendModeComboBox</class>
258281
<extends>QComboBox</extends>
259282
<header>qgsblendmodecombobox.h</header>
260283
</customwidget>
284+
<customwidget>
285+
<class>QgsCollapsibleGroupBox</class>
286+
<extends>QGroupBox</extends>
287+
<header>qgscollapsiblegroupbox.h</header>
288+
<container>1</container>
289+
</customwidget>
261290
<customwidget>
262291
<class>QgsEffectStackCompactWidget</class>
263292
<extends>QWidget</extends>
@@ -267,11 +296,13 @@
267296
</customwidgets>
268297
<tabstops>
269298
<tabstop>cboRenderers</tabstop>
270-
<tabstop>mLayerTransparencySlider</tabstop>
271-
<tabstop>mLayerTransparencySpnBx</tabstop>
299+
<tabstop>mLayerOpacitySlider</tabstop>
300+
<tabstop>mLayerOpacitySpnBx</tabstop>
272301
<tabstop>mBlendModeComboBox</tabstop>
273302
<tabstop>buttonBox</tabstop>
274303
</tabstops>
275-
<resources/>
304+
<resources>
305+
<include location="../../images/images.qrc"/>
306+
</resources>
276307
<connections/>
277308
</ui>

‎tests/src/core/testqgsblendmodes.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,12 @@ void TestQgsBlendModes::vectorLayerTransparency()
198198
mMapSettings->setLayers( myLayers );
199199

200200
//Set feature blending modes for point layer
201-
mpLinesLayer->setLayerTransparency( 50 );
201+
mpLinesLayer->setOpacity( 0.50 );
202202
mMapSettings->setExtent( mExtent );
203203
bool res = imageCheck( QStringLiteral( "vector_layertransparency" ) );
204204

205205
//Reset layers
206-
mpLinesLayer->setLayerTransparency( 0 );
206+
mpLinesLayer->setOpacity( 1.0 );
207207

208208
QVERIFY( res );
209209
}

‎tests/src/core/testqgsvectorlayer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,9 +300,9 @@ void TestQgsVectorLayer::QgsVectorLayersetLayerTransparency()
300300
&receiver, SLOT( onLayerTransparencyChanged( int ) ) );
301301

302302
QCOMPARE( receiver.transparency, 0 );
303-
vLayer->setLayerTransparency( 50 );
303+
vLayer->setOpacity( 0.5 );
304304
QCOMPARE( receiver.transparency, 50 );
305-
QCOMPARE( vLayer->layerTransparency(), 50 );
305+
QCOMPARE( vLayer->opacity(), 0.5 );
306306
}
307307

308308
void TestQgsVectorLayer::uniqueValues()

0 commit comments

Comments
 (0)
Please sign in to comment.