QGIS API Documentation 3.39.0-Master (3aed037ce22)
Loading...
Searching...
No Matches
qgssvgcache.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssvgcache.h
3 ------------------------------
4 begin : 2011
5 copyright : (C) 2011 by Marco Hugentobler
6 email : marco dot hugentobler at sourcepole dot ch
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSSVGCACHE_H
19#define QGSSVGCACHE_H
20
22#include "qgis.h"
23
24#include <QPicture>
25
26class QDomElement;
27
28#ifndef SIP_RUN
29
31
36class CORE_EXPORT QgsSvgCacheEntry : public QgsAbstractContentCacheEntry
37{
38 public:
39
51 QgsSvgCacheEntry( const QString &path, double size, double strokeWidth, double widthScaleFactor, const QColor &fill, const QColor &stroke,
52 double fixedAspectRatio = 0, const QMap<QString, QString> &parameters = QMap<QString, QString>() ) ;
53
54 QgsSvgCacheEntry( const QgsSvgCacheEntry &rh ) = delete;
55 QgsSvgCacheEntry &operator=( const QgsSvgCacheEntry &rh ) = delete;
56
57 double size = 0.0; //size in pixels (cast to int for QImage)
58 double strokeWidth = 0;
59 double widthScaleFactor = 1.0;
60
62 double fixedAspectRatio = 0;
63
67 QSizeF viewboxSize;
68
69 QColor fill = Qt::black;
70 QColor stroke = Qt::black;
71 QMap<QString, QString> parameters;
72
73 std::unique_ptr< QImage > image;
74 std::unique_ptr< QPicture > picture;
75 //content (with params replaced)
76 QByteArray svgContent;
77
83 bool isMissingImage = false;
84
85 bool isEqual( const QgsAbstractContentCacheEntry *other ) const override;
86 int dataSize() const override;
87 void dump() const override;
88
89};
90
92#endif
93
115#ifdef SIP_RUN
116class CORE_EXPORT QgsSvgCache : public QgsAbstractContentCacheBase // for sip we skip to the base class and avoid the template difficulty
117{
118#else
119class CORE_EXPORT QgsSvgCache : public QgsAbstractContentCache< QgsSvgCacheEntry >
120{
121#endif
122 Q_OBJECT
123
124 public:
125
129 QgsSvgCache( QObject *parent SIP_TRANSFERTHIS = nullptr );
130
148 QImage svgAsImage( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
149 double widthScaleFactor, bool &fitsInCache, double fixedAspectRatio = 0, bool blocking = false,
150 const QMap<QString, QString> &parameters = QMap<QString, QString>() );
151
174 QPicture svgAsPicture( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
175 double widthScaleFactor, bool forceVectorOutput = false, double fixedAspectRatio = 0, bool blocking = false,
176 const QMap<QString, QString> &parameters = QMap<QString, QString>() );
177
195 QSizeF svgViewboxSize( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
196 double widthScaleFactor, double fixedAspectRatio = 0, bool blocking = false, const QMap<QString, QString> &parameters = QMap<QString, QString>() );
197
204 void containsParams( const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam,
205 double &defaultStrokeWidth, bool blocking = false ) const;
206
234 void containsParams( const QString &path, bool &hasFillParam, bool &hasDefaultFillParam, QColor &defaultFillColor,
235 bool &hasFillOpacityParam, bool &hasDefaultFillOpacity, double &defaultFillOpacity,
236 bool &hasStrokeParam, bool &hasDefaultStrokeColor, QColor &defaultStrokeColor,
237 bool &hasStrokeWidthParam, bool &hasDefaultStrokeWidth, double &defaultStrokeWidth,
238 bool &hasStrokeOpacityParam, bool &hasDefaultStrokeOpacity, double &defaultStrokeOpacity,
239 bool blocking = false ) const SIP_PYNAME( containsParamsV3 );
240
255 QByteArray getImageData( const QString &path, bool blocking = false ) const;
256
272#ifndef SIP_RUN
273 QByteArray svgContent( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
274 double widthScaleFactor, double fixedAspectRatio = 0, bool blocking = false, const QMap<QString, QString> &parameters = QMap<QString, QString>(), bool *isMissingImage = nullptr );
275#else
276 QByteArray svgContent( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
277 double widthScaleFactor, double fixedAspectRatio = 0, bool blocking = false, const QMap<QString, QString> &parameters = QMap<QString, QString>() );
278#endif
279
280 signals:
281
286 Q_DECL_DEPRECATED void statusChanged( const QString &statusQString ) SIP_DEPRECATED;
287
292 void remoteSvgFetched( const QString &url );
293
294 protected:
295
296 bool checkReply( QNetworkReply *reply, const QString &path ) const override;
297
298 private:
299
300 void replaceParamsAndCacheSvg( QgsSvgCacheEntry *entry, bool blocking = false );
301 void cacheImage( QgsSvgCacheEntry *entry );
302 void cachePicture( QgsSvgCacheEntry *entry, bool forceVectorOutput = false );
304 QgsSvgCacheEntry *cacheEntry( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
305 double widthScaleFactor, double fixedAspectRatio = 0, const QMap<QString, QString> &parameters = QMap<QString, QString>(), bool blocking = false, bool *isMissingImage = nullptr );
306
308 void replaceElemParams( QDomElement &elem, const QColor &fill, const QColor &stroke, double strokeWidth, const QMap<QString, QString> &parameters );
309
310 void containsElemParams( const QDomElement &elem,
311 bool &hasFillParam, bool &hasDefaultFill, QColor &defaultFill,
312 bool &hasFillOpacityParam, bool &hasDefaultFillOpacity, double &defaultFillOpacity,
313 bool &hasStrokeParam, bool &hasDefaultStroke, QColor &defaultStroke,
314 bool &hasStrokeWidthParam, bool &hasDefaultStrokeWidth, double &defaultStrokeWidth,
315 bool &hasStrokeOpacityParam, bool &hasDefaultStrokeOpacity, double &defaultStrokeOpacity ) const SIP_PYNAME( containsParamsV3 );
316
318 double calcSizeScaleFactor( QgsSvgCacheEntry *entry, const QDomElement &docElem, QSizeF &viewboxSize ) const;
319
324 QSize sizeForImage( const QgsSvgCacheEntry &entry, QSizeF &viewBoxSize, QSizeF &scaledSize ) const;
325
329 QImage imageFromCachedPicture( const QgsSvgCacheEntry &entry ) const;
330
332 QByteArray mMissingSvg;
333
334 QByteArray mFetchingSvg;
335
336 friend class TestQgsSvgCache;
337};
338
339#endif // QGSSVGCACHE_H
A QObject derived base class for QgsAbstractContentCache.
Base class for entries in a QgsAbstractContentCache.
virtual int dataSize() const =0
Returns the memory usage in bytes for the entry.
virtual void dump() const =0
Dumps debugging strings containing the item's properties.
QgsAbstractContentCacheEntry & operator=(const QgsAbstractContentCacheEntry &rh)=delete
virtual bool isEqual(const QgsAbstractContentCacheEntry *other) const =0
Tests whether this entry matches another entry.
Abstract base class for file content caches, such as SVG or raster image caches.
A cache for images / pictures derived from SVG files.
Q_DECL_DEPRECATED void statusChanged(const QString &statusQString)
Emit a signal to be caught by qgisapp and display a msg on status bar.
void remoteSvgFetched(const QString &url)
Emitted when the cache has finished retrieving an SVG file from a remote url.
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_PYNAME(name)
Definition qgis_sip.h:81