Skip to content

Commit a9105b7

Browse files
authoredSep 16, 2016
Remove QgsMapLayer::draw() method from API (replaced by createMapRenderer()) (#3501)
1 parent 2e1abda commit a9105b7

14 files changed

+21
-112
lines changed
 

‎doc/api_break.dox

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,8 @@ and the new ramp can be retrieved after executing the dialog by calling ramp().<
816816

817817
<ul>
818818
<li>crs() now returns a QgsCoordinateReferenceSystem object, not a reference. This change has no effect for PyQGIS code.</li>
819+
<li>createMapRenderer() has been made pure virtual.</li>
820+
<li>draw() has been removed. Use createMapRenderer() method for rendering of layers.</li>
819821
<li>setLayerName() was removed, use setName() instead. The layerNameChanged() signal has been replaced by nameChanged().</li>
820822
<li>toggleScaleBasedVisibility() was replaced by setScaleBasedVisibility()</li>
821823
<li>lastErrorTitle(), lastError(), cacheImage(), onCacheImageDelete(), clearCacheImage() and the signals drawingProgress(),
@@ -933,6 +935,12 @@ be used instead of a null pointer if no transformation is required.</li>
933935
<li>prepareGeometry() and geometryRequiresPreparation() now take a QgsCoordinateTransform reference, not a pointer. An invalid QgsCoordinateTransform should be used instead of a null pointer if no transformation is required.</li>
934936
</ul>
935937

938+
\subsection qgis_api_break_3_0_QgsPluginLayer QgsPluginLayer
939+
940+
<ul>
941+
<li>createMapRenderer(): default implementation (which called plugin's draw() method) has been removed. Plugin layers must implement createMapRenderer().</li>
942+
</ul>
943+
936944
\subsection qgis_api_break_3_0_QgsPointLocator QgsPointLocator
937945

938946
<ul>

‎python/core/qgsmaplayer.sip

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -274,15 +274,7 @@ class QgsMapLayer : QObject
274274
/** Return new instance of QgsMapLayerRenderer that will be used for rendering of given context
275275
* @note added in 2.4
276276
*/
277-
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) /Factory/;
278-
279-
/** This is the method that does the actual work of
280-
* drawing the layer onto a paint device.
281-
* @param rendererContext describes the extents,
282-
* resolumon etc. that should be used when rendering the
283-
* layer.
284-
*/
285-
virtual bool draw( QgsRenderContext& rendererContext );
277+
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) = 0 /Factory/;
286278

287279
/** Returns the extent of the layer. */
288280
virtual QgsRectangle extent() const;

‎python/core/qgspluginlayer.sip

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,4 @@ class QgsPluginLayer : QgsMapLayer
2424
//! @note Added in v2.1
2525
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
2626

27-
/** Return new instance of QgsMapLayerRenderer that will be used for rendering of given context
28-
*
29-
* The default implementation returns map layer renderer which just calls draw().
30-
* This may work, but it is unsafe for multi-threaded rendering because of the run
31-
* conditions that may happen (e.g. something is changed in the layer while it is
32-
* being rendered).
33-
*
34-
* @note added in 2.4
35-
*/
36-
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) /Factory/;
3727
};

‎python/core/qgsvectorlayer.sip

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -995,11 +995,6 @@ class QgsVectorLayer : QgsMapLayer
995995
*/
996996
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) /Factory/;
997997

998-
/** Draws the layer
999-
* @return false if an error occurred during drawing
1000-
*/
1001-
bool draw( QgsRenderContext& rendererContext );
1002-
1003998
/** Return the extent of the layer */
1004999
QgsRectangle extent() const;
10051000

‎python/core/raster/qgsrasterlayer.sip

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,6 @@ class QgsRasterLayer : QgsMapLayer
133133
*/
134134
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) /Factory/;
135135

