mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
- Fix #6855, SVG markers/fills larger than half cache (559^2 X 32 + SVG) are drawn with QPicture - Fix #6861, make QPicture SVG symbols scale with Composer page zoom - Fix #6861, make SVG symbol output to print/image more accurate by setting 'size' to double - Update/add support for non-squared SVG via QImage and QPicture, on screen and in output to print/image - Non-squared SVG QImage/QPicture can now be used in pattern fill, without excess space
79 lines
3.4 KiB
Plaintext
79 lines
3.4 KiB
Plaintext
class QgsSvgCacheEntry
|
|
{
|
|
%TypeHeaderCode
|
|
#include <qgssvgcache.h>
|
|
%End
|
|
|
|
public:
|
|
QgsSvgCacheEntry();
|
|
QgsSvgCacheEntry( const QString& file, double size, double outlineWidth, double widthScaleFactor, double rasterScaleFctor, const QColor& fill, const QColor& outline );
|
|
~QgsSvgCacheEntry();
|
|
|
|
QString file;
|
|
int size; //size in pixel
|
|
double outlineWidth;
|
|
double widthScaleFactor;
|
|
double rasterScaleFactor;
|
|
QColor fill;
|
|
QColor outline;
|
|
QImage* image;
|
|
QPicture* picture;
|
|
//content (with params replaced)
|
|
QByteArray svgContent;
|
|
|
|
//keep entries on a least, sorted by last access
|
|
QgsSvgCacheEntry* nextEntry;
|
|
QgsSvgCacheEntry* previousEntry;
|
|
|
|
/**Don't consider image, picture, last used timestamp for comparison*/
|
|
bool operator==( const QgsSvgCacheEntry& other ) const;
|
|
/**Return memory usage in bytes*/
|
|
int dataSize() const;
|
|
};
|
|
|
|
/**A cache for images / pictures derived from svg files. This class supports parameter replacement in svg files
|
|
according to the svg params specification (http://www.w3.org/TR/2009/WD-SVGParamPrimer-20090616/). Supported are
|
|
the parameters 'fill-color', 'pen-color', 'outline-width', 'stroke-width'. E.g. <circle fill="param(fill-color red)" stroke="param(pen-color black)" stroke-width="param(outline-width 1)"*/
|
|
class QgsSvgCache : QObject
|
|
{
|
|
%TypeHeaderCode
|
|
#include <qgssvgcache.h>
|
|
%End
|
|
|
|
public:
|
|
|
|
static QgsSvgCache* instance();
|
|
~QgsSvgCache();
|
|
|
|
const QImage& svgAsImage( const QString& file, int size, const QColor& fill, const QColor& outline, double outlineWidth,
|
|
double widthScaleFactor, double rasterScaleFactor, bool& fitsInCache );
|
|
const QPicture& svgAsPicture( const QString& file, int size, const QColor& fill, const QColor& outline, double outlineWidth,
|
|
double widthScaleFactor, double rasterScaleFactor );
|
|
|
|
/**Tests if an svg file contains parameters for fill, outline color, outline width. If yes, possible default values are returned. If there are several
|
|
default values in the svg file, only the first one is considered*/
|
|
void containsParams( const QString& path, bool& hasFillParam, QColor& defaultFillColor, bool& hasOutlineParam, QColor& defaultOutlineColor, bool& hasOutlineWidthParam,
|
|
double& defaultOutlineWidth ) const;
|
|
|
|
protected:
|
|
//! protected constructor
|
|
QgsSvgCache( QObject* parent = 0 );
|
|
|
|
/**Creates new cache entry and returns pointer to it*/
|
|
QgsSvgCacheEntry* insertSVG( const QString& file, int size, const QColor& fill, const QColor& outline, double outlineWidth,
|
|
double widthScaleFactor, double rasterScaleFactor );
|
|
|
|
void replaceParamsAndCacheSvg( QgsSvgCacheEntry* entry );
|
|
void cacheImage( QgsSvgCacheEntry* entry );
|
|
void cachePicture( QgsSvgCacheEntry* entry );
|
|
/**Returns entry from cache or creates a new entry if it does not exist already*/
|
|
QgsSvgCacheEntry* cacheEntry( const QString& file, int size, const QColor& fill, const QColor& outline, double outlineWidth,
|
|
double widthScaleFactor, double rasterScaleFactor );
|
|
|
|
/**Removes the least used items until the maximum size is under the limit*/
|
|
void trimToMaximumSize();
|
|
|
|
//Removes entry from the ordered list (but does not delete the entry itself)
|
|
void takeEntryFromList( QgsSvgCacheEntry* entry );
|
|
};
|