mirror of
https://github.com/qgis/QGIS.git
synced 2025-11-27 00:07:16 -05:00
Previously QgsSvgCache would often try to fetch remote images using a network request on the main thread, by calling processEvents repeatedly until the request was complete. This caused lots of bugs, since the main thread processEvents would proceed with all kinds of stuff assuming that the svg fetch operation was complete, leading to frequent crashes and deadlocks and making remote svg use impossible (it's likely that the SVG cache remote fetching code was written in the pre-multi-threaded rendering era). There's no way to fix this with async svg fetching - we HAVE to remove the processEvents call, and a QEventLoop won't help either (since the method may be called on the main thread). Accordingly the only solution is to fetch the requested svg in the background, and return a temporary "downloading" svg for use in the meantime. We use a QgsNetworkContentFetcherTask to do this, so it's nicely integrated with task manager. A request task is fired up when a remote svg is requested for the first time, with the temporary downloading svg returned for use by the caller asynchronously. QgsSvgCache then emits the remoteSvgFetched signal when a previously requested remote SVG has been successfully fetched, triggering a map canvas redraw with the correct SVG graphic. Fixes #18504
159 lines
6.7 KiB
Plaintext
159 lines
6.7 KiB
Plaintext
/************************************************************************
|
|
* This file has been generated automatically from *
|
|
* *
|
|
* src/core/symbology/qgssvgcache.h *
|
|
* *
|
|
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QgsSvgCache : QObject
|
|
{
|
|
%Docstring
|
|
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)"
|
|
|
|
QgsSvgCache is not usually directly created, but rather accessed through
|
|
:py:func:`QgsApplication.svgCache()`
|
|
%End
|
|
|
|
%TypeHeaderCode
|
|
#include "qgssvgcache.h"
|
|
%End
|
|
public:
|
|
|
|
QgsSvgCache( QObject *parent /TransferThis/ = 0 );
|
|
%Docstring
|
|
Constructor for QgsSvgCache.
|
|
%End
|
|
|
|
~QgsSvgCache();
|
|
|
|
QImage svgAsImage( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
|
|
double widthScaleFactor, bool &fitsInCache, double fixedAspectRatio = 0 );
|
|
%Docstring
|
|
Get SVG as QImage.
|
|
|
|
:param path: Absolute path to SVG file.
|
|
:param size: size of cached image
|
|
:param fill: color of fill
|
|
:param stroke: color of stroke
|
|
:param strokeWidth: width of stroke
|
|
:param widthScaleFactor: width scale factor
|
|
:param fitsInCache:
|
|
:param fixedAspectRatio: fixed aspect ratio (optional)
|
|
%End
|
|
|
|
QPicture svgAsPicture( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
|
|
double widthScaleFactor, bool forceVectorOutput = false, double fixedAspectRatio = 0 );
|
|
%Docstring
|
|
Get SVG as QPicture&.
|
|
|
|
:param path: Absolute path to SVG file.
|
|
:param size: size of cached image
|
|
:param fill: color of fill
|
|
:param stroke: color of stroke
|
|
:param strokeWidth: width of stroke
|
|
:param widthScaleFactor: width scale factor
|
|
:param forceVectorOutput:
|
|
:param fixedAspectRatio: fixed aspect ratio (optional)
|
|
%End
|
|
|
|
QSizeF svgViewboxSize( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
|
|
double widthScaleFactor, double fixedAspectRatio = 0 );
|
|
%Docstring
|
|
Calculates the viewbox size of a (possibly cached) SVG file.
|
|
|
|
:param path: Absolute path to SVG file.
|
|
:param size: size of cached image
|
|
:param fill: color of fill
|
|
:param stroke: color of stroke
|
|
:param strokeWidth: width of stroke
|
|
:param widthScaleFactor: width scale factor
|
|
:param fixedAspectRatio: fixed aspect ratio (optional)
|
|
|
|
:return: viewbox size set in SVG file
|
|
|
|
.. versionadded:: 2.14
|
|
%End
|
|
|
|
void containsParams( const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam,
|
|
double &defaultStrokeWidth ) const;
|
|
%Docstring
|
|
Tests if an svg file contains parameters for fill, stroke color, stroke width. If yes, possible default values are returned. If there are several
|
|
default values in the svg file, only the first one is considered*
|
|
%End
|
|
|
|
void containsParams( const QString &path, bool &hasFillParam, bool &hasDefaultFillParam, QColor &defaultFillColor,
|
|
bool &hasFillOpacityParam, bool &hasDefaultFillOpacity, double &defaultFillOpacity,
|
|
bool &hasStrokeParam, bool &hasDefaultStrokeColor, QColor &defaultStrokeColor,
|
|
bool &hasStrokeWidthParam, bool &hasDefaultStrokeWidth, double &defaultStrokeWidth,
|
|
bool &hasStrokeOpacityParam, bool &hasDefaultStrokeOpacity, double &defaultStrokeOpacity ) const /PyName=containsParamsV3/;
|
|
%Docstring
|
|
Tests if an svg file contains parameters for fill, stroke color, stroke width. If yes, possible default values are returned. If there are several
|
|
default values in the svg file, only the first one is considered.
|
|
|
|
:param path: path to SVG file
|
|
:param hasFillParam: will be true if fill param present in SVG
|
|
:param hasDefaultFillParam: will be true if fill param has a default value specified
|
|
:param defaultFillColor: will be set to default fill color specified in SVG, if present
|
|
:param hasFillOpacityParam: will be true if fill opacity param present in SVG
|
|
:param hasDefaultFillOpacity: will be true if fill opacity param has a default value specified
|
|
:param defaultFillOpacity: will be set to default fill opacity specified in SVG, if present
|
|
:param hasStrokeParam: will be true if stroke param present in SVG
|
|
:param hasDefaultStrokeColor: will be true if stroke param has a default value specified
|
|
:param defaultStrokeColor: will be set to default stroke color specified in SVG, if present
|
|
:param hasStrokeWidthParam: will be true if stroke width param present in SVG
|
|
:param hasDefaultStrokeWidth: will be true if stroke width param has a default value specified
|
|
:param defaultStrokeWidth: will be set to default stroke width specified in SVG, if present
|
|
:param hasStrokeOpacityParam: will be true if stroke opacity param present in SVG
|
|
:param hasDefaultStrokeOpacity: will be true if stroke opacity param has a default value specified
|
|
:param defaultStrokeOpacity: will be set to default stroke opacity specified in SVG, if present
|
|
|
|
.. note::
|
|
|
|
available in Python bindings as containsParamsV3
|
|
|
|
.. versionadded:: 2.14
|
|
%End
|
|
|
|
QByteArray getImageData( const QString &path ) const;
|
|
%Docstring
|
|
Get image data
|
|
%End
|
|
|
|
QByteArray svgContent( const QString &path, double size, const QColor &fill, const QColor &stroke, double strokeWidth,
|
|
double widthScaleFactor, double fixedAspectRatio = 0 );
|
|
%Docstring
|
|
Get SVG content
|
|
%End
|
|
|
|
signals:
|
|
void statusChanged( const QString &statusQString );
|
|
%Docstring
|
|
Emit a signal to be caught by qgisapp and display a msg on status bar
|
|
%End
|
|
|
|
void remoteSvgFetched( const QString &url );
|
|
%Docstring
|
|
Emitted when the cache has finished retrieving an SVG file from a remote ``url``.
|
|
|
|
.. versionadded:: 3.2
|
|
%End
|
|
|
|
};
|
|
|
|
/************************************************************************
|
|
* This file has been generated automatically from *
|
|
* *
|
|
* src/core/symbology/qgssvgcache.h *
|
|
* *
|
|
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
|
************************************************************************/
|