Closed renovate[bot] closed 1 year ago
Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.
You can manually request rebase by checking the rebase/retry box above.
ā Warning: custom changes will be lost.
This PR contains the following updates:
0.4
->0.35
Release Notes
RazrFalcon/resvg (usvg)
### [`v0.35.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0350---2023-06-27) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.34.1...v0.35.0) ##### Fixed - Panic when an element is completely outside the viewbox. ##### Removed - `FillPaint` and `StrokePaint` filter 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_paint` and `usvg::filter::Filter::stroke_paint`. - `BackgroundImage`, `BackgroundAlpha`, `FillPaint` and `StrokePaint` from `usvg::filter::Input`. - `usvg::Group::filter_fill_paint` and `usvg::Group::filter_stroke_paint`. ### [`v0.34.1`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0341---2023-05-28) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.34.0...v0.34.1) ##### Fixed - Transform components order. Affects only `usvg` SVG output and C API. ### [`v0.34.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0340---2023-05-27) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.33.0...v0.34.0) ##### Changed - `usvg` uses `tiny-skia` geometry primitives now, including the `Path` container.The main difference compared to the old `usvg` primitives is that `tiny-skia` uses `f32` instead of `f64`. So while in theory we could loose some precision, in practice, `f32` is used mainly as a storage type and precise math operations are still done using `f64`.
`tiny-skia` primitives 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 convert `usvg::PathData` into `tiny-skia::Path` before rendering. Which was just a useless reallocation. - All numbers are stored as `f32` instead of `f64` now. - Because we use `tiny-skia::Path` now, we allow *quadratic curves* as well. This includes `usvg` CLI 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::Path` no longer implements `Default`. Use `usvg::Path::new` instead. - Replace `usvg::Rect` with `tiny_skia::NonZeroRect`. - Replace `usvg::PathBbox` with `tiny_skia::Rect`. - Unlike the old `usvg::PathBbox`, `tiny_skia::Rect` allows both width and height to be zero. This is not an error. - `usvg::filter::Turbulence::base_frequency` was split into `base_frequency_x` and `base_frequency_y`. - `usvg::NodeExt::calculate_bbox` no longer includes stroke bbox. - (c-api) Use `float` instead of `double` everywhere. - The `svgfilters` crate was merged into `resvg`. - The `rosvgtree` crate was merged into `usvg-parser`. - `usvg::Group::filter_fill` moved to `usvg::filter::Filter::fill_paint`. - `usvg::Group::filter_stroke` moved to `usvg::filter::Filter::stroke_paint`. ##### Remove - `usvg::Point`. Use `tiny_skia::Point` instead. - `usvg::FuzzyEq`. Use `usvg::ApproxEqUlps` instead. - `usvg::FuzzyZero`. Use `usvg::ApproxZeroUlps` instead. - (c-api) `resvg_path_bbox`. Use `resvg_rect` instead. - `svgfilters` crate. - `rosvgtree` crate. ##### Fixed - Write `transform` on `clipPath` children in `usvg` SVG output. - Do not duplicate marker children IDs. Previously, each element resolved for a marker would preserve its ID. Affects only `usvg` SVG output and doesn't affect rendering. ### [`v0.33.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0330---2023-05-17) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.32.0...v0.33.0) ##### Added - A new rendering algorithm.
When rendering [isolated groups](https://razrfalcon.github.io/notes-on-svg-parsing/isolated-groups.html), 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](https://togithub.com/google/forma/blob/681e8bfd348caa61aab47437e7d857764c2ce522/assets/svgs/paris-30k.svg) sample from [google/forma](https://togithub.com/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 actual `paris-30k.svg` content, then we're *13 times* faster. From ~3252ms down to ~253ms. - `resvg::Tree`, aka a render tree, which is an even simpler version of `usvg::Tree`. `usvg::Tree` had to be converted into `resvg::Tree` before rendering now. ##### Changed - Restructure the root directory. All crates are in the `crates` directory now. - Restructure tests. New directory structure and naming scheme. - Use `resvg::Tree::render` instead of `resvg::render`. - resvg's `--export-area-drawing` option uses calculated bounds instead of trimming excessive alpha now. It's faster, but can lead to a slightly different output. - (c-api) Removed `fit_to` argument from `resvg_render`. - (c-api) Removed `fit_to` argument from `resvg_render_node`. - `usvg::ScreenSize` moved to `resvg`. - `usvg::ScreenRect` moved to `resvg`. - Rename `resvg::ScreenSize` into `resvg::IntSize`. - Rename `resvg::ScreenRect` into `resvg::IntRect`. ##### Removed - `filter` build feature from `resvg`. Filters are always enabled now. - `resvg::FitTo` - `usvg::utils::view_box_to_transform_with_clip` - `usvg::Size::to_screen_size`. Use `resvg::IntSize::from_usvg` instead. - `usvg::Rect::to_screen_size`. Use `resvg::IntSize::from_usvg(rect.size())` instead. - `usvg::Rect::to_screen_rect`. Use `resvg::IntRect::from_usvg` instead. - (c-api) `resvg_fit_to` - (c-api) `resvg_fit_to_type` ##### Fixed - Double quotes parsing in `font-family`. ### [`v0.32.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0320---2023-04-23) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.31.0...v0.32.0) ##### Added - Clipping and masking is up to 20% faster. - `mask-type` property support. SVG2 - `usvg_tree::MaskType` - `usvg_tree::Mask::kind` - (rosvgtree) New SVG 2 mask attributes. ##### Changed - `BackgroundImage` and `BackgroundAlpha` filter inputs will produce the same output as `SourceGraphic` and `SourceAlpha` respectively. ##### Removed - `enable-background` support. 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::EnableBackground` - `usvg_tree::Group::enable_background` - `usvg_tree::NodeExt::filter_background_start_node` ##### Fixed - Improve rectangular clipping anti-aliasing quality. - Mask's RGB to Luminance converter was ignoring premultiplied alpha. ### [`v0.31.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0310---2023-04-10) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.30.0...v0.31.0) ##### Added - `usvg::Tree::paint_servers` - `usvg::Tree::clip_paths` - `usvg::Tree::masks` - `usvg::Tree::filters` - `usvg::Node::subroots` - (usvg) `--coordinates-precision` and `--transforms-precision` writing options. Thanks to [@flxzt](https://togithub.com/flxzt). ##### Fixed - `fill-opacity` and `stroke-opacity` resolving. - Double `transform` when resolving `symbol`. - `symbol` clipping 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. ### [`v0.30.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0300---2023-03-25) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.29.0...v0.30.0) ##### Added - Readd `usvg` CLI tool. Can be installed via cargo as before. ##### Changed - Extract most `usvg` internals into new `usvg-tree` and `usvg-parser` crates. `usvg-tree` contains just the SVG tree and all the types. `usvg-parser` parsers SVG into `usvg-tree`. And `usvg` is just an umbrella crate now. - To use `usvg::Tree::from*` methods one should import the `usvg::TreeParsing` trait now. - No need to import `usvg-text-layout` manually anymore. It is part of `usvg` now. - `rosvgtree` no longer reexports `svgtypes`. - `rosvgtree::Node::attribute` returns just a string now. - `rosvgtree::Node::find_attribute` returns just a `rosvgtree::Node` now. - Rename `usvg::Stretch` into `usvg::FontStretch`. - Rename `usvg::Style` into `usvg::FontStyle`. - `usvg::FitTo` moved to `resvg::FitTo`. - `usvg::IsDefault` trait is private now. ##### Removed - `rosvgtree::FromValue`. Due to Rust's orphan rules this trait is pretty useless. ##### Fixed - Recursive markers detection. - Skip malformed `transform` attributes without skipping the whole element. - Clipping path rectangle calculation for nested `svg` elements. Thanks to [@LaurenzV](https://togithub.com/LaurenzV). - Panic when applying `text-decoration` on text with only one cluster. Thanks to [@LaurenzV](https://togithub.com/LaurenzV). - (Qt API) Image size wasn't initialized. Thanks to [@missdeer](https://togithub.com/missdeer). - `resvg` CLI allows files with XML DTD again. - (svgtypes) Handle implicit MoveTo after ClosePath segments. ### [`v0.29.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0290---2023-02-04) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.28.0...v0.29.0) ##### Added - `resvg` CLI 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 up `resvg` execution. - `usvg::Group::should_isolate` - `usvg::Tree::has_text_nodes` ##### Changed - Some `usvg` internals were moved into the new `rosvgtree` crate. - Dummy groups are no longer removed. Use `usvg::Group::should_isolate` to check if a group affects rendering. - `usvg-text-layout::TreeTextToPath::convert_text` no longer has the `keep_named_groups` argument. - MSRV bumped to 1.65 - Update dependencies. ##### Removed - `usvg::Options::keep_named_groups`. Dummy groups are no longer removed. - (c-api) `resvg_options_set_keep_named_groups` - (Qt API) `ResvgOptions::setKeepNamedGroups` ##### Fixed - Missing `font-family` handling. - `font-weight` resolving. ### [`v0.28.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0280---2022-12-03) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.27.0...v0.28.0) ##### Added - `usvg::Text` and `usvg::NodeKind::Text`. ##### Changed - `usvg` isn't converting text to paths by default now. A caller must call `usvg::Tree::convert_text` or `usvg::Text::convert` from `usvg-text-layout` crate on demand. - `usvg` text layout implementation moved into `usvg-text-layout` crate. - During SVG size recovery, when no `width`, `height` and `viewBox` attributes 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. - `usvg` is purely an SVG parser now. It doesn't convert text to paths and doesn't write SVG anymore. - `usvg::filter::ConvolveMatrixData` methods are fields now. ##### Removed - `usvg` CLI binary. No alternatives for now. - All `usvg` build features. - `filter`. Filter elements are always parsed by `usvg` now. - `text`. Text elements are always parsed by `usvg` now. - `export`. `usvg` cannot write an SVG anymore. - `usvg::Tree::to_string`. `usvg` cannot write an SVG anymore. - `usvg::TransformFromBBox` trait. This is just a regular `usvg::Transform` method now. - `usvg::OptionsRef`. `usvg::Options` is enough from now. - `usvg::Options::fontdb`. Used only by `usvg-text-layout` now. - `--dump-svg` from `resvg`. ### [`v0.27.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0270---2022-11-27) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.26.1...v0.27.0) ##### Added - `lengthAdjust` and `textLength` attributes support. - Support automatic `image` size detection. `width` and `height` attributes can be omitted or set to `auto` on `image` now. SVG2 ##### Fixed - `--query-all` flag in `resvg` CLI. - Percentage values resolving. ### [`v0.26.1`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0261---2022-11-21) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.26.0...v0.26.1) ##### Fixed - Allow `dominant-baseline` and `alignment-baseline` to be set via CSS. ### [`v0.26.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0260---2022-11-20) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.25.0...v0.26.0) ##### Added - Minimal `dominant-baseline` and `alignment-baseline` support. - `mix-blend-mode` and `isolation` support. SVG2 - Allow writing resvg output to stdout. - Allow disabling text kerning using `kerning="0"` and `style="font-kerning:none"`. SVG2 - Allow `
You can write `opacity="50%"` now. SVG2 ##### Changed - Disable focal point correction on radial gradients to conform with SVG 2. SVG2 - Update `feMorphology` radius value resolving. ##### Fixed - Do not clip nested `svg` when only the `viewBox` attribute is present. ### [`v0.25.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0250---2022-10-30) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.24.0...v0.25.0) ##### Added - Partial `paint-order` attribute support. Markers can only be under or above the shape. ##### Fixed - Compilation issues caused by `rustybuzz` update. ### [`v0.24.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0240---2022-10-22) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.23.0...v0.24.0) ##### Added - CSS3 `writing-mode` variants `vertical-rl` and `vertical-lr`. Thanks to [yisibl](https://togithub.com/yisibl). - (tiny-skia) AArch64 Neon SIMD support. Up to 3x faster on Apple M1. ##### Changed - `usvg::Tree` stores only `Group`, `Path` and `Image` nodes now. Instead of emulating an SVG file structure, where gradients, patterns, filters, clips and masks are part of the nodes tree (usually inside the `defs` element), we reference them using `Rc` from now. This change makes `usvg` a bit simpler. Makes `usvg` API way easier, since instead of looking for a node via `usvg::Tree::defs_by_id` the caller can access the type directly via `Rc`. And makes creation of custom `usvg::Tree`s way easier. - `clip_path`, `mask` and `filters` `usvg::Group` fields store `Rc` instead of `String` now. - `usvg::NodeExt::units` was moved to `usvg::Paint::units`. - `usvg::filter::ImageKind::Use` stores `usvg::Node` instead of `String`. - `usvg::PathData` stores commands and points separately now to reduce overall memory usage. - `usvg::PathData` segments should be accessed via `segments()` now. - Most numeric types have been moved to the `strict-num` crate. - Rename `NormalizedValue` into `NormalizedF64`. - Rename `PositiveNumber` into `PositiveF64`. - Raw number of numeric types should be accessed via `get()` method instead of `value()` now. - `usvg::TextSpan::font_size` is `NonZeroPositiveF64` instead of `f64` now. - Re-export `usvg` and `tiny-skia` dependencies in `resvg`. - Re-export `roxmltree` dependency in `usvg`. - (usvg) Output float precision is reduced from 11 to 8 digits. ##### Removed - `usvg::Tree::create`. `usvg::Tree` is an open struct now. - `usvg::Tree::root`. It's a public field now. - `usvg::Tree::svg_node`. Replaced with `usvg::Tree` public fields. - `defs`, `is_in_defs`, `append_to_defs` and `defs_by_id` from `usvg::Tree`. We no longer emulate SVG structure. No alternative. - `usvg::Tree::is_in_defs`. There are no `defs` anymore. - `usvg::Paint::Link`. We store gradient and patterns directly in `usvg::Paint` now. - `usvg::Svg`. No longer needed. `size` and `view_box` are `usvg::Tree` fields now. - `usvg::SubPathIter` and `usvg::PathData::subpaths`. No longer used. ##### Fixed - Path bbox calculation scales stroke width too. Thanks to [growler](https://togithub.com/growler). - (tiny-skia) Round caps roundness. - (xmlparser) Stack overflow on specific files. - (c-api) `resvg_is_image_empty` output was inverted. ### [`v0.23.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0230---2022-06-11) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.22.0...v0.23.0) ##### Added - `#RRGGBBAA` and `#RGBA` color notation support. Thanks to [demurgos](https://togithub.com/demurgos). ##### Fixed - Panic during recursive `pattern` resolving. Thanks to [FylmTM](https://togithub.com/FylmTM). - Spurious warning when using `--export-id`. Thanks to [benoit-pierre](https://togithub.com/benoit-pierre). ### [`v0.22.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0220---2022-02-20) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.21.0...v0.22.0) ##### Added - Support `svg` referenced by `use`. External SVG files are still not supported. ##### Changed - `ttf-parser`, `fontdb` and `rustybuzz` have been updated. ### [`v0.21.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0210---2022-02-13) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.20.0...v0.21.0) ##### Added - `usvg::ImageHrefResolver` that allows a custom `xlink:href` handling. Thanks to [antmelnyk](https://togithub.com/antmelnyk). - `usvg::Options::image_href_resolver` - Support for GIF images inside the `
And you can test resvg without the internet connection now.
And all you need is just `cargo test`. ##### Changed - Library uses an embedded Skia by default now. - Switch `harfbuzz_rs` with `rustybuzz`. - Rendering doesn't require `usvg::Options` now. - (usvg) The `fontdb` module moved into its own crate. - (usvg) `fontconfig` is no longer used for matching [generic fonts](https://www.w3.org/TR/2018/REC-css-fonts-3-20180920/#generic-family-value) on Linux. Mainly because it's very slow. - (usvg) When an `image` element 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 a `Tree` and saved as base64 encoded XML on save. - (usvg) `ImageData` replaced with `ImageKind`. - (usvg) Fonts database is empty by default now and should be filled manually. - (c-api) Almost a complete rewrite. ##### Removed - All backends except the Skia one. - `Options` from all backends. We don't use it anymore. - (usvg) `ImageFormat`. - (c-api) Rendering on a backends canvas no longer supported. Was constantly misused. ### [`v0.10.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#0100---2020-06-19) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.9.1...v0.10.0) ##### Changed - The `resvg` crate 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 `QImage` instead of Rust libraries for raster images loading. ##### Removed - The `resvg` crate. Use backend-specific crates. - `tools/rendersvg`. Each backend has its own CLI tool now. - `tools/usvg`. `usvg` implements CLI by default now. - (c-api) `resvg_*_render_to_file` methods. - (qt-backend) `jpeg-decoder` and `png` dependencies. ### [`v0.9.1`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#091---2020-06-03) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.9.0...v0.9.1) ##### Fixed - Stack overflow when `enable-background` and `filter` are 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-spacing` processing. - (usvg) `marker-end` rendering when the last segment is a curve with the second control point that coincides with end point. - (usvg) Accept embedded `image` data without mime. - (usvg) Fonts search in a home directory on Linux. - (usvg) `dy` calculation for `textPath` thanks to [Stoeoef](https://togithub.com/Stoeoef) - (usvg) `textPath` resolving when a referenced path has a transform.
Thanks to [Stoeoef](https://togithub.com/Stoeoef). - (usvg) Load user fonts on macOS too. - (xmlparser) Parsing comment before DTD. ### [`v0.9.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#090---2020-01-18) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.8.0...v0.9.0) ##### Added - `feConvolveMatrix`, `feMorphology`, `feDisplacementMap`, `feTurbulence`, `feDiffuseLighting` and `feSpecularLighting` support. - `BackgroundImage`, `BackgroundAlpha`, `FillPaint` and `StrokePaint` support as a filter input. - Load grayscale raster images. - `enable-background` support. - resvg/usvg can be built without text rendering support now. - `OutputImage::make_vec` and `OutputImage::make_rgba_vec`. - `feImage` with a reference to an internal element. ##### Changed - `feComposite` k1-4 coefficients can have any number now. This matches browsers behaviour. - Use `flate2` instead of `libflate` for GZip decoding. - (usvg) `fill` and `stroke` attributes will always be set for `path` now. - (usvg) `g`, `path` and `image` can now be set inside `defs`. Required by `feImage`. - (c-api) Rename `resvg_*_render_to_image` into `resvg_*_render_to_file`. ##### Fixed - (usvg) Transform processing during text-to-path conversion. - `feComposite` with fully transparent region was producing an invalid result. - Fallback to `matrix` in `feColorMatrix` when `type` is not set or invalid. - ID preserving for `use` elements. - `feFlood` with subregion and `primitiveUnits=objectBoundingBox`. - (harfbuzz_rs) Memory leak. ### [`v0.8.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#080---2019-08-17) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.7.0...v0.8.0) ##### Added - A [Skia](https://skia.org/) backend thanks to [JaFenix](https://togithub.com/JaFenix). - `feComponentTransfer` support. - `feColorMatrix` support. - A better CSS support. - An `*.otf` fonts support. - (usvg) `dx`, `dy` are supported inside `textPath` now. - Use a box blur for `feGaussianBlur` with `stdDeviation`>=2. This is 4-8 times faster than IIR blur. Thanks to [Shnatsel](https://togithub.com/Shnatsel). ##### Changed - All backends are using Rust crates for raster images loading now. - Use `pico-args` instead of `gumdrop` to reduced the build time of `tools/rendersvg` and `tools/usvg`. - (usvg) The `xmlwriter` is used for SVG generation now. Almost 2x faster than generating an `svgdom`. - (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 ##### Fixed - (qt-api) A default font resolving. - (usvg) `baseline-shift` processing inside `textPath`. - (usvg) Remove all `tref` element children. - (usvg) `tref` with `xml:space` resolving. - (usvg) Ignore nested `tref`. - (usvg) Ignore invalid `clipPath` children that were referenced via `use`. - (usvg) `currentColor` will always fallback to black now. Previously, `stroke` was set to `none` 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. ##### Removed - (cairo-backend) `gdk-pixbuf` dependency. - (qt-backend) JPEG image format plugin dependency. - `svgdom` dependency. ### [`v0.7.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#070---2019-06-19) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.6.1...v0.7.0) ##### Added - New text layout implementation: - `textPath` support. - `writing-mode` support, aka vertical text. - [Text BIDI reordering](http://www.unicode.org/reports/tr9/). - Better text shaping. - `word-spacing` is supported for all backends now. - [`harfbuzz`](https://togithub.com/harfbuzz/harfbuzz) dependency. - Subscript, superscript offsets are extracted from font and not hardcoded now. - `shape-rendering`, `text-rendering` and `image-rendering` support. - The `arithmetic` operator for `feComposite`. - (usvg) `--quiet` argument. - (c-api) `resvg_get_image_bbox`. - (qt-api) `ResvgRenderer::boundingBox`. - (resvg) A [raqote](https://togithub.com/jrmuizel/raqote) backend thanks to [jrmuizel](https://togithub.com/jrmuizel). Still experimental. ##### Changed - 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. ##### Removed - (usvg) All text related structures and enums. Text will be converted into `Path` now. - `InitObject` and `init()` because they are no longer needed. - (c-api) `resvg_handle`, `resvg_init`, `resvg_destroy`. - (c-api) `resvg_cairo_get_node_bbox` and `resvg_qt_get_node_bbox`. Use backend-independent `resvg_get_node_bbox` instead. - (cairo-backend) `pango` dependency. - (resvg) `Backend::calc_node_bbox`. Use `Node::calculate_bbox()` instead. ##### Fixed - `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 returning `false`. - (resvg) Panic when `filter` with `objectBoudningBox` was set on an empty group. - (usvg) `mask` with `objectBoundingBox` resolving. - (usvg) `pattern`'s `viewBox` attribute resolving via `href`. - (roxmltree) Namespace resolving. ### [`v0.6.1`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#061---2019-03-16) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.6.0...v0.6.1) ##### Fixed - (usvg) `transform` multiplication. - (usvg) `use` inside `clipPath` resolving. ### [`v0.6.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#060---2019-03-16) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.5.0...v0.6.0) ##### Added - 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`. ##### Changed - (usvg) A major rewrite. - `baseline-shift` with `sub`, `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 are `const` now. - (usvg) Disable default attributes exporting. ##### Removed - (usvg) Marker element and attributes. Markers will be resolved just like `use` now. ##### Fixed - (resvg) During the `tspan` rendering, the `text` bbox will be used instead of the `tspan` bbox itself. This is the correct behaviour by the SVG spec. - (cairo-backend) `font-family` parsing. - (usvg) `filter:none` processing. - (usvg) `text` inside `text` 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 on `text`. - (usvg) `textAnchor` resolving. - (usvg) Ignore `fill-rule` on `text`. - (svgtypes) Style with comments parsing. - (roxmltree) Namespaces resolving. ### [`v0.5.0`](https://togithub.com/RazrFalcon/resvg/blob/HEAD/CHANGELOG.md#050---2019-01-04) [Compare Source](https://togithub.com/RazrFalcon/resvg/compare/v0.4.0...v0.5.0) ##### Added - `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 ##### Fixed - Object bounding box calculation. - Pattern scaling. - Nested `objectBoundigBox` support. - (usvg) `color` on `use` resolving. - (usvg) `offset` attribute resolving inside the `stop` 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 had `filter` on a child. - (usvg) Style attributes resolving on the root `svg` element. - (usvg) `SmoothCurveTo` and `SmoothQuadratic` conversion. - (usvg) `symbol` resolving. - (cairo-backend) Font ascent calculation. - (qt-backend) Stroking of LineTo specified as CurveTo. - (svgdom) `stroke-miterlimit` attribute parsing. - (svgdom) `length` and `number` attribute types parsing. - (svgdom) `offset` attribute parsing. - (svgdom) IRI resolving order when SVG has duplicated ID's.
Configuration
š Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
š¦ Automerge: Disabled by config. Please merge this manually once you are satisfied.
ā» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
š Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate. View repository job log here.