Skip to content

Commit cda387c

Browse files
committedMay 7, 2016
Ensure that @symbol_color is always correct for symbol layer types
with subsymbols
1 parent d823be1 commit cda387c

11 files changed

+98
-5
lines changed
 

‎python/core/symbology-ng/qgsarrowsymbollayer.sip

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
1414
*
1515
* @return A new QgsArrowSymbolLayer
1616
*/
17-
static QgsSymbolLayerV2* create( const QgsStringMap& properties ) /Factory/;
17+
static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() ) /Factory/;
1818

1919
/** Virtual constructor */
2020
virtual QgsArrowSymbolLayer* clone() const /Factory/;
@@ -108,6 +108,7 @@ class QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
108108
void renderPolyline( const QPolygonF& points, QgsSymbolV2RenderContext& context );
109109

110110
void setColor( const QColor& c );
111+
virtual QColor color() const;
111112

112113
private:
113114
QgsArrowSymbolLayer( const QgsArrowSymbolLayer& );

‎python/core/symbology-ng/qgsfillsymbollayerv2.sip

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,6 +843,9 @@ class QgsPointPatternFillSymbolLayer : QgsImageFillSymbolLayer
843843

844844
virtual QSet<QString> usedAttributes() const;
845845

846+
void setColor( const QColor& c );
847+
virtual QColor color() const;
848+
846849
protected:
847850
void applyDataDefinedSettings( QgsSymbolV2RenderContext& context );
848851
};
@@ -879,6 +882,7 @@ class QgsCentroidFillSymbolLayerV2 : QgsFillSymbolLayerV2
879882
void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const;
880883

881884
void setColor( const QColor& color );
885+
QColor color() const;
882886

883887
QgsSymbolV2* subSymbol();
884888
bool setSubSymbol( QgsSymbolV2* symbol /Transfer/ );

‎python/core/symbology-ng/qgslinesymbollayerv2.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ class QgsMarkerLineSymbolLayerV2 : QgsLineSymbolLayerV2
145145
void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const;
146146

147147
void setColor( const QColor& color );
148+
virtual QColor color() const;
148149

149150
QgsSymbolV2* subSymbol();
150151
bool setSubSymbol( QgsSymbolV2* symbol /Transfer/);

‎src/core/symbology-ng/qgsarrowsymbollayer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -613,3 +613,8 @@ void QgsArrowSymbolLayer::setColor( const QColor& c )
613613
mColor = c;
614614
}
615615

616+
QColor QgsArrowSymbolLayer::color() const
617+
{
618+
return mSymbol.data() ? mSymbol->color() : mColor;
619+
}
620+

‎src/core/symbology-ng/qgsarrowsymbollayer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
3434
*
3535
* @return A new QgsArrowSymbolLayer
3636
*/
37-
static QgsSymbolLayerV2* create( const QgsStringMap& properties );
37+
static QgsSymbolLayerV2* create( const QgsStringMap& properties = QgsStringMap() );
3838

3939
/** Virtual constructor */
4040
virtual QgsArrowSymbolLayer* clone() const override;
@@ -128,6 +128,7 @@ class CORE_EXPORT QgsArrowSymbolLayer : public QgsLineSymbolLayerV2
128128
void renderPolyline( const QPolygonF& points, QgsSymbolV2RenderContext& context ) override;
129129

130130
void setColor( const QColor& c ) override;
131+
virtual QColor color() const override;
131132

132133
private:
133134
/** Filling sub symbol */

‎src/core/symbology-ng/qgsfillsymbollayerv2.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2331,6 +2331,11 @@ void QgsLinePatternFillSymbolLayer::setColor( const QColor& c )
23312331
mColor = c;
23322332
}
23332333

2334+
QColor QgsLinePatternFillSymbolLayer::color() const
2335+
{
2336+
return mFillLineSymbol ? mFillLineSymbol->color() : mColor;
2337+
}
2338+
23342339
QgsLinePatternFillSymbolLayer::~QgsLinePatternFillSymbolLayer()
23352340
{
23362341
delete mFillLineSymbol;
@@ -3392,6 +3397,18 @@ QSet<QString> QgsPointPatternFillSymbolLayer::usedAttributes() const
33923397
return attributes;
33933398
}
33943399

