Support SVG relative paths in SVG cache to enable relative data defined paths. Fixes #8883

This commit is contained in:
Radim Blazek 2014-01-26 11:17:23 +01:00
parent 667e0671be
commit 55727f755a
3 changed files with 23 additions and 3 deletions

View File

@ -20,6 +20,8 @@
#include "qgslogger.h"
#include "qgsnetworkaccessmanager.h"
#include "qgsmessagelog.h"
#include "qgssymbollayerv2utils.h"
#include <QApplication>
#include <QCoreApplication>
#include <QCursor>
@ -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 );

View File

@ -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 );

View File

@ -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