136-
/** \brief This is called when the view on the raster layer needs to be redrawn */
137-
bool draw( QgsRenderContext& rendererContext );
138-
139136
/** \brief This is an overloaded version of the draw() function that is called by both draw() and thumbnailAsPixmap */
140137
void draw( QPainter * theQPainter,
141138
QgsRasterViewPort * myRasterViewPort,

‎src/core/qgsmaplayer.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,6 @@ QPainter::CompositionMode QgsMapLayer::blendMode() const
154154
return mBlendMode;
155155
}
156156

157-
bool QgsMapLayer::draw( QgsRenderContext& rendererContext )
158-
{
159-
Q_UNUSED( rendererContext );
160-
return false;
161-
}
162157

163158
bool QgsMapLayer::readLayerXml( const QDomElement& layerElement )
164159
{

‎src/core/qgsmaplayer.h

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -292,15 +292,7 @@ class CORE_EXPORT QgsMapLayer : public QObject
292292
/** Return new instance of QgsMapLayerRenderer that will be used for rendering of given context
293293
* @note added in 2.4
294294
*/
295-
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) { Q_UNUSED( rendererContext ); return nullptr; }
296-
297-
/** This is the method that does the actual work of
298-
* drawing the layer onto a paint device.
299-
* @param rendererContext describes the extents,
300-
* resolumon etc. that should be used when rendering the
301-
* layer.
302-
*/
303-
virtual bool draw( QgsRenderContext& rendererContext );
295+
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) = 0;
304296

305297
/** Returns the extent of the layer. */
306298
virtual QgsRectangle extent() const;

‎src/core/qgspluginlayer.cpp

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -44,33 +44,3 @@ QgsLegendSymbologyList QgsPluginLayer::legendSymbologyItems( QSize iconSize )
4444
Q_UNUSED( iconSize );
4545
return QgsLegendSymbologyList();
4646
}
47-
48-
/**
49-
* \ingroup core
50-
* Fallback layer renderer implementation for layer that do not support map renderer yet.
51-
* @note added in 2.4
52-
* @note not available in Python bindings
53-
*/
54-
class QgsPluginLayerRenderer : public QgsMapLayerRenderer
55-
{
56-
public:
57-
QgsPluginLayerRenderer( QgsPluginLayer* layer, QgsRenderContext& rendererContext )
58-
: QgsMapLayerRenderer( layer->id() )
59-
, mLayer( layer )
60-
, mRendererContext( rendererContext )
61-
{}
62-
63-
virtual bool render() override
64-
{
65-
return mLayer->draw( mRendererContext );
66-
}
67-
68-
protected:
69-
QgsPluginLayer* mLayer;
70-
QgsRenderContext& mRendererContext;
71-
};
72-
73-
QgsMapLayerRenderer* QgsPluginLayer::createMapRenderer( QgsRenderContext& rendererContext )
74-
{
75-
return new QgsPluginLayerRenderer( this, rendererContext );
76-
}

‎src/core/qgspluginlayer.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,6 @@ class CORE_EXPORT QgsPluginLayer : public QgsMapLayer
5050
//! @note Added in v2.1
5151
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
5252

53-
/** Return new instance of QgsMapLayerRenderer that will be used for rendering of given context
54-
*
55-
* The default implementation returns map layer renderer which just calls draw().
56-
* This may work, but it is unsafe for multi-threaded rendering because of the run
57-
* conditions that may happen (e.g. something is changed in the layer while it is
58-
* being rendered).
59-
*
60-
* @note added in 2.4
61-
*/
62-
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) override;
63-
6453
protected:
6554
QString mPluginLayerType;
6655
};

‎src/core/qgsvectorlayer.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -238,11 +238,6 @@ QgsMapLayerRenderer* QgsVectorLayer::createMapRenderer( QgsRenderContext& render
238238
return new QgsVectorLayerRenderer( this, rendererContext );
239239
}
240240