3400+
void QgsPointPatternFillSymbolLayer::setColor( const QColor& c )
3401+
{
3402+
mColor = c;
3403+
if ( mMarkerSymbol )
3404+
mMarkerSymbol->setColor( c );
3405+
}
3406+
3407+
QColor QgsPointPatternFillSymbolLayer::color() const
3408+
{
3409+
return mMarkerSymbol ? mMarkerSymbol->color() : mColor;
3410+
}
3411+
33953412
//////////////
33963413

33973414

@@ -3433,6 +3450,11 @@ void QgsCentroidFillSymbolLayerV2::setColor( const QColor& color )
34333450
mColor = color;
34343451
}
34353452

3453+
QColor QgsCentroidFillSymbolLayerV2::color() const
3454+
{
3455+
return mMarker ? mMarker->color() : mColor;
3456+
}
3457+
34363458
void QgsCentroidFillSymbolLayerV2::startRender( QgsSymbolV2RenderContext& context )
34373459
{
34383460
mMarker->setAlpha( context.alpha() );

‎src/core/symbology-ng/qgsfillsymbollayerv2.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -899,7 +899,7 @@ class CORE_EXPORT QgsLinePatternFillSymbolLayer: public QgsImageFillSymbolLayer
899899
void setLineWidth( double w );
900900
double lineWidth() const { return mLineWidth; }
901901
void setColor( const QColor& c ) override;
902-
QColor color() const override { return mColor; }
902+
QColor color() const override;
903903
void setOffset( double offset ) { mOffset = offset; }
904904
double offset() const { return mOffset; }
905905

@@ -1029,6 +1029,8 @@ class CORE_EXPORT QgsPointPatternFillSymbolLayer: public QgsImageFillSymbolLayer
10291029
QgsMapUnitScale mapUnitScale() const override;
10301030

10311031
virtual QSet<QString> usedAttributes() const override;
1032+
void setColor( const QColor& c ) override;
1033+
virtual QColor color() const override;
10321034

10331035
protected:
10341036
QgsMarkerSymbolV2* mMarkerSymbol;
@@ -1080,6 +1082,7 @@ class CORE_EXPORT QgsCentroidFillSymbolLayerV2 : public QgsFillSymbolLayerV2
10801082
void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const override;
10811083

10821084
void setColor( const QColor& color ) override;
1085+
QColor color() const override;
10831086

10841087
QgsSymbolV2* subSymbol() override;
10851088
bool setSubSymbol( QgsSymbolV2* symbol ) override;

‎src/core/symbology-ng/qgslinesymbollayerv2.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,11 @@ void QgsMarkerLineSymbolLayerV2::setColor( const QColor& color )
813813
mColor = color;
814814
}
815815

816+
QColor QgsMarkerLineSymbolLayerV2::color() const
817+
{
818+
return mMarker ? mMarker->color() : mColor;
819+
}
820+
816821
void QgsMarkerLineSymbolLayerV2::startRender( QgsSymbolV2RenderContext& context )
817822
{
818823
mMarker->setAlpha( context.alpha() );

‎src/core/symbology-ng/qgslinesymbollayerv2.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ class CORE_EXPORT QgsMarkerLineSymbolLayerV2 : public QgsLineSymbolLayerV2
194194
void toSld( QDomDocument &doc, QDomElement &element, const QgsStringMap& props ) const override;
195195

196196
void setColor( const QColor& color ) override;
197+
virtual QColor color() const override;
197198

198199
QgsSymbolV2* subSymbol() override;
199200
bool setSubSymbol( QgsSymbolV2* symbol ) override;

‎tests/src/python/test_qgsarrowsymbollayer.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,5 +110,18 @@ def test_2(self):
110110
renderchecker.setControlName('expected_arrowsymbollayer_2')
111111
self.assertTrue(renderchecker.runTest('arrowsymbollayer_2'))
112112

113+
def testColors(self):
114+
"""
115+
Test colors, need to make sure colors are passed/retrieved from subsymbol
116+
"""
117+
sym_layer = QgsArrowSymbolLayer.create()
118+
sym_layer.setColor(QColor(150, 50, 100))
119+
self.assertEqual(sym_layer.color(), QColor(150, 50, 100))
120+
self.assertEqual(sym_layer.subSymbol().color(), QColor(150, 50, 100))
121+
sym_layer.subSymbol().setColor(QColor(250, 150, 200))
122+
self.assertEqual(sym_layer.subSymbol().color(), QColor(250, 150, 200))
123+
self.assertEqual(sym_layer.color(), QColor(250, 150, 200))
124+
125+
113126
if __name__ == '__main__':
114127
unittest.main()

‎tests/src/python/test_qgssymbollayerv2.py

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,14 @@ def testQgsCentroidFillSymbolLayerV2(self):
364364
mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue)
365365
assert mExpectedValue == mValue, mMessage
366366

