Skip to content

Commit 630272d

Browse files
committed
Conversion of composer to use map renderer job
1 parent 35894f1 commit 630272d

20 files changed

+176
-174
lines changed

src/app/composer/qgscomposer.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
#include "qgslogger.h"
5151
#include "qgsproject.h"
5252
#include "qgsmapcanvas.h"
53-
#include "qgsmaprenderer.h"
5453
#include "qgsmessageviewer.h"
5554
#include "qgscontexthelp.h"
5655
#include "qgscursors.h"
@@ -359,7 +358,7 @@ QgsComposer::QgsComposer( QgisApp *qgis, const QString& title )
359358
mViewFrame->setLayout( mViewLayout );
360359

361360
//init undo/redo buttons
362-
mComposition = new QgsComposition( mQgis->mapCanvas()->mapRenderer() );
361+
mComposition = new QgsComposition( mQgis->mapCanvas()->mapSettings() );
363362

364363
mActionUndo->setEnabled( false );
365364
mActionRedo->setEnabled( false );
@@ -2179,7 +2178,7 @@ void QgsComposer::readXML( const QDomElement& composerElem, const QDomDocument&
21792178
createComposerView();
21802179

21812180
//read composition settings
2182-
mComposition = new QgsComposition( mQgis->mapCanvas()->mapRenderer() );
2181+
mComposition = new QgsComposition( mQgis->mapCanvas()->mapSettings() );
21832182
QDomNodeList compositionNodeList = composerElem.elementsByTagName( "Composition" );
21842183
if ( compositionNodeList.size() > 0 )
21852184
{
@@ -2550,7 +2549,7 @@ void QgsComposer::cleanupAfterTemplateRead()
25502549
double currentHeight = mapItem->rect().height();
25512550
if ( currentWidth - 0 > 0.0 ) //don't divide through zero
25522551
{
2553-
QgsRectangle canvasExtent = mapItem->mapRenderer()->extent();
2552+
QgsRectangle canvasExtent = mComposition->mapSettings().visibleExtent();
25542553
//adapt min y of extent such that the size of the map item stays the same
25552554
double newCanvasExtentHeight = currentHeight / currentWidth * canvasExtent.width();
25562555
canvasExtent.setYMinimum( canvasExtent.yMaximum() - newCanvasExtentHeight );

src/app/composer/qgscomposermapwidget.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,7 @@ void QgsComposerMapWidget::on_mSetToMapCanvasExtentButton_clicked()
166166
{
167167
if ( mComposerMap )
168168
{
169-
const QgsMapRenderer* renderer = mComposerMap->mapRenderer();
170-
if ( renderer )
171-
{
172-
QgsRectangle newExtent = renderer->extent();
169+
QgsRectangle newExtent = mComposerMap->composition()->mapSettings().visibleExtent();
173170

174171
//Make sure the width/height ratio is the same as in current composer map extent.
175172
//This is to keep the map item frame and the page layout fixed
@@ -204,7 +201,6 @@ void QgsComposerMapWidget::on_mSetToMapCanvasExtentButton_clicked()
204201
mComposerMap->setNewExtent( newExtent );
205202
mComposerMap->endCommand();
206203
}
207-
}
208204
}
209205

210206
void QgsComposerMapWidget::on_mXMinLineEdit_editingFinished()

src/core/composer/qgsatlascomposition.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ void QgsAtlasComposition::beginRender()
9494
}
9595

9696
const QgsCoordinateReferenceSystem& coverage_crs = mCoverageLayer->crs();
97-
const QgsCoordinateReferenceSystem& destination_crs = mComposerMap->mapRenderer()->destinationCrs();
97+
const QgsCoordinateReferenceSystem& destination_crs = mComposition->mapSettings().destinationCrs();
9898
// transformation needed for feature geometries
9999
mTransform.setSourceCrs( coverage_crs );
100100
mTransform.setDestCRS( destination_crs );
@@ -167,6 +167,7 @@ void QgsAtlasComposition::beginRender()
167167
mOrigExtent = mComposerMap->extent();
168168

169169
mRestoreLayer = false;
170+
/* TODO: make working again. btw. Atlas must not change layers of map canvas at any time!
170171
QStringList& layerSet = mComposition->mapRenderer()->layerSet();
171172
if ( mHideCoverage )
172173
{
@@ -177,7 +178,7 @@ void QgsAtlasComposition::beginRender()
177178
mRestoreLayer = true;
178179
layerSet.removeAt( removeAt );
179180
}
180-
}
181+
}*/
181182

182183
// special columns for expressions
183184
QgsExpression::setSpecialColumn( "$numpages", QVariant( mComposition->numPages() ) );
@@ -200,14 +201,15 @@ void QgsAtlasComposition::endRender()
200201
}
201202

202203
// restore the coverage visibility
204+
/* TODO: make working again. btw. Atlas must not change layers of map canvas at any time!
203205
if ( mRestoreLayer )
204206
{
205207
QStringList& layerSet = mComposition->mapRenderer()->layerSet();
206208
207209
layerSet.push_back( mCoverageLayer->id() );
208210
mComposerMap->cache();
209211
mComposerMap->update();
210-
}
212+
}*/
211213
mComposerMap->setNewExtent( mOrigExtent );
212214
}
213215

