Skip to content

Commit 9a0dffe

Browse files
committedApr 9, 2013
Merge pull request #512 from nyalldawson/blend_mode_fixes
Some blending fixes and code cleanup
2 parents 1436056 + dbf795e commit 9a0dffe

14 files changed

+43
-39
lines changed
 

‎src/app/composer/qgscomposeritemwidget.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ void QgsComposerItemWidget::on_mBlendModeCombo_currentIndexChanged( int index )
392392
Q_UNUSED( index );
393393
if ( mItem )
394394
{
395-
mItem->setBlendMode(( QgsMapRenderer::BlendMode ) mBlendModeCombo->blendMode() );
395+
mItem->setBlendMode( mBlendModeCombo->blendMode() );
396396
}
397397
}
398398

‎src/app/qgslabelinggui.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ QgsLabelingGui::QgsLabelingGui( QgsPalLabeling* lbl, QgsVectorLayer* layer, QgsM
254254
mBufferTranspSpinBox->setValue( lyr.bufferTransp );
255255
mBufferJoinStyleComboBox->setPenJoinStyle( lyr.bufferJoinStyle );
256256
mBufferTranspFillChbx->setChecked( !lyr.bufferNoFill );
257-
comboBufferBlendMode->setBlendMode( QgsMapRenderer::getBlendModeEnum( lyr.bufferBlendMode ) );
257+
comboBufferBlendMode->setBlendMode( lyr.bufferBlendMode );
258258
}
259259
else
260260
{
@@ -295,7 +295,7 @@ QgsLabelingGui::QgsLabelingGui( QgsPalLabeling* lbl, QgsVectorLayer* layer, QgsM
295295
mFontSizeSpinBox->setValue( lyr.textFont.pointSizeF() );
296296
btnTextColor->setColor( lyr.textColor );
297297
mFontTranspSpinBox->setValue( lyr.textTransp );
298-
comboBlendMode->setBlendMode( QgsMapRenderer::getBlendModeEnum( lyr.blendMode ) );
298+
comboBlendMode->setBlendMode( lyr.blendMode );
299299

300300
mFontWordSpacingSpinBox->setValue( lyr.textFont.wordSpacing() );
301301
mFontLetterSpacingSpinBox->setValue( lyr.textFont.letterSpacing() );
@@ -336,7 +336,7 @@ QgsLabelingGui::QgsLabelingGui( QgsPalLabeling* lbl, QgsVectorLayer* layer, QgsM
336336
connect( mShapeTranspSlider, SIGNAL( valueChanged( int ) ), mShapeTranspSpinBox, SLOT( setValue( int ) ) );
337337
connect( mShapeTranspSpinBox, SIGNAL( valueChanged( int ) ), mShapeTranspSlider, SLOT( setValue( int ) ) );
338338
mShapeTranspSpinBox->setValue( lyr.shapeTransparency );
339-
mShapeBlendCmbBx->setBlendMode( QgsMapRenderer::getBlendModeEnum( lyr.shapeBlendMode ) );
339+
mShapeBlendCmbBx->setBlendMode( lyr.shapeBlendMode );
340340

341341
mLoadSvgParams = false;
342342
on_mShapeTypeCmbBx_currentIndexChanged( lyr.shapeType ); // force update of shape background gui
@@ -498,7 +498,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
498498
lyr.textFont = mRefFont;
499499
lyr.textNamedStyle = mFontStyleComboBox->currentText();
500500
lyr.textTransp = mFontTranspSpinBox->value();
501-
lyr.blendMode = QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode )comboBlendMode->blendMode() );
501+
lyr.blendMode = comboBlendMode->blendMode();
502502
lyr.previewBkgrdColor = mPreviewBackgroundBtn->color();
503503
lyr.enabled = chkEnableLabeling->isChecked();
504504
lyr.priority = sliderPriority->value();
@@ -523,7 +523,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
523523
lyr.bufferSizeInMapUnits = ( mBufferUnitComboBox->currentIndex() == 1 );
524524
lyr.bufferJoinStyle = mBufferJoinStyleComboBox->penJoinStyle();
525525
lyr.bufferNoFill = !mBufferTranspFillChbx->isChecked();
526-
lyr.bufferBlendMode = QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode )comboBufferBlendMode->blendMode() );
526+
lyr.bufferBlendMode = comboBufferBlendMode->blendMode();
527527
}
528528
else
529529
{
@@ -551,7 +551,7 @@ QgsPalLayerSettings QgsLabelingGui::layerSettings()
551551
lyr.shapeBorderWidthUnits = ( QgsPalLayerSettings::SizeUnit )( mShapeBorderWidthUnitsCmbBx->currentIndex() + 1 );
552552
lyr.shapeJoinStyle = mShapePenStyleCmbBx->penJoinStyle();
553553
lyr.shapeTransparency = mShapeTranspSpinBox->value();
554-
lyr.shapeBlendMode = QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode )mShapeBlendCmbBx->blendMode() );
554+
lyr.shapeBlendMode = mShapeBlendCmbBx->blendMode();
555555

