renderer_v2_incremental.diff

Jeremy Palmer, 2010-02-21 05:38 PM

Download (5.23 KB)

View differences:

src/core/qgsvectorlayer.cpp (working copy)
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 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 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 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 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 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 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 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
}
src/core/qgsvectorlayer.h (working copy)
44 44
class QgsUndoCommand;
45 45
class QgsVectorDataProvider;
46 46
class QgsVectorOverlay;
47
class QgsSingleSymbolRendererV2;
47 48

  
48 49
class QgsRectangle;
49 50

  
......
660 661
    /** Record changed attribute, store in active command (if any) */
661 662
    void editAttributeChange( int featureId, int field, QVariant value );
662 663

  
664
    /** Stop version 2 renderer and selected renderer (if required) */
665
    void stopRendererV2( QgsRenderContext& rendererContext, QgsSingleSymbolRendererV2* selRenderer );
663 666

  
664 667
  private:                       // Private attributes
665 668