src/core/composer/qgscomposerattributetable.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,10 @@ bool QgsComposerAttributeTable::getFeatureAttributes( QList<QgsAttributeMap> &at
132132
if ( mComposerMap && mShowOnlyVisibleFeatures )
133133
{
134134
selectionRect = mComposerMap->extent();
135-
if ( mVectorLayer && mComposerMap->mapRenderer()
136-
&& mComposerMap->mapRenderer()->hasCrsTransformEnabled() )
135+
if ( mVectorLayer && mComposition->mapSettings().hasCrsTransformEnabled() )
137136
{
138137
//transform back to layer CRS
139-
QgsCoordinateTransform coordTransform( mVectorLayer->crs(), mComposerMap->mapRenderer()->destinationCrs() );
138+
QgsCoordinateTransform coordTransform( mVectorLayer->crs(), mComposition->mapSettings().destinationCrs() );
140139
try
141140
{
142141
selectionRect = coordTransform.transformBoundingBox( selectionRect, QgsCoordinateTransform::ReverseTransform );

src/core/composer/qgscomposerlegend.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -526,11 +526,7 @@ QStringList QgsComposerLegend::layerIdList() const
526526
//take layer list from map renderer (to have legend order)
527527
if ( mComposition )
528528
{
529-
QgsMapRenderer* r = mComposition->mapRenderer();
530-
if ( r )
531-
{
532-
return r->layerSet();
533-
}
529+
return mComposition->mapSettings().layers();
534530
}
535531
return QStringList();
536532
}

src/core/composer/qgscomposermap.cpp

Lines changed: 44 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgscoordinatetransform.h"
2121
#include "qgslogger.h"
2222
#include "qgsmaprenderer.h"
23+
#include "qgsmaprendererjob.h"
2324
#include "qgsmaplayerregistry.h"
2425
#include "qgsmaptopixel.h"
2526
#include "qgsproject.h"
@@ -60,7 +61,6 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
6061
mId = 0;
6162
assignFreeId();
6263

63-
mMapRenderer = mComposition->mapRenderer();
6464
mPreviewMode = QgsComposerMap::Rectangle;
6565
mCurrentRectangle = rect();
6666

@@ -75,10 +75,8 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
7575
connectUpdateSlot();
7676

7777
//calculate mExtent based on width/height ratio and map canvas extent
78-
if ( mMapRenderer )
79-
{
80-
mExtent = mMapRenderer->extent();
81-
}
78+
mExtent = mComposition->mapSettings().visibleExtent();
79+
8280
setSceneRect( QRectF( x, y, width, height ) );
8381
setToolTip( tr( "Map %1" ).arg( mId ) );
8482

@@ -108,7 +106,6 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition )
108106
connectUpdateSlot();
109107

110108
mComposition = composition;
111-
mMapRenderer = mComposition->mapRenderer();
112109
mId = mComposition->composerMapItems().size();
113110
mPreviewMode = QgsComposerMap::Rectangle;
114111
mCurrentRectangle = rect();
@@ -155,70 +152,47 @@ void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const
155152
return;
156153
}
157154

158-
if ( !mMapRenderer )
159-
{
160-
return;
161-
}
155+
const QgsMapSettings& ms = mComposition->mapSettings();
162156

163-
QgsMapRenderer theMapRenderer;
164-
theMapRenderer.setExtent( extent );
165-
theMapRenderer.setOutputSize( size, dpi );
166-
if ( mMapRenderer->labelingEngine() )
167-
theMapRenderer.setLabelingEngine( mMapRenderer->labelingEngine()->clone() );
157+
QgsMapSettings jobMapSettings;
158+
jobMapSettings.setExtent( extent );
159+
jobMapSettings.setOutputSize( size.toSize() ); // TODO: sizeF
160+
jobMapSettings.setOutputDpi( dpi );
161+
/* TODO: if ( mMapRenderer->labelingEngine() )
162+
theMapRenderer.setLabelingEngine( mMapRenderer->labelingEngine()->clone() );*/
168163

169164
//use stored layer set or read current set from main canvas
170-
if ( mKeepLayerSet )
171-
{
172-
theMapRenderer.setLayerSet( mLayerSet );
173-
}
174-
else
175-
{
176-
theMapRenderer.setLayerSet( mMapRenderer->layerSet() );
177-
}
178-
theMapRenderer.setDestinationCrs( mMapRenderer->destinationCrs() );
179-
theMapRenderer.setProjectionsEnabled( mMapRenderer->hasCrsTransformEnabled() );
180-
181-
//set antialiasing if enabled in options
182-
QSettings settings;
183-
// Changed to enable anti aliased rendering by default as of QGIS 1.7
184-
if ( settings.value( "/qgis/enable_anti_aliasing", true ).toBool() )
185-
{
186-
painter->setRenderHint( QPainter::Antialiasing );
187-
}
188-
189-
QgsRenderContext* theRendererContext = theMapRenderer.rendererContext();
190-
if ( theRendererContext )
191-
{
192-
theRendererContext->setDrawEditingInformation( false );
193-
theRendererContext->setRenderingStopped( false );
194-
}
165+
jobMapSettings.setLayers( mKeepLayerSet ? mLayerSet : ms.layers() );
166+
jobMapSettings.setDestinationCrs( ms.destinationCrs() );
167+
jobMapSettings.setProjectionsEnabled( ms.hasCrsTransformEnabled() );
168+
jobMapSettings.setAntiAliasingEnabled( ms.isAntiAliasingEnabled() );
169+
jobMapSettings.setDrawEditingInformation( false );
195170

196171
// force vector output (no caching of marker images etc.)
197-
theRendererContext->setForceVectorOutput( true );
172+
jobMapSettings.setForceVectorOutput( true );
198173

199174
// make the renderer respect the composition's useAdvancedEffects flag
200-
theRendererContext->setUseAdvancedEffects( mComposition->useAdvancedEffects() );
175+
jobMapSettings.setUseAdvancedEffects( mComposition->useAdvancedEffects() );
201176

202-
//force composer map scale for scale dependent visibility
203-
double bk_scale = theMapRenderer.scale();
204-
theMapRenderer.setScale( scale() );
205-
206-
//layer caching (as QImages) cannot be done for composer prints
207-
QSettings s;
208-
bool bkLayerCaching = s.value( "/qgis/enable_render_caching", false ).toBool();
209-
s.setValue( "/qgis/enable_render_caching", false );
177+
// force composer map scale for scale dependent visibility
178+
// TODO: custom scale jobMapSettings.setScale( scale() );
210179

180+
Q_UNUSED(forceWidthScale);
181+
/*
211182
if ( forceWidthScale ) //force wysiwyg line widths / marker sizes
212183
{
213184
theMapRenderer.render( painter, forceWidthScale );
214185
}
215186
else
216187
{
217188
theMapRenderer.render( painter );
218-
}
219-
s.setValue( "/qgis/enable_render_caching", bkLayerCaching );
189+
}*/
190+
191+
// render
192+
QgsMapRendererCustomPainterJob job( jobMapSettings, painter );
193+
job.start();
194+
job.waitForFinished();
220195

221-
theMapRenderer.setScale( bk_scale );
222196
}
223197

