[color ramp] improve invert() for discrete gradient ramps (#3833)

This commit is contained in:
Mathieu Pellerin 2016-12-04 11:34:16 +07:00 committed by GitHub
parent e135e79770
commit e94a352e08
2 changed files with 31 additions and 7 deletions

View File

@ -162,14 +162,27 @@ QColor QgsGradientColorRamp::color( double value ) const
void QgsGradientColorRamp::invert()
{
QColor tmpColor = mColor1;
mColor1 = mColor2;
mColor2 = tmpColor;
QgsGradientStopsList newStops;
for ( int k = mStops.size() - 1; k >= 0; k-- )
if ( mDiscrete )
{
newStops << QgsGradientStop( 1 - mStops.at( k ).offset, mStops.at( k ).color );
mColor2 = mColor1;
mColor1 = mStops.at( mStops.size() - 1 ).color;
for ( int k = mStops.size() - 1; k >= 1; k-- )
{
newStops << QgsGradientStop( 1 - mStops.at( k ).offset, mStops.at( k - 1 ).color );
}
newStops << QgsGradientStop( 1 - mStops.at( 0 ).offset, mColor2 );
}
else
{
QColor tmpColor = mColor2;
mColor2 = mColor1;
mColor1 = tmpColor;
for ( int k = mStops.size() - 1; k >= 0; k-- )
{
newStops << QgsGradientStop( 1 - mStops.at( k ).offset, mStops.at( k ).color );
}
}
mStops = newStops;
}

View File

@ -161,12 +161,23 @@ class PyQgsVectorColorRamp(unittest.TestCase):
self.assertEqual(s[3].offset, 0.8)
self.assertEqual(s[3].color, QColor(50, 20, 10))
# test invert function
# test continous invert function
r.invert()
self.assertEqual(r.color(0), QColor(0, 200, 0))
self.assertEqual(r.color(1), QColor(200, 0, 0))
self.assertEqual(r.color(0.2), QColor(50, 20, 10))
# test discrete invert function
r = QgsGradientColorRamp(QColor(255, 255, 255), QColor(0, 0, 0), True, [QgsGradientStop(0.33, QColor(128, 128, 128)),
QgsGradientStop(0.66, QColor(0, 0, 0))])
self.assertEqual(r.color(0.2), QColor(255, 255, 255))
self.assertEqual(r.color(0.5), QColor(128, 128, 128))
self.assertEqual(r.color(0.8), QColor(0, 0, 0))
r.invert()
self.assertEqual(r.color(0.2), QColor(0, 0, 0))
self.assertEqual(r.color(0.5), QColor(128, 128, 128))
self.assertEqual(r.color(0.8), QColor(255, 255, 255))
def testQgsLimitedRandomColorRampV2(self):
# test random color ramp
r = QgsLimitedRandomColorRamp(5)