556556

557557
if ( chkFormattedNumbers->isChecked() )

‎src/app/qgsrasterlayerproperties.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -871,7 +871,7 @@ void QgsRasterLayerProperties::apply()
871871
}
872872

873873
//set the blend mode for the layer
874-
mRasterLayer->setBlendMode(( QgsMapRenderer::BlendMode ) mBlendModeComboBox->blendMode() );
874+
mRasterLayer->setBlendMode( mBlendModeComboBox->blendMode() );
875875

876876
//get the thumbnail for the layer
877877
pixmapThumbnail->setPixmap( mRasterLayer->previewAsPixmap( pixmapThumbnail->size() ) );

‎src/core/composer/qgscomposeritem.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ QgsComposerItem::QgsComposerItem( QgsComposition* composition, bool manageZValue
5454
, mItemPositionLocked( false )
5555
, mLastValidViewScaleFactor( -1 )
5656
, mRotation( 0 )
57-
, mBlendMode( QgsMapRenderer::BlendNormal )
57+
, mBlendMode( QPainter::CompositionMode_SourceOver )
5858
, mTransparency( 0 )
5959
, mLastUsedPositionMode( UpperLeft )
6060
, mId( "" )
@@ -75,7 +75,7 @@ QgsComposerItem::QgsComposerItem( qreal x, qreal y, qreal width, qreal height, Q
7575
, mItemPositionLocked( false )
7676
, mLastValidViewScaleFactor( -1 )
7777
, mRotation( 0 )
78-
, mBlendMode( QgsMapRenderer::BlendNormal )
78+
, mBlendMode( QPainter::CompositionMode_SourceOver )
7979
, mTransparency( 0 )
8080
, mLastUsedPositionMode( UpperLeft )
8181
, mId( "" )
@@ -205,7 +205,7 @@ bool QgsComposerItem::_writeXML( QDomElement& itemElem, QDomDocument& doc ) cons
205205
composerItemElem.appendChild( bgColorElem );
206206

207207
//blend mode
208-
composerItemElem.setAttribute( "blendMode", QString::number( mBlendMode ) );
208+
composerItemElem.setAttribute( "blendMode", QgsMapRenderer::getBlendModeEnum( mBlendMode ) );
209209

210210
//transparency
211211
composerItemElem.setAttribute( "transparency", QString::number( mTransparency ) );
@@ -331,7 +331,7 @@ bool QgsComposerItem::_readXML( const QDomElement& itemElem, const QDomDocument&
331331
}
332332

333333
//blend mode
334-
setBlendMode(( QgsMapRenderer::BlendMode ) itemElem.attribute( "blendMode" , "0" ).toInt() );
334+
setBlendMode( QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode ) itemElem.attribute( "blendMode", "0" ).toUInt() ) );
335335

336336
//transparency
337337
setTransparency( itemElem.attribute( "transparency" , "0" ).toInt() );
@@ -884,11 +884,11 @@ void QgsComposerItem::drawBackground( QPainter* p )
884884
}
885885
}
886886

887-
void QgsComposerItem::setBlendMode( QgsMapRenderer::BlendMode blendMode )
887+
void QgsComposerItem::setBlendMode( QPainter::CompositionMode blendMode )
888888
{
889889
mBlendMode = blendMode;
890890
// Update the composer effect to use the new blend mode
891-
mEffect->setCompositionMode( QgsMapRenderer::getCompositionMode( mBlendMode ) );
891+
mEffect->setCompositionMode( mBlendMode );
892892
}
893893

894894
void QgsComposerItem::setTransparency( int transparency )

‎src/core/composer/qgscomposeritem.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,10 @@ class CORE_EXPORT QgsComposerItem: public QObject, public QGraphicsRectItem
198198
void setBackgroundEnabled( bool drawBackground ) {mBackground = drawBackground;}
199199