367+
# test colors, need to make sure colors are passed/retrieved from subsymbol
368+
mSymbolLayer.setColor(QColor(150, 50, 100))
369+
self.assertEqual(mSymbolLayer.color(), QColor(150, 50, 100))
370+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(150, 50, 100))
371+
mSymbolLayer.subSymbol().setColor(QColor(250, 150, 200))
372+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(250, 150, 200))
373+
self.assertEqual(mSymbolLayer.color(), QColor(250, 150, 200))
374+
367375
def testQgsLinePatternFillSymbolLayer(self):
368376
"""
369377
Create a new style from a .sld file and match test
@@ -404,8 +412,16 @@ def testQgsLinePatternFillSymbolLayer(self):
404412
mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue)
405413
assert mExpectedValue == mValue, mMessage
406414

415+
# test colors, need to make sure colors are passed/retrieved from subsymbol
416+
mSymbolLayer.setColor(QColor(150, 50, 100))
417+
self.assertEqual(mSymbolLayer.color(), QColor(150, 50, 100))
418+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(150, 50, 100))
419+
mSymbolLayer.subSymbol().setColor(QColor(250, 150, 200))
420+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(250, 150, 200))
421+
self.assertEqual(mSymbolLayer.color(), QColor(250, 150, 200))
422+
407423
@unittest.expectedFailure
408-
def testQgsPointPatternFillSymbolLayer(self):
424+
def testQgsPointPatternFillSymbolLayerSld(self):
409425
"""
410426
Create a new style from a .sld file and match test
411427
"""
@@ -452,6 +468,20 @@ def testQgsPointPatternFillSymbolLayer(self):
452468
mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue)
453469
assert mExpectedValue == mValue, mMessage
454470

471+
def testQgsPointPatternFillSymbolLayer(self):
472+
"""
473+
Test point pattern fill
474+
"""
475+
# test colors, need to make sure colors are passed/retrieved from subsymbol
476+
mSymbolLayer = QgsPointPatternFillSymbolLayer.create()
477+
478+
mSymbolLayer.setColor(QColor(150, 50, 100))
479+
self.assertEqual(mSymbolLayer.color(), QColor(150, 50, 100))
480+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(150, 50, 100))
481+
mSymbolLayer.subSymbol().setColor(QColor(250, 150, 200))
482+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(250, 150, 200))
483+
self.assertEqual(mSymbolLayer.color(), QColor(250, 150, 200))
484+
455485
def testQgsSVGFillSymbolLayer(self):
456486
"""
457487
Create a new style from a .sld file and match test
@@ -522,6 +552,14 @@ def testQgsMarkerLineSymbolLayerV2(self):
522552
mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue)
523553
assert mExpectedValue == mValue, mMessage
524554

555+
# test colors, need to make sure colors are passed/retrieved from subsymbol
556+
mSymbolLayer.setColor(QColor(150, 50, 100))
557+
self.assertEqual(mSymbolLayer.color(), QColor(150, 50, 100))
558+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(150, 50, 100))
559+
mSymbolLayer.subSymbol().setColor(QColor(250, 150, 200))
560+
self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(250, 150, 200))
561+
self.assertEqual(mSymbolLayer.color(), QColor(250, 150, 200))
562+
525563
def testQgsSimpleLineSymbolLayerV2(self):
526564
"""
527565
Create a new style from a .sld file and match test
@@ -692,6 +730,5 @@ def testQgsSvgMarkerSymbolLayerV2(self):
692730
mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue)
693731
assert mExpectedValue == mValue, mMessage
694732

695-
696733
if __name__ == '__main__':
697734
unittest.main()

0 commit comments

Comments
 (0)