20
20
#include " qgscoordinatetransform.h"
21
21
#include " qgslogger.h"
22
22
#include " qgsmaprenderer.h"
23
+ #include " qgsmaprendererjob.h"
23
24
#include " qgsmaplayerregistry.h"
24
25
#include " qgsmaptopixel.h"
25
26
#include " qgsproject.h"
@@ -60,7 +61,6 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
60
61
mId = 0 ;
61
62
assignFreeId ();
62
63
63
- mMapRenderer = mComposition ->mapRenderer ();
64
64
mPreviewMode = QgsComposerMap::Rectangle;
65
65
mCurrentRectangle = rect ();
66
66
@@ -75,10 +75,8 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w
75
75
connectUpdateSlot ();
76
76
77
77
// 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
+
82
80
setSceneRect ( QRectF ( x, y, width, height ) );
83
81
setToolTip ( tr ( " Map %1" ).arg ( mId ) );
84
82
@@ -108,7 +106,6 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition )
108
106
connectUpdateSlot ();
109
107
110
108
mComposition = composition;
111
- mMapRenderer = mComposition ->mapRenderer ();
112
109
mId = mComposition ->composerMapItems ().size ();
113
110
mPreviewMode = QgsComposerMap::Rectangle;
114
111
mCurrentRectangle = rect ();
@@ -155,70 +152,47 @@ void QgsComposerMap::draw( QPainter *painter, const QgsRectangle& extent, const
155
152
return ;
156
153
}
157
154
158
- if ( !mMapRenderer )
159
- {
160
- return ;
161
- }
155
+ const QgsMapSettings& ms = mComposition ->mapSettings ();
162
156
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() );*/
168
163
169
164
// 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 );
195
170
196
171
// force vector output (no caching of marker images etc.)
197
- theRendererContext-> setForceVectorOutput ( true );
172
+ jobMapSettings. setForceVectorOutput ( true );
198
173
199
174
// make the renderer respect the composition's useAdvancedEffects flag
200
- theRendererContext-> setUseAdvancedEffects ( mComposition ->useAdvancedEffects () );
175
+ jobMapSettings. setUseAdvancedEffects ( mComposition ->useAdvancedEffects () );
201
176
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() );
210
179
180
+ Q_UNUSED (forceWidthScale);
181
+ /*
211
182
if ( forceWidthScale ) //force wysiwyg line widths / marker sizes
212
183
{
213
184
theMapRenderer.render( painter, forceWidthScale );
214
185
}
215
186
else
216
187
{
217
188
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 ();
220
195
221
- theMapRenderer.setScale ( bk_scale );
222
196
}
223
197
224
198
void QgsComposerMap::cache ( void )
@@ -450,10 +424,15 @@ void QgsComposerMap::setCacheUpdated( bool u )
450
424
mCacheUpdated = u;
451
425
}
452
426
427
+ const QgsMapRenderer *QgsComposerMap::mapRenderer () const
428
+ {
429
+ return mComposition ->mapRenderer ();
430
+ }
431
+
453
432
double QgsComposerMap::scale () const
454
433
{
455
434
QgsScaleCalculator calculator;
456
- calculator.setMapUnits ( mMapRenderer -> mapUnits () );
435
+ calculator.setMapUnits ( mComposition -> mapSettings (). mapUnits () );
457
436
calculator.setDpi ( 25.4 ); // QGraphicsView units are mm
458
437
return calculator.calculate ( mExtent , rect ().width () );
459
438
}
@@ -635,12 +614,7 @@ void QgsComposerMap::updateItem()
635
614
636
615
bool QgsComposerMap::containsWMSLayer () const
637
616
{
638
- if ( !mMapRenderer )
639
- {
640
- return false ;
641
- }
642
-
643
- QStringList layers = mMapRenderer ->layerSet ();
617
+ QStringList layers = mComposition ->mapSettings ().layers ();
644
618
645
619
QStringList::const_iterator layer_it = layers.constBegin ();
646
620
QgsMapLayer* currentLayer = 0 ;
@@ -670,15 +644,11 @@ bool QgsComposerMap::containsWMSLayer() const
670
644
bool QgsComposerMap::containsAdvancedEffects () const
671
645
{
672
646
// check if map contains advanced effects like blend modes, or flattened layers for transparency
673
- if ( !mMapRenderer )
674
- {
675
- return false ;
676
- }
677
647
678
- QStringList layers = mMapRenderer -> layerSet ();
648
+ QStringList layers = mComposition -> mapSettings (). layers ();
679
649
680
650
// 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() );
682
652
683
653
QStringList::const_iterator layer_it = layers.constBegin ();
684
654
QgsMapLayer* currentLayer = 0 ;
@@ -705,7 +675,7 @@ bool QgsComposerMap::containsAdvancedEffects() const
705
675
return true ;
706
676
}
707
677
// check label blend modes
708
- if ( lbl->willUseLayer ( currentVectorLayer ) )
678
+ if ( lbl && lbl ->willUseLayer ( currentVectorLayer ) )
709
679
{
710
680
// Check all label blending properties
711
681
QgsPalLayerSettings& layerSettings = lbl->layer ( currentVectorLayer->id () );
@@ -1062,15 +1032,12 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d
1062
1032
1063
1033
void QgsComposerMap::storeCurrentLayerSet ()
1064
1034
{
1065
- if ( mMapRenderer )
1066
- {
1067
- mLayerSet = mMapRenderer ->layerSet ();
1068
- }
1035
+ mLayerSet = mComposition ->mapSettings ().layers ();
1069
1036
}
1070
1037
1071
1038
void QgsComposerMap::syncLayerSet ()
1072
1039
{
1073
- if ( mLayerSet .size () < 1 && ! mMapRenderer )
1040
+ if ( mLayerSet .size () < 1 )
1074
1041
{
1075
1042
return ;
1076
1043
}
@@ -1083,7 +1050,7 @@ void QgsComposerMap::syncLayerSet()
1083
1050
}
1084
1051
else // only consider layers visible in the map
1085
1052
{
1086
- currentLayerSet = mMapRenderer -> layerSet ();
1053
+ currentLayerSet = mComposition -> mapSettings (). layers ();
1087
1054
}
1088
1055
1089
1056
for ( int i = mLayerSet .size () - 1 ; i >= 0 ; --i )
@@ -2017,16 +1984,13 @@ void QgsComposerMap::drawCanvasItems( QPainter* painter, const QStyleOptionGraph
2017
1984
2018
1985
void QgsComposerMap::drawCanvasItem ( QGraphicsItem* item, QPainter* painter, const QStyleOptionGraphicsItem* itemStyle )
2019
1986
{
2020
- if ( !item || !mMapCanvas || !mMapRenderer || ! item->isVisible () )
1987
+ if ( !item || !mMapCanvas || !item->isVisible () )
2021
1988
{
2022
1989
return ;
2023
1990
}
2024
1991
2025
1992
painter->save ();
2026
1993
2027
- QgsRectangle rendererExtent = mMapRenderer ->extent ();
2028
- QgsRectangle composerMapExtent = mExtent ;
2029
-
2030
1994
// determine scale factor according to graphics view dpi
2031
1995
double scaleFactor = 1.0 / mMapCanvas ->logicalDpiX () * 25.4 ;
2032
1996
@@ -2062,7 +2026,7 @@ void QgsComposerMap::drawCanvasItem( QGraphicsItem* item, QPainter* painter, con
2062
2026
2063
2027
QPointF QgsComposerMap::composerMapPosForItem ( const QGraphicsItem* item ) const
2064
2028
{
2065
- if ( !item || !mMapCanvas || ! mMapRenderer )
2029
+ if ( !item || !mMapCanvas )
2066
2030
{
2067
2031
return QPointF ( 0 , 0 );
2068
2032
}
@@ -2074,7 +2038,7 @@ QPointF QgsComposerMap::composerMapPosForItem( const QGraphicsItem* item ) const
2074
2038
2075
2039
QRectF graphicsSceneRect = mMapCanvas ->sceneRect ();
2076
2040
QPointF itemScenePos = item->scenePos ();
2077
- QgsRectangle mapRendererExtent = mMapRenderer -> extent ();
2041
+ QgsRectangle mapRendererExtent = mComposition -> mapSettings (). visibleExtent ();
2078
2042
2079
2043
double mapX = itemScenePos.x () / graphicsSceneRect.width () * mapRendererExtent.width () + mapRendererExtent.xMinimum ();
2080
2044
double mapY = mapRendererExtent.yMaximum () - itemScenePos.y () / graphicsSceneRect.height () * mapRendererExtent.height ();
@@ -2297,11 +2261,7 @@ void QgsComposerMap::initGridAnnotationFormatFromProject()
2297
2261
{
2298
2262
QString format = QgsProject::instance ()->readEntry ( " PositionPrecision" , " /DegreeFormat" , " D" );
2299
2263
2300
- bool degreeUnits = true ;
2301
- if ( mMapRenderer )
2302
- {
2303
- degreeUnits = ( mMapRenderer ->mapUnits () == QGis::Degrees );
2304
- }
2264
+ bool degreeUnits = ( mComposition ->mapSettings ().mapUnits () == QGis::Degrees );
2305
2265
2306
2266
if ( format == " DM" && degreeUnits )
2307
2267
{
0 commit comments