@@ -932,52 +932,59 @@ void QgsMapCanvas::mouseReleaseEvent( QMouseEvent * e )
932932
933933void QgsMapCanvas::resizeEvent ( QResizeEvent * e )
934934{
935- static bool isAlreadyIn = false ;
936- static QSize lastSize = QSize ( -1 , -1 );
937-
938- lastSize = e->size ();
935+ mNewSize = e->size ();
936+ }
939937
940- if ( isAlreadyIn || mDrawing )
938+ void QgsMapCanvas::paintEvent ( QPaintEvent *e )
939+ {
940+ if ( mNewSize .isValid () )
941941 {
942- // cancel current render progress
943- if ( mMapRenderer )
942+ static bool isAlreadyIn = false ;
943+ static QSize lastSize = QSize ();
944+
945+ lastSize = mNewSize ;
946+ mNewSize = QSize ();
947+
948+ if ( isAlreadyIn || mDrawing )
944949 {
945- QgsRenderContext* theRenderContext = mMapRenderer -> rendererContext ();
946- if ( theRenderContext )
950+ // cancel current render progress
951+ if ( mMapRenderer )
947952 {
948- theRenderContext->setRenderingStopped ( true );
953+ QgsRenderContext* theRenderContext = mMapRenderer ->rendererContext ();
954+ if ( theRenderContext )
955+ {
956+ theRenderContext->setRenderingStopped ( true );
957+ }
949958 }
959+ return ;
950960 }
951- return ;
952- }
953- isAlreadyIn = true ;
961+ isAlreadyIn = true ;
954962
955- while ( lastSize != QSize ( - 1 , - 1 ) )
956- {
957- int width = lastSize.width ();
958- int height = lastSize.height ();
959- lastSize = QSize ( - 1 , - 1 );
963+ while ( lastSize. isValid ( ) )
964+ {
965+ int width = lastSize.width ();
966+ int height = lastSize.height ();
967+ lastSize = QSize ();
960968
961- // set map size before scene size helps keep scene indexes updated properly
962- // this was the cause of rubberband artifacts
963- mMap ->resize ( QSize ( width, height ) );
964- mScene ->setSceneRect ( QRectF ( 0 , 0 , width, height ) );
969+ // set map size before scene size helps keep scene indexes updated properly
970+ // this was the cause of rubberband artifacts
971+ mMap ->resize ( QSize ( width, height ) );
972+ mScene ->setSceneRect ( QRectF ( 0 , 0 , width, height ) );
965973
966- // notify canvas items of change
967- updateCanvasItemPositions ();
974+ // notify canvas items of change
975+ updateCanvasItemPositions ();
968976
969- updateScale ();
970- #if QT_VERSION >= 0x40600
971- // FIXME: temporary workaround for #2714
972- QTimer::singleShot ( 1 , this , SLOT ( refresh () ) );
973- #else
974- refresh ();
975- #endif
976- emit extentsChanged ();
977- }
977+ updateScale ();
978+
979+ refresh ();
980+
981+ emit extentsChanged ();
982+ }
978983 isAlreadyIn = false ;
979- } // resizeEvent
984+ }
980985
986+ QGraphicsView::paintEvent ( e );
987+ } // paintEvent
981988
982989void QgsMapCanvas::updateCanvasItemPositions ()
983990{
0 commit comments