200200
/** Returns the item's composition blending mode */
201-
QgsMapRenderer::BlendMode blendMode() const {return mBlendMode;}
201+
QPainter::CompositionMode blendMode() const {return mBlendMode;}
202202

203203
/** Sets the item's composition blending mode*/
204-
void setBlendMode( QgsMapRenderer::BlendMode blendMode );
204+
void setBlendMode( QPainter::CompositionMode blendMode );
205205

206206
/** Returns the item's transparency */
207207
int transparency() const {return mTransparency;}
@@ -321,7 +321,7 @@ class CORE_EXPORT QgsComposerItem: public QObject, public QGraphicsRectItem
321321
double mRotation;
322322

323323
/**Composition blend mode for item*/
324-
QgsMapRenderer::BlendMode mBlendMode;
324+
QPainter::CompositionMode mBlendMode;
325325

326326
QgsComposerEffect *mEffect;
327327

‎src/core/composer/qgscomposerlabel.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ void QgsComposerLabel::setExpressionContext( QgsFeature* feature, QgsVectorLayer
124124
mExpressionFeature = feature;
125125
mExpressionLayer = layer;
126126
mSubstitutions = substitutions;
127+
// Force label to redraw -- fixes label printing for labels with blend modes when used with atlas
128+
update();
127129
}
128130

129131
QString QgsComposerLabel::displayText() const

‎src/core/qgsmaplayer.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ QgsMapLayer::QgsMapLayer( QgsMapLayer::LayerType type,
4949
mLayerOrigName( lyrname ), // store the original name
5050
mID( "" ),
5151
mLayerType( type ),
52-
mBlendMode( QgsMapRenderer::BlendNormal ) // Default to normal blending
52+
mBlendMode( QPainter::CompositionMode_SourceOver ) // Default to normal blending
5353
{
5454
mCRS = new QgsCoordinateReferenceSystem();
5555

@@ -134,13 +134,13 @@ QgsRectangle QgsMapLayer::extent()
134134
}
135135

136136
/** Write blend mode for layer */
137-
void QgsMapLayer::setBlendMode( const QgsMapRenderer::BlendMode blendMode )
137+
void QgsMapLayer::setBlendMode( const QPainter::CompositionMode blendMode )
138138
{
139139
mBlendMode = blendMode;
140140
}
141141

142142
/** Read blend mode for layer */
143-
QgsMapRenderer::BlendMode QgsMapLayer::blendMode() const
143+
QPainter::CompositionMode QgsMapLayer::blendMode() const
144144
{
145145
return mBlendMode;
146146
}

‎src/core/qgsmaplayer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ class CORE_EXPORT QgsMapLayer : public QObject
9797
const QString& abstract() const { return mAbstract; }
9898

9999
/* Set the blending mode used for rendering a layer */
100-
void setBlendMode( const QgsMapRenderer::BlendMode blendMode );
100+
void setBlendMode( const QPainter::CompositionMode blendMode );
101101
/* Returns the current blending mode for a layer */
102-
QgsMapRenderer::BlendMode blendMode() const;
102+
QPainter::CompositionMode blendMode() const;
103103

104104
/**Synchronises with changes in the datasource
105105
@note added in version 1.6*/
@@ -479,7 +479,7 @@ class CORE_EXPORT QgsMapLayer : public QObject
479479
QgsMapLayer::LayerType mLayerType;
480480

481481
/** Blend mode for the layer */
482-
QgsMapRenderer::BlendMode mBlendMode;
482+
QPainter::CompositionMode mBlendMode;
483483

484484
/** Tag for embedding additional information */
485485
QString mTag;

‎src/core/qgsmaprenderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
388388

389389
// Set the QPainter composition mode so that this layer is rendered using
390390
// the desired blending mode
391-
mypContextPainter->setCompositionMode( getCompositionMode( ml->blendMode() ) );
391+
mypContextPainter->setCompositionMode( ml->blendMode() );
392392

393393
if ( !ml->hasScaleBasedVisibility() || ( ml->minimumScale() <= mScale && mScale < ml->maximumScale() ) || mOverview )
394394
{

‎src/core/qgsvectorlayer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
17211721
if ( !blendModeNode.isNull() )
17221722
{
17231723
QDomElement e = blendModeNode.toElement();
1724-
setBlendMode(( QgsMapRenderer::BlendMode ) e.text().toInt() );
1724+
setBlendMode( QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode ) e.text().toInt() ) );
17251725
}
17261726

