All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
This changelog also contains important changes in dependencies.
- Load grayscale raster images.
enable-background
support.BackgroundImage
andBackgroundAlpha
support as a filter input.- resvg/usvg can be built without text rendering support now.
- Allow
feComposite
k1-4 coefficients to be larger than 1.0 This matches browsers behaviour. - Use
flate2
instead oflibflate
for GZip decoding.
feComposite
with fully transparent regions was producing invalid results.- Fallback to
matrix
infeColorMatrix
whentype
is not set or invalid.
0.8.0 - 2019-08-17
- A Skia backend thanks to JaFenix.
feComponentTransfer
support.feColorMatrix
support.- A better CSS support.
- An
*.otf
fonts support. - (usvg)
dx
,dy
are supported insidetextPath
now. - Use a box blur for
feGaussianBlur
withstdDeviation
>=2. This is 4-8 times faster than IIR blur. Thanks to Shnatsel.
- All backends are using Rust crates for raster images loading now.
- Use
pico-args
instead ofgumdrop
to reduced the build time oftools/rendersvg
andtools/usvg
. - (usvg) The
xmlwriter
is used for SVG generation now. Almost 2x faster than generating ansvgdom
. - (usvg) Optimize font database initialization. Almost 50% faster.
- Use a lower PNG compression ratio to speed up PNG generation. Depending on a backend and image can be 2-4x faster.
OutputImage::save
->OutputImage::save_png
.- (usvg)
Path::segments
->Path::data
. - Cairo backend compilation is 2x faster now due to overall changes.
- Performance improvements (Oxygen Icon theme SVG-to-PNG):
- cairo-backend: 22% faster
- qt-backend: 20% faster
- raqote-backend: 34% faster
- (qt-api) A default font resolving.
- (usvg)
baseline-shift
processing insidetextPath
. - (usvg) Remove all
tref
element children. - (usvg)
tref
withxml:space
resolving. - (usvg) Ignore nested
tref
. - (usvg) Ignore invalid
clipPath
children that were referenced viause
. - (usvg)
currentColor
will always fallback to black now. Previously,stroke
was set tonone
which is incorrect. - (usvg)
use
can reference an element inside a non-SVG element now. - (usvg) Collect all styles for generic fonts and not only Regular.
- (usvg) Parse only presentation attributes from the
style
element and attribute.
- (cairo-backend)
gdk-pixbuf
dependency. - (qt-backend) JPEG image format plugin dependency.
svgdom
dependency.
0.7.0 - 2019-06-19
- New text layout implementation:
textPath
support.writing-mode
support, aka vertical text.- Text BIDI reordering.
- Better text shaping.
word-spacing
is supported for all backends now.harfbuzz
dependency.- Subscript, superscript offsets are extracted from font and not hardcoded now.
shape-rendering
,text-rendering
andimage-rendering
support.- The
arithmetic
operator forfeComposite
. - (usvg)
--quiet
argument. - (c-api)
resvg_get_image_bbox
. - (qt-api)
ResvgRenderer::boundingBox
. - (resvg) A raqote backend thanks to jrmuizel. Still experimental.
- Text will be converted into paths on the
usvg
side now. - (resvg) Do not rescale images before rendering. This is faster and better.
- (usvg) An
image
element with a zero or negative size will be skipped now. Previously, a linked image size was used, which is incorrect. - Geometry primitives (
Rect
,Size
, etc) are immutable and always valid now. - (usvg) The default
color-interpolation-filters
attribute will not be exported now.
- (usvg) All text related structures and enums. Text will be converted into
Path
now. InitObject
andinit()
because they are no longer needed.- (c-api)
resvg_handle
,resvg_init
,resvg_destroy
. - (c-api)
resvg_cairo_get_node_bbox
andresvg_qt_get_node_bbox
. Use backend-independentresvg_get_node_bbox
instead. - (cairo-backend)
pango
dependency. - (resvg)
Backend::calc_node_bbox
. UseNode::calculate_bbox()
instead.
letter-spacing
on cursive scripts (like Arabic).- (rctree) Prevent stack overflow on a huge, deeply nested SVG.
- (c-api)
resvg_is_image_empty
was always returningfalse
. - (resvg) Panic when
filter
withobjectBoudningBox
was set on an empty group. - (usvg)
mask
withobjectBoundingBox
resolving. - (usvg)
pattern
'sviewBox
attribute resolving viahref
. - (roxmltree) Namespace resolving.
0.6.1 - 2019-03-16
- (usvg)
transform
multiplication. - (usvg)
use
insideclipPath
resolving.
0.6.0 - 2019-03-16
- Nested
baseline-shift
support. - (qt-api)
renderToImage
. - (usvg) A better algorithm for unused defs (
defs
element children, like gradients) removal. - (usvg)
Error::InvalidSize
. - (c-api)
RESVG_ERROR_INVALID_SIZE
.
- (usvg) A major rewrite.
baseline-shift
withsub
,super
and percent values calculation.- Marker resolving moved completely to
usvg
. - If an SVG doesn't have a valid size than an error will occur. Previously, an empty tree was produced.
- (qt-api)
render
methods areconst
now. - (usvg) Disable default attributes exporting.
- (usvg) Marker element and attributes. Markers will be resolved just like
use
now.
- (resvg) During the
tspan
rendering, thetext
bbox will be used instead of thetspan
bbox itself. This is the correct behaviour by the SVG spec. - (cairo-backend)
font-family
parsing. - (usvg)
filter:none
processing. - (usvg)
text
insidetext
processing. - (usvg) Endless loop during
use
resolving. - (usvg) Endless loop when SVG has indirect recursive
xlink:href
links. - (usvg) Endless loop when SVG has recursive
marker-*
links. - (usvg) Panic during
use
resolving. - (usvg) Panic during inherited attributes resolving.
- (usvg) Groups regrouping.
- (usvg)
dx
/dy
processing ontext
. - (usvg)
textAnchor
resolving. - (usvg) Ignore
fill-rule
ontext
. - (svgtypes) Style with comments parsing.
- (roxmltree) Namespaces resolving.
0.5.0 - 2019-01-04
marker
support.- Partial
baseline-shift
support. letter-spacing
support.- (qt-backend)
word-spacing
support. Does not work on the cairo backend. - tools/explorer-thumbnailer
- tools/kde-dolphin-thumbnailer
- Object bounding box calculation.
- Pattern scaling.
- Nested
objectBoundigBox
support. - (usvg)
color
onuse
resolving. - (usvg)
offset
attribute resolving inside thestop
element. - (usvg) Ungrouping of groups with non-inheritable attributes.
- (usvg)
rotate
attribute resolving. - (usvg) Paths without stroke and fill will no longer be removed. Required for a proper bbox resolving.
- (usvg) Coordinates resolving when units are
userSpaceOnUse
. - (usvg) Groups regrouping. Caused an incorrect rendering of
clipPath
that hadfilter
on a child. - (usvg) Style attributes resolving on the root
svg
element. - (usvg)
SmoothCurveTo
andSmoothQuadratic
conversion. - (usvg)
symbol
resolving. - (cairo-backend) Font ascent calculation.
- (qt-backend) Stroking of LineTo specified as CurveTo.
- (svgdom)
stroke-miterlimit
attribute parsing. - (svgdom)
length
andnumber
attribute types parsing. - (svgdom)
offset
attribute parsing. - (svgdom) IRI resolving order when SVG has duplicated ID's.
0.4.0 - 2018-12-13
- (resvg) Initial filters support.
- (resvg) Nested
clipPath
andmask
support. - (resvg) MSVC support.
- (rendersvg)
font-family
,font-size
andlanguages
to args. - (usvg)
systemLanguage
attribute support. - (usvg) Default font family and size is configurable now.
- (c-api)
RESVG_ERROR_PARSING_FAILED
. - (c-api)
font_family
,font_size
andlanguages
toresvg_options
. - (qt-api)
ResvgRenderer::setDevicePixelRatio
.
- (rendersvg) Use
gumdrop
instead ofgetopts
. - (c-api) Qt wrapper is header-only now.
- (cairo-backend) Text layout.
- (cairo-backend) Rendering of a zero length subpath with a square cap.
- (qt-backend) Transform retrieving via Qt bindings.
- (resvg) Recursive SVG images via
image
tag. - (resvg) Bbox calculation of the text with rotate.
- (resvg) Invisible elements processing.
- (qt-api) SVG from QByteArray loading when data is invalid.
- (usvg)
display
attribute processing. - (usvg) Recursive
mask
resolving. - (usvg)
inherit
attribute value resolving. - (svgdom) XML namespaces resolving.
- (rendersvg)
failure
dependency.
0.3.0 - 2018-05-23
- (c-api)
resvg_is_image_empty
. - (c-api)
resvg_error
enum. - (c-api) Qt wrapper.
- (resvg) Advanced text layout support (lists of x, y, dx, dy and rotate).
- (resvg) SVG support for
image
element. - (usvg)
symbol
element support. - (usvg) Nested
svg
elements support. - (usvg) Paint fallback resolving.
- (usvg) Bbox validation for shapes that use painting servers.
- (svgdom) Elements from ENTITY resolving.
- (c-api)
resvg_parse_tree_from_file
,resvg_parse_tree_from_data
resvg_cairo_render_to_image
andresvg_qt_render_to_image
will return an error code now. - (cairo-backend) Use
gdk-pixbuf
crate instead ofimage
. - (resvg)
Render::render_to_image
andRender::render_node_to_image
will returnOption
and notResult
now. - (resvg) New geometry primitives implementation.
- (resvg) Rename
render_*
modules tobackend_
. - (rendersvg) Use
getopts
instead ofclap
to reduce the executable size. - (svgtypes)
StreamExt::parse_iri
andStreamExt::parse_func_iri
will parse not only well-formed data now.
- (qt-backend) Gradient with
objectBoundingBox
rendering. - (qt-backend) Text bounding box detection during the rendering.
- (cairo-backend)
image
element clipping. - (cairo-backend) Layers management.
- (c-api)
resvg_get_node_transform
will return a correct transform now. - (resvg)
text-decoration
thickness. - (resvg)
pattern
scaling. - (resvg)
image
without size rendering. - (usvg) Panic during
visibility
resolving. - (usvg) Gradients with one stop resolving.
- (usvg)
use
attributes resolving. - (usvg)
clipPath
andmask
attributes resolving. - (usvg)
offset
attribute instop
element resolving. - (usvg) Incorrect
font-size
attribute resolving. - (usvg) Gradient stops resolving.
- (usvg)
switch
element resolving. - (svgdom) Mixed
xml:space
processing. - (svgtypes)
Paint::from_span
poor performance.
- (c-api)
resvg_error_msg_destroy
. - (resvg)
parse_rtree_*
methods. Useusvg::Tree::from_
instead. - (resvg)
Error
.
0.2.0 - 2018-04-24
- (svg) Partial
clipPath
support. - (svg) Partial
mask
support. - (svg) Partial
pattern
support. - (svg)
preserveAspectRatio
support. - (svg) Check that an external image is PNG or JPEG.
- (rendersvg) Added
--query-all
and--export-id
arguments to render SVG items by ID. - (rendersvg) Added
--perf
argument for a simple performance stats.
- (resvg) API is completely new.
font-size
attribute inheritance duringuse
resolving.