Skip to content

Commit c4a2bb0

Browse files
authoredJan 22, 2020
Merge pull request #33827 from kadas-albireo/custom_render_flags
Add QgsRenderContext::setCustomRenderFlags
2 parents 619d134 + d604ab7 commit c4a2bb0

File tree

7 files changed

+168
-5
lines changed

7 files changed

+168
-5
lines changed
 

‎python/core/auto_generated/qgsmapsettings.sip.in

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ Set map of map layer style overrides (key: layer ID, value: style name) where a
213213
.. versionadded:: 2.8
214214
%End
215215

216-
QString customRenderFlags() const;
216+
QString customRenderFlags() const;
217217
%Docstring
218218
Gets custom rendering flags. Layers might honour these to alter their rendering.
219219

@@ -222,9 +222,12 @@ Gets custom rendering flags. Layers might honour these to alter their rendering.
222222
.. seealso:: :py:func:`setCustomRenderFlags`
223223

224224
.. versionadded:: 2.16
225+
226+
.. deprecated::
227+
use \see customRenderingFlags().
225228
%End
226229

227-
void setCustomRenderFlags( const QString &customRenderFlags );
230+
void setCustomRenderFlags( const QString &customRenderFlags );
228231
%Docstring
229232
Sets the custom rendering flags. Layers might honour these to alter their rendering.
230233

@@ -233,6 +236,43 @@ Sets the custom rendering flags. Layers might honour these to alter their render
233236
.. seealso:: :py:func:`customRenderFlags`
234237

235238
.. versionadded:: 2.16
239+
240+
.. deprecated::
241+
use \see setCustomRenderingFlag() instead.
242+
%End
243+
244+
QVariantMap customRenderingFlags() const;
245+
%Docstring
246+
Gets custom rendering flags. Layers might honour these to alter their rendering.
247+
248+
:return: a map of custom flags
249+
250+
.. seealso:: :py:func:`setCustomRenderingFlag`
251+
252+
.. versionadded:: 3.12
253+
%End
254+
255+
void setCustomRenderingFlag( const QString &flag, const QVariant &value );
256+
%Docstring
257+
Sets a custom rendering flag. Layers might honour these to alter their rendering.
258+
259+
:param flag: the flag name
260+
:param value: the flag value
261+
262+
.. seealso:: :py:func:`customRenderingFlags`
263+
264+
.. versionadded:: 3.12
265+
%End
266+
267+
void clearCustomRenderingFlag( const QString &flag );
268+
%Docstring
269+
Clears the specified custom rendering flag.
270+
271+
:param flag: the flag name
272+
273+
.. seealso:: :py:func:`setCustomRenderingFlag`
274+
275+
.. versionadded:: 3.12
236276
%End
237277

238278
void setDestinationCrs( const QgsCoordinateReferenceSystem &crs );

‎python/core/auto_generated/qgsrendercontext.sip.in

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,40 @@ in a mask painter, which is not meant to be visible, by definition.
726726

727727
.. seealso:: :py:func:`setIsGuiPreview`
728728

729+
.. versionadded:: 3.12
730+
%End
731+
732+
QVariantMap customRenderingFlags() const;
733+
%Docstring
734+
Gets custom rendering flags. Layers might honour these to alter their rendering.
735+
736+
:return: a map of custom flags
737+
738+
.. seealso:: :py:func:`setCustomRenderingFlag`
739+
740+
.. versionadded:: 3.12
741+
%End
742+
743+
void setCustomRenderingFlag( const QString &flag, const QVariant &value );
744+
%Docstring
745+
Sets a custom rendering flag. Layers might honour these to alter their rendering.
746+
747+
:param flag: the flag name
748+
:param value: the flag value
749+
750+
.. seealso:: :py:func:`customRenderingFlags`
751+
752+
.. versionadded:: 3.12
753+
%End
754+
755+
void clearCustomRenderingFlag( const QString &flag );
756+
%Docstring
757+
Clears the specified custom rendering flag.
758+
759+
:param flag: the flag name
760+
761+
.. seealso:: :py:func:`setCustomRenderingFlag`
762+
729763
.. versionadded:: 3.12
730764
%End
731765

‎src/core/qgsmapsettings.h

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -217,19 +217,46 @@ class CORE_EXPORT QgsMapSettings
217217

