@@ -206,12 +206,20 @@ void QgsComposerMap::cache()
206
206
return ;
207
207
}
208
208
209
- if ( mDrawing )
209
+ if ( mPainterJob )
210
210
{
211
- return ;
211
+ if ( mPainterCancelWait )
212
+ {
213
+ return ; // Already waiting
214
+ }
215
+ QgsDebugMsg ( " Aborting composer painter job" );
216
+ mPainterCancelWait = true ;
217
+ mPainterJob ->cancel ();
218
+ mPainterCancelWait = false ;
212
219
}
213
220
214
- mDrawing = true ;
221
+ Q_ASSERT ( !mPainterJob );
222
+ Q_ASSERT ( !mPainter );
215
223
216
224
double horizontalVScaleFactor = horizontalViewScaleFactor ();
217
225
if ( horizontalVScaleFactor < 0 )
@@ -260,13 +268,24 @@ void QgsComposerMap::cache()
260
268
mCacheImage .fill ( QColor ( 255 , 255 , 255 , 0 ).rgba () );
261
269
}
262
270
263
- QPainter p ( &mCacheImage );
271
+ mPainter = new QPainter ( &mCacheImage );
272
+ QgsMapSettings settings ( mapSettings ( ext, QSizeF ( w, h ), mCacheImage .logicalDpiX () ) );
273
+ mPainterJob = new QgsMapRendererCustomPainterJob ( settings, mPainter );
274
+ connect ( mPainterJob , SIGNAL ( finished () ), this , SLOT ( painterJobFinished () ) );
275
+ QgsDebugMsg ( " Starting new composer painter job" );
276
+ mPainterJob ->start ();
277
+ }
264
278
265
- draw ( &p, ext, QSizeF ( w, h ), mCacheImage .logicalDpiX () );
266
- p.end ();
279
+ void QgsComposerMap::painterJobFinished ()
280
+ {
281
+ QgsDebugMsg ( " Finished composer painter job" );
282
+ mPainter ->end ();
283
+ delete mPainterJob ;
284
+ mPainterJob = nullptr ;
285
+ delete mPainter ;
286
+ mPainter = nullptr ;
267
287
mCacheUpdated = true ;
268
-
269
- mDrawing = false ;
288
+ updateItem ();
270
289
}
271
290
272
291
void QgsComposerMap::paint ( QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *pWidget )
@@ -1031,8 +1050,10 @@ void QgsComposerMap::updateItem()
1031
1050
1032
1051
if ( mPreviewMode != QgsComposerMap::Rectangle && !mCacheUpdated )
1033
1052
{
1053
+ QgsDebugMsg ( " Requesting new cache image item" );
1034
1054
cache ();
1035
1055
}
1056
+ QgsDebugMsg ( " Updating item" );
1036
1057
QgsComposerItem::updateItem ();
1037
1058
}
1038
1059
0 commit comments