Skip to content

Commit e94a352

Browse files
authoredDec 4, 2016
[color ramp] improve invert() for discrete gradient ramps (#3833)
1 parent e135e79 commit e94a352

File tree

2 files changed

+31
-7
lines changed

2 files changed

+31
-7
lines changed
 

‎src/core/qgscolorramp.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,27 @@ QColor QgsGradientColorRamp::color( double value ) const
162162

163163
void QgsGradientColorRamp::invert()
164164
{
165-
QColor tmpColor = mColor1;
166-
mColor1 = mColor2;
167-
mColor2 = tmpColor;
168-
169165
QgsGradientStopsList newStops;
170-
for ( int k = mStops.size() - 1; k >= 0; k-- )
166+
167+
if ( mDiscrete )
171168
{
172-
newStops << QgsGradientStop( 1 - mStops.at( k ).offset, mStops.at( k ).color );
169+
mColor2 = mColor1;
170+
mColor1 = mStops.at( mStops.size() - 1 ).color;
171+
for ( int k = mStops.size() - 1; k >= 1; k-- )
172+
{
173+
newStops << QgsGradientStop( 1 - mStops.at( k ).offset, mStops.at( k - 1 ).color );
174+
}
175+
newStops << QgsGradientStop( 1 - mStops.at( 0 ).offset, mColor2 );
176+
}
177+
else
178+
{
179+
QColor tmpColor = mColor2;
180+
mColor2 = mColor1;
181+
mColor1 = tmpColor;
182+
for ( int k = mStops.size() - 1; k >= 0; k-- )
183+
{
184+
newStops << QgsGradientStop( 1 - mStops.at( k ).offset, mStops.at( k ).color );
185+
}
173186
}
174187
mStops = newStops;
175188
}

‎tests/src/python/test_qgsvectorcolorramp.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,23 @@ def testQgsVectorGradientRampV2(self):
161161
self.assertEqual(s[3].offset, 0.8)
162162
self.assertEqual(s[3].color, QColor(50, 20, 10))
163163

164-
# test invert function
164+
# test continous invert function
165165
r.invert()
166166
self.assertEqual(r.color(0), QColor(0, 200, 0))
167167
self.assertEqual(r.color(1), QColor(200, 0, 0))
168168
self.assertEqual(r.color(0.2), QColor(50, 20, 10))
169169

170+
# test discrete invert function
171+
r = QgsGradientColorRamp(QColor(255, 255, 255), QColor(0, 0, 0), True, [QgsGradientStop(0.33, QColor(128, 128, 128)),
172+
QgsGradientStop(0.66, QColor(0, 0, 0))])
173+
self.assertEqual(r.color(0.2), QColor(255, 255, 255))
174+
self.assertEqual(r.color(0.5), QColor(128, 128, 128))
175+
self.assertEqual(r.color(0.8), QColor(0, 0, 0))
176+
r.invert()
177+
self.assertEqual(r.color(0.2), QColor(0, 0, 0))
178+
self.assertEqual(r.color(0.5), QColor(128, 128, 128))
179+
self.assertEqual(r.color(0.8), QColor(255, 255, 255))
180+
170181
def testQgsLimitedRandomColorRampV2(self):
171182
# test random color ramp
172183
r = QgsLimitedRandomColorRamp(5)

0 commit comments

Comments
 (0)
Please sign in to comment.