218218
/**
219219
* Gets custom rendering flags. Layers might honour these to alter their rendering.
220-
* \returns custom flags strings, separated by ';'
220+
* \returns custom flags strings, separated by ';'
221221
* \see setCustomRenderFlags()
222222
* \since QGIS 2.16
223+
* \deprecated use \see customRenderingFlags().
223224
*/
224-
QString customRenderFlags() const { return mCustomRenderFlags; }
225+
Q_DECL_DEPRECATED QString customRenderFlags() const { return mCustomRenderFlags; }
225226

226227
/**
227228
* Sets the custom rendering flags. Layers might honour these to alter their rendering.
228229
* \param customRenderFlags custom flags strings, separated by ';'
229230
* \see customRenderFlags()
230231
* \since QGIS 2.16
232+
* \deprecated use \see setCustomRenderingFlag() instead.
231233
*/
232-
void setCustomRenderFlags( const QString &customRenderFlags ) { mCustomRenderFlags = customRenderFlags; }
234+
Q_DECL_DEPRECATED void setCustomRenderFlags( const QString &customRenderFlags ) { mCustomRenderFlags = customRenderFlags; }
235+
236+
/**
237+
* Gets custom rendering flags. Layers might honour these to alter their rendering.
238+
* \returns a map of custom flags
239+
* \see setCustomRenderingFlag()
240+
* \since QGIS 3.12
241+
*/
242+
QVariantMap customRenderingFlags() const { return mCustomRenderingFlags; }
243+
244+
/**
245+
* Sets a custom rendering flag. Layers might honour these to alter their rendering.
246+
* \param flag the flag name
247+
* \param value the flag value
248+
* \see customRenderingFlags()
249+
* \since QGIS 3.12
250+
*/
251+
void setCustomRenderingFlag( const QString &flag, const QVariant &value ) { mCustomRenderingFlags[flag] = value; }
252+
253+
/**
254+
* Clears the specified custom rendering flag.
255+
* \param flag the flag name
256+
* \see setCustomRenderingFlag()
257+
* \since QGIS 3.12
258+
*/
259+
void clearCustomRenderingFlag( const QString &flag ) { mCustomRenderingFlags.remove( flag ); }
233260

234261
//! sets destination coordinate reference system
235262
void setDestinationCrs( const QgsCoordinateReferenceSystem &crs );
@@ -615,6 +642,7 @@ class CORE_EXPORT QgsMapSettings
615642
QgsWeakMapLayerPointerList mLayers;
616643
QMap<QString, QString> mLayerStyleOverrides;
617644
QString mCustomRenderFlags;
645+
QVariantMap mCustomRenderingFlags;
618646
QgsExpressionContext mExpressionContext;
619647

620648
QgsCoordinateReferenceSystem mDestCRS;

‎src/core/qgsrendercontext.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ QgsRenderContext::QgsRenderContext( const QgsRenderContext &rh )
6262
, mTextRenderFormat( rh.mTextRenderFormat )
6363
, mRenderedFeatureHandlers( rh.mRenderedFeatureHandlers )
6464
, mHasRenderedFeatureHandlers( rh.mHasRenderedFeatureHandlers )
65+
, mCustomRenderingFlags( rh.mCustomRenderingFlags )
6566
#ifdef QGISDEBUG
6667
, mHasTransformContext( rh.mHasTransformContext )
6768
#endif
@@ -94,6 +95,7 @@ QgsRenderContext &QgsRenderContext::operator=( const QgsRenderContext &rh )
9495
mTextRenderFormat = rh.mTextRenderFormat;
9596
mRenderedFeatureHandlers = rh.mRenderedFeatureHandlers;
9697
mHasRenderedFeatureHandlers = rh.mHasRenderedFeatureHandlers;
98+
mCustomRenderingFlags = rh.mCustomRenderingFlags;
9799
#ifdef QGISDEBUG
98100
mHasTransformContext = rh.mHasTransformContext;
99101
#endif
@@ -197,6 +199,7 @@ QgsRenderContext QgsRenderContext::fromMapSettings( const QgsMapSettings &mapSet
197199
//this flag is only for stopping during the current rendering progress,
198200
//so must be false at every new render operation
199201
ctx.setRenderingStopped( false );
202+
ctx.mCustomRenderingFlags = mapSettings.customRenderingFlags();
200203

201204
return ctx;
202205
}

‎src/core/qgsrendercontext.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,31 @@ class CORE_EXPORT QgsRenderContext
733733
*/
734734
bool isGuiPreview() const { return mIsGuiPreview; }
735735