241-
bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
242-
{
243-
QgsVectorLayerRenderer renderer( this, rendererContext );
244-
return renderer.render();
245-
}
246241

247242
void QgsVectorLayer::drawVertexMarker( double x, double y, QPainter& p, QgsVectorLayer::VertexMarkerType type, int m )
248243
{

‎src/core/qgsvectorlayer.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,11 +1119,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
11191119
*/
11201120
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) override;
11211121

1122-
/** Draws the layer
1123-
* @return false if an error occurred during drawing
1124-
*/
1125-
bool draw( QgsRenderContext& rendererContext ) override;
1126-
11271122
/** Return the extent of the layer */
11281123
QgsRectangle extent() const override;
11291124

‎src/core/raster/qgsrasterlayer.cpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -263,21 +263,6 @@ QgsMapLayerRenderer *QgsRasterLayer::createMapRenderer( QgsRenderContext& render
263263
return new QgsRasterLayerRenderer( this, rendererContext );
264264
}
265265

266-
bool QgsRasterLayer::draw( QgsRenderContext& rendererContext )
267-
{
268-
QgsDebugMsgLevel( "entered. (renderContext)", 4 );
269-
270-
QgsDebugMsgLevel( "checking timestamp.", 4 );
271-
272-
// Check timestamp
273-
if ( !update() )
274-
{
275-
return false;
276-
}
277-
278-
QgsRasterLayerRenderer renderer( this, rendererContext );
279-
return renderer.render();
280-
}
281266

282267
void QgsRasterLayer::draw( QPainter * theQPainter,
283268
QgsRasterViewPort * theRasterViewPort,

‎src/core/raster/qgsrasterlayer.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,9 +259,6 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer
259259
*/
260260
virtual QgsMapLayerRenderer* createMapRenderer( QgsRenderContext& rendererContext ) override;
261261

262-
/** \brief This is called when the view on the raster layer needs to be redrawn */
263-
bool draw( QgsRenderContext& rendererContext ) override;
264-
265262
/** \brief This is an overloaded version of the draw() function that is called by both draw() and thumbnailAsPixmap */
266263
void draw( QPainter * theQPainter,
267264
QgsRasterViewPort * myRasterViewPort,

‎src/server/qgsmaprenderer.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "qgsmessagelog.h"
2323
#include "qgsmaprenderer.h"
2424
#include "qgsscalecalculator.h"
25+
#include "qgsmaplayerrenderer.h"
2526
#include "qgsmaptopixel.h"
2627
#include "qgsmaplayer.h"
2728
#include "qgsmaplayerregistry.h"
@@ -236,6 +237,14 @@ void QgsMapRenderer::adjustExtentToSize()
236237
}
237238

238239

240+
static bool drawLayer( QgsMapLayer* ml, QgsRenderContext& context )
241+
{
242+
QgsMapLayerRenderer* mlr = ml->createMapRenderer( context );
243+
bool res = mlr->render();
244+
delete mlr;
245+
return res;
246+
}
247+
239248
void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
240249
{
241250
//Lock render method for concurrent threads (e.g. from globe)
@@ -498,7 +507,7 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
498507
mRenderContext.painter()->scale( 1.0 / rasterScaleFactor, 1.0 / rasterScaleFactor );
499508
}
500509

501-
if ( !ml->draw( mRenderContext ) )
510+
if ( !drawLayer( ml, mRenderContext ) )
502511
{
503512
emit drawError( ml );
504513
}
@@ -510,7 +519,7 @@ void QgsMapRenderer::render( QPainter* painter, double* forceWidthScale )
510519
if ( split )
511520
{
512521
mRenderContext.setExtent( r2 );
513-
if ( !ml->draw( mRenderContext ) )
522+
if ( !drawLayer( ml, mRenderContext ) )
514523
{
515524
emit drawError( ml );
516525
}

0 commit comments

Comments
 (0)
Please sign in to comment.