@@ -718,11 +718,35 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
718
718
selRenderer->startRender ( rendererContext, this );
719
719
}
720
720
721
+ #ifndef Q_WS_MAC
722
+ int totalFeatures = pendingFeatureCount ();
723
+ int featureCount = 0 ;
724
+ #endif // Q_WS_MAC
725
+
721
726
QgsFeature fet;
722
727
while ( nextFeature ( fet ) )
723
728
{
724
729
try
725
730
{
731
+ if ( rendererContext.renderingStopped () )
732
+ {
733
+ break ;
734
+ }
735
+
736
+ #ifndef Q_WS_MAC // MH: disable this on Mac for now to avoid problems with resizing
737
+ if ( mUpdateThreshold > 0 && 0 == featureCount % mUpdateThreshold )
738
+ {
739
+ emit screenUpdateRequested ();
740
+ emit drawingProgress ( featureCount, totalFeatures );
741
+ qApp->processEvents ();
742
+ }
743
+ else if ( featureCount % 1000 == 0 )
744
+ {
745
+ emit drawingProgress ( featureCount, totalFeatures );
746
+ qApp->processEvents ();
747
+ }
748
+ #endif // Q_WS_MAC
749
+
726
750
bool sel = mSelectedFeatureIds .contains ( fet.id () );
727
751
bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) );
728
752
@@ -749,15 +773,12 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
749
773
msg += cse.what ();
750
774
QgsLogger::warning ( msg );
751
775
}
776
+ #ifndef Q_WS_MAC
777
+ ++featureCount;
778
+ #endif // Q_WS_MAC
752
779
}
753
780
754
- mRendererV2 ->stopRender ( rendererContext );
755
-
756
- if ( selRenderer )
757
- {
758
- selRenderer->stopRender ( rendererContext );
759
- delete selRenderer;
760
- }
781
+ stopRendererV2 ( rendererContext, selRenderer );
761
782
}
762
783
763
784
void QgsVectorLayer::drawRendererV2Levels ( QgsRenderContext& rendererContext, bool labeling )
@@ -781,8 +802,22 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
781
802
782
803
// 1. fetch features
783
804
QgsFeature fet;
805
+ #ifndef Q_WS_MAC
806
+ int featureCount = 0 ;
807
+ #endif // Q_WS_MAC
784
808
while ( nextFeature ( fet ) )
785
809
{
810
+ if ( rendererContext.renderingStopped () )
811
+ {
812
+ stopRendererV2 ( rendererContext, selRenderer );
813
+ return ;
814
+ }
815
+ #ifndef Q_WS_MAC
816
+ if ( featureCount % 1000 == 0 )
817
+ {
818
+ qApp->processEvents ();
819
+ }
820
+ #endif // Q_WS_MAC
786
821
QgsSymbolV2* sym = mRendererV2 ->symbolForFeature ( fet );
787
822
if ( !features.contains ( sym ) )
788
823
{
@@ -798,6 +833,9 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
798
833
// Cache this for the use of (e.g.) modifying the feature's uncommitted geometry.
799
834
mCachedGeometries [fet.id ()] = *fet.geometry ();
800
835
}
836
+ #ifndef Q_WS_MAC
837
+ ++featureCount;
838
+ #endif // Q_WS_MAC
801
839
}
802
840
803
841
// find out the order
@@ -831,8 +869,22 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
831
869
int layer = item.layer ();
832
870
QList<QgsFeature>& lst = features[item.symbol ()];
833
871
QList<QgsFeature>::iterator fit;
872
+ #ifndef Q_WS_MAC
873
+ featureCount = 0 ;
874
+ #endif // Q_WS_MAC
834
875
for ( fit = lst.begin (); fit != lst.end (); ++fit )
835
876
{
877
+ if ( rendererContext.renderingStopped () )
878
+ {
879
+ stopRendererV2 ( rendererContext, selRenderer );
880
+ return ;
881
+ }
882
+ #ifndef Q_WS_MAC
883
+ if ( featureCount % 1000 == 0 )
884
+ {
885
+ qApp->processEvents ();
886
+ }
887
+ #endif // Q_WS_MAC
836
888
bool sel = mSelectedFeatureIds .contains ( fit->id () );
837
889
// maybe vertex markers should be drawn only during the last pass...
838
890
bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) );
@@ -851,21 +903,22 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
851
903
msg += cse.what ();
852
904
QgsLogger::warning ( msg );
853
905
}
906
+ #ifndef Q_WS_MAC
907
+ ++featureCount;
908
+ #endif // Q_WS_MAC
854
909
}
855
910
}
856
911
}
857
912
858
- mRendererV2 ->stopRender ( rendererContext );
859
-
860
- if ( selRenderer )
861
- {
862
- selRenderer->stopRender ( rendererContext );
863
- delete selRenderer;
864
- }
913
+ stopRendererV2 ( rendererContext, selRenderer );
865
914
}
866
915
867
916
bool QgsVectorLayer::draw ( QgsRenderContext& rendererContext )
868
917
{
918
+ // set update threshold before each draw to make sure the current setting is picked up
919
+ QSettings settings;
920
+ mUpdateThreshold = settings.value ( " Map/updateThreshold" , 0 ).toInt ();
921
+
869
922
if ( mUsingRendererV2 )
870
923
{
871
924
if ( mRendererV2 == NULL )
@@ -916,9 +969,6 @@ bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
916
969
return TRUE ;
917
970
}
918
971
919
- // set update threshold before each draw to make sure the current setting is picked up
920
- QSettings settings;
921
- mUpdateThreshold = settings.value ( " Map/updateThreshold" , 0 ).toInt ();
922
972
// draw ( p, viewExtent, theMapToPixelTransform, ct, drawingToEditingCanvas, 1., 1.);
923
973
924
974
if ( mRenderer )
@@ -4540,3 +4590,13 @@ int QgsVectorLayer::fieldNameIndex( const QString& fieldName ) const
4540
4590
}
4541
4591
return -1 ;
4542
4592
}
4593
+
4594
+ void QgsVectorLayer::stopRendererV2 ( QgsRenderContext& rendererContext, QgsSingleSymbolRendererV2* selRenderer )
4595
+ {
4596
+ mRendererV2 ->stopRender ( rendererContext );
4597
+ if ( selRenderer )
4598
+ {
4599
+ selRenderer->stopRender ( rendererContext );
4600
+ delete selRenderer;
4601
+ }
4602
+ }
0 commit comments