diff --git a/python/core/symbology-ng/qgsheatmaprenderer.sip b/python/core/symbology-ng/qgsheatmaprenderer.sip
index e2dffcaa763..f018934908c 100644
--- a/python/core/symbology-ng/qgsheatmaprenderer.sip
+++ b/python/core/symbology-ng/qgsheatmaprenderer.sip
@@ -37,6 +37,19 @@ class QgsHeatmapRenderer : QgsFeatureRendererV2
* @see colorRamp
*/
void setColorRamp( QgsVectorColorRampV2* ramp /Transfer/ );
+
+ /**Returns whether the ramp is inverted
+ * @returns true if color ramp is inverted
+ * @see setInvertRamp
+ * @see colorRamp
+ */
+ double invertRamp() const;
+ /**Sets whether the ramp is inverted
+ * @param invert set to true to invert color ramp
+ * @see invertRamp
+ * @see setColorRamp
+ */
+ void setInvertRamp( const bool invert );
/**Returns the radius for the heatmap
* @returns heatmap radius
diff --git a/src/core/symbology-ng/qgsheatmaprenderer.cpp b/src/core/symbology-ng/qgsheatmaprenderer.cpp
index 27cf405c3ce..45c7ea9b8cd 100644
--- a/src/core/symbology-ng/qgsheatmaprenderer.cpp
+++ b/src/core/symbology-ng/qgsheatmaprenderer.cpp
@@ -34,6 +34,7 @@ QgsHeatmapRenderer::QgsHeatmapRenderer( )
, mRadius( 10 )
, mRadiusUnit( QgsSymbolV2::MM )
, mGradientRamp( 0 )
+ , mInvertRamp( false )
, mExplicitMax( 0.0 )
, mRenderQuality( 1 )
{
@@ -208,7 +209,7 @@ void QgsHeatmapRenderer::renderImage( QgsRenderContext& context )
pixVal = mValues.at( idx ) > 0 ? qMin(( mValues.at( idx ) / scaleMax ), 1.0 ) : 0;
//convert value to color from ramp
- pixColor = mGradientRamp->color( pixVal );
+ pixColor = mGradientRamp->color( mInvertRamp ? 1 - pixVal : pixVal );
scanLine[widthIndex] = pixColor.rgba();
idx++;
@@ -239,6 +240,7 @@ QgsFeatureRendererV2* QgsHeatmapRenderer::clone() const
{
newRenderer->setColorRamp( mGradientRamp->clone() );
}
+ newRenderer->setInvertRamp( mInvertRamp );
newRenderer->setRadius( mRadius );
newRenderer->setRadiusUnit( mRadiusUnit );
newRenderer->setRadiusMapUnitScale( mRadiusMapUnitScale );
@@ -286,6 +288,7 @@ QgsFeatureRendererV2* QgsHeatmapRenderer::create( QDomElement& element )
{
r->setColorRamp( QgsSymbolLayerV2Utils::loadColorRamp( sourceColorRampElem ) );
}
+ r->setInvertRamp( element.attribute( "invert_ramp", "0" ).toInt() );
return r;
}
@@ -303,6 +306,7 @@ QDomElement QgsHeatmapRenderer::save( QDomDocument& doc )
QDomElement colorRampElem = QgsSymbolLayerV2Utils::saveColorRamp( "[source]", mGradientRamp, doc );
rendererElem.appendChild( colorRampElem );
}
+ rendererElem.setAttribute( "invert_ramp", QString::number( mInvertRamp ) );
return rendererElem;
}
diff --git a/src/core/symbology-ng/qgsheatmaprenderer.h b/src/core/symbology-ng/qgsheatmaprenderer.h
index eb1230fbc75..4dbe921332b 100644
--- a/src/core/symbology-ng/qgsheatmaprenderer.h
+++ b/src/core/symbology-ng/qgsheatmaprenderer.h
@@ -67,6 +67,19 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2
*/
void setColorRamp( QgsVectorColorRampV2* ramp );
+ /**Returns whether the ramp is inverted
+ * @returns true if color ramp is inverted
+ * @see setInvertRamp
+ * @see colorRamp
+ */
+ double invertRamp() const { return mInvertRamp; }
+ /**Sets whether the ramp is inverted
+ * @param invert set to true to invert color ramp
+ * @see invertRamp
+ * @see setColorRamp
+ */
+ void setInvertRamp( const bool invert ) { mInvertRamp = invert; }
+
/**Returns the radius for the heatmap
* @returns heatmap radius
* @see setRadius
@@ -155,6 +168,7 @@ class CORE_EXPORT QgsHeatmapRenderer : public QgsFeatureRendererV2
QgsMapUnitScale mRadiusMapUnitScale;
QgsVectorColorRampV2* mGradientRamp;
+ bool mInvertRamp;
double mExplicitMax;
int mRenderQuality;
diff --git a/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp b/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp
index 3595faad63f..0859004e9f4 100644
--- a/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp
+++ b/src/gui/symbology-ng/qgsheatmaprendererwidget.cpp
@@ -97,6 +97,9 @@ QgsHeatmapRendererWidget::QgsHeatmapRendererWidget( QgsVectorLayer* layer, QgsSt
mQualitySlider->blockSignals( true );
mQualitySlider->setValue( mRenderer->renderQuality() );
mQualitySlider->blockSignals( false );
+ mInvertCheckBox->blockSignals( true );
+ mInvertCheckBox->setChecked( mRenderer->invertRamp() );
+ mInvertCheckBox->blockSignals( false );
}
QgsFeatureRendererV2* QgsHeatmapRendererWidget::renderer()
@@ -193,3 +196,13 @@ void QgsHeatmapRendererWidget::on_mQualitySlider_valueChanged( int v )
mRenderer->setRenderQuality( v );
}
+
+void QgsHeatmapRendererWidget::on_mInvertCheckBox_toggled( bool v )
+{
+ if ( !mRenderer )
+ {
+ return;
+ }
+
+ mRenderer->setInvertRamp( v );
+}
diff --git a/src/gui/symbology-ng/qgsheatmaprendererwidget.h b/src/gui/symbology-ng/qgsheatmaprendererwidget.h
index f305f59342f..e8c7684c14f 100644
--- a/src/gui/symbology-ng/qgsheatmaprendererwidget.h
+++ b/src/gui/symbology-ng/qgsheatmaprendererwidget.h
@@ -54,6 +54,7 @@ class GUI_EXPORT QgsHeatmapRendererWidget : public QgsRendererV2Widget, private
void on_mRadiusSpinBox_valueChanged( double d );
void on_mMaxSpinBox_valueChanged( double d );
void on_mQualitySlider_valueChanged( int v );
+ void on_mInvertCheckBox_toggled( bool v );
};
diff --git a/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui b/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui
index 896033d1b9e..f681a810342 100644
--- a/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui
+++ b/src/ui/symbollayer/qgsheatmaprendererwidgetbase.ui
@@ -15,7 +15,7 @@
-
-
+
-
@@ -32,16 +32,23 @@
+ -
+
+
+ Invert
+
+
+
- -
+
-
Radius
- -
+
-
-
@@ -67,14 +74,14 @@
- -
+
-
Maximum value
- -
+
-
@@ -96,14 +103,14 @@
- -
+
-
Rendering quality
- -
+
-
-
@@ -152,7 +159,7 @@
- -
+
-
Qt::Vertical
@@ -188,6 +195,7 @@
mRampComboBox
mButtonEditRamp
+ mInvertCheckBox
mRadiusSpinBox
mMaxSpinBox
mQualitySlider