diff --git a/python/core/qgsrenderer.sip b/python/core/qgsrenderer.sip index b16b4c422e6..4e7cab32b80 100644 --- a/python/core/qgsrenderer.sip +++ b/python/core/qgsrenderer.sip @@ -38,6 +38,9 @@ class QgsRenderer /Abstract/ static void setSelectionColor(QColor color); /**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/ virtual bool containsPixmap() const; + /**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification. + This is a hint for QgsVectorLayer to not use the transparency setting on layer level in this cases*/ + virtual bool usesTransparency() const; }; diff --git a/src/core/qgsvectorlayer.cpp b/src/core/qgsvectorlayer.cpp index f80ca8c5ddf..ccb7ac623e2 100644 --- a/src/core/qgsvectorlayer.cpp +++ b/src/core/qgsvectorlayer.cpp @@ -407,7 +407,12 @@ unsigned char* QgsVectorLayer::drawLineString(unsigned char* feature, // QPen myTransparentPen = p->pen(); // store current pen QColor myColor = myTransparentPen.color(); - myColor.setAlpha(mTransparencyLevel); + //only set transparency from layer level if renderer does not provide + //transparency on class level + if(!mRenderer->usesTransparency()) + { + myColor.setAlpha(mTransparencyLevel); + } myTransparentPen.setColor(myColor); p->setPen(myTransparentPen); p->drawPolyline(pa); @@ -631,11 +636,23 @@ std::cerr << i << ": " << ring->first[i] // QBrush myTransparentBrush = p->brush(); QColor myColor = brush.color(); - myColor.setAlpha(mTransparencyLevel); + + //only set transparency from layer level if renderer does not provide + //transparency on class level + if(!mRenderer->usesTransparency()) + { + myColor.setAlpha(mTransparencyLevel); + } myTransparentBrush.setColor(myColor); QPen myTransparentPen = p->pen(); // store current pen myColor = myTransparentPen.color(); - myColor.setAlpha(mTransparencyLevel); + + //only set transparency from layer level if renderer does not provide + //transparency on class level + if(!mRenderer->usesTransparency()) + { + myColor.setAlpha(mTransparencyLevel); + } myTransparentPen.setColor(myColor); p->setBrush(myTransparentBrush); diff --git a/src/core/renderer/qgsrenderer.h b/src/core/renderer/qgsrenderer.h index c3f09105e7b..aaab10df761 100644 --- a/src/core/renderer/qgsrenderer.h +++ b/src/core/renderer/qgsrenderer.h @@ -73,6 +73,9 @@ class CORE_EXPORT QgsRenderer static void setSelectionColor(QColor color); /**Returns true if this renderer returns a pixmap in the render method (e.g. for point data or diagrams)*/ virtual bool containsPixmap() const; + /**Returns true if this renderer uses its own transparency settings, e.g. differentiated by classification. + This is a hint for QgsVectorLayer to not use the transparency setting on layer level in this cases*/ + virtual bool usesTransparency() const {return false;} protected: /**Color to draw selected features - static so we can change it in proj props and automatically