Releases: weisJ/jsvg
v2.0.0-RC
Important
This release breaks the current API in a major way. This is done in order to provide a stable public facing API. This first version is deliberately very restrictive. Please file issues with your use-case if you need now hidden functionality publicly exposed.
Many classes have been moved in this release. Some have been renamed and others have been deleted entirely. The new set of public API packages are
com.github.weisj.jsvg
com.github.weisj.jsvg.paint
com.github.weisj.jsvg.parser
com.github.weisj.jsvg.parser.css
com.github.weisj.jsvg.parser.resources
com.github.weisj.jsvg.provider
com.github.weisj.jsvg.renderer
com.github.weisj.jsvg.renderer.animation
com.github.weisj.jsvg.renderer.awt
com.github.weisj.jsvg.ui
com.github.weisj.jsvg.view
If your use-case is simple rendering then a few changes to your imports should be enough to migrate to this versions.
Changes
- Errors during parsing are now logged with
WARNING
as their log level instead ofSEVERE
. ParsedElement
andParsedDocument
have been removed from the public API. They have been replaced withDomDocument
andDomElement
. TheDOMProcessor
,ResourceLoader
,StyleSheet
etc. interfaces have been adjusted accordingly.AttributeNode
andAttributeParser
have been removed from the public facing API e.g. they are no longer arguments to the methods inPaintParser
. Attributes can now only be accessed by their raw string value throughDomElement#attribute(String)
. ThePaintParser
can be obtained through theDomDocument
associated to theDomElement
.- the functionality of
ParserProvider
has been moved intoLoaderContext
. This unifies the places of customisation points during parsing. SVGNode
including all implementations have been removed from the public API. UseDomElement#tagName()
to determine the type of an element instead.- The exposed API of
RenderContext
has been reduced to transform related functions, colors and opacity.
The following classes have been renamed:
UIFuture
has been renamed toResourceSupplier
.AnimationPeriod
has been renamed toAnimation
.- All occurrences of
Provider<T>
have been replaced withSupplier<T>
from the JDK.
The following API has been removed:
- The asynchronous implementation of
UIFuture
. ParserProvider#createPostProcessor()
has been removed.ParserProvider
has been removed. Its functionality has been merged intoLoaderContext
.
The following deprecated methods have been removed:
-
SVGDocument#render(JComponent, Graphics2D, ViewBox)
.- Use
render(Component, Graphics2D, ViewBox)
instead.
- Use
-
SVGLoader#SVGDocument load(InputStream)
,SVGLoader#load(InputStream, ParserProvider)
,SVGLoader#load(InputStream, ParserProvider, ResourceLoader)
- Use
SVGLoader#load(InputStream, URI, LoaderContext)
instead.
- Use
-
The
NullPlatformSupport
constructor.- Use
NullPlatformSupport.INSTANCE
instead.
- Use
All other previously deprecated functions are in classes which have been removed from the public API completely.
Full Changelog: v1.7.2-rc1...v2.0.0-rc3
v1.7.2
v.1.7.1
Important
The last release erroneously contained byte code incompatible with Java versions before Java 21 if animations are used. This release fixes this and makes the library again compatible with Java 8.
Changes
- Correctness improvements for
text-anchor
#110 7d1fb8f - The default resource policy now allows for embedded data uri images. 8ab4aae
- Percentage values in
startOffset
of a<textPath>
now properly resolve with respect to the length of the paths. Some scenarios are still unsupported e.g. negative values and values larger than the path length. #115 eef2211 - Fix incorrect inheritance behaviour of the
dominant-baseline
property #116 be43583 - Font family names within single or double quotes are now correctly resolved. #117 5614b6c
- Fix exception when radial gradients have a non-positive radius #118 e953115
- Fix exception when the last two gradients stops have have the same offset value #118 e953115
- Fix exception when gradients have only one specified stop #118 55261f7
Full Changelog: v1.7.0-rc1...v1.7.1-rc1
v1.7.0
Warning
This release erroneously contains byte code incompatible with Java versions before Java 21. This has been fixed in JSVG version 1.7.1
.
Changes
- Implementors of
Output
now have more control over how text gets rendered. The can opt to receive information about the text being laid out by returning a customTextOutput
inOutput#textOutput
. ExternalResourcePolicy
now applies to all resources not only referenced SVG elements.- Support for multi-char codepoints such as "𝄞".
- Rudimentary support for rendering emoji. This feature does not work on every operating system and JDK version.
- Support for more units:
- rem
- ch
- Q
- vw,vh,vmin,vmax
- vi,vb
ParsedElement
now has access to the document it belongs to (viaParsedElement#document
) and to its parent element (viaParsedElement#parent
).- The
rx
andry
attributes are now correctly applied in cases. - Fixed rendering of paths with repeated cubic/quadratic bezier commands.
- Fixed usage of repeated values in the
paint-order
attribute. stroke-opacity
andfill-opacity
now correctly don't accumulate to child elements.- Percentages in stroke related properties now correctly refer to the diagonal length of the current viewport.
- Fixed bounds computation of empty groups for which a transform is specified.
- Support for the
transform-box
property. (by @Cu3PO42 in #99) - Prevent DOS attacks through exponential leaf nodes using
use
elements. The limits for this can be configured setting customDocumentLimits
in theLoaderContext
. - JSVG now provides OSGi metadata (by @HannesWell in #107)
- Preview support for animations. Not many properties outside of geometry properties are animatable. Only basic animation timings are implemented.
Deprecations
See documentation for replacements.
LoadHelper(AttributeParser, ResourceLoader)
SVGDocument#render(JComponent, Graphics2D, ViewBox)
AttributeNode#getPercentage(String, float)
SVGDocumentBuilder(ParserProvider, ResourceLoader, NodeSupplier)
SVGLoader#load(InputStream)
SVGLoader#load(InputStream, ParserProvider)
SVGLoader#load(InputStream, ParserProvider, ResourceLoader)
Full Changelog: v1.6.1-rc1...v1.7.0-rc1
v1.6.1
v1.6.0
Caution
This release contains an issue which prevents parsing of some svg files to finish. Use version 1.6.1
instead.
Changes:
- Support for
feDropShadow
- Added experimental support for resolving elements in
href
from external documents throughpassed toLoaderContext.builder().elementLoader( ElementLoader.create(ExternalDocumentPolicy.ALLOW_RELATIVE) )
SVGLoader
.
By default this is disabled.
Fixed issues:
v1.5.0
Changes:
- Support for filters on root
<svg>
nodes #61 stroke-dasharray
is now inheritedSVGDocument
now exposes itsViewBox
throughSVGDocument.viewbox()
#69- Support for the
color-interpolation-filters
property. In particular filters are now computed in the correct colorspace. <feComponentTransfor>
together with<feFunc[ARGB]>
is now supported.- Introduce
SVGRenderingHints.KEY_MASK_CLIP_RENDERING
andSVGRenderingHints.VALUE_MASK_CLIP_RENDERING_ACCURACY
to ensure proper mask/clipPath isolation to fix #74 if desired. - Support rendering to AWT components #77.
- Added
SVGDocument.renderWithPlatform(PlatformSupport, Graphics2D, ViewBox)
Fixed issues:
- Improper sub pixel alignment when using masks or filters #62
- Filters are now clipped to filter primitive regions #70
- General correctness improvements for filters in particular
<feBlend>
and alpha compositing. - Invalid paths now render up to the point where they are valid #68
- Unitless values for mask bounds are now correctly interpreted as percentages #75
- Fix scenarios where masks are applied incorrectly #74
Deprecations
SVGDocument.render(JComponent, Graphics2D, ViewBox bounds)
. Replaced bySVGDocument.render(Component, Graphics2D, ViewBox bounds)
JComponentPlatformSupport
replaced byAwtComponentPlatformSupport
v1.4.0
Changes:
- The shape of a svg file can now be computed using
SVGDocument.computeShape()
. - Implemented (experimental) soft clipping for
<clipPath>
. It can be enabled by setting theSVGRenderingsHints.KEY_SOFT_CLIPPING
toSVGRenderingHints.VALUE_SOFT_CLIPPING_ON
on theGraphics2D
instance.
v1.3.0
Changes:
- Support for svg resources in
<img>
tags. #53 - Comments in css declarations (inside
<style>
tags) are now supported. - If an
<img>
tag isn't able to load the resource a replacement "missing image" visual is shown. - A small move towards supporting proper xml namespacing
Fixed issues:
- The
x
andy
properties on top level svg are now ignored as per the specification. - Incorrect size conversion for coordinates in ellipses and circles.
- Numbers not separated by space
e.g 5-4 i.e. 5 and -4
are now properly parsed in transform specifiers.
v1.2.0
Changes:
- Improved performance of SVG files with rectangular clipping areas. (by @eriklumme1)
Fixed issues:
- Possible OOM with two stops at the same location in
radialgradient
. - Exception if a masks is applied to empty groups.