This path positioning change renders correctly the svg 170 ( the many red triangles ) and change the visualization of issue #1363. Need extensive testing. Consider that viewbox has to be implemented better, so don't take too much negatively the errors on svgs that have viewbox with negative numbers.
if this is not a solution i hope at least it can inspire someone
Till this library won't use ctx.ellipse() this weird transformation will be a huge mess.
This little fix imroves position of not transformed ellipses.
You can see the fixes on the example i will post below.
It needs improvement to work with other transformMatrix.
Per the SVG spec,
> If a "closepath" is followed immediately by any other command, then
> the next subpath starts at the same initial point as the current
> subpath.
#1365 converted multiple M/m coordinates to L/l commands when importing paths. The `_render` function was already attempting to connect those coordinates, but that's no longer necessary as the only consecutive M/m commands in `_render` were explicitly defined as M/m commands.
Per the [SVG spec](http://www.w3.org/TR/SVG11/paths.html#PathDataMovetoCommands):
> If a moveto is followed by multiple pairs of coordinates, the
> subsequent pairs are treated as implicit lineto commands. Hence,
> implicit lineto commands will be relative if the moveto is relative,
> and absolute if the moveto is absolute."
According to the SVG spec these corners are supposed to be elliptical arcs. HTML canvas does not have methods for elliptical arcs, but a cubic approximation can get within 0.02%.
Using the "magic number" from http://itc.ktu.lt/itc354/Riskus354.pdf.
Prevent image 404s in Images from loadFromJSON from breaking everything
trying to get attributes of a source which is null, while passing it
upwards to allow dealing with images which failed to load outside of
Fabric.JS Issue #1079
Full support for the fabric.Object.fillRule option for any visual objects.
_setupFillRule(ctx) is used to set CanvasRenderingContext2D.globalCompositeOperation (from fillRule property).
_restorFillRule(ctx) restores previously saved globalCompositeOperation.
Both methods are called form the render() method, so individual blending settings for each object can be specified.
fabric.Line._setWidthHeight was assigning left and top as if both
origins were 'center'.
It now uses private helper methods to calculate the distances from
left and top edges of canvas to the line origins.
The data for existing Line.toObject test is updated with origin-relative
coordinates.
Rendering of line inside a path-group was assuming a 'center' origin
for both coordinates.
Context translation done before rendering for lines inside path-groups
now uses private helper methods to calculate distances from the center
of path-group to center of line.