736+
/**
737+
* Gets custom rendering flags. Layers might honour these to alter their rendering.
738+
* \returns a map of custom flags
739+
* \see setCustomRenderingFlag()
740+
* \since QGIS 3.12
741+
*/
742+
QVariantMap customRenderingFlags() const { return mCustomRenderingFlags; }
743+
744+
/**
745+
* Sets a custom rendering flag. Layers might honour these to alter their rendering.
746+
* \param flag the flag name
747+
* \param value the flag value
748+
* \see customRenderingFlags()
749+
* \since QGIS 3.12
750+
*/
751+
void setCustomRenderingFlag( const QString &flag, const QVariant &value ) { mCustomRenderingFlags[flag] = value; }
752+
753+
/**
754+
* Clears the specified custom rendering flag.
755+
* \param flag the flag name
756+
* \see setCustomRenderingFlag()
757+
* \since QGIS 3.12
758+
*/
759+
void clearCustomRenderingFlag( const QString &flag ) { mCustomRenderingFlags.remove( flag ); }
760+
736761
private:
737762

738763
Flags mFlags;
@@ -820,6 +845,7 @@ class CORE_EXPORT QgsRenderContext
820845
TextRenderFormat mTextRenderFormat = TextFormatAlwaysOutlines;
821846
QList< QgsRenderedFeatureHandlerInterface * > mRenderedFeatureHandlers;
822847
bool mHasRenderedFeatureHandlers = false;
848+
QVariantMap mCustomRenderingFlags;
823849

824850
QSet<const QgsSymbolLayer *> mDisabledSymbolLayers;
825851

‎tests/src/core/testqgsmapsettings.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class TestQgsMapSettings: public QObject
6060
void testLabelBoundary();
6161
void testExpressionContext();
6262
void testRenderedFeatureHandlers();
63+
void testCustomRenderingFlags();
6364

6465
private:
6566
QString toString( const QPolygonF &p, int decimalPlaces = 2 ) const;
@@ -548,5 +549,21 @@ void TestQgsMapSettings::testRenderedFeatureHandlers()
548549
// should be no double-delete here
549550
}
550551

552+
void TestQgsMapSettings::testCustomRenderingFlags()
553+
{
554+
QgsMapSettings settings;
555+
settings.setCustomRenderingFlag( QStringLiteral( "myexport" ), true );
556+
settings.setCustomRenderingFlag( QStringLiteral( "omitgeometries" ), QStringLiteral( "points" ) );
557+
QVERIFY( settings.customRenderingFlags()[ QStringLiteral( "myexport" ) ].toBool() == true );
558+
QVERIFY( settings.customRenderingFlags()[ QStringLiteral( "omitgeometries" ) ].toString() == QStringLiteral( "points" ) );
559+
560+
// Test deprecated API
561+
Q_NOWARN_DEPRECATED_PUSH
562+
settings.setCustomRenderFlags( QStringLiteral( "myexport;omitpoints" ) );
563+
QVERIFY( settings.customRenderFlags().split( ";" ).contains( QStringLiteral( "myexport" ) ) );
564+
QVERIFY( settings.customRenderFlags().split( ";" ).contains( QStringLiteral( "omitpoints" ) ) );
565+
Q_NOWARN_DEPRECATED_POP
566+
}
567+
551568
QGSTEST_MAIN( TestQgsMapSettings )
552569
#include "testqgsmapsettings.moc"

‎tests/src/python/test_qgsrendercontext.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,21 @@ def testMapUnitScaleFactor(self):
464464
sf = r.convertToMapUnits(1, QgsUnitTypes.RenderPixels, c)
465465
self.assertAlmostEqual(sf, 2.0, places=5)
466466

467+
def testCustomRenderingFlags(self):
468+
rc = QgsRenderContext()
469+
rc.setCustomRenderingFlag('myexport', True)
470+
rc.setCustomRenderingFlag('omitgeometries', 'points')
471+
self.assertTrue(rc.customRenderingFlags()['myexport'])
472+
self.assertEqual(rc.customRenderingFlags()['omitgeometries'], 'points')
473+
474+
# test that custom flags are correctly copied from settings
475+
settings = QgsMapSettings()
476+
settings.setCustomRenderingFlag('myexport', True)
477+
settings.setCustomRenderingFlag('omitgeometries', 'points')
478+
rc = QgsRenderContext.fromMapSettings(settings)
479+
self.assertTrue(rc.customRenderingFlags()['myexport'])
480+
self.assertEqual(rc.customRenderingFlags()['omitgeometries'], 'points')
481+
467482

468483
if __name__ == '__main__':
469484
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.