Skip to content
Permalink
Browse files

[server] Implement LAYERFONTCOLOR and ITEMFONTCOLOR

cherry-picking commit dca0fb9
  • Loading branch information
elpaso committed Apr 17, 2019
1 parent d673c6f commit 9baabf912b4813a4bb0319d76b05c157cca90feb
@@ -75,6 +75,30 @@ Returns style
QColor fontColor() const;
void setFontColor( const QColor &c );

QColor layerFontColor() const;
%Docstring
Returns layer font color, defaults to fontColor()

.. seealso:: :py:func:`setLayerFontColor`

.. seealso:: :py:func:`fontColor`

.. versionadded:: 3.4.7
%End

void setLayerFontColor( const QColor &fontColor );
%Docstring
Sets layer font color to ``fontColor``
Overrides fontColor()

.. seealso:: :py:func:`layerFontColor`

.. seealso:: :py:func:`fontColor`

.. versionadded:: 3.4.7
%End


QSizeF symbolSize() const;
void setSymbolSize( QSizeF s );

@@ -526,7 +526,7 @@ QSizeF QgsLegendRenderer::drawLayerTitle( QgsLayerTreeLayer *nodeLayer, QPainter

double y = point.y();

if ( painter ) painter->setPen( mSettings.fontColor() );
if ( painter ) painter->setPen( mSettings.layerFontColor() );

QFont layerFont = mSettings.style( nodeLegendStyle( nodeLayer ) ).font();

@@ -87,6 +87,24 @@ class CORE_EXPORT QgsLegendSettings
QColor fontColor() const {return mFontColor;}
void setFontColor( const QColor &c ) {mFontColor = c;}

/**
* Returns layer font color, defaults to fontColor()
* \see setLayerFontColor()
* \see fontColor()
* \since QGIS 3.4.7
*/
QColor layerFontColor() const {return mLayerFontColor.isValid() ? mLayerFontColor : fontColor() ;}

/**
* Sets layer font color to \a fontColor
* Overrides fontColor()
* \see layerFontColor()
* \see fontColor()
* \since QGIS 3.4.7
*/
void setLayerFontColor( const QColor &fontColor ) {mLayerFontColor = fontColor;}


QSizeF symbolSize() const {return mSymbolSize;}
void setSymbolSize( QSizeF s ) {mSymbolSize = s;}

@@ -290,6 +308,9 @@ class CORE_EXPORT QgsLegendSettings

//! DPI to be used when rendering legend
int mDpi = 96;

//! Font color for layers, overrides font color
QColor mLayerFontColor;
};


@@ -1094,6 +1094,16 @@ namespace QgsWms
return mWmsParameters[ QgsWmsParameter::ITEMFONTSIZE ].toDouble();
}

QString QgsWmsParameters::itemFontColor() const
{
return mWmsParameters[ QgsWmsParameter::ITEMFONTCOLOR ].toString();
}

QColor QgsWmsParameters::itemFontColorAsColor() const
{
return mWmsParameters[ QgsWmsParameter::ITEMFONTCOLOR ].toColor();
}

QFont QgsWmsParameters::layerFont() const
{
QFont font;
@@ -1147,6 +1157,18 @@ namespace QgsWms
settings.rstyle( QgsLegendStyle::Subgroup ).setMargin( QgsLegendStyle::Top, layerSpaceAsDouble() );
settings.rstyle( QgsLegendStyle::Subgroup ).setFont( layerFont() );

if ( !itemFontColor().isEmpty() )
{
settings.setFontColor( itemFontColorAsColor() );
}

// Ok, this is tricky: because QgsLegendSettings's layerFontColor was added to the API after
// fontColor, to fix regressions #21871 and #21870 and the previous behavior was to use fontColor
// for the whole legend we need to preserve that behavior.
// But, the 2.18 server parameters ITEMFONTCOLOR did not have effect on the layer titles too, so
// we set explicitly layerFontColor to black if it's not overridden by LAYERFONTCOLOR argument.
settings.setLayerFontColor( layerFontColor().isEmpty() ? QColor( Qt::black ) : layerFontColorAsColor() );

settings.rstyle( QgsLegendStyle::SymbolLabel ).setFont( itemFont() );
settings.rstyle( QgsLegendStyle::Symbol ).setMargin( QgsLegendStyle::Top, symbolSpaceAsDouble() );
settings.rstyle( QgsLegendStyle::SymbolLabel ).setMargin( QgsLegendStyle::Left, iconLabelSpaceAsDouble() );
@@ -187,7 +187,7 @@ namespace QgsWms
/**
* Default destructor for QgsWmsParameter.
*/
virtual ~QgsWmsParameter() = default;
virtual ~QgsWmsParameter() override = default;

/**
* Returns true if the parameter is valid, false otherwise.
@@ -335,7 +335,7 @@ namespace QgsWms
*/
QgsWmsParameters();

virtual ~QgsWmsParameters() = default;
virtual ~QgsWmsParameters() override = default;

/**
* Dumps parameters.
@@ -665,6 +665,76 @@ def test_wms_GetLegendGraphic_ScaleSymbol_Max(self):
r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ScaleSymbol_Max", max_size_diff=QSize(15, 15))

def test_wms_GetLegendGraphic_LAYERFONTCOLOR(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetLegendGraphic",
"LAYER": "Country,Hello",
"FORMAT": "image/png",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"LAYERFONTCOLOR": "red"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_LAYERFONTCOLOR", max_size_diff=QSize(10, 2))

def test_wms_GetLegendGraphic_ITEMFONTCOLOR(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetLegendGraphic",
"LAYER": "Country,Hello",
"FORMAT": "image/png",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"ITEMFONTCOLOR": "red",
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ITEMFONTCOLOR", max_size_diff=QSize(10, 2))

def test_wms_GetLegendGraphic_ITEMFONTCOLOR_and_LAYERFONTCOLOR(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetLegendGraphic",
"LAYER": "Country,Hello",
"FORMAT": "image/png",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"ITEMFONTCOLOR": "red",
"LAYERFONTCOLOR": "blue"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ITEMFONTCOLOR_and_LAYERFONTCOLOR", max_size_diff=QSize(10, 2))

def test_wms_GetLegendGraphic_ITEMFONTCOLOR_and_LAYERFONTCOLOR_hex(self):
qs = "?" + "&".join(["%s=%s" % i for i in list({
"MAP": urllib.parse.quote(self.projectPath),
"SERVICE": "WMS",
"VERSION": "1.1.1",
"REQUEST": "GetLegendGraphic",
"LAYER": "Country,Hello",
"FORMAT": "image/png",
"HEIGHT": "500",
"WIDTH": "500",
"CRS": "EPSG:3857",
"ITEMFONTCOLOR": r"%23FF0000",
"LAYERFONTCOLOR": r"%230000FF"
}.items())])

r, h = self._result(self._execute_request(qs))
self._img_diff_error(r, h, "WMS_GetLegendGraphic_ITEMFONTCOLOR_and_LAYERFONTCOLOR", max_size_diff=QSize(10, 2))


if __name__ == '__main__':
unittest.main()
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit 9baabf9

Please sign in to comment.
You can’t perform that action at this time.