QGIS API Documentation  3.14.0-Pi (9f7028fd23)
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 
26 class QDomElement;
27 
28 #ifndef SIP_RUN
29 
31 
36 class CORE_EXPORT QgsSvgCacheEntry : public QgsAbstractContentCacheEntry
37 {
38  public:
39 
50  QgsSvgCacheEntry( const QString &path, double size, double strokeWidth, double widthScaleFactor, const QColor &fill, const QColor &stroke,
51  double fixedAspectRatio = 0 ) ;
52 
54  QgsSvgCacheEntry( const QgsSvgCacheEntry &rh ) = delete;
56  QgsSvgCacheEntry &operator=( const QgsSvgCacheEntry &rh ) = delete;
57 
58  double size = 0.0; //size in pixels (cast to int for QImage)
59  double strokeWidth = 0;
60  double widthScaleFactor = 1.0;
61 
63  double fixedAspectRatio = 0;
64 
69  QSizeF viewboxSize;
70 
71  QColor fill = Qt::black;
72  QColor stroke = Qt::black;
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 
103 #ifdef SIP_RUN
104 class CORE_EXPORT QgsSvgCache : public QgsAbstractContentCacheBase // for sip we skip to the base class and avoid the template difficulty
105 {
106 #else
107 class CORE_EXPORT QgsSvgCache : public QgsAbstractContentCache< QgsSvgCacheEntry >
108 {
109 #endif
110  Q_OBJECT
111 
112  public:
113 
117  QgsSvgCache( QObject *parent SIP_TRANSFERTHIS = nullptr );
118 
133  QImage svgAsImage( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
134  double widthScaleFactor, bool &fitsInCache, double fixedAspectRatio = 0, bool blocking = false );
135 
150  QPicture svgAsPicture( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
151  double widthScaleFactor, bool forceVectorOutput = false, double fixedAspectRatio = 0, bool blocking = false );
152 
168  QSizeF svgViewboxSize( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
169  double widthScaleFactor, double fixedAspectRatio = 0, bool blocking = false );
170 
176  void containsParams( const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam,
177  double &defaultStrokeWidth, bool blocking = false ) const;
178 
204  void containsParams( const QString &path, bool &hasFillParam, bool &hasDefaultFillParam, QColor &defaultFillColor,
205  bool &hasFillOpacityParam, bool &hasDefaultFillOpacity, double &defaultFillOpacity,
206  bool &hasStrokeParam, bool &hasDefaultStrokeColor, QColor &defaultStrokeColor,
207  bool &hasStrokeWidthParam, bool &hasDefaultStrokeWidth, double &defaultStrokeWidth,
208  bool &hasStrokeOpacityParam, bool &hasDefaultStrokeOpacity, double &defaultStrokeOpacity,
209  bool blocking = false ) const SIP_PYNAME( containsParamsV3 );
210 
224  QByteArray getImageData( const QString &path, bool blocking = false ) const;
225 
227 
242 #ifndef SIP_RUN
243  QByteArray svgContent( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
244  double widthScaleFactor, double fixedAspectRatio = 0, bool blocking = false, bool *isMissingImage = nullptr );
245 #else
246  QByteArray svgContent( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
247  double widthScaleFactor, double fixedAspectRatio = 0, bool blocking = false );
248 #endif
249 
250  signals:
251 
256  Q_DECL_DEPRECATED void statusChanged( const QString &statusQString ) SIP_DEPRECATED;
257 
262  void remoteSvgFetched( const QString &url );
263 
264  protected:
265 
266  bool checkReply( QNetworkReply *reply, const QString &path ) const override;
267 
268  private:
269 
270  void replaceParamsAndCacheSvg( QgsSvgCacheEntry *entry, bool blocking = false );
271  void cacheImage( QgsSvgCacheEntry *entry );
272  void cachePicture( QgsSvgCacheEntry *entry, bool forceVectorOutput = false );
274  QgsSvgCacheEntry *cacheEntry( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
275  double widthScaleFactor, double fixedAspectRatio = 0, bool blocking = false, bool *isMissingImage = nullptr );
276 
278  void replaceElemParams( QDomElement &elem, const QColor &fill, const QColor &stroke, double strokeWidth );
279 
280  void containsElemParams( const QDomElement &elem,
281  bool &hasFillParam, bool &hasDefaultFill, QColor &defaultFill,
282  bool &hasFillOpacityParam, bool &hasDefaultFillOpacity, double &defaultFillOpacity,
283  bool &hasStrokeParam, bool &hasDefaultStroke, QColor &defaultStroke,
284  bool &hasStrokeWidthParam, bool &hasDefaultStrokeWidth, double &defaultStrokeWidth,
285  bool &hasStrokeOpacityParam, bool &hasDefaultStrokeOpacity, double &defaultStrokeOpacity ) const SIP_PYNAME( containsParamsV3 );
286 
288  double calcSizeScaleFactor( QgsSvgCacheEntry *entry, const QDomElement &docElem, QSizeF &viewboxSize ) const;
289 
294  QSize sizeForImage( const QgsSvgCacheEntry &entry, QSizeF &viewBoxSize, QSizeF &scaledSize ) const;
295 
299  QImage imageFromCachedPicture( const QgsSvgCacheEntry &entry ) const;
300 
302  QByteArray mMissingSvg;
303 
304  QByteArray mFetchingSvg;
305 
306  friend class TestQgsSvgCache;
307 };
308 
309 #endif // QGSSVGCACHE_H
SIP_PYNAME
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
qgis.h
QgsAbstractContentCacheEntry::isEqual
virtual bool isEqual(const QgsAbstractContentCacheEntry *other) const =0
Tests whether this entry matches another entry.
QgsAbstractContentCacheEntry::dump
virtual void dump() const =0
Dumps debugging strings containing the item's properties.
SIP_DEPRECATED
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
QgsSvgCache
Definition: qgssvgcache.h:107
QgsAbstractContentCacheEntry::dataSize
virtual int dataSize() const =0
Returns the memory usage in bytes for the entry.
QgsAbstractContentCacheBase::checkReply
virtual bool checkReply(QNetworkReply *reply, const QString &path) const
Runs additional checks on a network reply to ensure that the reply content is consistent with that re...
Definition: qgsabstractcontentcache.h:154
QgsAbstractContentCacheEntry
Definition: qgsabstractcontentcache.h:47
QgsAbstractContentCacheEntry::operator=
QgsAbstractContentCacheEntry & operator=(const QgsAbstractContentCacheEntry &rh)=delete
QgsAbstractContentCacheEntry cannot be copied.
QgsAbstractContentCacheBase
Definition: qgsabstractcontentcache.h:130
qgsabstractcontentcache.h
SIP_TRANSFERTHIS
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
QgsAbstractContentCache
Definition: qgsabstractcontentcache.h:189