@@ -156,6 +156,7 @@ QgsGraduatedSymbolRendererV2::QgsGraduatedSymbolRendererV2( QString attrName, Qg
156156 mMode( Custom ),
157157 mSourceSymbol( NULL ),
158158 mSourceColorRamp( NULL ),
159+ mInvertedColorRamp( false ),
159160 mScaleMethod( DEFAULT_SCALE_METHOD ),
160161 mRotationFieldIdx( -1 ),
161162 mSizeScaleFieldIdx( -1 )
@@ -359,7 +360,10 @@ QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::clone()
359360 if ( mSourceSymbol )
360361 r->setSourceSymbol ( mSourceSymbol ->clone () );
361362 if ( mSourceColorRamp )
363+ {
362364 r->setSourceColorRamp ( mSourceColorRamp ->clone () );
365+ r->setInvertedColorRamp ( mInvertedColorRamp );
366+ }
363367 r->setUsingSymbolLevels ( usingSymbolLevels () );
364368 r->setRotationField ( rotationField () );
365369 r->setSizeScaleField ( sizeScaleField () );
@@ -786,7 +790,8 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
786790 int classes,
787791 Mode mode,
788792 QgsSymbolV2* symbol,
789- QgsVectorColorRampV2* ramp )
793+ QgsVectorColorRampV2* ramp,
794+ bool inverted )
790795{
791796 if ( classes < 1 )
792797 return NULL ;
@@ -890,7 +895,9 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
890895 }
891896
892897 QgsSymbolV2* newSymbol = symbol->clone ();
893- double colorValue = ( breaks.count () > 1 ? ( double ) i / ( breaks.count () - 1 ) : 0 );
898+ double colorValue;
899+ if ( inverted ) colorValue = ( breaks.count () > 1 ? ( double )( breaks.count () - i - 1 ) / ( breaks.count () - 1 ) : 0 );
900+ else colorValue = ( breaks.count () > 1 ? ( double ) i / ( breaks.count () - 1 ) : 0 );
894901 newSymbol->setColor ( ramp->color ( colorValue ) ); // color from (0 / cl-1) to (cl-1 / cl-1)
895902
896903 ranges.append ( QgsRendererRangeV2 ( lower, upper, newSymbol, label ) );
@@ -899,6 +906,7 @@ QgsGraduatedSymbolRendererV2* QgsGraduatedSymbolRendererV2::createRenderer(
899906 QgsGraduatedSymbolRendererV2* r = new QgsGraduatedSymbolRendererV2 ( attrName, ranges );
900907 r->setSourceSymbol ( symbol->clone () );
901908 r->setSourceColorRamp ( ramp->clone () );
909+ r->setInvertedColorRamp ( inverted );
902910 r->setMode ( mode );
903911 return r;
904912}
@@ -958,6 +966,9 @@ QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2::create( QDomElement& element
958966 if ( !sourceColorRampElem.isNull () && sourceColorRampElem.attribute ( " name" ) == " [source]" )
959967 {
960968 r->setSourceColorRamp ( QgsSymbolLayerV2Utils::loadColorRamp ( sourceColorRampElem ) );
969+ QDomElement invertedColorRampElem = element.firstChildElement ( " invertedcolorramp" );
970+ if ( !invertedColorRampElem.isNull () )
971+ r->setInvertedColorRamp ( invertedColorRampElem.attribute ( " value" ) == " 1" );
961972 }
962973
963974 // try to load mode
@@ -1039,6 +1050,9 @@ QDomElement QgsGraduatedSymbolRendererV2::save( QDomDocument& doc )
10391050 {
10401051 QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp ( " [source]" , mSourceColorRamp , doc );
10411052 rendererElem.appendChild ( colorRampElem );
1053+ QDomElement invertedElem = doc.createElement ( " invertedcolorramp" );
1054+ invertedElem.setAttribute ( " value" , mInvertedColorRamp );
1055+ rendererElem.appendChild ( invertedElem );
10421056 }
10431057
10441058 // save mode
@@ -1144,18 +1158,21 @@ void QgsGraduatedSymbolRendererV2::setSourceColorRamp( QgsVectorColorRampV2* ram
11441158 mSourceColorRamp = ramp;
11451159}
11461160
1147- void QgsGraduatedSymbolRendererV2::updateColorRamp ( QgsVectorColorRampV2 *ramp )
1161+ void QgsGraduatedSymbolRendererV2::updateColorRamp ( QgsVectorColorRampV2 *ramp, bool inverted )
11481162{
11491163 int i = 0 ;
11501164 foreach ( QgsRendererRangeV2 range, mRanges )
11511165 {
11521166 QgsSymbolV2* symbol = range.symbol ()->clone ();
1153- double colorValue = ( mRanges .count () > 1 ? ( double ) i / ( mRanges .count () - 1 ) : 0 );
1167+ double colorValue;
1168+ if ( inverted ) colorValue = ( mRanges .count () > 1 ? ( double )( mRanges .count () - i - 1 ) / ( mRanges .count () - 1 ) : 0 );
1169+ else colorValue = ( mRanges .count () > 1 ? ( double ) i / ( mRanges .count () - 1 ) : 0 );
11541170 symbol->setColor ( ramp->color ( colorValue ) );
11551171 updateRangeSymbol ( i, symbol );
11561172 ++i;
11571173 }
11581174 this ->setSourceColorRamp ( ramp );
1175+ this ->setInvertedColorRamp ( inverted );
11591176}
11601177
11611178void QgsGraduatedSymbolRendererV2::updateSymbols ( QgsSymbolV2 *sym )
0 commit comments