Skip to content

Commit f373b74

Browse files
author
wonder
committedFeb 7, 2010
Show labels from labeling plugin also in map composer (though not scaled correctly)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@12897 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

6 files changed

+26
-8
lines changed

6 files changed

+26
-8
lines changed
 

‎src/core/composer/qgscomposermap.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,8 @@ void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const
112112
QgsMapRenderer theMapRenderer;
113113
theMapRenderer.setExtent( extent );
114114
theMapRenderer.setOutputSize( size, dpi );
115+
if ( mMapRenderer->labelingEngine() )
116+
theMapRenderer.setLabelingEngine( mMapRenderer->labelingEngine()->clone() );
115117

116118
//use stored layer set or read current set from main canvas
117119
if ( mKeepLayerSet )

‎src/core/qgsmaprenderer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ void QgsMapRenderer::render( QPainter* painter )
279279

280280
mRenderContext.setLabelingEngine( mLabelingEngine );
281281
if ( mLabelingEngine )
282-
mLabelingEngine->init();
282+
mLabelingEngine->init( this );
283283

284284
// know we know if this render is just a repeat of the last time, we
285285
// can clear caches if it has changed

‎src/core/qgsmaprenderer.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class QPainter;
3030

3131
class QgsMapToPixel;
3232
class QgsMapLayer;
33+
class QgsMapRenderer;
3334
class QgsScaleCalculator;
3435
class QgsCoordinateReferenceSystem;
3536
class QgsDistanceArea;
@@ -46,7 +47,7 @@ class QgsLabelingEngineInterface
4647
virtual ~QgsLabelingEngineInterface() {}
4748

4849
//! called when we're going to start with rendering
49-
virtual void init() = 0;
50+
virtual void init( QgsMapRenderer* mp ) = 0;
5051
//! called to find out whether the layer is used for labeling
5152
virtual bool willUseLayer( QgsVectorLayer* layer ) = 0;
5253
//! called when starting rendering of a layer
@@ -58,6 +59,8 @@ class QgsLabelingEngineInterface
5859
//! called when we're done with rendering
5960
virtual void exit() = 0;
6061

62+
//! called when passing engine among map renderers
63+
virtual QgsLabelingEngineInterface* clone() = 0;
6164
};
6265

6366

‎src/plugins/labeling/labeling.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class LabelingTool : public QgsMapTool
105105
*/
106106
void Labeling::initGui()
107107
{
108-
mLBL = new PalLabeling( mQGisIface->mapCanvas()->mapRenderer() );
108+
mLBL = new PalLabeling();
109109

110110
// Create the action for tool
111111
mQActionPointer = new QAction( QIcon( ":/labeling/labeling.png" ), tr( "Labeling" ), this );

‎src/plugins/labeling/pallabeling.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,8 @@ void LayerSettings::registerFeature( QgsFeature& f )
257257

258258
// -------------
259259

260-
PalLabeling::PalLabeling( QgsMapRenderer* mapRenderer )
261-
: mMapRenderer( mapRenderer ), mPal( NULL )
260+
PalLabeling::PalLabeling()
261+
: mMapRenderer( NULL ), mPal( NULL )
262262
{
263263

264264
// find out engine defaults
@@ -298,6 +298,8 @@ bool PalLabeling::willUseLayer( QgsVectorLayer* layer )
298298

299299
int PalLabeling::prepareLayer( QgsVectorLayer* layer, int& attrIndex )
300300
{
301+
Q_ASSERT( mMapRenderer != NULL );
302+
301303
// start with a temporary settings class, find out labeling info
302304
LayerSettings lyrTmp;
303305
lyrTmp.readFromLayer( layer );
@@ -374,8 +376,10 @@ void PalLabeling::registerFeature( QgsVectorLayer* layer, QgsFeature& f )
374376
}
375377

376378

377-
void PalLabeling::init()
379+
void PalLabeling::init( QgsMapRenderer* mr )
378380
{
381+
mMapRenderer = mr;
382+
379383
// delete if exists already
380384
if ( mPal )
381385
delete mPal;
@@ -404,6 +408,7 @@ void PalLabeling::exit()
404408
{
405409
delete mPal;
406410
mPal = NULL;
411+
mMapRenderer = NULL;
407412
}
408413

409414
LayerSettings& PalLabeling::layer( const char* layerName )
@@ -421,6 +426,7 @@ LayerSettings& PalLabeling::layer( const char* layerName )
421426

422427
void PalLabeling::drawLabeling( QgsRenderContext& context )
423428
{
429+
Q_ASSERT( mMapRenderer != NULL );
424430
QPainter* painter = context.painter();
425431
QgsRectangle extent = context.extent();
426432

@@ -611,3 +617,8 @@ void PalLabeling::drawLabelBuffer( QPainter* p, QString text, const QFont& font,
611617
p->setBrush( color );
612618
p->drawPath( path );
613619
}
620+
621+
QgsLabelingEngineInterface* PalLabeling::clone()
622+
{
623+
return new PalLabeling();
624+
}

‎src/plugins/labeling/pallabeling.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class LabelCandidate
9999
class PalLabeling : public QgsLabelingEngineInterface
100100
{
101101
public:
102-
PalLabeling( QgsMapRenderer* renderer );
102+
PalLabeling();
103103
~PalLabeling();
104104

105105
LayerSettings& layer( const char* layerName );
@@ -122,7 +122,7 @@ class PalLabeling : public QgsLabelingEngineInterface
122122
// implemented methods from labeling engine interface
123123

124124
//! called when we're going to start with rendering
125-
virtual void init();
125+
virtual void init( QgsMapRenderer* mr );
126126
//! called to find out whether the layer is used for labeling
127127
virtual bool willUseLayer( QgsVectorLayer* layer );
128128
//! hook called when drawing layer before issuing select()
@@ -134,6 +134,8 @@ class PalLabeling : public QgsLabelingEngineInterface
134134
//! called when we're done with rendering
135135
virtual void exit();
136136

137+
//! called when passing engine among map renderers
138+
virtual QgsLabelingEngineInterface* clone();
137139

138140
void drawLabelCandidateRect( pal::LabelPosition* lp, QPainter* painter, const QgsMapToPixel* xform );
139141
void drawLabel( pal::LabelPosition* label, QPainter* painter, const QgsMapToPixel* xform, bool drawBuffer = false );

0 commit comments

Comments
 (0)
Please sign in to comment.