224198
void QgsComposerMap::cache( void )
@@ -450,10 +424,15 @@ void QgsComposerMap::setCacheUpdated( bool u )
450424
mCacheUpdated = u;
451425
}
452426

427+
const QgsMapRenderer *QgsComposerMap::mapRenderer() const
428+
{
429+
return mComposition->mapRenderer();
430+
}
431+
453432
double QgsComposerMap::scale() const
454433
{
455434
QgsScaleCalculator calculator;
456-
calculator.setMapUnits( mMapRenderer->mapUnits() );
435+
calculator.setMapUnits( mComposition->mapSettings().mapUnits() );
457436
calculator.setDpi( 25.4 ); //QGraphicsView units are mm
458437
return calculator.calculate( mExtent, rect().width() );
459438
}
@@ -635,12 +614,7 @@ void QgsComposerMap::updateItem()
635614

636615
bool QgsComposerMap::containsWMSLayer() const
637616
{
638-
if ( !mMapRenderer )
639-
{
640-
return false;
641-
}
642-
643-
QStringList layers = mMapRenderer->layerSet();
617+
QStringList layers = mComposition->mapSettings().layers();
644618

645619
QStringList::const_iterator layer_it = layers.constBegin();
646620
QgsMapLayer* currentLayer = 0;
@@ -670,15 +644,11 @@ bool QgsComposerMap::containsWMSLayer() const
670644
bool QgsComposerMap::containsAdvancedEffects() const
671645
{
672646
// check if map contains advanced effects like blend modes, or flattened layers for transparency
673-
if ( !mMapRenderer )
674-
{
675-
return false;
676-
}
677647

678-
QStringList layers = mMapRenderer->layerSet();
648+
QStringList layers = mComposition->mapSettings().layers();
679649

680650
//Also need to check PAL labeling for blend modes
681-
QgsPalLabeling* lbl = dynamic_cast<QgsPalLabeling*>( mMapRenderer->labelingEngine() );
651+
QgsPalLabeling* lbl = 0; // TODO: dynamic_cast<QgsPalLabeling*>( mMapRenderer->labelingEngine() );
682652

683653
QStringList::const_iterator layer_it = layers.constBegin();
684654
QgsMapLayer* currentLayer = 0;
@@ -705,7 +675,7 @@ bool QgsComposerMap::containsAdvancedEffects() const
705675
return true;
706676
}
707677
// check label blend modes
708-
if ( lbl->willUseLayer( currentVectorLayer ) )
678+
if ( lbl && lbl->willUseLayer( currentVectorLayer ) )
709679
{
710680
// Check all label blending properties
711681
QgsPalLayerSettings& layerSettings = lbl->layer( currentVectorLayer->id() );
@@ -1062,15 +1032,12 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d
10621032

10631033
void QgsComposerMap::storeCurrentLayerSet()
10641034
{
1065-
if ( mMapRenderer )
1066-
{
1067-
mLayerSet = mMapRenderer->layerSet();
1068-
}
1035+
mLayerSet = mComposition->mapSettings().layers();
10691036
}
10701037

10711038
void QgsComposerMap::syncLayerSet()
10721039
{
1073-
if ( mLayerSet.size() < 1 && !mMapRenderer )
1040+
if ( mLayerSet.size() < 1 )
10741041
{
10751042
return;
10761043
}
@@ -1083,7 +1050,7 @@ void QgsComposerMap::syncLayerSet()
10831050
}
10841051
else //only consider layers visible in the map
10851052
{
1086-
currentLayerSet = mMapRenderer->layerSet();
1053+
currentLayerSet = mComposition->mapSettings().layers();
10871054
}
10881055

10891056
for ( int i = mLayerSet.size() - 1; i >= 0; --i )
@@ -2017,16 +1984,13 @@ void QgsComposerMap::drawCanvasItems( QPainter* painter, const QStyleOptionGraph
20171984

20181985
void QgsComposerMap::drawCanvasItem( QGraphicsItem* item, QPainter* painter, const QStyleOptionGraphicsItem* itemStyle )
20191986
{
2020-
if ( !item || !mMapCanvas || !mMapRenderer || !item->isVisible() )
1987+
if ( !item || !mMapCanvas || !item->isVisible() )
20211988
{
20221989
return;
20231990
}
20241991

20251992
painter->save();
20261993

2027-
QgsRectangle rendererExtent = mMapRenderer->extent();
2028-
QgsRectangle composerMapExtent = mExtent;
2029-
20301994
//determine scale factor according to graphics view dpi
20311995
double scaleFactor = 1.0 / mMapCanvas->logicalDpiX() * 25.4;
20321996

@@ -2062,7 +2026,7 @@ void QgsComposerMap::drawCanvasItem( QGraphicsItem* item, QPainter* painter, con
20622026

20632027
QPointF QgsComposerMap::composerMapPosForItem( const QGraphicsItem* item ) const
20642028
{
2065-
if ( !item || !mMapCanvas || !mMapRenderer )
2029+
if ( !item || !mMapCanvas )
20662030
{
20672031
return QPointF( 0, 0 );
20682032
}
@@ -2074,7 +2038,7 @@ QPointF QgsComposerMap::composerMapPosForItem( const QGraphicsItem* item ) const
20742038

20752039
QRectF graphicsSceneRect = mMapCanvas->sceneRect();
20762040
QPointF itemScenePos = item->scenePos();
2077-
QgsRectangle mapRendererExtent = mMapRenderer->extent();
2041+
QgsRectangle mapRendererExtent = mComposition->mapSettings().visibleExtent();
20782042

20792043
double mapX = itemScenePos.x() / graphicsSceneRect.width() * mapRendererExtent.width() + mapRendererExtent.xMinimum();
20802044
double mapY = mapRendererExtent.yMaximum() - itemScenePos.y() / graphicsSceneRect.height() * mapRendererExtent.height();
@@ -2297,11 +2261,7 @@ void QgsComposerMap::initGridAnnotationFormatFromProject()
22972261
{
22982262
QString format = QgsProject::instance()->readEntry( "PositionPrecision", "/DegreeFormat", "D" );
22992263

2300-
bool degreeUnits = true;
2301-
if ( mMapRenderer )
2302-
{
2303-
degreeUnits = ( mMapRenderer->mapUnits() == QGis::Degrees );
2304-
}
2264+
bool degreeUnits = ( mComposition->mapSettings().mapUnits() == QGis::Degrees );
23052265

23062266
if ( format == "DM" && degreeUnits )
23072267
{

0 commit comments

Comments
 (0)