diff --git a/src/core/symbology-ng/qgssvgcache.cpp b/src/core/symbology-ng/qgssvgcache.cpp index df8c3c1a4f3..3f3691b3fce 100644 --- a/src/core/symbology-ng/qgssvgcache.cpp +++ b/src/core/symbology-ng/qgssvgcache.cpp @@ -20,6 +20,8 @@ #include "qgslogger.h" #include "qgsnetworkaccessmanager.h" #include "qgsmessagelog.h" +#include "qgssymbollayerv2utils.h" + #include #include #include @@ -165,7 +167,10 @@ const QPicture& QgsSvgCache::svgAsPicture( const QString& file, double size, con QgsSvgCacheEntry* QgsSvgCache::insertSVG( const QString& file, double size, const QColor& fill, const QColor& outline, double outlineWidth, double widthScaleFactor, double rasterScaleFactor ) { - QgsSvgCacheEntry* entry = new QgsSvgCacheEntry( file, size, outlineWidth, widthScaleFactor, rasterScaleFactor, fill, outline ); + // The file may be relative path (e.g. if path is data defined) + QString path = QgsSymbolLayerV2Utils::symbolNameToPath( file ); + + QgsSvgCacheEntry* entry = new QgsSvgCacheEntry( path, size, outlineWidth, widthScaleFactor, rasterScaleFactor, fill, outline ); replaceParamsAndCacheSvg( entry ); diff --git a/src/core/symbology-ng/qgssvgcache.h b/src/core/symbology-ng/qgssvgcache.h index 43dd07ef9e6..cc890ae5e9c 100644 --- a/src/core/symbology-ng/qgssvgcache.h +++ b/src/core/symbology-ng/qgssvgcache.h @@ -32,6 +32,9 @@ class CORE_EXPORT QgsSvgCacheEntry { public: QgsSvgCacheEntry(); + /** Constructor. + * @param file Absolute path to SVG file (relative paths are not resolved). + */ QgsSvgCacheEntry( const QString& file, double size, double outlineWidth, double widthScaleFactor, double rasterScaleFctor, const QColor& fill, const QColor& outline ); ~QgsSvgCacheEntry(); @@ -69,8 +72,14 @@ class CORE_EXPORT QgsSvgCache : public QObject static QgsSvgCache* instance(); ~QgsSvgCache(); + /** Get SVG as QImage. + * @param file Absolute or relative path to SVG file. + */ const QImage& svgAsImage( const QString& file, double size, const QColor& fill, const QColor& outline, double outlineWidth, double widthScaleFactor, double rasterScaleFactor, bool& fitsInCache ); + /** Get SVG as QPicture&. + * @param file Absolute or relative path to SVG file. + */ const QPicture& svgAsPicture( const QString& file, double size, const QColor& fill, const QColor& outline, double outlineWidth, double widthScaleFactor, double rasterScaleFactor, bool forceVectorOutput = false ); @@ -90,7 +99,10 @@ class CORE_EXPORT QgsSvgCache : public QObject //! protected constructor QgsSvgCache( QObject * parent = 0 ); - /**Creates new cache entry and returns pointer to it*/ + /**Creates new cache entry and returns pointer to it + * @param file Absolute or relative path to SVG file. If the path is relative the file is searched by QgsSymbolLayerV2Utils::symbolNameToPath() in SVG paths. + in settings svg/searchPathsForSVG + */ QgsSvgCacheEntry* insertSVG( const QString& file, double size, const QColor& fill, const QColor& outline, double outlineWidth, double widthScaleFactor, double rasterScaleFactor ); diff --git a/src/core/symbology-ng/qgssymbollayerv2utils.h b/src/core/symbology-ng/qgssymbollayerv2utils.h index 8403396e40f..f64852b2f13 100644 --- a/src/core/symbology-ng/qgssymbollayerv2utils.h +++ b/src/core/symbology-ng/qgssymbollayerv2utils.h @@ -249,7 +249,10 @@ class CORE_EXPORT QgsSymbolLayerV2Utils //! Return a list of svg files at the specified directory static QStringList listSvgFilesAt( QString directory ); - //! Get symbol's path from its name + /** Get symbol's path from its name. + * If the name is not absolute path the file is searched in SVG paths specified + * in settings svg/searchPathsForSVG. + */ static QString symbolNameToPath( QString name ); //! Get symbols's name from its path