The «Solidify Stroke» assumes that all strokes are StrokeAlign::Center [sic] causing it to give the incorrect results for StrokeAlign::Inside and StrokeAlign::Outside.
The alignment can be set in the properties of the stroke node:

A proper implementation of the algorithm must deal with intersecting bézier paths in the same way as the SVG and vello renderer. An interesting case can be seen here where we have a closed path made of just two intersecting cubic béziers:

If the path is not fully closed, then the centre alignment must be used to match the renderer. Also note that a path can contain multiple contours. These can likely be dealt with individually?
To deal with intersections of paths in an efficient the linesweeper crate can be used since it is already included as a dependency.
The kurbo::stroke function only supports centre alignment. I'm not sure if it is within scope to add other alignments to it.
As reported by @Menxs on discord.
The «Solidify Stroke» assumes that all strokes are
StrokeAlign::Center[sic] causing it to give the incorrect results forStrokeAlign::InsideandStrokeAlign::Outside.The alignment can be set in the properties of the stroke node:

A proper implementation of the algorithm must deal with intersecting bézier paths in the same way as the SVG and vello renderer. An interesting case can be seen here where we have a closed path made of just two intersecting cubic béziers:

If the path is not fully closed, then the centre alignment must be used to match the renderer. Also note that a path can contain multiple contours. These can likely be dealt with individually?
To deal with intersections of paths in an efficient the
linesweepercrate can be used since it is already included as a dependency.The
kurbo::strokefunction only supports centre alignment. I'm not sure if it is within scope to add other alignments to it.As reported by @Menxs on discord.