I am incredibly happy because of three big things that are going on in librsvg right now:
-
Paolo Borelli finished porting all the CSS properties to Rust. What was once a gigantic
RsvgState
struct in C is totally gone, along with all the janky C code to parse individual properties. The process of portingRsvgState
to Rust has been going on since about two months ago, and has involved many multi-commit merge requests and refactorings. This is a tremendous amount of really good work! The result is all in Rust now in aState
struct, which is opaque from C's viewpoint. The only places in C that still require accessors to theState
are in the filter effects code. Which brings me to... -
Ivan Molodetskikh, my Summer of Code student, submitted his first merge request and it's merged to master now. This ports the bookkeeping infrastructure for SVG filters to Rust, and also the
feOffset
filter is ported now. Right now the code doesn't do anything fancy to iterate over the pixels of Cairo image surfaces; that will come later. I am very happy that filters, which were a huge barrier, are now starting to get chipped away into nicer code. -
I have started to move librsvg's old representation of CSS properties into something that can really represent properties that are not specified, or explicitly set to
inherit
from an SVG element's parent, or set to a normal value. Librsvg never had a representation of property values that actually matched the SVG/CSS specs; it just knew whether a property was specified or not for an element. This worked fine for properties which the spec mandates that they should inherit automatically, but those that don't, were handled through special hacks. The new code makes this a lot cleaner. It should also make it easier to copy Servo's idioms for property inheritance.