diff --git a/python/core/auto_generated/layout/qgslayoutrendercontext.sip.in b/python/core/auto_generated/layout/qgslayoutrendercontext.sip.in index 0b1116fd01e..e256f9fa5f8 100644 --- a/python/core/auto_generated/layout/qgslayoutrendercontext.sip.in +++ b/python/core/auto_generated/layout/qgslayoutrendercontext.sip.in @@ -29,6 +29,7 @@ Stores information relating to the current rendering settings for a layout. FlagUseAdvancedEffects, FlagForceVectorOutput, FlagHideCoverageLayer, + FlagDrawSelection, }; typedef QFlags Flags; @@ -103,6 +104,24 @@ Returns the ``dpi`` for outputting the layout. .. seealso:: :py:func:`setDpi` %End + void setSelectionColor( const QColor &color ); +%Docstring +Sets color that is used for drawing of selected vector features + +.. seealso:: :py:func:`selectionColor` + +.. versionadded:: 3.4 +%End + + QColor selectionColor() const; +%Docstring +Gets color that is used for drawing of selected vector features + +.. seealso:: :py:func:`setSelectionColor` + +.. versionadded:: 3.4 +%End + QgsLayoutMeasurementConverter &measurementConverter(); %Docstring diff --git a/src/core/layout/qgslayoutitemmap.cpp b/src/core/layout/qgslayoutitemmap.cpp index 9c218496ab9..c9566534b94 100644 --- a/src/core/layout/qgslayoutitemmap.cpp +++ b/src/core/layout/qgslayoutitemmap.cpp @@ -1104,7 +1104,8 @@ QgsMapSettings QgsLayoutItemMap::mapSettings( const QgsRectangle &extent, QSizeF jobMapSettings.setFlag( QgsMapSettings::ForceVectorOutput, true ); // force vector output (no caching of marker images etc.) jobMapSettings.setFlag( QgsMapSettings::Antialiasing, mLayout->renderContext().flags() & QgsLayoutRenderContext::FlagAntialiasing ); jobMapSettings.setFlag( QgsMapSettings::DrawEditingInfo, false ); - jobMapSettings.setFlag( QgsMapSettings::DrawSelection, false ); + jobMapSettings.setSelectionColor( mLayout->renderContext().selectionColor() ); + jobMapSettings.setFlag( QgsMapSettings::DrawSelection, mLayout->renderContext().flags() & QgsLayoutRenderContext::FlagDrawSelection ); jobMapSettings.setFlag( QgsMapSettings::UseAdvancedEffects, mLayout->renderContext().flags() & QgsLayoutRenderContext::FlagUseAdvancedEffects ); jobMapSettings.setTransformContext( mLayout->project()->transformContext() ); jobMapSettings.setPathResolver( mLayout->project()->pathResolver() ); diff --git a/src/core/layout/qgslayoutrendercontext.h b/src/core/layout/qgslayoutrendercontext.h index b8f3ac6e487..1a354b91637 100644 --- a/src/core/layout/qgslayoutrendercontext.h +++ b/src/core/layout/qgslayoutrendercontext.h @@ -45,6 +45,7 @@ class CORE_EXPORT QgsLayoutRenderContext : public QObject FlagUseAdvancedEffects = 1 << 4, //!< Enable advanced effects such as blend modes. FlagForceVectorOutput = 1 << 5, //!< Force output in vector format where possible, even if items require rasterization to keep their correct appearance. FlagHideCoverageLayer = 1 << 6, //!< Hide coverage layer in outputs + FlagDrawSelection = 1 << 7, //!< Draw selection }; Q_DECLARE_FLAGS( Flags, Flag ) @@ -104,6 +105,20 @@ class CORE_EXPORT QgsLayoutRenderContext : public QObject */ double dpi() const; + /** + * Sets color that is used for drawing of selected vector features + * \see selectionColor() + * \since QGIS 3.4 + */ + void setSelectionColor( const QColor &color ) { mSelectionColor = color; } + + /** + * Gets color that is used for drawing of selected vector features + * \see setSelectionColor() + * \since QGIS 3.4 + */ + QColor selectionColor() const { return mSelectionColor; } + /** * Returns the layout measurement converter to be used in the layout. This converter is used * for translating between other measurement units and the layout's native unit. @@ -206,6 +221,8 @@ class CORE_EXPORT QgsLayoutRenderContext : public QObject int mCurrentExportLayer = -1; + QColor mSelectionColor = Qt::yellow; + QgsLayoutMeasurementConverter mMeasurementConverter; bool mIsPreviewRender = true; diff --git a/src/server/services/wms/qgswmsrenderer.cpp b/src/server/services/wms/qgswmsrenderer.cpp index 09616467ceb..805cbd681f4 100644 --- a/src/server/services/wms/qgswmsrenderer.cpp +++ b/src/server/services/wms/qgswmsrenderer.cpp @@ -66,7 +66,6 @@ #include "qgslayerrestorer.h" #include "qgsdxfexport.h" #include "qgssymbollayerutils.h" -#include "qgslayoutitemlegend.h" #include "qgsserverexception.h" #include @@ -80,6 +79,7 @@ #include "qgslayoutmanager.h" #include "qgslayoutexporter.h" #include "qgslayoutsize.h" +#include "qgslayoutrendercontext.h" #include "qgslayoutmeasurement.h" #include "qgsprintlayout.h" #include "qgslayoutpagecollection.h" @@ -396,6 +396,8 @@ namespace QgsWms if ( ok ) exportSettings.dpi = dpi; } + // Draw selections + exportSettings.flags |= QgsLayoutRenderContext::FlagDrawSelection; QgsLayoutExporter exporter( layout.get() ); exporter.exportToSvg( tempOutputFile.fileName(), exportSettings ); } @@ -413,6 +415,8 @@ namespace QgsWms dpi = _dpi; } exportSettings.dpi = dpi; + // Draw selections + exportSettings.flags |= QgsLayoutRenderContext::FlagDrawSelection; // Destination image size in px QgsLayoutSize layoutSize( layout->pageCollection()->page( 0 )->sizeWithUnits() ); QgsLayoutMeasurement width( layout->convertFromLayoutUnits( layoutSize.width(), QgsUnitTypes::LayoutUnit::LayoutMillimeters ) ); @@ -435,6 +439,8 @@ namespace QgsWms if ( ok ) exportSettings.dpi = dpi; } + // Draw selections + exportSettings.flags |= QgsLayoutRenderContext::FlagDrawSelection; // Export all pages QgsLayoutExporter exporter( layout.get() ); exporter.exportToPdf( tempOutputFile.fileName(), exportSettings ); @@ -450,7 +456,6 @@ namespace QgsWms bool QgsRenderer::configurePrintLayout( QgsPrintLayout *c, const QgsMapSettings &mapSettings ) { - // Maps are configured first QList maps; c->layoutItems( maps ); @@ -1141,6 +1146,13 @@ namespace QgsWms // enable rendering optimization mapSettings.setFlag( QgsMapSettings::UseRenderingOptimization ); + + // set selection color + int myRed = mProject->readNumEntry( "Gui", "/SelectionColorRedPart", 255 ); + int myGreen = mProject->readNumEntry( "Gui", "/SelectionColorGreenPart", 255 ); + int myBlue = mProject->readNumEntry( "Gui", "/SelectionColorBluePart", 0 ); + int myAlpha = mProject->readNumEntry( "Gui", "/SelectionColorAlphaPart", 255 ); + mapSettings.setSelectionColor( QColor( myRed, myGreen, myBlue, myAlpha ) ); } QDomDocument QgsRenderer::featureInfoDocument( QList &layers, const QgsMapSettings &mapSettings, diff --git a/tests/src/python/test_qgsserver_wms_getprint.py b/tests/src/python/test_qgsserver_wms_getprint.py index 505265fbf85..6e73b5f146b 100644 --- a/tests/src/python/test_qgsserver_wms_getprint.py +++ b/tests/src/python/test_qgsserver_wms_getprint.py @@ -286,6 +286,7 @@ class TestQgsServerWMSGetPrint(QgsServerTestBase): "REQUEST": "GetPrint", "TEMPLATE": "layoutA4", "FORMAT": "png", + "LAYERS": "Country,Hello", "map0:EXTENT": "-33626185.498,-13032965.185,33978427.737,16020257.031", "map0:LAYERS": "Country,Hello", "CRS": "EPSG:3857", diff --git a/tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png b/tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png index bc1860abdda..ec22bb41aa4 100644 Binary files a/tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png and b/tests/testdata/control_images/qgis_server/WMS_GetMap_Selection/WMS_GetMap_Selection.png differ diff --git a/tests/testdata/control_images/qgis_server/WMS_GetPrint_Opacity/WMS_GetPrint_Opacity.png b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Opacity/WMS_GetPrint_Opacity.png index c9b692c2dd6..3527bc233e2 100644 Binary files a/tests/testdata/control_images/qgis_server/WMS_GetPrint_Opacity/WMS_GetPrint_Opacity.png and b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Opacity/WMS_GetPrint_Opacity.png differ diff --git a/tests/testdata/control_images/qgis_server/WMS_GetPrint_Selection/WMS_GetPrint_Selection.png b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Selection/WMS_GetPrint_Selection.png index 360a8d94306..27e96b3f61f 100644 Binary files a/tests/testdata/control_images/qgis_server/WMS_GetPrint_Selection/WMS_GetPrint_Selection.png and b/tests/testdata/control_images/qgis_server/WMS_GetPrint_Selection/WMS_GetPrint_Selection.png differ