@@ -476,7 +476,7 @@ unsigned char *QgsVectorLayer::drawLineString( unsigned char *feature, QgsRender
476
476
std::vector<double >::const_iterator yIt;
477
477
for ( xIt = x.begin (), yIt = y.begin (); xIt != x.end (); ++xIt, ++yIt )
478
478
{
479
- drawVertexMarker (( int )( *xIt ), ( int )( *yIt ) , *p, mCurrentVertexMarkerType , mCurrentVertexMarkerSize );
479
+ drawVertexMarker ( *xIt, *yIt, *p, mCurrentVertexMarkerType , mCurrentVertexMarkerSize );
480
480
}
481
481
}
482
482
@@ -669,7 +669,7 @@ unsigned char *QgsVectorLayer::drawPolygon( unsigned char *feature, QgsRenderCon
669
669
for ( int i = 0 ; i < path.elementCount (); ++i )
670
670
{
671
671
const QPainterPath::Element & e = path.elementAt ( i );
672
- drawVertexMarker (( int ) e.x , ( int ) e.y , *p, mCurrentVertexMarkerType , mCurrentVertexMarkerSize );
672
+ drawVertexMarker ( e.x , e.y , *p, mCurrentVertexMarkerType , mCurrentVertexMarkerSize );
673
673
}
674
674
}
675
675
@@ -686,24 +686,33 @@ unsigned char *QgsVectorLayer::drawPolygon( unsigned char *feature, QgsRenderCon
686
686
687
687
void QgsVectorLayer::drawRendererV2 ( QgsRenderContext& rendererContext, bool labeling )
688
688
{
689
+ QSettings settings;
690
+ bool vertexMarkerOnlyForSelection = settings.value ( " /qgis/digitizing/marker_only_for_selected" , false ).toBool ();
691
+
689
692
mRendererV2 ->startRender ( rendererContext, this );
690
693
691
694
QgsSingleSymbolRendererV2* selRenderer = NULL ;
692
695
if ( !mSelectedFeatureIds .isEmpty () )
693
696
{
694
697
selRenderer = new QgsSingleSymbolRendererV2 ( QgsSymbolV2::defaultSymbol ( geometryType () ) );
695
698
selRenderer->symbol ()->setColor ( QgsRenderer::selectionColor () );
699
+ selRenderer->setVertexMarkerAppearance ( currentVertexMarkerType (), currentVertexMarkerSize () );
696
700
selRenderer->startRender ( rendererContext, this );
697
701
}
698
702
699
703
QgsFeature fet;
700
704
while ( nextFeature ( fet ) )
701
705
{
702
- if ( mSelectedFeatureIds .contains ( fet.id () ) )
703
- selRenderer->renderFeature ( fet, rendererContext );
706
+ bool sel = mSelectedFeatureIds .contains ( fet.id () );
707
+ bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) );
708
+
709
+ // render feature
710
+ if ( sel )
711
+ selRenderer->renderFeature ( fet, rendererContext, -1 , drawMarker );
704
712
else
705
- mRendererV2 ->renderFeature ( fet, rendererContext );
713
+ mRendererV2 ->renderFeature ( fet, rendererContext, - 1 , drawMarker );
706
714
715
+ // labeling - register feature
707
716
if ( labeling && mRendererV2 ->symbolForFeature ( fet ) != NULL )
708
717
rendererContext.labelingEngine ()->registerFeature ( this , fet );
709
718
@@ -727,6 +736,9 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
727
736
{
728
737
QHash< QgsSymbolV2*, QList<QgsFeature> > features; // key = symbol, value = array of features
729
738
739
+ QSettings settings;
740
+ bool vertexMarkerOnlyForSelection = settings.value ( " /qgis/digitizing/marker_only_for_selected" , false ).toBool ();
741
+
730
742
// startRender must be called before symbolForFeature() calls to make sure renderer is ready
731
743
mRendererV2 ->startRender ( rendererContext, this );
732
744
@@ -735,6 +747,7 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
735
747
{
736
748
selRenderer = new QgsSingleSymbolRendererV2 ( QgsSymbolV2::defaultSymbol ( geometryType () ) );
737
749
selRenderer->symbol ()->setColor ( QgsRenderer::selectionColor () );
750
+ selRenderer->setVertexMarkerAppearance ( currentVertexMarkerType (), currentVertexMarkerSize () );
738
751
selRenderer->startRender ( rendererContext, this );
739
752
}
740
753
@@ -792,10 +805,14 @@ void QgsVectorLayer::drawRendererV2Levels( QgsRenderContext& rendererContext, bo
792
805
QList<QgsFeature>::iterator fit;
793
806
for ( fit = lst.begin (); fit != lst.end (); ++fit )
794
807
{
795
- if ( mSelectedFeatureIds .contains ( fit->id () ) )
796
- selRenderer->renderFeature ( *fit, rendererContext );
808
+ bool sel = mSelectedFeatureIds .contains ( fit->id () );
809
+ // maybe vertex markers should be drawn only during the last pass...
810
+ bool drawMarker = ( mEditable && ( !vertexMarkerOnlyForSelection || sel ) );
811
+
812
+ if ( sel )
813
+ selRenderer->renderFeature ( *fit, rendererContext, -1 , drawMarker );
797
814
else
798
- mRendererV2 ->renderFeature ( *fit, rendererContext, layer );
815
+ mRendererV2 ->renderFeature ( *fit, rendererContext, layer, drawMarker );
799
816
}
800
817
}
801
818
}
@@ -823,6 +840,9 @@ bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
823
840
// Destroy all cached geometries and clear the references to them
824
841
deleteCachedGeometries ();
825
842
mCachedGeometriesRect = rendererContext.extent ();
843
+
844
+ // set editing vertex markers style
845
+ mRendererV2 ->setVertexMarkerAppearance ( currentVertexMarkerType (), currentVertexMarkerSize () );
826
846
}
827
847
828
848
// TODO: really needed?
@@ -1009,7 +1029,7 @@ void QgsVectorLayer::deleteCachedGeometries()
1009
1029
mCachedGeometriesRect = QgsRectangle ();
1010
1030
}
1011
1031
1012
- void QgsVectorLayer::drawVertexMarker ( int x, int y, QPainter& p, QgsVectorLayer::VertexMarkerType type, int m )
1032
+ void QgsVectorLayer::drawVertexMarker ( double x, double y, QPainter& p, QgsVectorLayer::VertexMarkerType type, int m )
1013
1033
{
1014
1034
if ( type == QgsVectorLayer::SemiTransparentCircle )
1015
1035
{
0 commit comments