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.
This release has an MSRV of 1.87.0 for usvg and resvg and the C API.
0.47.0 2026-02-05
This release has an MSRV of 1.87.0 for usvg and resvg and the C API.
- Focal radius (
fr) supported for Radial Gradients. (#1014 by @wmedrano) - Support for variable fonts based on font-variation-settings CSS property. (#997 by @oetiker)
tiny-skiahas a major version bump from 0.11 to 0.12.
This release has an MSRV of 1.87.0 for usvg and resvg and the C API.
- Support SVGs without the xmlns attribute on the root. Thanks to @JosefKuchar.
- Add a from_data_nested method to usvg::Tree (#955 by @tovrstra)
- Use cache for glyph outlining (#957 by @newinnovations)
- Support loading nested embedded images (#958 by @LaurenzV)
- Bump dependencies, bump MSRV to 1.87, Upgrade to edition 2024 (#1002 and #1003 @LaurenzV)
- Upgraded kurbo to 0.13 and svgtypes to 0.16.1. Thanks to @HaHa421.
- Bump zune_jpeg (#964 by @LaurenzV)
- Fix abs_bounding_box calculation for image (#924 by @Dabble63)
- Fix crash caused by glyph splitting (#929 by @arnaud-secondlayer)
- Fix a bug with incorrect resolving of fill/stroke color (#953 by @LaurenzV)
- Fix inverted condition in has_text_nodes method (#967 by @Daaiid)
- Do not write empty defs nodes (#980 by @Its-Just-Nans)
- Check if text paths need to be written out (#981 by @Its-Just-Nans)
- Use checked arithmetic when computing bounding box (#987 by @Its-Just-Nans)
- Fix bug in rewriting of clip paths with transformed path (#988 by @Its-Just-Nans)
- Remove unused phf dependency (#920)
0.45.1 - 2025-04-16
- Support SVGs without the xmlns attribute on the root (#892)
- Add optimization for paths with markers in paint-order but no actual markers (#887)
- tools/kde-dolphin-thumbnailer. This was never a released tool, and it doesn't support current versions of KDE/dolphin (#897 by @DJMcNab)
0.45.0 - 2025-02-26
This is the first release under the stewardship of Linebender, who is now responsible for maintenance of this crate. Many thanks to Yevhenii Reizner for the years of hard work that he has poured into this and other crates.
Please note that the license of this project changed from MPL-2.0 to Apache-2.0 OR MIT.
See resvg#838 for more information.
This release has an MSRV of 1.65 for usvg and 1.67.1 for resvg and the C API.
- Support for the
background-colorattribute. - Support for additional
image-renderingattributes. - Support for the
!importantCSS flag. - Support for Luma JPEG images.
- (c-api)
resvg_options_set_stylesheet. Thanks to @michabay05. - (svgtypes) Support for floating point hue in
hsl()andhsla().
- License to
Apache-2.0 OR MIT. See resvg#838 for more information. - Updated WebP decoder for bug fixes and improved performance. Thanks to @Shnatsel.
- MSRV of resvg and c-api bumped to 1.67.1.
fontdbandrustybuzzhave been updated.- Updated other dependencies.
- (svgtypes) Simplified color component rounding and bounds checking.
- Improved handling of paths with paint order
markersbut no actual markers.
- Relative unit handling when
usereferencessymbol. - (svgtypes) Rounding of hues in HSL to RGB conversion.
- (svgtypes) Rounding of alpha.
0.44.0 - 2024-09-28
- Stylesheet injection support. Thanks to @LaurenzV.
- (c-api)
resvg_get_object_bbox - (c-api)
cargo-cmetadata. Thanks to @lu-zero. - Implement
Fromforfontdbandusvgfont types. Thanks to @dhardy.
- (c-api)
resvg_get_image_bboxreturns a layer and not object bounding box now. Useresvg_get_object_bboxto preserve the old behavior.
- (svgtypes) Path parsing with
SorTsegments afterA. - Bounding box calculation for the root group used for
viewBoxflattening.
0.43.0 - 2024-08-10
- Support WebP images. Thanks to @notjosh.
- Use
zune-jpeginstead ofjpeg-decoder. Thanks to @mattfbacon. - Update dependencies.
- Canvas size limits calculation.
- SVG fonts handling. Thanks to @LaurenzV.
- Transforms in COLR fonts. Thanks to @LaurenzV.
0.42.0 - 2024-06-01
resvgcan render color fonts now, aka Emojis.
In TrueType terms,COLRv0,COLRv1(mostly),sbix,CBDTandSVGtables are supported.
Thanks to @LaurenzV.- Fonts matching and fallback can be controlled by the caller via
usvg::FontResolvernow. Thanks to @LaurenzV. usvg::Options::font_resolver. Similar tousvg::Options::image_href_resolverwe already had.usvg::Options::fontdb- Support double-quoted FuncIRIs, aka
url("#id"). imageelement viewbox flattening.
Instead of havingusvg::Image::view_boxthat the caller should handle themselves, we instead replace it withtransformand optionalclip-path. This greatly simplifiesimagerendering.usvg::Image::size- Tree viewbox flattening.
Similar toimageabove, but affects the rootsvgelement instead. patternviewbox flattening.
Similar toimageabove, but for patterns.- Improve vertical text rendering. Thanks to @LaurenzV.
usvg::fontdb::Databaseshould be set inusvg::Optionsand not passed to the parser separately now.usvg::Optionsandusvg::ImageHrefResolverhave a lifetime now.- Replace
usvg::Visibilityenum with justbool. usvg::Path::visibility()is replaced withusvg::Path::is_visible()usvg::Image::visibility()is replaced withusvg::Image::is_visible()usvg::TextSpan::visibility()is replaced withusvg::TextSpan::is_visible()- Always represent
feImagecontent as a link to an element.
In SVG,feImagecan contain a link to an element or a base64 image data, just likeimage. From now, the inlined base64 data will always be represented by a link to an actualimageelement.will be parsed as<filter> <feImage xlink:href="data:image/png;base64,..."/> </filter>
This simplifies<image id="image1" xlink:href="data:image/png;base64,..."/> <filter> <feImage xlink:href="#image1"/> </filter>
feImagerendering, since we don't have to handle both cases now. - The
--list-fontsresvg argument can be used without providing an SVG file now. Can simply callresvg --list-fontsnow. - The
--list-fontsresvg argument includes generic font family names as well now. - Make sure all warning and errors are printed to stderr. Thanks to @ahaoboy.
usvg::ViewBox,usvg::AspectRatio,usvg::Aligntypes. Nol longer used.usvg::filter::Image::aspect. No longer needed.usvg::filter::Image::rendering_mode. No longer needed.usvg::filter::Image::data. Useusvg::filter::Image::rootinstead.usvg::Tree::view_box. No longer needed.usvg::Image::view_box. No longer needed.usvg::Image::pattern. No longer needed.usvg::utils::align_pos. No longer needed.usvg::Visibility. No longer needed.- (c-api)
resvg_get_image_viewbox. Useresvg_get_image_sizeinstead.
context-fillhandling. Thanks to @LaurenzV.
0.41.0 - 2024-04-03
context-fillandcontext-strokesupport. Thanks to @LaurenzV.usvg::Text::layouted(), which returns a list of glyph IDs. It can be used to manually draw glyphs, unlike withusvg::Text::flattened(), which returns just vector paths. Thanks to @LaurenzV.
- Missing text when a
textelement uses multiple fonts and one of them produces ligatures. - Absolute transform propagation during
useresolving. - Absolute transform propagation during nested
svgresolving. Node::abs_transformdocumentation. The current element's transform is included.
0.40.0 - 2024-02-17
usvg::TreeisSend + Synccompatible now.usvg::WriteOptions::preserve_textto control howusvggenerates an SVG.usvg::Image::abs_bounding_box
- All types in
usvgare immutable now. Meaning thatusvg::Treecannot be modified after creation anymore. - All struct fields in
usvgare private now. Use getters instead. - All
usvg::Treeparsing methods require thefontdbargument now. - All
defschildren like gradients, patterns, clipPaths, masks and filters are guarantee to have a unique, non-empty ID. - All
defschildren like gradients, patterns, clipPaths, masks and filters are guarantee to haveuserSpaceOnUseunits now. NoobjectBoundingBoxunits anymore. usvg::Maskis allowed to have no children now.- Text nodes will not be parsed when the
textbuild feature isn't enabled. usvg::Tree::clip_paths,usvg::Tree::masks,usvg::Tree::filtersreturns a pre-collected slice of unique nodes now. It's no longer a closure and you do not have to deduplicate nodes by yourself.usvg::filter::Primitive::x,y,widthandheightmethods were replaced withusvg::filter::Primitive::rect.- Split
usvg::Tree::paint_serversintousvg::Tree::linear_gradients,usvg::Tree::radial_gradients,usvg::Tree::patterns. All three returns pre-collected slices now. - A
usvg::Pathno longer can have an invalid bbox. Paths with an invalid bbox will be rejected during parsing. - All
usvgmethods that return bounding boxes return non-optionalRectnow. NoNonZeroRectas well. usvg::Text::flattenedreturns&Groupand notOption<&Group>now.usvg::ImageHrefDataResolverFnandusvg::ImageHrefStringResolverFnrequirefontdb::Databaseargument.- All shared nodes are stored in
Arcand notRc<RefCell>now. resvg::render_nodenow includes filters bounding box. Meaning that a node with a blur filter no longer be clipped.- Replace
usvg::utils::view_box_to_transformwithusvg::ViewBox::to_transform. - Rename
usvg::XmlOptionsintousvg::WriteOptionsand embedxmlwriter::Options.
usvg::Tree::postprocess()andusvg::PostProcessingSteps. No longer needed.usvg::ClipPath::units(),usvg::Mask::units(),usvg::Mask::content_units(),usvg::Filter::units(),usvg::Filter::content_units(),usvg::LinearGradient::units(),usvg::RadialGradient::units(),usvg::Pattern::units(),usvg::Pattern::content_units()andusvg::Paint::units(). They are alwaysuserSpaceOnUsenow.usvg::Units. No longer needed.
- Text bounding box is accounted during SVG size resolving. Previously, only paths and images were included.
- Font selection when an italic font isn't explicitly marked as one.
- Preserve
imageaspect ratio when onlywidthorheightare present. Thanks to @LaurenzV.
0.39.0 - 2024-02-06
fontshorthand parsing. Thanks to @LaurenzV.usvg::Group::abs_bounding_boxusvg::Group::abs_stroke_bounding_boxusvg::Path::abs_bounding_boxusvg::Path::abs_stroke_bounding_boxusvg::Text::abs_bounding_boxusvg::Text::abs_stroke_bounding_box
- All
usvg-*crates merged into one. There is just theusvgcrate now, as before.
usvg::Group::abs_bounding_box()method. It's a field now.usvg::Group::abs_filters_bounding_box()usvg::TreeParsing,usvg::TreePostProcandusvg::TreeWritingtraits. They are no longer needed.
font-familyparsing. Thanks to @LaurenzV.- Absolute bounding box calculation for paths.
0.38.0 - 2024-01-21
- Each
usvg::Nodestores its absolute transform now.Node::abs_transform()executes in constant time now. usvg::Tree::calculate_bounding_boxesto calculate all bounding boxes beforehand.usvg::Node::bounding_boxwhich returns a precalculated node's bounding box in object coordinates.usvg::Node::abs_bounding_boxwhich returns a precalculated node's bounding box in canvas coordinates.usvg::Node::stroke_bounding_boxwhich returns a precalculated node's bounding box, including stroke, in object coordinates.usvg::Node::abs_stroke_bounding_boxwhich returns a precalculated node's bounding box, including stroke, in canvas coordinates.- (c-api)
resvg_get_node_stroke_bbox usvg::Node::filters_bounding_boxusvg::Node::abs_filters_bounding_boxusvg::Tree::postprocess
resvgrendersusvg::Treedirectly again.resvg::Treeis gone.usvgno longer usesrctreefor the nodes tree implementation. The tree is a regularenumnow.- A caller no longer need to use the awkward
*node.borrow(). - No more panics on incorrect mutable
Rc<RefCell>access. - Tree nodes respect tree's mutability rules. Before, one could mutate tree nodes when the tree
itself is not mutable. Because
Rc<RefCell>provides a shared mutable access.
- A caller no longer need to use the awkward
- Filters, clip paths, masks and patterns are stored as
Rc<RefCell<T>>instead ofRc<T>. This is required for proper mutability sinceNodeitself is no longer anRc. - Rename
usvg::NodeKindintousvg::Node. - Upgrade to Rust 2021 edition.
resvg::Tree. No longer needed.resvgcan renderusvg::Treedirectly once again.rctree::Nodemethods. TheNodeAPI is completely different now.usvg::NodeExt. No longer needed.usvg::Node::calculate_bbox. Useusvg::Node::abs_bounding_boxinstead.usvg::Tree::convert_text. Useusvg::Tree::postprocessinstead.usvg::TreeTextToPathtrait. No longer needed.
- Mark
mask-typeas a presentation attribute. - Do not show needless warnings when parsing some attributes.
feImagerendering with a non-default position. Thanks to @LaurenzV.
0.37.0 - 2023-12-16
usvgcan write text back to SVG now. Thanks to @LaurenzV.--preserve-textflag to theusvgCLI tool. Thanks to @LaurenzV.- Support
transform-originproperty. Thanks to @LaurenzV. - Support non-default markers order via
paint-order. Previously, only fill and stroke could have been swapped. Thanks to @LaurenzV. usvg_tree::Text::flattenedthat will contain a flattened/outlined text.usvg_tree::Text::bounding_box. Will be set only after text flattening.- Optimize
usvg_tree::NodeExt::abs_transformby storing absolute transforms in the tree instead of calculating them each time.
usvg_tree::Text::positionswas replaced withusvg_tree::Text::dxandusvg_tree::Text::dy.
usvg_tree::CharacterPosition::xandusvg_tree::CharacterPosition::yare gone. They were redundant and you should useusvg_tree::TextChunk::xandusvg_tree::TextChunk::yinstead.usvg_tree::LinearGradient::idandusvg_tree::RadialGradient::idare moved tousvg_tree::BaseGradient::id.- Do not generate element IDs during parsing. Previously, some elements like
clipPaths andfilters could have generated IDs, but it wasn't very reliable and mostly unnecessary. Renderer doesn't rely on them and usvg writer would generate them anyway. - Text-to-paths conversion via
usvg_text_layout::Tree::convert_textno longer replaces original text elements with paths, but instead puts them intousvg_tree::Text::flattened.
- The
transformfield fromusvg_tree::Path,usvg_tree::Imageandusvg_tree::Text. Onlyusvg_tree::Groupcan have it.
It doesn't break anything, because those properties were never used before anyway.
Thanks to @LaurenzV. usvg_tree::CharacterPositionusvg_tree::Path::text_bbox. Useusvg_tree::Text::bounding_boxinstead.usvg_text_layout::TextToPathtrait forTextnodes. Only the whole tree can be converted at once.
- Path object bounding box calculation. We were using point bounds instead of tight contour bounds. Was broken since v0.34
- Convert text-to-paths in embedded SVGs as well. The one inside the
Imagenode. Thanks to @LaurenzV. - Indirect
text-decorationresolving in some cases. Thanks to @LaurenzV. - (usvg) Clip paths writing to SVG. Thanks to @LaurenzV.
0.36.0 - 2023-10-01
stroke-linejoin=miter-clipsupport. SVG2. Thanks to @torokati44.- Quoted FuncIRI support. Like
fill="url('#gradient')". SVG2. Thanks to @romanzes. - Allow float values in
rgb()andrgba()colors. SVG2. Thanks to @yisibl. auto-start-reversevariant support toorientin markers. SVG2. Thanks to @EpicEricEE.
- Update dependencies.
- Increase precision of the zero-scale transform check. Was rejecting some valid transforms before.
- Panic when rendering a very specific text.
- Greatly improve parsing performance when an SVG has a lot of references. Thanks to @wez.
- (Qt API) Fix scaling factor calculation. Thanks to @missdeer.
0.35.0 - 2023-06-27
- Panic when an element is completely outside the viewbox.
FillPaintandStrokePaintfilter inputs support. It's a mostly undocumented SVG feature that no one supports and no one uses. And it was adding a significant complexity to the codebase.usvg::filter::Filter::fill_paintandusvg::filter::Filter::stroke_paint.BackgroundImage,BackgroundAlpha,FillPaintandStrokePaintfromusvg::filter::Input.usvg::Group::filter_fill_paintandusvg::Group::filter_stroke_paint.
0.34.1 - 2023-05-28
- Transform components order. Affects only
usvgSVG output and C API.
0.34.0 - 2023-05-27
usvgusestiny-skiageometry primitives now, including thePathcontainer.
The main difference compared to the oldusvgprimitives is thattiny-skiausesf32instead off64. So while in theory we could loose some precision, in practice,f32is used mainly as a storage type and precise math operations are still done usingf64.
tiny-skiaprimitives are move robust, strict and have a nicer API.
More importantly, this change reduces the peak memory usages for SVGs with large paths (in terms of the number of segments). And removes the need to convertusvg::PathDataintotiny-skia::Pathbefore rendering. Which was just a useless reallocation.- All numbers are stored as
f32instead off64now. - Because we use
tiny-skia::Pathnow, we allow quadratic curves as well. This includesusvgCLI output. - Because we allow quadratic curves now, text might render slightly differently (better?). This is because TrueType fonts contain only quadratic curves and we were converting them to cubic before.
usvg::Pathno longer implementsDefault. Useusvg::Path::newinstead.- Replace
usvg::Rectwithtiny_skia::NonZeroRect. - Replace
usvg::PathBboxwithtiny_skia::Rect. - Unlike the old
usvg::PathBbox,tiny_skia::Rectallows both width and height to be zero. This is not an error. usvg::filter::Turbulence::base_frequencywas split intobase_frequency_xandbase_frequency_y.usvg::NodeExt::calculate_bboxno longer includes stroke bbox.- (c-api) Use
floatinstead ofdoubleeverywhere. - The
svgfilterscrate was merged intoresvg. - The
rosvgtreecrate was merged intousvg-parser. usvg::Group::filter_fillmoved tousvg::filter::Filter::fill_paint.usvg::Group::filter_strokemoved tousvg::filter::Filter::stroke_paint.
usvg::Point. Usetiny_skia::Pointinstead.usvg::FuzzyEq. Useusvg::ApproxEqUlpsinstead.usvg::FuzzyZero. Useusvg::ApproxZeroUlpsinstead.- (c-api)
resvg_path_bbox. Useresvg_rectinstead. svgfilterscrate.rosvgtreecrate.
- Write
transformonclipPathchildren inusvgSVG output. - Do not duplicate marker children IDs.
Previously, each element resolved for a marker would preserve its ID.
Affects only
usvgSVG output and doesn't affect rendering.
0.33.0 - 2023-05-17
- A new rendering algorithm.
When rendering isolated groups, aka layers, we have to know the layer bounding box beforehand, which is ridiculously hard in SVG.
Previously, resvg would simply use the canvas size for all the layers. Meaning that to render a 10x10px layer on a 1000x1000px canvas, we would have to allocate and then blend a 1000x1000px layer, which is just a waste of CPU cycles.
The new rendering algorithm is able to calculate layer bounding boxes, which dramatically improves performance when rendering a lot of tiny layers on a large canvas.
Moreover, it makes performance more linear with a canvas size increase.
The paris-30k.svg sample from google/forma is rendered 115 times faster on M1 Pro now. From ~33760ms down to ~290ms. 5269x3593px canvas.
If we restrict the canvas to 1000x1000px, which would contain only the actualparis-30k.svgcontent, then we're 13 times faster. From ~3252ms down to ~253ms. resvg::Tree, aka a render tree, which is an even simpler version ofusvg::Tree.usvg::Treehad to be converted intoresvg::Treebefore rendering now.
- Restructure the root directory. All crates are in the
cratesdirectory now. - Restructure tests. New directory structure and naming scheme.
- Use
resvg::Tree::renderinstead ofresvg::render. - resvg's
--export-area-drawingoption uses calculated bounds instead of trimming excessive alpha now. It's faster, but can lead to a slightly different output. - (c-api) Removed
fit_toargument fromresvg_render. - (c-api) Removed
fit_toargument fromresvg_render_node. usvg::ScreenSizemoved toresvg.usvg::ScreenRectmoved toresvg.- Rename
resvg::ScreenSizeintoresvg::IntSize. - Rename
resvg::ScreenRectintoresvg::IntRect.
filterbuild feature fromresvg. Filters are always enabled now.resvg::FitTousvg::utils::view_box_to_transform_with_clipusvg::Size::to_screen_size. Useresvg::IntSize::from_usvginstead.usvg::Rect::to_screen_size. Useresvg::IntSize::from_usvg(rect.size())instead.usvg::Rect::to_screen_rect. Useresvg::IntRect::from_usvginstead.- (c-api)
resvg_fit_to - (c-api)
resvg_fit_to_type
- Double quotes parsing in
font-family.
0.32.0 - 2023-04-23
- Clipping and masking is up to 20% faster.
mask-typeproperty support. SVG2usvg_tree::MaskTypeusvg_tree::Mask::kind- (rosvgtree) New SVG 2 mask attributes.
BackgroundImageandBackgroundAlphafilter inputs will produce the same output asSourceGraphicandSourceAlpharespectively.
enable-backgroundsupport. This feature was never supported by browsers and was deprecated in SVG 2. To my knowledge, only Batik has a good support of it. Also, it's a performance nightmare, which caused multiple issues in resvg already.usvg_tree::EnableBackgroundusvg_tree::Group::enable_backgroundusvg_tree::NodeExt::filter_background_start_node
- Improve rectangular clipping anti-aliasing quality.
- Mask's RGB to Luminance converter was ignoring premultiplied alpha.
0.31.1 - 2023-04-22
- Use the latest
tiny-skiato fix SVGs with large masks rendering.
0.31.0 - 2023-04-10
usvg::Tree::paint_serversusvg::Tree::clip_pathsusvg::Tree::masksusvg::Tree::filtersusvg::Node::subroots- (usvg)
--coordinates-precisionand--transforms-precisionwriting options. Thanks to @flxzt.
fill-opacityandstroke-opacityresolving.- Double
transformwhen resolvingsymbol. symbolclipping when its viewbox is the same as the document one.- (usvg) Deeply nested gradients, patterns, clip paths, masks and filters were ignored during SVG writing.
- Missing text in nested clip paths and mask, text decoration patterns, filter inputs and feImage.
0.30.0 - 2023-03-25
- Readd
usvgCLI tool. Can be installed via cargo as before.
- Extract most
usvginternals into newusvg-treeandusvg-parsercrates.usvg-treecontains just the SVG tree and all the types.usvg-parserparsers SVG intousvg-tree. Andusvgis just an umbrella crate now. - To use
usvg::Tree::from*methods one should import theusvg::TreeParsingtrait now. - No need to import
usvg-text-layoutmanually anymore. It is part ofusvgnow. rosvgtreeno longer reexportssvgtypes.rosvgtree::Node::attributereturns just a string now.rosvgtree::Node::find_attributereturns just arosvgtree::Nodenow.- Rename
usvg::Stretchintousvg::FontStretch. - Rename
usvg::Styleintousvg::FontStyle. usvg::FitTomoved toresvg::FitTo.usvg::IsDefaulttrait is private now.
rosvgtree::FromValue. Due to Rust's orphan rules this trait is pretty useless.
- Recursive markers detection.
- Skip malformed
transformattributes without skipping the whole element. - Clipping path rectangle calculation for nested
svgelements. Thanks to @LaurenzV. - Panic when applying
text-decorationon text with only one cluster. Thanks to @LaurenzV. - (Qt API) Image size wasn't initialized. Thanks to @missdeer.
resvgCLI allows files with XML DTD again.- (svgtypes) Handle implicit MoveTo after ClosePath segments.
0.29.0 - 2023-02-04
resvgCLI loads system fonts only when an input SVG has text nodes now. Fonts loading is an IO-heavy operation and by avoiding it we can speed upresvgexecution.usvg::Group::should_isolateusvg::Tree::has_text_nodes
- Some
usvginternals were moved into the newrosvgtreecrate. - Dummy groups are no longer removed. Use
usvg::Group::should_isolateto check if a group affects rendering. usvg-text-layout::TreeTextToPath::convert_textno longer has thekeep_named_groupsargument.- MSRV bumped to 1.65
- Update dependencies.
usvg::Options::keep_named_groups. Dummy groups are no longer removed.- (c-api)
resvg_options_set_keep_named_groups - (Qt API)
ResvgOptions::setKeepNamedGroups
- Missing
font-familyhandling. font-weightresolving.
0.28.0 - 2022-12-03
usvg::Textandusvg::NodeKind::Text.
usvgisn't converting text to paths by default now. A caller must callusvg::Tree::convert_textorusvg::Text::convertfromusvg-text-layoutcrate on demand.usvgtext layout implementation moved intousvg-text-layoutcrate.- During SVG size recovery, when no
width,heightandviewBoxattributes have been set, text nodes are no longer taken into an account. This is because a text node has no bbox before conversion into path(s), which we no longer doing during parsing. usvgis purely an SVG parser now. It doesn't convert text to paths and doesn't write SVG anymore.usvg::filter::ConvolveMatrixDatamethods are fields now.
usvgCLI binary. No alternatives for now.- All
usvgbuild features.filter. Filter elements are always parsed byusvgnow.text. Text elements are always parsed byusvgnow.export.usvgcannot write an SVG anymore.
usvg::Tree::to_string.usvgcannot write an SVG anymore.usvg::TransformFromBBoxtrait. This is just a regularusvg::Transformmethod now.usvg::OptionsRef.usvg::Optionsis enough from now.usvg::Options::fontdb. Used only byusvg-text-layoutnow.--dump-svgfromresvg.
0.27.0 - 2022-11-27
lengthAdjustandtextLengthattributes support.- Support automatic
imagesize detection.widthandheightattributes can be omitted or set toautoonimagenow. SVG2
--query-allflag inresvgCLI.- Percentage values resolving.
0.26.1 - 2022-11-21
- Allow
dominant-baselineandalignment-baselineto be set via CSS.
0.26.0 - 2022-11-20
- Minimal
dominant-baselineandalignment-baselinesupport. mix-blend-modeandisolationsupport. SVG2- Allow writing resvg output to stdout.
- Allow disabling text kerning using
kerning="0"andstyle="font-kerning:none". SVG2 - Allow
<percentage>values foropacity,fill-opacity,stroke-opacity,flood-opacityandstop-opacityattributes.
You can writeopacity="50%"now. SVG2
- Disable focal point correction on radial gradients to conform with SVG 2. SVG2
- Update
feMorphologyradius value resolving.
- Do not clip nested
svgwhen only theviewBoxattribute is present.
0.25.0 - 2022-10-30
- Partial
paint-orderattribute support. Markers can only be under or above the shape.
- Compilation issues caused by
rustybuzzupdate.
0.24.0 - 2022-10-22
- CSS3
writing-modevariantsvertical-rlandvertical-lr. Thanks to yisibl. - (tiny-skia) AArch64 Neon SIMD support. Up to 3x faster on Apple M1.
usvg::Treestores onlyGroup,PathandImagenodes now. Instead of emulating an SVG file structure, where gradients, patterns, filters, clips and masks are part of the nodes tree (usually inside thedefselement), we reference them usingRcfrom now. This change makesusvga bit simpler. MakesusvgAPI way easier, since instead of looking for a node viausvg::Tree::defs_by_idthe caller can access the type directly viaRc. And makes creation of customusvg::Trees way easier.clip_path,maskandfiltersusvg::Groupfields storeRcinstead ofStringnow.usvg::NodeExt::unitswas moved tousvg::Paint::units.usvg::filter::ImageKind::Usestoresusvg::Nodeinstead ofString.usvg::PathDatastores commands and points separately now to reduce overall memory usage.usvg::PathDatasegments should be accessed viasegments()now.- Most numeric types have been moved to the
strict-numcrate. - Rename
NormalizedValueintoNormalizedF64. - Rename
PositiveNumberintoPositiveF64. - Raw number of numeric types should be accessed via
get()method instead ofvalue()now. usvg::TextSpan::font_sizeisNonZeroPositiveF64instead off64now.- Re-export
usvgandtiny-skiadependencies inresvg. - Re-export
roxmltreedependency inusvg. - (usvg) Output float precision is reduced from 11 to 8 digits.
usvg::Tree::create.usvg::Treeis an open struct now.usvg::Tree::root. It's a public field now.usvg::Tree::svg_node. Replaced withusvg::Treepublic fields.defs,is_in_defs,append_to_defsanddefs_by_idfromusvg::Tree. We no longer emulate SVG structure. No alternative.usvg::Tree::is_in_defs. There are nodefsanymore.usvg::Paint::Link. We store gradient and patterns directly inusvg::Paintnow.usvg::Svg. No longer needed.sizeandview_boxareusvg::Treefields now.usvg::SubPathIterandusvg::PathData::subpaths. No longer used.
- Path bbox calculation scales stroke width too. Thanks to growler.
- (tiny-skia) Round caps roundness.
- (xmlparser) Stack overflow on specific files.
- (c-api)
resvg_is_image_emptyoutput was inverted.
0.23.0 - 2022-06-11
#RRGGBBAAand#RGBAcolor notation support. Thanks to demurgos.
- Panic during recursive
patternresolving. Thanks to FylmTM. - Spurious warning when using
--export-id. Thanks to benoit-pierre.
0.22.0 - 2022-02-20
- Support
svgreferenced byuse. External SVG files are still not supported.
ttf-parser,fontdbandrustybuzzhave been updated.
0.21.0 - 2022-02-13
usvg::ImageHrefResolverthat allows a customxlink:hrefhandling. Thanks to antmelnyk.usvg::Options::image_href_resolver- Support for GIF images inside the
<image>element. - (fontdb) Support for loading user fonts on Windows.
- (fontdb) Support for parsing fontconfig config files on Linux. For now, only to retrieve a list of font dirs.
- MSRV bumped to 1.51
usvg::ImageKindstores data asArc<Vec<u8>>and not justVec<u8>now.
- Every nested
svgelement defines a new viewBox now. Previously, we were always using the root one. - Correctly handle SVG size calculation when SVG doesn't have a size and any elements.
- Improve groups ungrouping speed.
0.20.0 - 2021-12-29
resvg::renderandresvg::render_nodeaccept a transform now.- (c-api)
resvg_renderandresvg_render_nodeaccept a transform now. usvg::Coloris a custom type and not asvgtypes::Colorreexport now.usvg::Colordoesn't contain alpha anymore, which have been added in v0.16 Alpha would be automatically flattened. This makes Micro SVG compatible with SVG 1.1 again.- (c-api) Rename
RESVG_FIT_TO_*intoRESVG_FIT_TO_TYPE_*.
- The
--backgroundargument inresvgcorrectly handles alpha now. - Fix building usvg without filter feature but with export.
0.19.0 - 2021-10-04
- Better text-on-path converter accuracy by accounting the current transform.
usvg::NodeExt::abs_transformincludes current node transform now.- Improved turbulence filter performance. Thanks to akindle.
- Multiple dependencies updated.
0.18.0 - 2021-09-12
filterbuild feature. Enabled by default.usvg::PathBboxandresvg_path_bbox(to C API).
- (usvg) All filter related types are under the
filtermodule now. - (usvg) Remove
Feprefix from all filter types. - (c-api)
resvg_get_node_bboxreturnsresvg_path_bboxnow.
- Horizontal and vertical lines processing.
- C API building without the
textfeature.
0.17.0 - 2021-09-04
tiny-skiaupdated with support of images larger than 8000x8000 pixels.feDropShadowsupport. SVG2<filter-value-list>support. Meaning that thefilterattribute can have multiple values now. Likeurl(#filter1) blur(2). SVG2- All filter functions. SVG2
- Support all new
feBlendmodes. SVG2 - Automatic SVG size detection when
width/height/viewBoxis not set. Thanks to reknih. usvg::Options::default_size--default-widthand--default-heightto usvg.
usvg::Group::filteris a list of filter IDs now.usvg::FeColorMatrixKind::Saturateaccepts any positivef64value now.svgfilters::ColorMatrix::Saturateaccepts any positivef64value now.- Fonts memory mapping was split into a separate build feature:
memmap-fonts. Now you can build resvg/usvg withsystem-fonts, but withoutmemmap-fonts. Enabled by default. - The
--dump-svgargument in resvg CLI tool should be enabled using--features dump-svgnow. No enabled by default. usvg::Tree::to_stringis behind theexportbuild feature now.
- When writing SVG,
usvgwill usergba()notations for colors instead of#RRGGBB.
0.16.0 - 2021-08-22
- CSS3 colors support. Specifically
rgba,hsl,hslaandtransparent. SVG2 - Allow missing
rx/ryattributes onellipse. SVG2 - Allow markers on all shapes. SVG2
textPathcan reference basic shapes now. SVG2usvg::OptionsRef, which is a non-ownedusvg::Optionsvariant.simplecssupdated with CSS specificity support.turnangle unit support. SVG2- Basic
font-variant=small-capssupport. No font fallback. --export-area-pageto resvg.--export-area-drawingto resvg.
resvg::render_noderequiresusvg::Treenow.usvg::Colorgained analphafield.
usvg::Node::tree. Cannot be implemented efficiently anymore.usvg::SystemFontDB. No longer needed.
patternscaling.- Greatly improve
symbolresolving speed inusvg. - Whitespaces trimming on nested
tspan.
0.15.0 - 2021-06-13
- Allow reading SVG from stdin in
resvgbinary. --id-prefixtousvg.FitTo::Sizeresvgbinary accepts--widthand--heightargs together now. Previously, only--widthor--heightwere allowed.usvg::Path::text_bbox- The maximum number of SVG elements is limited by 1_000_000 now. Mainly to prevent a billion laugh style attacks.
- The maximum SVG elements nesting is limited by 1024 now.
usvg::Error::ElementsLimitReached
- Improve clipping and masking performance on large images.
- Remove layers caching. This was a pointless optimization.
- Split Preprocessing into Reading and Parsing in
resvg --perf. usvg::XmlOptionsrewritten.usvg::Tree::to_stringrequires a reference toXmlOptionsnow.
usvg::Tree::from_file. Usefrom_dataorfrom_strinstead.usvg::Error::InvalidFileSuffixusvg::Error::FileOpenFailed- (c-api)
RESVG_ERROR_INVALID_FILE_SUFFIX
- Ignore tiny blur values. It could lead to a transparent image.
usestyle propagation when used withsymbol.- Vertical text layout with relative offsets.
- Text bbox calculation.
usvguses font metrics instead of path bbox now.
0.14.1 - 2021-04-18
- Allow
hrefwithout thexlinknamespace. This feature is part of SVG 2 (which we do not support), but there are more and more files like this in the wild.
- (usvg) Do not write
usvg:versionto the output SVG.
- (usvg)
overflow='inherit'resolving. - (usvg) SVG Path length calculation that affects
startOffsetproperty intextPath. - (usvg) Fix
feImageresolving when the linked element hasopacity,clip-path,maskand/orfilterattributes. - (usvg) Fix chained
feImageresolving. - CLI arguments processing.
0.14.0 - 2021-03-06
- Multiple critical bugs in
tiny-skia.
0.13.1 - 2021-01-20
imagewith float size scaling.- Critical bug in
tiny-skia.
0.13.0 - 2020-12-21
--resources-diroption to CLI tools.- (usvg)
Tree::from_xmltree
- Remove the
Imagestruct.render()andrender_node()methods now accepttiny_skia::PixmapMut. - Update
fontdb. - Update
tiny-skia. - (c-api)
resvg_sizeusesdoubleinstead ofuint32_tnow. - (qt-api)
defaultSize()anddefaultSizeF()methods now return SVG size and not SVG viewbox size. - (usvg)
Options::pathchanged toOptions::resources_dirand requires a directory now. - (c-api)
resvg_options_set_file_pathchanged toresvg_options_set_resources_dirand requires a directory now. - (qt-api)
ResvgOptions::setFilePathchanged toResvgOptions::setResourcesDirand requires a directory now.
- Support multiple values inside a
text-decorationattribute.
Image. Usetiny_skia::PixmapMutinstead.- (c-api)
resvg_imagestruct andresvg_image_*methods.resvgrenders onto the provided buffer now. - (c-api)
resvg_color, because unused.
0.12.0 - 2020-12-05
- resvg no longer requires a C++ compiler!
tiny-skiawas updated to a pure Rust version, which means thatresvgno longer depends onclangand should work on 32bit targets.rustybuzzwas updated to a pure Rust version.tools/explorer-thumbnaileris back and written in Rust now. Thanks to gentoo90.
- (usvg) Do not panic when a font has a zero-sized underline thickness.
- (usvg) Multiple
textPathprocessing fixes by chubei-oppen. - (qt-api)
boundsOnElementandboundingBoxwere returning transposed bounds.
0.11.0 - 2020-07-04
- All backends except Skia were removed. Skia is the only official one from now.
- New C API implementation.
- Support for user-defined fonts in usvg, resvg and C API.
--serif-family,--sans-serif-family,--cursive-family,--fantasy-family--monospace-family,--use-font-file,--use-fonts-dir,--skip-system-fontsand--list-fontsoptions to all CLI tools.- New tests suite. Instead of testing against the previous build, now we're testing against
prerendered PNG images. Which is way faster.
And you can test resvg without the internet connection now.
And all you need is justcargo test.
- Library uses an embedded Skia by default now.
- Switch
harfbuzz_rswithrustybuzz. - Rendering doesn't require
usvg::Optionsnow. - (usvg) The
fontdbmodule moved into its own crate. - (usvg)
fontconfigis no longer used for matching generic fonts on Linux. Mainly because it's very slow. - (usvg) When an
imageelement contains a file path, the file will be loaded into memory now, instead of simply storing a file path. And will be dumped as base64 on SVG save. In case of an SVG image, it will be loaded as aTreeand saved as base64 encoded XML on save. - (usvg)
ImageDatareplaced withImageKind. - (usvg) Fonts database is empty by default now and should be filled manually.
- (c-api) Almost a complete rewrite.
- All backends except the Skia one.
Optionsfrom all backends. We don't use it anymore.- (usvg)
ImageFormat. - (c-api) Rendering on a backends canvas no longer supported. Was constantly misused.
0.10.0 - 2020-06-19
- The
resvgcrate has been split into four: resvg-cairo, resvg-qt, resvg-skia and resvg-raqote.
So from now, instead of enabling a required backend via cargo features, you should select a required backend-specific crate.
This allows us to have a better integration with a selected 2D library.
And we also have separated C API implementations now.
And each backend has its own vendored archive too. - (qt-backend) Use
QImageinstead of Rust libraries for raster images loading.
- The
resvgcrate. Use backend-specific crates. tools/rendersvg. Each backend has its own CLI tool now.tools/usvg.usvgimplements CLI by default now.- (c-api)
resvg_*_render_to_filemethods. - (qt-backend)
jpeg-decoderandpngdependencies.
0.9.1 - 2020-06-03
- Stack overflow when
enable-backgroundandfilterare set on the same element. - Grayscale PNG loading.
- Allow building on BSD.
- (usvg) Font fallback when shaping produces a different amount of glyphs.
- (usvg) Ignore a space after the last character during
letter-spacingprocessing. - (usvg)
marker-endrendering when the last segment is a curve with the second control point that coincides with end point. - (usvg) Accept embedded
imagedata without mime. - (usvg) Fonts search in a home directory on Linux.
- (usvg)
dycalculation fortextPaththanks to Stoeoef - (usvg)
textPathresolving when a referenced path has a transform.
Thanks to Stoeoef. - (usvg) Load user fonts on macOS too.
- (xmlparser) Parsing comment before DTD.
0.9.0 - 2020-01-18
feConvolveMatrix,feMorphology,feDisplacementMap,feTurbulence,feDiffuseLightingandfeSpecularLightingsupport.BackgroundImage,BackgroundAlpha,FillPaintandStrokePaintsupport as a filter input.- Load grayscale raster images.
enable-backgroundsupport.- resvg/usvg can be built without text rendering support now.
OutputImage::make_vecandOutputImage::make_rgba_vec.feImagewith a reference to an internal element.
feCompositek1-4 coefficients can have any number now. This matches browsers behaviour.- Use
flate2instead oflibflatefor GZip decoding. - (usvg)
fillandstrokeattributes will always be set forpathnow. - (usvg)
g,pathandimagecan now be set insidedefs. Required byfeImage. - (c-api) Rename
resvg_*_render_to_imageintoresvg_*_render_to_file.
- (usvg) Transform processing during text-to-path conversion.
feCompositewith fully transparent region was producing an invalid result.- Fallback to
matrixinfeColorMatrixwhentypeis not set or invalid. - ID preserving for
useelements. feFloodwith subregion andprimitiveUnits=objectBoundingBox.- (harfbuzz_rs) Memory leak.
0.8.0 - 2019-08-17
- A Skia backend thanks to JaFenix.
feComponentTransfersupport.feColorMatrixsupport.- A better CSS support.
- An
*.otffonts support. - (usvg)
dx,dyare supported insidetextPathnow. - Use a box blur for
feGaussianBlurwithstdDeviation>=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-argsinstead ofgumdropto reduced the build time oftools/rendersvgandtools/usvg. - (usvg) The
xmlwriteris 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-shiftprocessing insidetextPath. - (usvg) Remove all
trefelement children. - (usvg)
trefwithxml:spaceresolving. - (usvg) Ignore nested
tref. - (usvg) Ignore invalid
clipPathchildren that were referenced viause. - (usvg)
currentColorwill always fallback to black now. Previously,strokewas set tononewhich is incorrect. - (usvg)
usecan 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
styleelement and attribute.
- (cairo-backend)
gdk-pixbufdependency. - (qt-backend) JPEG image format plugin dependency.
svgdomdependency.
0.7.0 - 2019-06-19
- New text layout implementation:
textPathsupport.writing-modesupport, aka vertical text.- Text BIDI reordering.
- Better text shaping.
word-spacingis supported for all backends now.harfbuzzdependency.- Subscript, superscript offsets are extracted from font and not hardcoded now.
shape-rendering,text-renderingandimage-renderingsupport.- The
arithmeticoperator forfeComposite. - (usvg)
--quietargument. - (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
usvgside now. - (resvg) Do not rescale images before rendering. This is faster and better.
- (usvg) An
imageelement 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-filtersattribute will not be exported now.
- (usvg) All text related structures and enums. Text will be converted into
Pathnow. InitObjectandinit()because they are no longer needed.- (c-api)
resvg_handle,resvg_init,resvg_destroy. - (c-api)
resvg_cairo_get_node_bboxandresvg_qt_get_node_bbox. Use backend-independentresvg_get_node_bboxinstead. - (cairo-backend)
pangodependency. - (resvg)
Backend::calc_node_bbox. UseNode::calculate_bbox()instead.
letter-spacingon cursive scripts (like Arabic).- (rctree) Prevent stack overflow on a huge, deeply nested SVG.
- (c-api)
resvg_is_image_emptywas always returningfalse. - (resvg) Panic when
filterwithobjectBoundingBoxwas set on an empty group. - (usvg)
maskwithobjectBoundingBoxresolving. - (usvg)
pattern'sviewBoxattribute resolving viahref. - (roxmltree) Namespace resolving.
0.6.1 - 2019-03-16
- (usvg)
transformmultiplication. - (usvg)
useinsideclipPathresolving.
0.6.0 - 2019-03-16
- Nested
baseline-shiftsupport. - (qt-api)
renderToImage. - (usvg) A better algorithm for unused defs (
defselement children, like gradients) removal. - (usvg)
Error::InvalidSize. - (c-api)
RESVG_ERROR_INVALID_SIZE.
- (usvg) A major rewrite.
baseline-shiftwithsub,superand 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)
rendermethods areconstnow. - (usvg) Disable default attributes exporting.
- (usvg) Marker element and attributes. Markers will be resolved just like
usenow.
- (resvg) During the
tspanrendering, thetextbbox will be used instead of thetspanbbox itself. This is the correct behaviour by the SVG spec. - (cairo-backend)
font-familyparsing. - (usvg)
filter:noneprocessing. - (usvg)
textinsidetextprocessing. - (usvg) Endless loop during
useresolving. - (usvg) Endless loop when SVG has indirect recursive
xlink:hreflinks. - (usvg) Endless loop when SVG has recursive
marker-*links. - (usvg) Panic during
useresolving. - (usvg) Panic during inherited attributes resolving.
- (usvg) Groups regrouping.
- (usvg)
dx/dyprocessing ontext. - (usvg)
textAnchorresolving. - (usvg) Ignore
fill-ruleontext. - (svgtypes) Style with comments parsing.
- (roxmltree) Namespaces resolving.
0.5.0 - 2019-01-04
markersupport.- Partial
baseline-shiftsupport. letter-spacingsupport.- (qt-backend)
word-spacingsupport. Does not work on the cairo backend. - tools/explorer-thumbnailer
- tools/kde-dolphin-thumbnailer
- Object bounding box calculation.
- Pattern scaling.
- Nested
objectBoundingBoxsupport. - (usvg)
coloronuseresolving. - (usvg)
offsetattribute resolving inside thestopelement. - (usvg) Ungrouping of groups with non-inheritable attributes.
- (usvg)
rotateattribute 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
clipPaththat hadfilteron a child. - (usvg) Style attributes resolving on the root
svgelement. - (usvg)
SmoothCurveToandSmoothQuadraticconversion. - (usvg)
symbolresolving. - (cairo-backend) Font ascent calculation.
- (qt-backend) Stroking of LineTo specified as CurveTo.
- (svgdom)
stroke-miterlimitattribute parsing. - (svgdom)
lengthandnumberattribute types parsing. - (svgdom)
offsetattribute parsing. - (svgdom) IRI resolving order when SVG has duplicated ID's.
0.4.0 - 2018-12-13
- (resvg) Initial filters support.
- (resvg) Nested
clipPathandmasksupport. - (resvg) MSVC support.
- (rendersvg)
font-family,font-sizeandlanguagesto args. - (usvg)
systemLanguageattribute support. - (usvg) Default font family and size is configurable now.
- (c-api)
RESVG_ERROR_PARSING_FAILED. - (c-api)
font_family,font_sizeandlanguagestoresvg_options. - (qt-api)
ResvgRenderer::setDevicePixelRatio.
- (rendersvg) Use
gumdropinstead 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
imagetag. - (resvg) Bbox calculation of the text with rotate.
- (resvg) Invisible elements processing.
- (qt-api) SVG from QByteArray loading when data is invalid.
- (usvg)
displayattribute processing. - (usvg) Recursive
maskresolving. - (usvg)
inheritattribute value resolving. - (svgdom) XML namespaces resolving.
- (rendersvg)
failuredependency.
0.3.0 - 2018-05-23
- (c-api)
resvg_is_image_empty. - (c-api)
resvg_errorenum. - (c-api) Qt wrapper.
- (resvg) Advanced text layout support (lists of x, y, dx, dy and rotate).
- (resvg) SVG support for
imageelement. - (usvg)
symbolelement support. - (usvg) Nested
svgelements 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_dataresvg_cairo_render_to_imageandresvg_qt_render_to_imagewill return an error code now. - (cairo-backend) Use
gdk-pixbufcrate instead ofimage. - (resvg)
Render::render_to_imageandRender::render_node_to_imagewill returnOptionand notResultnow. - (resvg) New geometry primitives implementation.
- (resvg) Rename
render_*modules tobackend_. - (rendersvg) Use
getoptsinstead ofclapto reduce the executable size. - (svgtypes)
StreamExt::parse_iriandStreamExt::parse_func_iriwill parse not only well-formed data now.
- (qt-backend) Gradient with
objectBoundingBoxrendering. - (qt-backend) Text bounding box detection during the rendering.
- (cairo-backend)
imageelement clipping. - (cairo-backend) Layers management.
- (c-api)
resvg_get_node_transformwill return a correct transform now. - (resvg)
text-decorationthickness. - (resvg)
patternscaling. - (resvg)
imagewithout size rendering. - (usvg) Panic during
visibilityresolving. - (usvg) Gradients with one stop resolving.
- (usvg)
useattributes resolving. - (usvg)
clipPathandmaskattributes resolving. - (usvg)
offsetattribute instopelement resolving. - (usvg) Incorrect
font-sizeattribute resolving. - (usvg) Gradient stops resolving.
- (usvg)
switchelement resolving. - (svgdom) Mixed
xml:spaceprocessing. - (svgtypes)
Paint::from_spanpoor 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
clipPathsupport. - (svg) Partial
masksupport. - (svg) Partial
patternsupport. - (svg)
preserveAspectRatiosupport. - (svg) Check that an external image is PNG or JPEG.
- (rendersvg) Added
--query-alland--export-idarguments to render SVG items by ID. - (rendersvg) Added
--perfargument for a simple performance stats.
- (resvg) API is completely new.
font-sizeattribute inheritance duringuseresolving.