17271727
// use scale dependent visibility flag
@@ -2045,7 +2045,7 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
20452045

20462046
// add the blend mode field
20472047
QDomElement blendModeElem = doc.createElement( "blendMode" );
2048-
QDomText blendModeText = doc.createTextNode( QString::number( blendMode() ) );
2048+
QDomText blendModeText = doc.createTextNode( QString::number( QgsMapRenderer::getBlendModeEnum( blendMode() ) ) );
20492049
blendModeElem.appendChild( blendModeText );
20502050
node.appendChild( blendModeElem );
20512051

‎src/core/raster/qgsrasterlayer.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2332,7 +2332,7 @@ bool QgsRasterLayer::readSymbology( const QDomNode& layer_node, QString& errorMe
23322332
if ( !blendModeNode.isNull() )
23332333
{
23342334
QDomElement e = blendModeNode.toElement();
2335-
setBlendMode(( QgsMapRenderer::BlendMode ) e.text().toInt() );
2335+
setBlendMode( QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode ) e.text().toInt() ) );
23362336
}
23372337

23382338
return true;
@@ -2531,7 +2531,7 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
25312531

25322532
// add blend mode node
25332533
QDomElement blendModeElement = document.createElement( "blendMode" );
2534-
QDomText blendModeText = document.createTextNode( QString::number( blendMode() ) );
2534+
QDomText blendModeText = document.createTextNode( QString::number( QgsMapRenderer::getBlendModeEnum( blendMode() ) ) );
25352535
blendModeElement.appendChild( blendModeText );
25362536
layer_node.appendChild( blendModeElement );
25372537

‎src/gui/qgsblendmodecombobox.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ void QgsBlendModeComboBox::updateModes()
9898
blockSignals( false );
9999
}
100100

101-
//! Function to read the selected blend mode as int
102-
int QgsBlendModeComboBox::blendMode()
101+
//! Function to read the selected blend mode
102+
QPainter::CompositionMode QgsBlendModeComboBox::blendMode()
103103
{
104-
return mListIndexToBlendMode[ currentIndex()];
104+
return QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode ) mListIndexToBlendMode[ currentIndex()] );
105105
}
106106

107-
//! Function to set the selected blend mode from int
108-
void QgsBlendModeComboBox::setBlendMode( int blendMode )
107+
//! Function to set the selected blend mode
108+
void QgsBlendModeComboBox::setBlendMode( QPainter::CompositionMode blendMode )
109109
{
110-
setCurrentIndex( mBlendModeToListIndex[ blendMode ] );
110+
setCurrentIndex( mBlendModeToListIndex[( int ) QgsMapRenderer::getBlendModeEnum( blendMode )] );
111111
}
112112

‎src/gui/qgsblendmodecombobox.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#define QGSBLENDMODECOMBOBOX_H
2020

2121
#include <QComboBox>
22+
#include <QPainter> // For QPainter::CompositionMode enum
23+
#include "qgsmaprenderer.h" //for getCompositionMode
2224

2325
/** \ingroup gui
2426
* A combobox which lets the user select blend modes from a predefined list
@@ -30,10 +32,10 @@ class GUI_EXPORT QgsBlendModeComboBox : public QComboBox
3032
QgsBlendModeComboBox( QWidget* parent = 0 );
3133
virtual ~QgsBlendModeComboBox();
3234

33-
//! Function to read the selected blend mode as integer
34-
int blendMode();
35-
//! Function to set the selected blend mode from integer
36-
void setBlendMode( int blendMode );
35+
//! Function to read the selected blend mode as QPainter::CompositionMode
36+
QPainter::CompositionMode blendMode();
37+
//! Function to set the selected blend mode from QPainter::CompositionMode
38+
void setBlendMode( QPainter::CompositionMode blendMode );
3739
private:
3840
//! Returns a list of grouped blend modes (with seperators)
3941
QStringList blendModesList() const;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ void QgsRendererV2PropertiesDialog::apply()
174174
}
175175

176176
// set the blend mode for the layer
177-
mLayer->setBlendMode(( QgsMapRenderer::BlendMode ) mBlendModeComboBox->blendMode() );
177+
mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
178178
}
179179

180180
void QgsRendererV2PropertiesDialog::onOK()

0 commit comments

Comments
 (0)
Please sign in to comment.