commit e7aec5151543573c2f18484d4134959e219dc4a4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jan 3 17:52:04 2017 -0600

    We are not in beta anymore; bump to 2.41.0 final.

 configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit ebcbfae24321f22cd8c04a4951bbaf70b60d7f29
Merge: c3c80d2 5bc8c04
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Jan 3 14:17:44 2017 -0600

    Merge branch 'rustification'

commit 5bc8c04552a0d35f5a55c648c4337cca69018498
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Tue Dec 20 14:41:39 2016 +0800

    build/Makefile.msvcproj: Fix cleanup
    
    This removes the *.vs12.sourcefiles and *.vs12.sourcefiles.filters that
    are generated during the process of generating the Visual Studio 2013
    projects, so that 'make distcheck' won't complain about leftover files.

 build/Makefile.msvcproj | 2 ++
 1 file changed, 2 insertions(+)

commit 43c8ae3f0ba099aa30cf3e2534295cf54f5a8704
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 19 16:35:25 2016 -0600

    Update NEWS

 NEWS | 2 ++
 1 file changed, 2 insertions(+)

commit 6f270cf091190f3e2a264563ad9eddc1c67135ba
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 19 16:33:01 2016 -0600

    bgo#776297 - Only render markers on path, line, polyline, polygon elements
    
    Per the spec.
    
    Thanks to Massimo for the test case.

 rsvg-base.c                                             |   1 -
 rsvg-shapes.c                                           |   4 ++++
 .../bugs/776297-marker-on-non-path-elements-ref.png     | Bin 0 -> 1203 bytes
 .../bugs/776297-marker-on-non-path-elements.svg         |  16 ++++++++++++++++
 4 files changed, 20 insertions(+), 1 deletion(-)

commit 605408a2abeda045fb26a553f9ca2bf546f76eec
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 19 16:25:02 2016 -0600

    marker.rs: Normalize negative angles into positive ones
    
    This way our averaging of angles will work.

 rust/src/marker.rs | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

commit f67c24514a385401dd0929eaad5573dd2b05c7cf
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 19 15:34:16 2016 -0600

    Update NEWS

 NEWS | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

commit c8ba1f65fb0df638cffafb9a31b488c2427bb438
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 19 15:24:13 2016 -0600

    bgo#686953 - Support the "marker" shorthand attribute
    
    We handled "marker-start", "marker-mid", and "marker-end", but not the
    shorthand "marker" for all of them.  Thanks to Massimo for the patch.

 rsvg-styles.c                                      |  18 +++++
 .../reftests/svg1.1/painting-marker-03-f-ref.png   | Bin 0 -> 28067 bytes
 .../reftests/svg1.1/painting-marker-03-f.svg       |  86 +++++++++++++++++++++
 3 files changed, 104 insertions(+)

commit 9ec026ca5050ad65eb42a0d4e455df0aae5e8bb7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 19 13:48:47 2016 -0600

    Normalize test reference files so they don't dig into my private stash of fonts...
    
    Sigh.  They were picking up things from my ~/.fonts, which is wrong.
    I'll have to find a way to make that not happen automatically.

 tests/fixtures/reftests/bugs/340047-ref.png         | Bin 4891 -> 4707 bytes
 tests/fixtures/reftests/bugs/548494-ref.png         | Bin 751 -> 695 bytes
 tests/fixtures/reftests/bugs/563933-ref.png         | Bin 2526 -> 2470 bytes
 tests/fixtures/reftests/bugs/738367-ref.png         | Bin 8748 -> 8692 bytes
 tests/fixtures/reftests/bugs/760180-ref.png         | Bin 8884 -> 8698 bytes
 tests/fixtures/reftests/duplicate-id-ref.png        | Bin 155 -> 94 bytes
 tests/fixtures/reftests/gzip-compressed-ref.png     | Bin 155 -> 93 bytes
 tests/fixtures/reftests/include-compressed-ref.png  | Bin 155 -> 93 bytes
 tests/fixtures/reftests/nonexisting-filter-ref.png  | Bin 155 -> 93 bytes
 .../reftests/svg1.1/filters-color-02-b-ref.png      | Bin 6382 -> 6066 bytes
 .../reftests/svg1.1/filters-composite-02-b-ref.png  | Bin 16388 -> 15899 bytes
 .../reftests/svg1.1/painting-marker-01-f-ref.png    | Bin 8618 -> 8581 bytes
 .../reftests/svg1.1/painting-marker-02-f-ref.png    | Bin 9358 -> 9237 bytes
 .../reftests/svg1.1/painting-marker-04-f-ref.png    | Bin 27921 -> 26711 bytes
 .../reftests/svg1.1/painting-marker-06-f-ref.png    | Bin 8884 -> 8698 bytes
 .../reftests/svg1.1/painting-marker-07-f-ref.png    | Bin 5209 -> 5001 bytes
 .../svg1.1/painting-marker-properties-01-f-ref.png  | Bin 6513 -> 6097 bytes
 .../reftests/svg1.1/paths-data-01-t-ref.png         | Bin 25470 -> 25377 bytes
 .../reftests/svg1.1/paths-data-02-t-ref.png         | Bin 33012 -> 32835 bytes
 .../reftests/svg1.1/paths-data-03-f-ref.png         | Bin 30928 -> 30742 bytes
 .../reftests/svg1.1/paths-data-04-t-ref.png         | Bin 18168 -> 17951 bytes
 .../reftests/svg1.1/paths-data-05-t-ref.png         | Bin 16086 -> 15946 bytes
 .../reftests/svg1.1/paths-data-06-t-ref.png         | Bin 7250 -> 7143 bytes
 .../reftests/svg1.1/paths-data-07-t-ref.png         | Bin 6625 -> 6473 bytes
 .../reftests/svg1.1/paths-data-08-t-ref.png         | Bin 19348 -> 18934 bytes
 .../reftests/svg1.1/paths-data-09-t-ref.png         | Bin 17700 -> 17284 bytes
 .../reftests/svg1.1/paths-data-10-t-ref.png         | Bin 21531 -> 20633 bytes
 .../reftests/svg1.1/paths-data-12-t-ref.png         | Bin 9745 -> 9603 bytes
 .../reftests/svg1.1/paths-data-13-t-ref.png         | Bin 4576 -> 4400 bytes
 .../reftests/svg1.1/paths-data-14-t-ref.png         | Bin 12570 -> 12393 bytes
 .../reftests/svg1.1/paths-data-15-t-ref.png         | Bin 6058 -> 5862 bytes
 .../reftests/svg1.1/paths-data-16-t-ref.png         | Bin 7885 -> 7651 bytes
 .../reftests/svg1.1/paths-data-17-f-ref.png         | Bin 4456 -> 4287 bytes
 .../reftests/svg1.1/paths-data-18-f-ref.png         | Bin 4837 -> 4644 bytes
 .../reftests/svg1.1/paths-data-19-f-ref.png         | Bin 23426 -> 23376 bytes
 .../reftests/svg1.1/paths-data-20-f-ref.png         | Bin 9179 -> 8996 bytes
 .../reftests/svg1.1/pservers-grad-01-b-ref.png      | Bin 9700 -> 9241 bytes
 .../reftests/svg1.1/pservers-grad-02-b-ref.png      | Bin 22580 -> 22010 bytes
 .../reftests/svg1.1/pservers-grad-03-b-ref.png      | Bin 9846 -> 9534 bytes
 .../reftests/svg1.1/pservers-grad-04-b-ref.png      | Bin 23971 -> 23348 bytes
 .../reftests/svg1.1/pservers-grad-05-b-ref.png      | Bin 65245 -> 63786 bytes
 .../reftests/svg1.1/pservers-grad-06-b-ref.png      | Bin 21269 -> 20711 bytes
 .../reftests/svg1.1/pservers-grad-07-b-ref.png      | Bin 11103 -> 10707 bytes
 .../reftests/svg1.1/pservers-grad-08-b-ref.png      | Bin 40248 -> 37401 bytes
 .../reftests/svg1.1/pservers-grad-09-b-ref.png      | Bin 6268 -> 5885 bytes
 .../reftests/svg1.1/pservers-grad-10-b-ref.png      | Bin 9316 -> 8955 bytes
 .../reftests/svg1.1/pservers-grad-11-b-ref.png      | Bin 57420 -> 56219 bytes
 .../reftests/svg1.1/pservers-grad-12-b-ref.png      | Bin 23962 -> 23336 bytes
 .../reftests/svg1.1/pservers-grad-13-b-ref.png      | Bin 93578 -> 93256 bytes
 .../reftests/svg1.1/pservers-grad-14-b-ref.png      | Bin 24931 -> 24421 bytes
 .../reftests/svg1.1/pservers-grad-15-b-ref.png      | Bin 10232 -> 10028 bytes
 .../reftests/svg1.1/pservers-grad-16-b-ref.png      | Bin 4787 -> 4619 bytes
 .../reftests/svg1.1/pservers-grad-18-b-ref.png      | Bin 4783 -> 4613 bytes
 .../reftests/svg1.1/pservers-grad-21-b-ref.png      | Bin 11563 -> 11389 bytes
 .../reftests/svg1.1/pservers-grad-22-b-ref.png      | Bin 7596 -> 7414 bytes
 .../reftests/svg1.1/pservers-grad-23-f-ref.png      | Bin 6522 -> 6130 bytes
 .../reftests/svg1.1/pservers-grad-24-f-ref.png      | Bin 7711 -> 7252 bytes
 .../svg1.1/pservers-grad-stops-01-f-ref.png         | Bin 6740 -> 6353 bytes
 58 files changed, 0 insertions(+), 0 deletions(-)

commit 25457b72770018045aa88d47688fbf1a45bff9af
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 19 11:49:17 2016 -0600

    Add a testing mode so reftests can use predictable text rendering
    
    This adds an rsvg_handle_internal_set_testing() API, which should only
    be called by the test suite.  Internally, it sets cairo_font_options_t
    that should yield reproducible text rendering.
    
    For example, I get different rendering results from text objects when I
    run "make check" as a user, than when I run it as root.

 rsvg-base.c         | 16 ++++++++++++++++
 rsvg-cairo-draw.c   | 20 ++++++++++++++++++++
 rsvg-cairo-render.c |  1 +
 rsvg-gobject.c      |  2 ++
 rsvg-private.h      |  3 +++
 rsvg.h              |  2 ++
 tests/rsvg-test.c   |  2 ++
 7 files changed, 46 insertions(+)

commit c742926a421d12a17fe0c6201b90db37011bf095
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 16 16:40:21 2016 -0600

    configure.ac: Add a --enable-debug option for debug vs. release
    
    --disable-debug (the default) will call "cargo build" with "--release".
    This is so that distro packages don't have to change options.
    
    --enable-debug will call "cargo build" normally.  Use this for
    development.

 Makefile.am  | 12 +++++++++---
 configure.ac | 26 +++++++++++++++++++++++++-
 2 files changed, 34 insertions(+), 4 deletions(-)

commit 4cc1045aab7b50eb39f59d51a5e90429504cb2bb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 16 14:39:00 2016 -0600

    Update AUTHORS from the whole git log
    
    git log --pretty='format:%an' | sort | uniq

 AUTHORS | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 97 insertions(+)

commit 77ea6a621360871b56e85d3ce5b8b8d7072d7cad
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 16 14:31:32 2016 -0600

    Switch to the official gtk-rs/cairo now that it supports matrix methods
    
    Thanks to https://github.com/gtk-rs/cairo/pull/95

 rust/Cargo.toml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

commit d11e469ffe9a5e84846f3f3973d3205fa6b6874c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 16 14:31:18 2016 -0600

    Make some arguments immutable

 rust/src/marker.rs | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit 1701dcbfe2316f9705c518e7bd1ca087e0a01cea
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Dec 16 16:43:07 2016 +0800

    Visual Studio builds: Tell about Rust
    
    People will need to install the right Rust MSI packages and know how to
    set it up correctly and/or tell Visual Studio to use the correct
    cargo.exe.

 build/win32/vs12/README.txt | 12 ++++++++++++
 1 file changed, 12 insertions(+)

commit 1deacfcea6a4216337f6a1b5124e6875c18f7e55
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Dec 16 16:26:37 2016 +0800

    Visual Studio builds: Integrate Rust build process
    
    ...into the Visual Studio IDE build.  This adds a project that is used to
    call the NMake Makefile to call cargo to build the rust bits before
    building the main librsvg DLL, which will now link to the static .lib that
    results from building the rust bits using cargo.

 build/win32/vs12/Makefile.am              |  1 +
 build/win32/vs12/librsvg.sln              | 10 ++++
 build/win32/vs12/rsvg-build-defines.props | 13 ++++-
 build/win32/vs12/rsvg-rust.vcxproj        | 97 +++++++++++++++++++++++++++++++
 build/win32/vs12/rsvg.vcxprojin           |  6 ++
 build/win32/vs14/Makefile.am              |  1 +
 6 files changed, 125 insertions(+), 3 deletions(-)

commit b502c8b18b0d5609202fae08403e8da969a95d66
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Dec 16 15:01:58 2016 +0800

    Visual Studio builds: Fix rsvg-view-3 projects
    
    The source file name has been changed here, so update it here.

 build/win32/vs12/rsvg-view-3.vcxproj         | 2 +-
 build/win32/vs12/rsvg-view-3.vcxproj.filters | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

commit 7ee84512eb9b803ea73e62d75d30c3634281e1ad
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Dec 16 15:00:33 2016 +0800

    Visual Studio builds: Fix librsvg DLL linking
    
    Due to the rustification, we need to link to:
    -The static .lib that comes from building the rustified parts of librsvg
    -Additional system libraries that become dependent due to the rustification
     parts.
    
    Also, we no longer need to include math.h from the $(SolutionDir) since the
    stock math.h shipped with Visual Studio 2013 and later supports the
    C99 math functions we need, so we can clean things up a little bit.

 build/win32/vs12/rsvg-build-defines.props | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 49ae87e22aa0bb5bfdb199e659989b833193c78f
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Dec 16 14:53:37 2016 +0800

    MSVC builds: Make MSVC 2013 the baseline MSVC Version
    
    Due to the rustification of librsvg, it is now only possible to support Visual
    Studio 2013 and later as the Rust compiler will require items from the CRT
    during linking that is provided by the MSVC 2013 (and later) CRTs.
    
    As a result, drop the Visual Studio 2008~2012 projects, and we no longer need
    a fallback math.h implementation since these are now covered by the CRT
    implementation.

 Makefile.am                                        |   6 +-
 build/Makefile-newvs.am                            |  30 ++--
 build/Makefile.msvcproj                            |  33 ++++
 build/win32/Makefile.am                            |   7 +-
 build/win32/vs10/Makefile.am                       |  39 ----
 build/win32/vs11/Makefile.am                       |  28 ---
 build/win32/vs12/Makefile.am                       |  33 ++--
 build/win32/{vs10 => vs12}/README.txt              |  38 ++--
 .../{vs10 => vs12}/libpixbufloader-svg.vcxproj     |   8 +-
 .../libpixbufloader-svg.vcxproj.filters            |   0
 build/win32/{vs10 => vs12}/librsvg.sln             |   4 +-
 .../win32/{vs10 => vs12}/rsvg-build-defines.props  |   0
 .../{vs10 => vs12}/rsvg-convert.vcxproj.filtersin  |   2 +-
 build/win32/{vs10 => vs12}/rsvg-convert.vcxprojin  |  10 +-
 build/win32/{vs10 => vs12}/rsvg-gen-srcs.props     |   0
 build/win32/{vs10 => vs12}/rsvg-install.propsin    |   2 +-
 build/win32/{vs10 => vs12}/rsvg-install.vcxproj    |   8 +-
 .../win32/{vs10 => vs12}/rsvg-version-paths.props  |   2 +-
 build/win32/{vs10 => vs12}/rsvg-view-3.vcxproj     |   8 +-
 .../{vs10 => vs12}/rsvg-view-3.vcxproj.filters     |   0
 build/win32/{vs10 => vs12}/rsvg.vcxproj.filtersin  |   2 +-
 build/win32/{vs10 => vs12}/rsvg.vcxprojin          |  10 +-
 build/win32/vs14/Makefile.am                       |   2 +
 build/win32/vs9/Makefile.am                        |  27 ---
 build/win32/vs9/README.txt                         |  74 --------
 build/win32/vs9/libpixbufloader-svg.vcproj         | 170 ------------------
 build/win32/vs9/librsvg.sln                        |  81 ---------
 build/win32/vs9/math.h                             |  39 ----
 build/win32/vs9/rsvg-build-defines.vsprops         |  50 ------
 build/win32/vs9/rsvg-convert.vcprojin              | 167 -----------------
 build/win32/vs9/rsvg-gen-srcs.vsprops              |  19 --
 build/win32/vs9/rsvg-install.vcproj                |  74 --------
 build/win32/vs9/rsvg-install.vspropsin             |  34 ----
 build/win32/vs9/rsvg-version-paths.vsprops         |  53 ------
 build/win32/vs9/rsvg-view-3.vcproj                 | 170 ------------------
 build/win32/vs9/rsvg.vcprojin                      | 198 ---------------------
 configure.ac                                       |   3 -
 37 files changed, 123 insertions(+), 1308 deletions(-)

commit 5a557714ae0a18dfad097c8f91f1703ce62b7934
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Fri Dec 16 14:32:09 2016 +0800

    Visual Studio builds: Use a default value for $(CARGO)
    
    Define $(CARGO) to be simply 'cargo' unless it is overridden when we use the
    NMake Makefile to build the rust bits using Visual Studio.

 build/win32/rsvg-rust.mak | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

commit 6583d84ef2989d009ddb646eceea43ea53675dd9
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Thu Dec 15 22:10:19 2016 +0800

    Visual Studio builds: Add NMake Makefile for the Rust bits
    
    We need to call cargo to build the rust portions of librsvg, before we can
    link the final librsvg DLL, so add an NMake Makefile that can be used to
    build and clean the parts, with the needed envvars set.
    
    This will indicate that we will no longer support Visual Studio 2012 (or
    earlier) builds, as Rust will generate code that will need items in the
    Visual Studio 2013 (and later) CRTs during linking.
    
    More commits to follow in this regard, but this paves the first step to
    support Visual Studio builds for the rust-ified librsvg.

 build/win32/Makefile.am   |  1 +
 build/win32/rsvg-rust.mak | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

commit f6bf80e47a1f7cce2cf46573fea68f4725b127f5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 14 13:32:56 2016 -0600

    More AUTHORS

 AUTHORS | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

commit 917e7c85670525418219af09d711e13ff19edbb8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 14 11:35:21 2016 -0600

    Update AUTHORS

 AUTHORS | 6 ++++++
 1 file changed, 6 insertions(+)

commit 7714dfe8aa6836ab59f78cdd7eb00a814897e21e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 14 13:27:05 2016 -0600

    bgo#763386: Handle missing case of coincident control points
    
    ... are we done with these yet?
    
    Thanks again to Massimo for pointing out this case in
    https://bugzilla.gnome.org/show_bug.cgi?id=763386#c4

 rust/src/marker.rs                                 |  42 ++++++++++++++++++---
 .../reftests/bugs/763386-marker-coincident-ref.png | Bin 943 -> 1198 bytes
 .../reftests/bugs/763386-marker-coincident.svg     |   4 +-
 3 files changed, 40 insertions(+), 6 deletions(-)

commit 5a1b668df9beca81463f84d39d8dcc6c180f8190
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 14 11:28:54 2016 -0600

    tests/Makefile.am: Fix typos that caused reftests/bugs/* not to get distributed

 tests/Makefile.am | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 3b80bf96d3a890d196d975569d8f5a1b36cf6481
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 14 10:20:08 2016 -0600

    rsvg-test: allow skipping directories that start with "ignore" as well as files
    
    It turns out that it's more convenient to move the whole set of
    problematic SVGs into an ignore/ subdirectory for now.

 tests/README.md                                    |   7 +-
 .../reftests/svg1.1/ignore-pservers-grad-17-b.svg  |  92 ---------------------
 .../reftests/svg1.1/pservers-grad-17-b-ref.png     | Bin 9478 -> 0 bytes
 tests/rsvg-test.c                                  |  28 +++++--
 4 files changed, 25 insertions(+), 102 deletions(-)

commit 30a91d1e1f2df9ad4d6b28ed635e69619b1ed8b3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 14 09:31:43 2016 -0600

    Make cargo run when srcdir != builddir
    
    Thanks to Jeff Waugh and Hubert Figuière for the trick.

 Makefile.am                   | 19 +++++++++++--------
 configure.ac                  |  2 ++
 gdk-pixbuf-loader/Makefile.am | 23 ++++++++++++++++++++++-
 3 files changed, 35 insertions(+), 9 deletions(-)

commit f0c113157ff51ae7514201ec6c721d24ce909659
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 21:31:07 2016 -0600

    Special thanks to the Rust people

 NEWS | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit 0525bafa95f66398de51208c412baae7e402e373
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 21:28:24 2016 -0600

    Update NEWS for 2.41.0

 NEWS | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

commit 3090becbf460d136e9db2f0bed2ccc9ab9942049
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 21:16:55 2016 -0600

    tests/README.md: Mention the "ignore-" prefix for reftests

 tests/README.md | 3 +++
 1 file changed, 3 insertions(+)

commit c32694be3bf3355cb6c849577d7085173c94814e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 20:50:56 2016 -0600

    Be explicit about how stop-color and stop-opacity are inherited
    
    These can live in the <stop> element attributes, or in its style="..."
    attribute.
    
    Neither of them inherits by default; they have to be explicitly
    specified as "inherit" to do that.
    
    Inheritance is from the gradient's parent element, not from where it is
    referenced, hence the call to rsvg_state_reconstruct().
    
    Also, stop-color can be currentColor.
    
    We now have explicit enums to indicate all of these cases.  Previously,
    all the meanings were overloaded into state->has_stop_color and
    state->has_stop_opacity, and those didn't handle all cases correctly.
    
    Added the hexchat.svg icon to the tests, which is how I caught the lack
    of proper handling for style="stop-color: ...;".

 rsvg-paint-server.c                     |  67 +++++++++++++++++++-------------
 rsvg-styles.c                           |  30 +++++++++++---
 rsvg-styles.h                           |  15 +++++++
 tests/fixtures/reftests/hexchat-ref.png | Bin 0 -> 3930 bytes
 tests/fixtures/reftests/hexchat.svg     |  58 +++++++++++++++++++++++++++
 5 files changed, 138 insertions(+), 32 deletions(-)

commit cd7028edb9d080f16b5b4c8e4185c94f09ab6885
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 19:16:28 2016 -0600

    rsvg-paint-server.c: Remove old gradient code; it is unused now

 rsvg-paint-server.c | 175 ----------------------------------------------------
 1 file changed, 175 deletions(-)

commit 5ea3754790e06ca99830f58e41f240fc7260349a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 17:41:03 2016 -0600

    Make this 2.41.0beta! yay!

 configure.ac | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit bbca5c907ab84c8ea3e954195a4e14a53ba54039
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 17:33:17 2016 -0600

    Check for Rust/Cargo in configure.ac; make Makefile.am smarter about rust
    
    This works, but "make distcheck" fails since we can't "cargo build" in
    the srcdir when under "make distcheck": it makes the srcdir directory
    read-only.

 Makefile.am       | 32 +++++++++++++++++++++++++++++---
 configure.ac      | 25 ++++++++++++++++++-------
 tests/Makefile.am | 46 ++++++++++++++++++++++++----------------------
 3 files changed, 71 insertions(+), 32 deletions(-)

commit 218ae16a3f95cff987b17b0af69954622974bf4e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 16:21:49 2016 -0600

    Tell automake to output an .xz archive, not a .bz2

 configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 8cb8489cd836cfdbb1c77f2a386aedbcea7749b7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 14:18:55 2016 -0600

    io-svg: Propagate the result of rsvg_handle_close(), oops
    
    Found by Coverity.

 gdk-pixbuf-loader/io-svg.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

commit 1a30e53a1ee2946f9e090b0f965d5926cad4297d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 14:09:12 2016 -0600

    rsvg-shapes: Stylistic fix
    
    Pointed out by Coverity.

 rsvg-shapes.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

commit 6d199be6ab8dd345c7c7be8f31dac71c8c8c56e7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Dec 13 14:03:53 2016 -0600

    rsvg-filter: Don't use CLAMP(x, 0, max) on unsigned values
    
    The comparison against 0 is always true anyway.
    
    Also, fix a potential out-of-bounds read in discrete_component_transfer_func().

 rsvg-filter.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit 68ae25b75b0ff872436f82dbb67a145f08266843
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 12 15:56:00 2016 -0600

    Add test files for bug #761871 - maintain separate reflection points for cubic and quadratic curves
    
    This was fixed during the rewrite of the path parser; this gives us a
    test now.

 .../bugs/761871-reset-reflection-points-ref.png       | Bin 0 -> 695 bytes
 .../reftests/bugs/761871-reset-reflection-points.svg  |  18 ++++++++++++++++++
 2 files changed, 18 insertions(+)

commit 29eddba37f8bc1d1686f41fa8eded9c1ce003d7d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 12 15:19:42 2016 -0600

    bgo#603550 - Compute the luminance correctly when generating a mask
    
    Thanks to Mike Lewis for the patch.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=603550

 rsvg-cairo-draw.c                                  |  25 +++-
 .../reftests/bugs/603550-mask-luminance-ref.png    | Bin 0 -> 4502 bytes
 .../reftests/bugs/603550-mask-luminance.svg        | 130 +++++++++++++++++++++
 3 files changed, 152 insertions(+), 3 deletions(-)

commit eb766567a11ffab1a3d70cb595a8556a1c280290
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 12 14:48:05 2016 -0600

    Add a feComposite test
    
    I think the reference image for filters-composite-02-b, from the SVG 1.1
    test suite, is incorrect.  Its composited values are as if there was a
    feFlood of White done before the compositing (i.e. non-fully-transparent
    areas are set against a white background, instead of a transparent
    background).

 .../reftests/svg1.1/filters-composite-02-b-ref.png | Bin 0 -> 16388 bytes
 .../reftests/svg1.1/filters-composite-02-b.svg     | 203 +++++++++++++++++++++
 2 files changed, 203 insertions(+)

commit 5b83d786215c88269e60cf55b62de390d71a241a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 12 14:31:08 2016 -0600

    Don't do our own compositing for feComposite; let Cairo handle it
    
    We only do the Arithmetic mode for feComposite.  All the others (over,
    in, out, atop, xor) are done in Cairo now.

 rsvg-filter.c | 154 ++++++++++++++++++++++++++--------------------------------
 1 file changed, 69 insertions(+), 85 deletions(-)

commit c24059c74a38d51f2b9b03e4f501534649375d4e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 12 13:10:15 2016 -0600

    Fix offsets in rsvg_filter_primitive_image_render()
    
    feImage filters were rendering completely blank images because the
    translation was incorrect.

 rsvg-filter.c | 14 +++++---------
 1 file changed, 5 insertions(+), 9 deletions(-)

commit f52d96f657f99c205f282fb9dec70459902bff48
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Dec 8 12:33:38 2016 -0600

    bgo#763386 - Handle curveto segments where only three control points are coincident
    
    For curveto segments with control points 1, 2, 3, 4, we correctly
    handled cases where 1/2 and 3/4 were coincident.  However, we failed at
    computing the directionality when 1/2/3 or 2/3/4 are coincident.
    
    Thanks to Massimo <sixtysix@inwind.it> for the original test case.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=763386

 rust/src/marker.rs                                 |  37 ++++++++++++++-------
 .../reftests/bugs/763386-marker-coincident-ref.png | Bin 0 -> 943 bytes
 .../reftests/bugs/763386-marker-coincident.svg     |  13 ++++++++
 3 files changed, 38 insertions(+), 12 deletions(-)

commit f01f0a7c53b518ab4e5f8a14dd0e747f58c1ab7e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 7 16:59:22 2016 -0600

    Add test files for markers

 .../reftests/svg1.1/painting-marker-01-f-ref.png   | Bin 0 -> 8618 bytes
 .../reftests/svg1.1/painting-marker-01-f.svg       | 157 +++++++++++++
 .../reftests/svg1.1/painting-marker-02-f-ref.png   | Bin 0 -> 9358 bytes
 .../reftests/svg1.1/painting-marker-02-f.svg       | 245 +++++++++++++++++++++
 .../reftests/svg1.1/painting-marker-04-f-ref.png   | Bin 0 -> 27921 bytes
 .../reftests/svg1.1/painting-marker-04-f.svg       |  84 +++++++
 .../reftests/svg1.1/painting-marker-06-f-ref.png   | Bin 0 -> 8884 bytes
 .../reftests/svg1.1/painting-marker-06-f.svg       | 159 +++++++++++++
 .../reftests/svg1.1/painting-marker-07-f-ref.png   | Bin 0 -> 5209 bytes
 .../reftests/svg1.1/painting-marker-07-f.svg       |  66 ++++++
 .../svg1.1/painting-marker-properties-01-f-ref.png | Bin 0 -> 6513 bytes
 .../svg1.1/painting-marker-properties-01-f.svg     |  95 ++++++++
 12 files changed, 806 insertions(+)

commit d136efe81cacf537730aeb8297096e3abd9ccbd1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 7 15:40:13 2016 -0600

    feComponentTransferFunction: use the last feFuncX element for each channel, per the spec
    
    If a feComponentTransferFunction filter has duplicated
    feFunc{R,G,B,A} child elements, the spec says to use only the last
    such element for each channel.
    
    Add the corresponding test file.

 rsvg-filter.c                                      |   6 +-
 .../reftests/svg1.1/filters-color-02-b-ref.png     | Bin 0 -> 6382 bytes
 .../reftests/svg1.1/filters-color-02-b.svg         | 112 +++++++++++++++++++++
 3 files changed, 116 insertions(+), 2 deletions(-)

commit d37e275bc6f6d3ff1d81680433903574f6a508d1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 7 13:57:08 2016 -0600

    rsvg_cairo_render_new(): Initialize ->bbox to the identity affine
    
    Otherwise, when filters cause rsvg_get_surface_of_node() to be called,
    that function will create a RsvgCairoRender with an all-zeros bbox and
    bbox.affine.
    
    This all-zeros affine causes cairo_matrix_invert() inside
    RsvbBbox::clip()/insert() to fail.  In the C version it failed silently,
    since it ignored failures from cairo_matrix_invert().  The Rust version
    panic()s when a matrix can't be inverted.

 rsvg-cairo-render.c | 4 ++++
 1 file changed, 4 insertions(+)

commit 99342d530f9ff63debd3f64ef302a063dd119f29
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 7 12:41:49 2016 -0600

    Fix obsolete comment

 rsvg-filter.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 1516c9075efaa573618f56d3f5e370bda1aa6279
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 7 12:41:25 2016 -0600

    bbox.rs: Oops, return the correct dst.rect.height

 rust/src/bbox.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit dc85a253d8f31df4bd9b442bded8d9ea0bd12505
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Dec 7 11:19:03 2016 -0600

    Use rsvg_node_foreach_child() instead of accessing children directly

 rsvg-filter.c | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

commit f732406e73427af610e587f66f58f532617cbd0b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Dec 5 18:49:49 2016 -0600

    Remove unused prototype

 rsvg-defs.h | 2 --
 1 file changed, 2 deletions(-)

commit 126455c4ccb537b65e7aea8041efee2a9e977b76
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 2 16:19:04 2016 -0600

    Initialize the RsvgNode vtables in _rsvg_node_init()
    
    Previously each node implementation would set its own vtable;
    instead, we'll pass the vtable down to _rsvg_node_init().  This
    will help in moving RsvgNode to Rust.

 rsvg-base.c         |  10 +-
 rsvg-filter.c       | 273 +++++++++++++++++++++++++++++++++++-----------------
 rsvg-gobject.c      |   4 +-
 rsvg-image.c        |  12 ++-
 rsvg-marker.c       |  10 +-
 rsvg-mask.c         |  19 +++-
 rsvg-paint-server.c |  43 ++++++---
 rsvg-private.h      |  10 +-
 rsvg-shapes.c       |  68 +++++++++----
 rsvg-structure.c    |  97 ++++++++++++++-----
 rsvg-structure.h    |   6 +-
 rsvg-text.c         |  32 ++++--
 12 files changed, 415 insertions(+), 169 deletions(-)

commit 3f685fe1b0e70a9f6def713a6d606b4fa4a2699d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 2 15:16:04 2016 -0600

    Remove _rsvg_node_finalize(); leave only _rsvg_node_free()
    
    And use this consistently in node implementations.

 rsvg-shapes.c    |  8 ++++----
 rsvg-structure.c | 10 ++++------
 rsvg-structure.h |  2 --
 3 files changed, 8 insertions(+), 12 deletions(-)

commit 2d5a23c124e431cef52ae6475e65ff75a6b1fd07
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 2 10:56:19 2016 -0600

    Don't push/pop a new state for nodes that wouldn't be drawn anyway
    
    Nodes will be omitted from drawing when:
    
    - we are in a draw_sub() situation, where only a subtree of a node a
      specific ID is rendered, and/or
    
    - a node's state resolves to visibility:hidden
    
    In either case, we were pushing/popping a new state.  Now we only do it
    when the node will actually be drawn.

 rsvg-structure.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

commit ac48e507ec23d7ab00f63a4d424790adba46cb40
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 2 10:40:09 2016 -0600

    Push/pop the state stack in rsvg_node_draw(), not everywhere it is called
    
    Every place that called rsvg_node_draw() would do
    rsvg_state_push()/pop() around it.  Now we do that in a single place,
    inside rsvg_node_draw() itself.

 rsvg-base.c         |  6 ------
 rsvg-cairo-draw.c   |  2 --
 rsvg-cairo-render.c |  3 +--
 rsvg-marker.c       |  2 --
 rsvg-structure.c    | 16 ++++++++--------
 5 files changed, 9 insertions(+), 20 deletions(-)

commit d29eb93a79a3b6787e61d5db4a7dd422c70f1de5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 2 10:24:24 2016 -0600

    Remove superfluous cairo_save()/cairo_restore()
    
    We create a new cairo_t explicitly for get_foo_sub() and destroy
    it when we are done; there is no need to keep the cairo_t pristine for
    another place.

 rsvg-base.c | 4 ----
 1 file changed, 4 deletions(-)

commit 04ee0f296d0443db108ac9db7b0814408f667d2b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Dec 2 09:37:44 2016 -0600

    Remove obsolete comment

 rsvg-base.c | 1 -
 1 file changed, 1 deletion(-)

commit e3f29e975235e97b31334b3d5b051d79a47dd2bd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Dec 1 12:27:41 2016 -0600

    node.rs: Rename trait Node to NodeTrait
    
    We'll use Node for a concrete object

 rust/src/node.rs   | 2 +-
 rust/src/shapes.rs | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

commit 6438cb7e678155b58bc6189421079d2e03366482
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Dec 1 12:08:26 2016 -0600

    gradient.rs: Avoid copying a gradient when resolving
    
    We used to call into the C helper code to get a Gradient from a URI.
    Then we would clone() that gradient and operate on it.
    
    Now we operate directly on the Gradient that we got from the C helper
    code, without cloning it.  We create a box from that Gradient pointer
    and pass that Box around.  We own that Gradient, after all!

 rust/src/gradient.rs | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

commit 5e362661b769fb5d5d639d4937f4b25e8801003c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 21:26:03 2016 -0600

    gradient.rs: Destroy the gradient that we created with the C helper function
    
    ... even though the helper called back into Rust to create the gradient!

 rust/src/gradient.rs | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

commit 30d12a9aa7ac0c0289f143484f5e7a585289f89d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 21:17:59 2016 -0600

    rsvg-cairo-draw.c: Use the Rust implementation of the gradient resolver

 rsvg-cairo-draw.c | 240 +++++++++++++-----------------------------------------
 1 file changed, 58 insertions(+), 182 deletions(-)

commit 1c0b41dfd17ec286b47b84aaa47c3f2a3fc10bb1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 21:17:29 2016 -0600

    gradient.rs: Finish porting gradients to Rust!  Yay!

 rsvg-css.c           |   2 +-
 rsvg-paint-server.h  |  42 ++++++-----
 rust/src/gradient.rs | 200 +++++++++++++++++++++++++++++++++++++++++++++------
 rust/src/lib.rs      |   4 +-
 4 files changed, 210 insertions(+), 38 deletions(-)

commit 9355820e6a3f796860e3bde7520295ce23664ea5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 19:18:43 2016 -0600

    drawing_ctx.rs: Wrappers for acquire_node() and release_node()

 rust/src/drawing_ctx.rs | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

commit 6ece18779ebe31066122fd480cd5971131cb0f19
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 19:07:37 2016 -0600

    fix: implement gradient_radial_new

 rsvg-paint-server.h | 12 ++++++++++++
 1 file changed, 12 insertions(+)

commit 6fa8e4f22f5d4538fe840e81ac00c63110127aa7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 19:05:05 2016 -0600

    Rename rsvg_acquire_node*() / rsvg_release_node() to rsvg_drawing_ctx_*_node() throughout
    
    These operate on an RsvgDrawingCtx, so make their naming consistent

 rsvg-base.c         | 24 ++++++++++++------------
 rsvg-cairo-draw.c   | 22 +++++++++++-----------
 rsvg-filter.c       |  4 ++--
 rsvg-marker.c       |  4 ++--
 rsvg-paint-server.c |  4 ++--
 rsvg-private.h      |  9 ++++++---
 rsvg-structure.c    |  6 +++---
 rsvg-text.c         |  8 ++++----
 8 files changed, 42 insertions(+), 39 deletions(-)

commit 4b084cd3ff63ddc6425444d0e51a000a0245b249
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 19:02:06 2016 -0600

    gradient.rs: Implement gradient_radial_new()

 rust/src/gradient.rs | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

commit 675922d932f75aeb8036ce33215b19d45171fd45
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 18:10:12 2016 -0600

    gradient.rs: Implement setting linear gradients on a Cairo context

 rust/Cargo.toml      |   7 +++-
 rust/src/gradient.rs | 114 ++++++++++++++++++++++++++++++++++++++++++++++++---
 2 files changed, 113 insertions(+), 8 deletions(-)

commit 2592401e388df2a0455acbeed28b4b66240e26f4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 18:09:26 2016 -0600

    Reorder some struct fields for consistency

 rsvg-paint-server.h | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

commit efb58406c1cfb38218583c500c0c5c063308e683
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 18:08:50 2016 -0600

    Wrap some more RsvgDrawingCtx functions in Rust

 rsvg-cairo-draw.h       |  1 +
 rust/src/bbox.rs        |  6 +++---
 rust/src/drawing_ctx.rs | 35 +++++++++++++++++++++++++++++++++++
 3 files changed, 39 insertions(+), 3 deletions(-)

commit 3a8f07629033ab38011f408534386ad357de1a7d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 30 18:06:09 2016 -0600

    New function rsvg_cairo_get_cairo_context()
    
    We use it from the Rust code to extract the cairo_t from an
    RsvgDrawingContext, which in turn is assumed to be a RsvgCairoRender.

 rsvg-cairo-draw.c | 8 ++++++++
 rsvg-cairo-draw.h | 3 +++
 2 files changed, 11 insertions(+)

commit 0ca4455350b5bbab697a8f19aedc9c548fa24dc0
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 25 16:36:09 2016 -0600

    bbox.rs: Implement RsvgBbox in Rust

 rsvg-base.c      | 119 ------------------------------------------
 rsvg-private.h   |   7 +++
 rust/src/bbox.rs | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs  |   8 +++
 4 files changed, 171 insertions(+), 119 deletions(-)

commit 370634f1491df627009128191ba2625fc9bbd473
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 25 15:09:42 2016 -0600

    gradient.rs: Export functions to create Gradient objects and set their color stops
    
    We will use these from the *_fix_fallback() functions to do fallback
    resolution for gradients in the Rust code.

 rsvg-paint-server.h  | 22 ++++++++++++++
 rust/src/gradient.rs | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs      |  6 ++++
 3 files changed, 112 insertions(+)

commit bd32612b9c7599d0b07667e23d281097e63deef6
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 25 14:03:29 2016 -0600

    rsvg-cairo-draw.c: Factor out common code to set a cairo_pattern_t from a gradient

 rsvg-cairo-draw.c | 90 ++++++++++++++++++++++++++++++-------------------------
 1 file changed, 49 insertions(+), 41 deletions(-)

commit 0e9bda14796ed6aa862a324a27b01ce1fdc8f885
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 25 13:45:01 2016 -0600

    gradient.rs: Implementation of gradient fallbacks

 rust/src/gradient.rs | 242 +++++++++++++++++++++++++++++++++++++++------------
 rust/src/length.rs   |   6 +-
 2 files changed, 188 insertions(+), 60 deletions(-)

commit 6e1986a0f6dd5c60b92c73555547f5a0c669b5d2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 25 09:12:30 2016 -0600

    gradient.rs: Don't initialize RsvgLength by hand; actually parse a valid one

 rust/src/gradient.rs | 39 ++++++++++++++++-----------------------
 1 file changed, 16 insertions(+), 23 deletions(-)

commit 2842469ebb90f045d3c92d479795fa0b57cae89e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 23 19:04:35 2016 -0600

    gradient.rs: Start an implementation of gradient parameters in Rust
    
    Gradients can inherit their attributes from "fallback" gradients
    mentioned by IRI.  The C code does a little magic to resolve the
    fallbacks: it does a shallow-copy of an RsvgLinearGradient or
    RsvgRadialGradient structure, and then walks the chain of fallbacks,
    filling in the shallow-copied structure as appropriate.  This is done
    even for the children of the gradient node, i.e. its color stops: the
    pointer to the node->children is shallow-copied (!)
    
    For the Rust version, we'll have specific structures to hold a
    gradient's semantics.  They'll have Option<> fields that can be resolved
    from fallbacks.  We will have a "digested" array of color stops, not a
    high-level array of child nodes that may or may not actually contain
    stop elements.

 rust/src/gradient.rs | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs      |   1 +
 2 files changed, 109 insertions(+)

commit a2bf17db8895092e13be3d06c6c1e32e114051e2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 17:11:22 2016 -0600

    add_color_stops_for_gradient(): Iterate through the stops with rsvg_node_foreach_child()

 rsvg-cairo-draw.c | 80 ++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 49 insertions(+), 31 deletions(-)

commit f8fe835d0d3b919daeeb87cefa0b50bf28604ebf
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 16:52:09 2016 -0600

    rsvg-marker.c: Iterate through children with rsvg_node_foreach_child()

 rsvg-marker.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

commit a49f8d38acc51e094a6dc24efd6ff12f6db6871e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 16:20:00 2016 -0600

    Use a new rsvg_node_type() function throughout instead of an RSVG_NODE_TYPE() macro

 rsvg-base.c         | 20 +++++++++++++-------
 rsvg-cairo-draw.c   |  8 ++++----
 rsvg-filter.c       | 10 +++++-----
 rsvg-paint-server.c | 24 ++++++++++++------------
 rsvg-private.h      |  3 ++-
 rsvg-shapes.c       |  2 +-
 rsvg-structure.c    |  2 +-
 rsvg-text.c         |  4 ++--
 8 files changed, 40 insertions(+), 33 deletions(-)

commit 4f1d58dbffc6d35bf1af6f23f4d68ea93b3d3ffc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 16:05:34 2016 -0600

    Rename rsvg_node_group_pack() to rsvg_node_add_child()
    
    ... since that is its true purpose.

 rsvg-base.c      | 4 ++--
 rsvg-structure.c | 2 +-
 rsvg-structure.h | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

commit 852a2a3a827cf6922819802a7c67926f6880999c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 16:02:50 2016 -0600

    Use an iterator function rsvg_node_foreach_child() throughout
    
    This is instead of iterating through the node->children GPtrArray by
    hand.

 rsvg-base.c      |  52 +++++++++---
 rsvg-private.h   |   9 +++
 rsvg-structure.c |  72 ++++++++++-------
 rsvg-text.c      | 239 ++++++++++++++++++++++++++++++++++++-------------------
 4 files changed, 248 insertions(+), 124 deletions(-)

commit d1ef96e0e4c5075a5ef34df5703c6adcb49c35b0
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 14:43:56 2016 -0600

    Use an accessor function rsvg_node_get_parent() throughout
    
    Also, fix a three-part hack:
    
    1. rsvg_standard_element_start() would set the new node's parent right
       there, in redundant fashion to where rsvg_node_group_pack() sets the
       node's parent.
    
    2. Make rsvg_standard_element_start() add the new node to its parent
       before node->set_atts() gets called...
    
    3. ... so that rsvg_stop_set_atts() doesn't have to set its own parent
       to ctx->priv->currentnode (!) because the stop's node hasn't been
       parented yet.  This was the only place where a node->parent gets
       overwritten after creation.

 rsvg-base.c         | 20 +++++++++++++-------
 rsvg-cairo-render.c |  4 ++--
 rsvg-paint-server.c |  2 --
 rsvg-private.h      |  3 +++
 rsvg-structure.c    | 17 ++++++++++-------
 rsvg-styles.c       |  2 +-
 6 files changed, 29 insertions(+), 19 deletions(-)

commit 9e579213b88028cf9f9cc03127328e0008ad5afe
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 14:18:36 2016 -0600

    Use an accessor function rsvg_node_get_state() throughout

 rsvg-base.c         |  8 +++++++-
 rsvg-paint-server.c |  4 ++--
 rsvg-private.h      |  3 +++
 rsvg-shapes.c       | 24 ++++++++++++------------
 rsvg-structure.c    | 14 +++++++-------
 rsvg-styles.c       |  2 +-
 rsvg-text.c         |  4 ++--
 7 files changed, 34 insertions(+), 25 deletions(-)

commit ce69346a0fa93a59943baba1491d0397bd314739
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 09:02:30 2016 -0600

    node_is_filter_primitive(): make a private function, not a public macro
    
    Changed the way filter primitives are tested: they used a bitmask; now
    we have a well-defined range within the RsvgNodeType enum via the
    RSVG_NODE_TYPE_FILTER_PRIMITIVE_FIRST and
    RSVG_NODE_TYPE_FILTER_PRIMITIVE_LAST values.

 rsvg-filter.c  | 10 +++++++++-
 rsvg-private.h |  5 ++---
 2 files changed, 11 insertions(+), 4 deletions(-)

commit ce4fc2c3cb29eff9e67aec31b7382ea1e14d4092
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 22 09:00:56 2016 -0600

    rsvg-test: Ignore SVG fixtures that start with "ignore-"
    
    Right now pservers-grad-17-b.svg doesn't pass the tests, but I think it
    may be a Cairo bug.
    
    Add the ability to ignore test files if they have a "ignore-" filename
    prefix.  Hopefully I'll remember to fix this later...

 .../{pservers-grad-17-b.svg => ignore-pservers-grad-17-b.svg}     | 0
 tests/rsvg-test.c                                                 | 8 ++++----
 2 files changed, 4 insertions(+), 4 deletions(-)

commit 7f696c56a956371230c7ece49712cf95589abcaa
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 18 18:55:27 2016 -0600

    node.rs / shapes.rs - Start a Rust implementation for nodes

 rust/src/drawing_ctx.rs  | 24 ++++++++++++++++++++++++
 rust/src/handle.rs       |  1 +
 rust/src/lib.rs          |  5 ++++-
 rust/src/node.rs         | 15 +++++++++++++++
 rust/src/path_builder.rs |  1 +
 rust/src/shapes.rs       | 43 +++++++++++++++++++++++++++++++++++++++++++
 rust/src/state.rs        |  1 +
 7 files changed, 89 insertions(+), 1 deletion(-)

commit 7bd590aaff835d9d4113736ecd273c612830aef6
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 18 18:13:43 2016 -0600

    path_parser.rs: Make PathParser private, and only have a public parse_path_into_builder() function
    
    This function returns a Result<(), ParseError>, where ParseError is a
    new struct.
    
    Eventually we'll have tests for actual error reporting.

 rust/src/path_parser.rs | 39 +++++++++++++++++++++++++++------------
 1 file changed, 27 insertions(+), 12 deletions(-)

commit 54dc79f6609e53fa956f53d9fbb80c687075ee92
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 18 15:45:48 2016 -0600

    node_set_atts(): Call rsvg_parse_style_attrs() here, not in every node implementation
    
    This shrinks the ::set_atts() methods by a good bit, and only leaves
    element-specific attributes in those methods.  The general "class" and
    "id" attributes are dealt with here.

 rsvg-base.c         | 36 +++++++++++++++++++++++++++---------
 rsvg-filter.c       |  7 +------
 rsvg-image.c        |  8 +-------
 rsvg-marker.c       |  8 ++------
 rsvg-mask.c         | 19 +++----------------
 rsvg-paint-server.c |  2 --
 rsvg-shapes.c       | 51 ++++++---------------------------------------------
 rsvg-structure.c    | 34 ++--------------------------------
 rsvg-text.c         | 16 ----------------
 9 files changed, 42 insertions(+), 139 deletions(-)

commit 048bb0027df82775d81064898ff1995e5a34753c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 18 15:21:54 2016 -0600

    NodeCreator: Add a supports_class_attribute field, and populate it from the spec
    
    https://www.w3.org/TR/SVG/attindex.html#RegularAttributes has a list of
    which elements support the "class" attribute for CSS styling.
    
    Right now most of our node implementations fetch the "id" and "class" by
    hand, and feed them to rsvg_parse_style_attrs().  We'll factor out that
    call for all the node types, and do the call in a single place in the
    toplevel node_set_atts().
    
    According to the spec all elements support "id".  The NodeCreator
    structure, and the node_creators[] array of supported element types,
    encode which elements support the "class" attribute, so we can fetch it
    as appropriate.

 rsvg-base.c | 151 +++++++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 93 insertions(+), 58 deletions(-)

commit 4b22ec83e3567fde973aafccbf102bb404d2d6f0
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 17 15:27:32 2016 -0600

    Dispatch creation of new nodes from an array of element names, not a chain of strcmp()
    
    Also, the rsvg_new_SOME_NODE_TYPE () constructor functions now take the
    element name.
    
    This lets us:
    
    * Use bsearch() on the sorted array of element names, instead of an
      unordered chain of if (strcmp (...)).  We can replace this later with
      something better like a trie.
    
    * Port things to Rust more easily, since the constructor functions can
      dispatch on their own based on the element name.
    
    * Avoid special cases in the way
      rsvg_new_node_component_transfer_function() and
      rsvg_new_node_light_source() are called; now they dispatch on their
      own based on the element name.

 rsvg-base.c         | 221 +++++++++++++++++++++++++---------------------------
 rsvg-filter.c       |  65 ++++++++++------
 rsvg-filter.h       |  40 +++++-----
 rsvg-image.c        |   2 +-
 rsvg-image.h        |   2 +-
 rsvg-marker.c       |   2 +-
 rsvg-marker.h       |   2 +-
 rsvg-mask.c         |   4 +-
 rsvg-mask.h         |   4 +-
 rsvg-paint-server.c |   8 +-
 rsvg-paint-server.h |   8 +-
 rsvg-shapes.c       |  14 ++--
 rsvg-shapes.h       |  14 ++--
 rsvg-structure.c    |  12 +--
 rsvg-structure.h    |  12 +--
 rsvg-text.c         |   6 +-
 rsvg-text.h         |   6 +-
 rust/src/lib.rs     |   1 +
 18 files changed, 218 insertions(+), 205 deletions(-)

commit 58a645cc9b547ab558dfa8dc398143a0b01be9f1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 17 14:05:45 2016 -0600

    node_set_atts(): Check here for the property bag being empty
    
    Every ::set_atts() implementation used to check on its own whether the
    property bag is empty (common for "plain" SVG elements with no defined
    attributes?) before actually querying the property bag.
    
    Now we do that check in a single place, in the toplevel node_set_atts()
    helper, instead of having each node type do it on its own.
    
    This means that ::set_atts() implementation which do "validation" work
    or any other post-initialization after the attributes have been set,
    will have to support their ::set_atts() not being called at all if there
    are no attributes in the first place.

 rsvg-base.c         |   4 +-
 rsvg-filter.c       | 648 ++++++++++++++++++++++++----------------------------
 rsvg-image.c        |  52 ++---
 rsvg-marker.c       |  58 +++--
 rsvg-mask.c         |  72 +++---
 rsvg-paint-server.c | 325 +++++++++++++-------------
 rsvg-shapes.c       | 184 +++++++--------
 rsvg-structure.c    | 116 +++++-----
 rsvg-text.c         |  36 ++-
 9 files changed, 708 insertions(+), 787 deletions(-)

commit 997c1a06f0a84bd3b26e2dfbf7250cfc2d3ac222
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 17 11:53:52 2016 -0600

    property_bag.rs: Bindings for RsvgPropertyBag

 rust/src/lib.rs          |  1 +
 rust/src/property_bag.rs | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+)

commit b4d5be4d9ddc1ecbfe6c4fff4e9e886520cdd4d6
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 17 07:34:57 2016 -0600

    Make rsvg_node_set_atts() static
    
    It is only used in rsvg-base.c anyway; rename it to node_set_atts().

 rsvg-base.c    | 14 +++++++-------
 rsvg-private.h |  3 +--
 2 files changed, 8 insertions(+), 9 deletions(-)

commit b2c5f373d12fa0c93f941aab22e6bb8076bf3bee
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 17 07:25:40 2016 -0600

    RsvgNode: don't keep the node's element name in this struct while parsing
    
    While an RsvgHandle is parsing, it keeps a stack with the name of the
    current XML element.  However, it kept the element name as part of the
    RsvgNode structure.  The name pointers are only valid while the
    xmlParserCtxtPtr is alive; after that, node->name contains a dangling
    pointer (fortunately unused).
    
    Instead of burdening RsvgNode with maintaining the parsing stack, we now
    keep this stack in RsvgHandlePrivate instead.

 rsvg-base.c    | 50 ++++++++++++++++++++++++++++++++++++++++++--------
 rsvg-gobject.c |  1 +
 rsvg-private.h |  6 +++++-
 3 files changed, 48 insertions(+), 9 deletions(-)

commit 4daa2de3caafb5f32985e9fd646f90b528847e16
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 17 06:54:44 2016 -0600

    Remove unused RsvgLoadPolicy
    
    It was set to the single possible value at construction time,
    and then checked with an assertion for that value; it wasn't
    used for anything.

 rsvg-base.c    | 2 --
 rsvg-gobject.c | 1 -
 rsvg-private.h | 8 --------
 3 files changed, 11 deletions(-)

commit 4d19ded9d0e880e0bb0fd9cd9580c4175276dde8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 18:27:05 2016 -0600

    Implement rsvg_length_normalize() fully in Rust
    
    We add an RsvgLength::normalize() method, and the corresponding
    rsvg_length_normalize() function to make this accessible to the C code.
    
    This removes the old _rsvg_css_normalize_length() function.

 rsvg-base.c             |  2 +-
 rsvg-cairo-draw.c       | 36 ++++++++++++++--------------
 rsvg-css.c              | 64 +------------------------------------------------
 rsvg-filter.c           | 38 ++++++++++++++---------------
 rsvg-image.c            |  8 +++----
 rsvg-marker.c           | 12 +++++-----
 rsvg-private.h          |  4 +++-
 rsvg-shapes.c           | 34 +++++++++++++-------------
 rsvg-structure.c        | 16 ++++++-------
 rsvg-text.c             | 22 ++++++++---------
 rust/src/drawing_ctx.rs | 20 ++++++++++++++++
 rust/src/length.rs      | 64 +++++++++++++++++++++++++++++++++++++++++++++----
 12 files changed, 168 insertions(+), 152 deletions(-)

commit 4eca2e07b6419d32e8d45ff71cf60aa24b908217
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 15:40:13 2016 -0600

    drawing_ctx.rs: Put the declaration of RsvgDrawingCtx here
    
    We'll use this file to declare the accessors to an RsvgDrawingCtx, which
    are right now implemented in C.

 rust/src/drawing_ctx.rs | 16 ++++++++++++++++
 rust/src/lib.rs         |  5 +++--
 rust/src/marker.rs      |  3 +--
 3 files changed, 20 insertions(+), 4 deletions(-)

commit 66f7394503b4ed180d84735dd80382bc278abe41
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 15:12:03 2016 -0600

    Make viewport_percentage() internal to rsvg-css.c
    
    This is only used in _rsvg_css_normalize_length() anyway.
    
    Also, remove an unused function.

 rsvg-css.c    | 16 ++++++++++++++--
 rsvg-styles.c | 18 ------------------
 rsvg-styles.h |  5 -----
 3 files changed, 14 insertions(+), 25 deletions(-)

commit b55970ae21f2f773e98ede77cba7f8ce5b86fefe
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 15:08:07 2016 -0600

    Use a new rsvg_drawing_ctx_get_normalized_font_size(); make the computation in a helper function
    
    The public rsvg_drawing_ctx_get_normalized_font_size() just takes an
    RsvgDrawingCtx and operates on the current state.  The
    actual (recursive) computation is now done in a helper function, which
    is also of use for computing the baseline_shift.

 rsvg-css.c     | 16 +++++++++++-----
 rsvg-private.h |  3 ++-
 rsvg-text.c    |  2 +-
 3 files changed, 14 insertions(+), 7 deletions(-)

commit cba410550a00a0d6dfe4f8b9ffe39ec0ad1a80bc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 15:00:17 2016 -0600

    rsvt-text: Don't pass an RsvgState around; get it from the context

 rsvg-text.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

commit 11282a185a9723b75bd5f8e53b26a3afddcaca3a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 14:49:20 2016 -0600

    Use a new rsvg_drawing_ctx_get_dpi() accessor throughout
    
    Instead of accessing ctx->{dpi_x,dpi_y} directly.

 rsvg-base.c       | 17 +++++++++++++++--
 rsvg-cairo-draw.c |  6 +++++-
 rsvg-css.c        | 10 +++++++---
 rsvg-private.h    |  3 +++
 rsvg-text.c       |  6 ++++--
 5 files changed, 34 insertions(+), 8 deletions(-)

commit 2376ac2a826854b4c3645bc0976096b86cefb3b5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 14:35:32 2016 -0600

    Use a new rsvg_drawing_ctx_get_view_box_size() throughout
    
    Instead of accessing ctx->vb.rect.{width,height} directly, introduce an
    accesor function.

 rsvg-base.c    |  7 +++++++
 rsvg-css.c     | 11 +++++++----
 rsvg-filter.c  | 32 ++++++++++++++++++++------------
 rsvg-private.h |  3 +++
 4 files changed, 37 insertions(+), 16 deletions(-)

commit 932db358ee830737a4231d8dc4bfa81966828e5c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 14:24:45 2016 -0600

    Rename _rsvg_{push,pop}_view_box to rsvg_drawing_ctx_{push,pop}_view_box
    
    The operations act on a RsvgDrawingCtx, so start making the
    naming consistent like that.

 rsvg-base.c       |  4 ++--
 rsvg-cairo-draw.c | 26 +++++++++++++-------------
 rsvg-filter.c     |  8 ++++----
 rsvg-marker.c     |  4 ++--
 rsvg-private.h    |  4 ++--
 rsvg-structure.c  | 10 +++++-----
 6 files changed, 28 insertions(+), 28 deletions(-)

commit 84af994cadb50de44a684fb174a10a7b965596eb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 16 10:24:05 2016 -0600

    rsvg_length_hand_normalize(): Fully implemented now in Rust
    
    This replaces _rsvg_css_hand_normalize_length().

 rsvg-base.c        |  8 ++++----
 rsvg-css.c         | 19 -------------------
 rsvg-private.h     | 10 ++++++++--
 rust/src/length.rs | 29 ++++++++++++++++++++++++++---
 4 files changed, 38 insertions(+), 28 deletions(-)

commit 822459f29b74e4e154d721c80f6e16fe6f05e0f2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 15 18:38:10 2016 -0600

    RsvgLength: make ::parse() a constructor, not a standalone parse_length() function

 rust/src/length.rs | 168 +++++++++++++++++++++++++++--------------------------
 1 file changed, 85 insertions(+), 83 deletions(-)

commit deb3e8eb55b5b2c3b408934c91f65de6bf666ee2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 15 16:15:46 2016 -0600

    Rename rsvg-path.h to rsvg-path-builder.h
    
    Now it only holds the prototypes for the RsvgPathBuilder API, so make
    the filename consistent.

 Makefile.am                        | 2 +-
 rsvg-base.c                        | 2 +-
 rsvg-cairo-clip.c                  | 2 +-
 rsvg-cairo-draw.c                  | 2 +-
 rsvg-marker.c                      | 2 +-
 rsvg-path.h => rsvg-path-builder.h | 8 ++++----
 rsvg-private.h                     | 2 +-
 rsvg-shapes.c                      | 2 +-
 8 files changed, 11 insertions(+), 11 deletions(-)

commit 1e12b148dec098f2f1d5d8edfd9e0317f5e9f4ba
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 18:15:44 2016 -0600

    Make condition slightly easier to read

 rsvg-base.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

commit 69789ced424d2a7c25b10ca11be2722c70e33987
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 18:09:01 2016 -0600

    Remove superfluous term
    
    Here, bbox.x = bbox.y = 0, so we don't need to add them.

 rsvg-base.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

commit 825fed0fe3ac41fb5551239c118a30fd1b4f4e11
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 17:19:12 2016 -0600

    Remove test 20 for gradients; it is for animations

 .../reftests/svg1.1/pservers-grad-20-b-ref.png     | Bin 9478 -> 0 bytes
 .../reftests/svg1.1/pservers-grad-20-b.svg         |  92 ---------------------
 2 files changed, 92 deletions(-)

commit f3aac518feed53ad29d04918e08ec08802cf18e3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 17:17:29 2016 -0600

    Test 21 for gradients also passes; regenerate ref image

 .../reftests/svg1.1/pservers-grad-21-b-ref.png      | Bin 12246 -> 11563 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

commit e28afe422968f8a5bdc57ce29b46b196e0a7ead7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 17:02:37 2016 -0600

    Do not inherit gradient stop color and opacity from the gradient's parent object
    
    Per the spec, stop-color and stop-opacity don't inherit from the
    parent object of a gradient, unless explicitly requested.
    
    This makes the test pservers-grad-18-b.svg pass.

 rsvg-paint-server.c                                |  35 ++++++++++++++++++---
 .../reftests/svg1.1/pservers-grad-18-b-ref.png     | Bin 5654 -> 4783 bytes
 2 files changed, 30 insertions(+), 5 deletions(-)

commit f3fb509b8c34fb14b5fe7a227652f03fba631459
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 13:37:30 2016 -0600

    Ensure gradient stop offsets are in nondecreasing order.
    
    The test tests/fixtures/reftests/svg1.1/pservers-grad-16-b.svg was not
    passing.
    
    This test has gradient stop offsets in the wrong order.  Cairo
    automatically sorts them, but the SVG spec mandates that they should be
    adjusted to be in nondecreasing order.
    
    I was actually confused two commits ago; I thought the spec mandated
    that the stop offsets were invalid if they weren't ordered.

 rsvg-cairo-draw.c                                     |   8 +++-----
 .../reftests/svg1.1/pservers-grad-16-b-ref.png        | Bin 6618 -> 4787 bytes
 2 files changed, 3 insertions(+), 5 deletions(-)

commit ac4ca7e2edef0973620ff55fd57282cc45662c7f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 13:23:47 2016 -0600

    Radial gradients: fix the focus point so it lies within the gradient's circle
    
    An SVG radial gradient is from a focus point (fx, fy) towards a
    circle (cx, cy, r).  The focus point is assumed to be inside the circle.
    
    If the focus point is specified to be outside the circle, we need to
    find the closest point to it in the circumference, i.e. the point in the
    circumference that intersects the line that passes through (cx, cy)
    and (fx, fy).
    
    This computation makes us pass the reference test - regenerated the
    corresponding image.

 rsvg-cairo-draw.c                                  |  80 +++++++++++++++++++--
 .../reftests/svg1.1/pservers-grad-13-b-ref.png     | Bin 98222 -> 93578 bytes
 2 files changed, 75 insertions(+), 5 deletions(-)

commit 4006aff6cfc1648660be27fb38b8bbb20ea813eb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 10:58:40 2016 -0600

    RsvgGradientStop: store whether the stop's values are valid
    
    The spec mandates that values for stop offsets are only plain numbers or
    percentages.  We used to handle this more or less implicitly by calling
    _rsvg_css_hand_normalize_length(), using the resulting value, and
    dropping the units.  Now we actually ensure that we get plain numbers
    or percentages, and eliminate this one use of _rsvg_css_hand_normalize_length().
    
    Now, RsvgGradientStop has an is_valid field that says whether the stop
    has valid units.  At rendering time, we can decide what to do about
    gradients with invalid stops:  currently we don't add invalid stops to
    the gradient, but we still render it up to the last valid stop -
    hopefully to make it easier to debug SVG files.
    
    Also, we now ensure that stop offsets are actually in nondecreasing
    order, per the spec.
    
    (I really want to get rid of _rsvg_css_hand_normalize_length(), but
    found these things along the way...)

 rsvg-cairo-draw.c   | 40 +++++++++++++++++++++++++++++++++++-----
 rsvg-paint-server.c | 24 +++++++++++++++++-------
 rsvg-paint-server.h |  1 +
 3 files changed, 53 insertions(+), 12 deletions(-)

commit 38927a65143819acd00efc10288267baf1a78a5b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 10:40:48 2016 -0600

    Add official test files for gradients.  Some do not pass.
    
    Mysteriously, pservers-grad-19-b.svg is missing from the original
    tarball of tests.

 .../reftests/svg1.1/pservers-grad-09-b-ref.png     | Bin 0 -> 6268 bytes
 .../reftests/svg1.1/pservers-grad-09-b.svg         | 107 +++++++++++++
 .../reftests/svg1.1/pservers-grad-10-b-ref.png     | Bin 0 -> 9316 bytes
 .../reftests/svg1.1/pservers-grad-10-b.svg         |  93 +++++++++++
 .../reftests/svg1.1/pservers-grad-11-b-ref.png     | Bin 0 -> 57420 bytes
 .../reftests/svg1.1/pservers-grad-11-b.svg         | 124 +++++++++++++++
 .../reftests/svg1.1/pservers-grad-12-b-ref.png     | Bin 0 -> 23962 bytes
 .../reftests/svg1.1/pservers-grad-12-b.svg         | 110 +++++++++++++
 .../reftests/svg1.1/pservers-grad-13-b-ref.png     | Bin 0 -> 98222 bytes
 .../reftests/svg1.1/pservers-grad-13-b.svg         | 171 +++++++++++++++++++++
 .../reftests/svg1.1/pservers-grad-14-b-ref.png     | Bin 0 -> 24931 bytes
 .../reftests/svg1.1/pservers-grad-14-b.svg         | 120 +++++++++++++++
 .../reftests/svg1.1/pservers-grad-15-b-ref.png     | Bin 0 -> 10232 bytes
 .../reftests/svg1.1/pservers-grad-15-b.svg         |  70 +++++++++
 .../reftests/svg1.1/pservers-grad-16-b-ref.png     | Bin 0 -> 6618 bytes
 .../reftests/svg1.1/pservers-grad-16-b.svg         |  81 ++++++++++
 .../reftests/svg1.1/pservers-grad-17-b-ref.png     | Bin 0 -> 9478 bytes
 .../reftests/svg1.1/pservers-grad-17-b.svg         |  92 +++++++++++
 .../reftests/svg1.1/pservers-grad-18-b-ref.png     | Bin 0 -> 5654 bytes
 .../reftests/svg1.1/pservers-grad-18-b.svg         | 114 ++++++++++++++
 .../reftests/svg1.1/pservers-grad-20-b-ref.png     | Bin 0 -> 9478 bytes
 .../reftests/svg1.1/pservers-grad-20-b.svg         |  92 +++++++++++
 .../reftests/svg1.1/pservers-grad-21-b-ref.png     | Bin 0 -> 12246 bytes
 .../reftests/svg1.1/pservers-grad-21-b.svg         | 146 ++++++++++++++++++
 .../reftests/svg1.1/pservers-grad-22-b-ref.png     | Bin 0 -> 7596 bytes
 .../reftests/svg1.1/pservers-grad-22-b.svg         |  97 ++++++++++++
 .../reftests/svg1.1/pservers-grad-23-f-ref.png     | Bin 0 -> 6522 bytes
 .../reftests/svg1.1/pservers-grad-23-f.svg         |  80 ++++++++++
 .../reftests/svg1.1/pservers-grad-24-f-ref.png     | Bin 0 -> 7711 bytes
 .../reftests/svg1.1/pservers-grad-24-f.svg         |  68 ++++++++
 30 files changed, 1565 insertions(+)

commit 88a1fb46bb6c4ba199d550d0a4656292ddc6a881
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 10:29:52 2016 -0600

    Rename test-display.c to rsvg-view.c
    
    After all it's the main file for the test program rsvg-view-3.

 Makefile.am                   | 2 +-
 test-display.c => rsvg-view.c | 0
 2 files changed, 1 insertion(+), 1 deletion(-)

commit 1088bea7224077dff3b7c943cede57575b161362
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 09:58:39 2016 -0600

    rsvg-styles: Use g_message() instead of g_warning() for errors from libcroco
    
    Our test suite considers a test to fail if it calls g_warning().  Our
    code that uses libcroco would call g_warning() on invalid or unsupported
    CSS in <style> blocks, and this would causes tests to fail as if there
    were something wrong with out code, not with the CSS itself.
    
    We'll have to have a way to report CSS errors upstream, and tests for
    specific kinds of errors.

 rsvg-styles.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

commit ece994ad31b9c8c98b7a8270414ad440ddb1bed3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 09:57:53 2016 -0600

    length.rs: Remove debugging println!()

 rust/src/length.rs | 1 -
 1 file changed, 1 deletion(-)

commit 4a37888a5d2a10eab2ce179a073ba9b7c23b6562
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 09:57:34 2016 -0600

    Start adding SVG tests for gradients
    
    Also, note in tests/README.md some peculiarities of the official SVG test suite.

 tests/README.md                                    |  49 +++++++++
 .../reftests/svg1.1/pservers-grad-01-b-ref.png     | Bin 0 -> 9700 bytes
 .../reftests/svg1.1/pservers-grad-01-b.svg         |  69 +++++++++++++
 .../reftests/svg1.1/pservers-grad-02-b-ref.png     | Bin 0 -> 22580 bytes
 .../reftests/svg1.1/pservers-grad-02-b.svg         |  79 +++++++++++++++
 .../reftests/svg1.1/pservers-grad-03-b-ref.png     | Bin 0 -> 9846 bytes
 .../reftests/svg1.1/pservers-grad-03-b.svg         |  77 +++++++++++++++
 .../reftests/svg1.1/pservers-grad-04-b-ref.png     | Bin 0 -> 23971 bytes
 .../reftests/svg1.1/pservers-grad-04-b.svg         |  88 +++++++++++++++++
 .../reftests/svg1.1/pservers-grad-05-b-ref.png     | Bin 0 -> 65245 bytes
 .../reftests/svg1.1/pservers-grad-05-b.svg         |  94 ++++++++++++++++++
 .../reftests/svg1.1/pservers-grad-06-b-ref.png     | Bin 0 -> 21269 bytes
 .../reftests/svg1.1/pservers-grad-06-b.svg         | 109 +++++++++++++++++++++
 .../reftests/svg1.1/pservers-grad-07-b-ref.png     | Bin 0 -> 11103 bytes
 .../reftests/svg1.1/pservers-grad-07-b.svg         |  88 +++++++++++++++++
 .../reftests/svg1.1/pservers-grad-08-b-ref.png     | Bin 0 -> 40248 bytes
 .../reftests/svg1.1/pservers-grad-08-b.svg         | 100 +++++++++++++++++++
 .../svg1.1/pservers-grad-stops-01-f-ref.png        | Bin 0 -> 6740 bytes
 .../reftests/svg1.1/pservers-grad-stops-01-f.svg   |  70 +++++++++++++
 19 files changed, 823 insertions(+)

commit b491f38fd6c57329dd317525e53c086fa28b44cb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 11 08:32:40 2016 -0600

    Gradients: Don't store "current color" for gradient nodes
    
    Gradient nodes don't need to store a has_current_color flag nor the
    current color:  nodes for gradient stops already contain this
    information, and they already resolve the current color themselves.

 rsvg-cairo-draw.c   | 21 ++++++++-------------
 rsvg-paint-server.c |  7 -------
 rsvg-paint-server.h |  4 ----
 3 files changed, 8 insertions(+), 24 deletions(-)

commit 03d7716b4dd2e4e7cb04f58b14f00d2bff42c0d4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 10 19:12:21 2016 -0600

    length.rs: New file with RsvgLength and a public rsvg_length_parse()
    
    This is the parser for SVG length values, converted to Rust.
    
    The new rsvg_length_parse() replaces the old _rsvg_css_parse_length()
    throughout the code.

 rsvg-css.c          | 127 ----------------------
 rsvg-filter.c       |  44 ++++----
 rsvg-image.c        |  10 +-
 rsvg-marker.c       |  12 +--
 rsvg-mask.c         |  16 +--
 rsvg-paint-server.c |  38 +++----
 rsvg-private.h      |   8 +-
 rsvg-shapes.c       |  42 ++++----
 rsvg-structure.c    |  32 +++---
 rsvg-styles.c       |  16 +--
 rsvg-text.c         |  12 +--
 rust/src/length.rs  | 300 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 rust/src/lib.rs     |  10 ++
 13 files changed, 428 insertions(+), 239 deletions(-)

commit a043810fbfd178c2a2db3749a129b89f9095855d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 10 18:49:10 2016 -0600

    strtod.rs: Don't consume the 'e' in strtod("42em")
    
    If the character after the 'e' is not an exponent, consider it part of
    the substring after the parsed number.  This way "em" and "ex"
    lengths will be parsed properly.

 rust/src/strtod.rs | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

commit 57a48fd333a739b559d93c91b1791552fd62a154
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 23:05:47 2016 -0600

    strtod.rs: Move the last_pos housekeeping until the end

 rust/src/strtod.rs | 17 ++---------------
 1 file changed, 2 insertions(+), 15 deletions(-)

commit fb723fade7b904c77f7af71ee2ccc3ae35d522d6
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 22:58:08 2016 -0600

    strtod.rs: Shitty implementation of strtod(); we'll need it to parse things easily

 rust/src/lib.rs    |   1 +
 rust/src/strtod.rs | 172 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 173 insertions(+)

commit 806ec92e57324ca97c63830c1876a3b4fe6d062c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 18:59:10 2016 -0600

    marker.rs: Take slices instead of &Vec<Segment>
    
    Callers need no changes, since Vec has the Deref trait to a slice.
    
    Thanks to Björn Steinbrink for the suggestion.

 rust/src/marker.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit e483065586eb22f14d41053d1b342b6bece5a1f4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 18:52:30 2016 -0600

    marker.rs: Remove superfluous parentheses

 rust/src/marker.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 77a40fe6c8186802ea3c31813aee4696daf8bdd4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 18:44:50 2016 -0600

    marker.rs: Iterate on vector slices, instead of ranges, so we can omit bounds checking
    
    Several people suggested that I should
    
      for segment in &segments[start .. end] { ... }
    
    instead of
    
      for j in (start .. end) { ... segments[j] }
    
    This way the slice [start .. end] can eliminate bounds checks.
    
    The idiom for reverse iteration here is
    
      for segment in (&segments[0 .. end + 1]).iter ().rev() { ... }
    
    Get a slice, turn it into an iterator, reverse the iterator.

 rust/src/marker.rs | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

commit 9bbadebb7d4d09b3d5efb65b7ca0b4461b9bd10c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 17:55:54 2016 -0600

    Make rsvg_state_override() static
    
    It is only used within rsvg-styles.c

 rsvg-styles.c | 6 +++---
 rsvg-styles.h | 3 +--
 2 files changed, 4 insertions(+), 5 deletions(-)

commit 714e3e3579fedb40e3b97e1c1dee9f153b88b98b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 17:42:27 2016 -0600

    Disable the "/dimensions/sub/rect with transform" test for now

 tests/dimensions.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 57471e12925b48b5ef01e0ca441be6d79b73026c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 17:39:26 2016 -0600

    tests/dimensions.c: Assert that we got the sub-object; print the dimensions

 tests/dimensions.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

commit 16d652c4430209a1736052ec333ba1af203e97ec
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 17:29:03 2016 -0600

    Enable dimensions tests
    
    Why were they disabled?  Because they fail...?

 tests/Makefile.am                       | 20 +++++++++++++-------
 tests/dimensions.c                      | 10 ++++++----
 tests/fixtures/dimensions/bug614018.svg | 11 ++++++++---
 3 files changed, 27 insertions(+), 14 deletions(-)

commit 68f0db920a48a34cafa91d3b9cdd8da8ee2f280c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 17:28:33 2016 -0600

    Make rsvg_state_dominate() static
    
    It's only used within rsvg-styles.c

 rsvg-styles.c | 6 +++---
 rsvg-styles.h | 2 --
 2 files changed, 3 insertions(+), 5 deletions(-)

commit 468f9251782b7aed6f9ff5e34e404a6da161e880
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 15:37:27 2016 -0600

    Make rsvg_state_new() / rsvg_state_free() the only way of getting new states
    
    Previously they were allocated on the stack, allocated by hand on the
    heap, allocated with g_slice by rsvg_state_push()...
    
    Make all of that consistent; rsvg_state_new() is the only way to get
    a new state now.

 rsvg-image.c        |   4 +-
 rsvg-paint-server.c |  15 ++++---
 rsvg-structure.c    |  11 ++---
 rsvg-styles.c       | 125 ++++++++++++++++++++++++++++++----------------------
 rsvg-styles.h       |   5 +--
 5 files changed, 91 insertions(+), 69 deletions(-)

commit a450f40e58a0af5d1133a2b82bf52518946d0b51
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 14:50:29 2016 -0600

    rsvg_state_finalize(): Clear freed fields

 rsvg-styles.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

commit 0a416d70c6fcbcff50eb26bbefd0fae1d4de28d0
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 14:22:40 2016 -0600

    Remove unused global variable

 rsvg-cairo-draw.c | 2 --
 1 file changed, 2 deletions(-)

commit f22b3cb210427283bf29866f87193f150fc5aebc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 14:12:11 2016 -0600

    RsvgDefs: Keep track only of nodes that have an id, or are externals
    
    RsvgDefs also stored all the RsvgNode objects inside an RsvgHandle so
    that they could be freed at destruction time.
    
    Now RsvgDefs only has references to nodes that have an XML id="foo"
    attribute, and references to external objects.
    
    The list of all nodes is kept in RsvgHandlePrivate now.

 rsvg-base.c    | 15 ++++++++++++---
 rsvg-defs.c    | 17 ++---------------
 rsvg-gobject.c | 23 +++++++++++++++++++++++
 rsvg-private.h |  4 ++--
 4 files changed, 39 insertions(+), 20 deletions(-)

commit c8b08f1d0dfc3b5f21482793b9579489796f5a84
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 13:47:54 2016 -0600

    Register newly-created nodes in the defs as soon as possible
    
    Don't defer it until each node's implementation of ::set_atts().
    
    This reduces the amount of duplicated code in each implementation of
    ::set_atts().

 rsvg-base.c         | 17 ++++++++++++++++-
 rsvg-filter.c       | 42 ++----------------------------------------
 rsvg-image.c        |  5 ++---
 rsvg-marker.c       |  4 +---
 rsvg-mask.c         | 10 ++++------
 rsvg-paint-server.c |  6 ------
 rsvg-shapes.c       | 24 ++++++------------------
 rsvg-structure.c    | 18 ++++++------------
 rsvg-text.c         | 10 ++--------
 9 files changed, 39 insertions(+), 97 deletions(-)

commit e478a29049bc5c499c82e7ed6ff9c01b7b05baa4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 13:24:58 2016 -0600

    Rename function to rsvg_defs_register_node_by_id()
    
    To make it more clear that the "id" is the XML's id="foo" attribute.
    
    Also, instead of the &something->super.super nonsense, use "self" or
    simply "node" where available.

 rsvg-defs.c         | 10 +++++++---
 rsvg-defs.h         |  2 +-
 rsvg-filter.c       | 38 ++++++++++++++++++++------------------
 rsvg-image.c        |  2 +-
 rsvg-marker.c       |  2 +-
 rsvg-mask.c         |  4 ++--
 rsvg-paint-server.c |  6 +++---
 rsvg-shapes.c       | 12 ++++++------
 rsvg-structure.c    |  8 ++++----
 rsvg-text.c         |  6 +++---
 10 files changed, 48 insertions(+), 42 deletions(-)

commit 28d00ade0eed48b751208e5e0801b990233e82a1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 13:02:56 2016 -0600

    Rename rsvg_filter_set_atts() for consistency

 rsvg-filter.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit 142a59969a98b9b628e86f04482ee4ff6f1b5411
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 12:53:42 2016 -0600

    rsvg-cairo-render: Remove obsolete comment; add some assertions
    
    By the time rsvg_cairo_render_free() is called, all of its stacks
    should have already been emptied.

 rsvg-cairo-render.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

commit f6cbe3958a82c77e528286ddeaccf09d005aacc2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 12:33:30 2016 -0600

    path_builder.rs: No need to repr(C) for RsvgPathBuilder; it's opaque

 rust/src/path_builder.rs | 1 -
 1 file changed, 1 deletion(-)

commit fcec5ea64aaf5b2d03082cc869b7e9acb7ff72ba
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 12:27:25 2016 -0600

    Remove unused struct field

 rsvg-structure.h | 1 -
 1 file changed, 1 deletion(-)

commit 35a73818a15a826f073bca41aa5c54bef296e1f4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 12:19:08 2016 -0600

    Inline a one-liner function that was only used in a single place

 rsvg-base.c      | 5 +++--
 rsvg-structure.c | 7 -------
 rsvg-structure.h | 2 --
 3 files changed, 3 insertions(+), 11 deletions(-)

commit fc13538125fe2563689398fc4d4cd5d591b77959
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 12:08:25 2016 -0600

    Remove unused field

 rsvg-private.h | 1 -
 1 file changed, 1 deletion(-)

commit a2e975ec4736de06221857ff19dae42e1c90d19e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 9 10:09:56 2016 -0600

    Remove unused function

 rsvg-defs.c | 10 ----------
 rsvg-defs.h |  2 --
 2 files changed, 12 deletions(-)

commit 5a85e7cf2ecc90486346debc9a5a426163348f52
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 20:34:31 2016 -0600

    Make RsvgLength carry its own direction for normalization
    
    This is the pattern that was there before:
    
      foo.some_len = _rsvg_css_parse_length (str);   /* at creation time */
    
      ...
    
      double real_len = _rsvg_css_normalize_length (&foo.some_len, ctx, LENGTH_DIR_HORIZONTAL); /* at rendering time */
    
    This led to a few inconsistencies in the way directions got used -
    sometimes cut&paste errors could creep in and a vertical direction
    would be used for a horizontal length, for example.
    
    This change makes the pattern be
    
      foo.some_len = _rsvg_css_parse_length (str, LENGTH_DIR_HORIZONTAL);   /* at creation time */
    
      ...
    
      double real_len = _rsvg_css_normalize_length (&foo.some_len, ctx); /* at rendering time */
    
    I.e. lengths get their direction-to-be-resolved-as at creation time,
    during parse_length(); this gets stored in a new field length.dir.
    Later, normalize_length() knows which direction to use.

 rsvg-base.c         |  2 +-
 rsvg-cairo-draw.c   | 36 +++++++++++------------
 rsvg-css.c          | 20 +++++++++----
 rsvg-filter.c       | 82 ++++++++++++++++++++++++++---------------------------
 rsvg-image.c        | 18 ++++++------
 rsvg-marker.c       | 24 ++++++++--------
 rsvg-mask.c         | 16 +++++------
 rsvg-paint-server.c | 37 ++++++++++++------------
 rsvg-private.h      | 15 +++++-----
 rsvg-shapes.c       | 76 ++++++++++++++++++++++++-------------------------
 rsvg-structure.c    | 48 +++++++++++++++----------------
 rsvg-styles.c       | 14 ++++-----
 rsvg-text.c         | 35 +++++++++++------------
 13 files changed, 217 insertions(+), 206 deletions(-)

commit d81282c2ee8ad5fa99db091e6a967ed701f13d1a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 19:13:59 2016 -0600

    Move rsvg_render_markers() completely into Rust
    
    We used to have an rsvg_render_markers() in C, and after pulling some
    data out of ctx and state, it would call the actual implementation in
    Rust.  Now that we can extract that data from ctx with accessor
    functions, we can have the whole implementation of rsvg_render_markers()
    in Rust.

 rsvg-marker.c      | 17 -----------------
 rsvg-marker.h      |  2 ++
 rust/src/lib.rs    |  2 +-
 rust/src/marker.rs | 27 ++++++++++++++++-----------
 4 files changed, 19 insertions(+), 29 deletions(-)

commit a77084dda60fce6b506a508074672b7ba7543ee5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 19:06:42 2016 -0600

    Move the get_*_marker functions to take an RsvgDrawingCtx, not a RsvgState
    
    That is, following the "fish out stuff from the current state" pattern
    from rsvg_get_normalized_stroke_width().

 rsvg-base.c        | 67 +++++++++++++++++++++++++++++++++++++-----------------
 rsvg-marker.c      | 15 +++---------
 rsvg-private.h     |  9 ++++++++
 rsvg-styles.c      | 18 ---------------
 rsvg-styles.h      |  7 ------
 rust/src/marker.rs |  4 +++-
 6 files changed, 61 insertions(+), 59 deletions(-)

commit e0dcaa2519b48b5b180969ffd4d3bf0edce8e43d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 18:58:14 2016 -0600

    rsvg-styles: New accessor functions for the state struct's markers
    
    We will use these from the Rust code to render markers

 rsvg-marker.c |  6 +++---
 rsvg-styles.c | 18 ++++++++++++++++++
 rsvg-styles.h |  7 +++++++
 3 files changed, 28 insertions(+), 3 deletions(-)

commit da4a2a7cdc38e4c2b473997787f828219a7ea91e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 18:51:30 2016 -0600

    Use new function rsvg_get_normalized_stroke_width() instead of doing this by hand everywhere

 rsvg-base.c       | 8 ++++++++
 rsvg-cairo-draw.c | 2 +-
 rsvg-marker.c     | 2 +-
 rsvg-private.h    | 2 ++
 4 files changed, 12 insertions(+), 2 deletions(-)

commit 8e84816357b2b3423bd1ee5c61c2ed34074e6994
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 18:40:48 2016 -0600

    rsvg-cairo-draw: Factor out function to set up a cairo_t for stroking

 rsvg-cairo-draw.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

commit ad0ebab50b96641801774349e12950568280d78a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 18:36:20 2016 -0600

    rsvg_cairo_render_pango_layout(): Normalize stroke-width relative to LENGTH_DIR_BOTH
    
    As in the previous commit

 rsvg-cairo-draw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 7abdac9ee4bd650472869f00ad58b1cc7618bd20
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 18:30:41 2016 -0600

    rsvg-styles: Use the viewport percentage computation specified in the spec

 rsvg-styles.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

commit aa54f11fa7a3a9556822c201f44b53883ddc26c3
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 18:22:32 2016 -0600

    rsvg-cairo-draw: Normalize stroke-width specified as percentage with respect to the viewport
    
    It was being normalized as LENGTH_DIR_HORIZONTAL here; per the spec it
    needs to be LENGTH_DIR_BOTH.

 rsvg-cairo-draw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 7f7dfeff72f35208880fd7ba3b988fcbf1d1d44b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 16:17:32 2016 -0600

    path_parser.rs: Remove debug println!()

 rust/src/path_parser.rs | 18 ++++++------------
 1 file changed, 6 insertions(+), 12 deletions(-)

commit 2db4b525bc14b89713617a048dd3b925fe550e70
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 16:03:16 2016 -0600

    Regenerate test image for elliptical arcs that now passes

 .../fixtures/reftests/svg1.1/paths-data-20-f-ref.png  | Bin 6858 -> 9179 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

commit e6706865d712f8ec5aeb069d0483123da4dfc684
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 15:39:18 2016 -0600

    rsvg-path.h: Fully implemented in Rust now
    
    We finish the Rustification of rsvg-path with the implementation of rsvg_path_parser_from_str_into_builder(),
    equivalent to the old rsvg_path_builder_parse_path().

 Makefile.am             |   1 -
 rsvg-path.c             | 489 ------------------------------------------------
 rsvg-path.h             |   5 +-
 rsvg-shapes.c           |   2 +-
 rust/Cargo.toml         |   3 +
 rust/src/lib.rs         |   4 +
 rust/src/path_parser.rs |  28 ++-
 7 files changed, 35 insertions(+), 497 deletions(-)

commit 6d5788b63c4001d071fcf29b79c8f75fb7c194cc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 15:09:49 2016 -0600

    path_parser.c: Implement arc comamnds 'A' and 'a'
    
    We don't have a test for this yet; see the comment about handles_arc().

 rust/src/path_parser.rs | 108 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 108 insertions(+)

commit b8a5bffd37c1b6b863e68f48817691a9d2516e83
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 14:35:15 2016 -0600

    path_parser.rs: Split part of number() into a helper nonnegative_number() method
    
    We will need nonnegative numbers to match for the radiuses of elliptical arcs.

 rust/src/path_parser.rs | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

commit 90204bb603daa6ca81eeeb5028a8067192750aef
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 14:27:07 2016 -0600

    path_parser.rs: Shorten names of test functions
    
    They were all "path_parser_handles_foo"; shorten to "handles_foo" since
    we are only testing the path parser anyway.

 rust/src/path_parser.rs | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

commit 0d8d4b39008a0185d037d6df56f6edc687525600
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 14:24:45 2016 -0600

    path_parser.rs: Implement closepath commands 'Z' and 'z'

 rust/src/path_parser.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

commit d4945516d27e2ca432ce9b927565cbb451222855
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 14:10:06 2016 -0600

    path_parser.rs: Implement smooth quadratic curveto commands 'T' and 't'

 rust/src/path_parser.rs | 115 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 103 insertions(+), 12 deletions(-)

commit c4ed9b2f523e5b79e6be26ce902809a2afd3133d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 13:28:03 2016 -0600

    path_parser.rs: Maintain reflection points for quadratic curves as well
    
    Per the spec, reflection points get reset when the previous command
    is *not* the same as the current smooth curve command.

 rust/src/path_parser.rs | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

commit 403881c105302c32e4f0de62a9340fa1861d28e9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 13:25:41 2016 -0600

    path_parser.rs: Rename reflection_{x,y} to cubic_reflection_{nx,y}
    
    This will accomodate the quadratic reflection points later

 rust/src/path_parser.rs | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

commit f0d67cad79a2180da8d43489c8e2a3d92daae367
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 13:24:24 2016 -0600

    path_parser.rs: Factor out function to set the reflection and current points for cubic curves

 rust/src/path_parser.rs | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

commit 7c08df87214f98418c2c0ebeafb1824c2d3b28e5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 13:17:44 2016 -0600

    path_parser.rs: Implement quadratic curveto commands 'Q' and 'q'

 rust/src/path_parser.rs | 87 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 87 insertions(+)

commit 7594e5c85af61659ede6bc15b43471686e039abc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 12:46:55 2016 -0600

    path_parser.rs: Factor out function to set both current and reflection points

 rust/src/path_parser.rs | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

commit 56b30a4696bd3927a4463d6b536d2748e15264e1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 12:43:59 2016 -0600

    path_parser.rs: Place the emit_*() functions next to each other
    
    This way it's easier to spot patterns

 rust/src/path_parser.rs | 43 +++++++++++++++++++++----------------------
 1 file changed, 21 insertions(+), 22 deletions(-)

commit 19216f36ee6d14ea6f7bfa868092d104df9f7b69
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 12:42:56 2016 -0600

    path_parser.rs: Don't process relative coordinates in emit_move_to()
    
    Do it in the caller, like in the other emit_() functions.

 rust/src/path_parser.rs | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

commit aa715505f00302c03e84a8afe10edc3a21c1428f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 12:39:37 2016 -0600

    path_parser.rs: Implement smooth curveto commands 'S' and 's'

 rust/src/path_parser.rs | 102 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 100 insertions(+), 2 deletions(-)

commit ae3ca6f8897e5b351ae218d3d56c15e48e9eda33
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 10:27:38 2016 -0600

    path_parser.rs: Implement curveto commands 'C' and 'c'

 rust/src/path_parser.rs | 102 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 102 insertions(+)

commit 57c1b6371dc4628101b969e86169c0cad5a5aabd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 09:48:53 2016 -0600

    path_parser.rs: Implement vertical lineto commands 'V' and 'v'

 rust/src/path_parser.rs | 80 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 80 insertions(+)

commit 147d69e40234dcbf00c4399a4eb8a10a154d102d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 8 09:40:29 2016 -0600

    path_parser.rs: Implement horizontal lineto commands 'H' and 'h'

 rust/src/path_parser.rs | 100 +++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 90 insertions(+), 10 deletions(-)

commit fc37e1e1c0399e64ac39c9539dc178d2235a4f56
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Nov 7 15:08:48 2016 -0600

    path_parser.rs: Implement lineto commands 'L' and 'l'

 rust/src/path_parser.rs | 59 ++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 54 insertions(+), 5 deletions(-)

commit a4fb81c64e1e9a439fb0585e55abb5110e5b6789
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Nov 7 14:43:47 2016 -0600

    path_parser.rs: Put unimplemented stubs for the all the remaining drawing functions
    
    Also, fix the test that was failing; it was an error in the test.

 rust/src/path_parser.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 63 insertions(+), 2 deletions(-)

commit 1490d99061422ce66fee7dd20204570c18a60d5e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Nov 7 14:22:13 2016 -0600

    path_parser.rs: Simplify optional_comma_whitespace()

 rust/src/path_parser.rs | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

commit 955ebac31d0562cc50960effe907c089dded1dba
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 4 14:16:53 2016 -0600

    path_parser.rs: test for relative moveto-lineto-moveto
    
    This test fails, as the parser is not done yet.

 rust/src/path_parser.rs | 30 +++++++++++++++++++++++++++++-
 1 file changed, 29 insertions(+), 1 deletion(-)

commit d491d8ebc2aa82058a440ce1afd999131d2a04d1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 4 14:37:18 2016 -0600

    path_parser.rs: Comment on peculiarities and test for special cases with commas

 rust/src/path_parser.rs | 39 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

commit 6668404f1f1da185f11731d275a7e53c4a85e78d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 4 14:11:25 2016 -0600

    path_parser.rs: tests for commas between numbers, and multi-lineto after moveto

 rust/src/path_parser.rs | 77 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 75 insertions(+), 2 deletions(-)

commit 21a00eae92018b900e810daabc3f6844fef09a3d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 4 14:06:36 2016 -0600

    path_parser.rs: Tests for various representations of numbers
    
    SVG allows optional punctuation and spaces between numbers, which makes
    things hard.

 rust/src/path_parser.rs | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

commit 5d07d93a20eaf900417959f1d756373b01bc9248
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 4 13:59:23 2016 -0600

    path_parser.rs: Test and fix handling of numbers with decimals

 rust/src/path_parser.rs | 35 ++++++++++++++++++++++++-----------
 1 file changed, 24 insertions(+), 11 deletions(-)

commit 130ec0a6718ff28a8104e416a2e67a258d4fad10
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 4 13:51:44 2016 -0600

    path_parser.rs: rename object to PathParser and make it public
    
    Also, move utility functions inside the test suite

 rust/src/path_parser.rs | 76 +++++++++++++++++++++++--------------------------
 1 file changed, 35 insertions(+), 41 deletions(-)

commit 19d94f39f6eef183253d414d8eb037cb6112b7dc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Nov 4 07:17:09 2016 -0600

    path_parser.rs: Start implementing a recursive descent parser
    
    The current parser in C works fine for most cases of SVG in the wild,
    but it doesn't fully comply with the BNF specified in the SVG spec.
    We'll write a new parser for this.

 rust/src/path_parser.rs | 499 ++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 487 insertions(+), 12 deletions(-)

commit be7cfed03a6dbef723daf80bbcb62735e6cdbde1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 17:59:16 2016 -0600

    path_parser.rs: Start a parser for path data in Rust
    
    We can port the old C version, but it doesn't handle the full BNF for
    path data as specified in the SVG spec.  So, we'll write a new parser.

 rust/src/lib.rs         |  1 +
 rust/src/path_parser.rs | 62 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+)

commit 186418e2b84013ff377175d0c143b64896f91dd0
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 15:06:13 2016 -0600

    rsvg-path: Make the path parser stop when there is an invalid character
    
    This per the spec.
    
    This makes the test fixtures/reftests/svg1.1/paths-data-18-f.svg pass; it failed previously.
    
    The parser still does not follow the BNF specified in the spec; we should
    do that at some point.

 rsvg-path.c                                           |   6 +++++-
 .../fixtures/reftests/svg1.1/paths-data-18-f-ref.png  | Bin 4691 -> 4837 bytes
 2 files changed, 5 insertions(+), 1 deletion(-)

commit cb166d90d1b4370108ce57b8651a6a7f61ccd89d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 14:36:21 2016 -0600

    _rsvg_css_normalize_length(): Use a LengthDir enum instead of chars for the 'dir' argument
    
    Same as the last commit; we need an enum here.  This also fixes a bug where 'w'
    was used mistakenly instead of 'h'.

 rsvg-cairo-draw.c | 42 +++++++++++++++++++++---------------------
 rsvg-css.c        | 24 ++++++++++++++++--------
 rsvg-filter.c     | 38 +++++++++++++++++++-------------------
 rsvg-image.c      |  8 ++++----
 rsvg-marker.c     | 14 +++++++-------
 rsvg-private.h    |  2 +-
 rsvg-shapes.c     | 34 +++++++++++++++++-----------------
 rsvg-structure.c  | 16 ++++++++--------
 rsvg-text.c       | 22 +++++++++++-----------
 9 files changed, 104 insertions(+), 96 deletions(-)

commit b7768db1a9cd129298737f0d0ea9fd7cd7d444a0
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 14:24:01 2016 -0600

    RsvgLength: replace the 'char factor' field with a 'unit' enum
    
    We now have a LengthUnit enum for use with RsvgLength, instead of representing
    units with simple chars.
    
    Along with this change, the filters code was hackily sticking an 'n' into some_length.factor
    to really mean, 'this length didn't get specified in the SVG data'.  Replaced that
    with boolean foo_specified fields that the code later checks to see if the
    length in question is available.
    
    The same pattern was used in the Text code; also made it use foo_specified booleans.

 rsvg-base.c    |   2 +-
 rsvg-css.c     |  50 ++++++-----
 rsvg-filter.c  | 280 ++++++++++++++++++++-------------------------------------
 rsvg-private.h |  18 +++-
 rsvg-text.c    |  53 ++++++-----
 tests/styles.c |   6 +-
 6 files changed, 177 insertions(+), 232 deletions(-)

commit c465af1eaef10beba23289973568ab3189fc9eee
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 10:55:22 2016 -0600

    rsvg-shapes: Remove unused struct field

 rsvg-shapes.c | 1 -
 1 file changed, 1 deletion(-)

commit f88130d9132d48aea4947728e083fae7bc5ee19c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 09:29:25 2016 -0600

    tests/README.md: Improve the markup; describe 'crash' and 'styles' as well

 tests/README.md | 131 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 67 insertions(+), 64 deletions(-)

commit 1327245ee929b149ee87c04abb0ddc5e8736137b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 09:18:02 2016 -0600

    tests/fixtures/reftests/svg1.1: Add the first batch of tests from the SVG test suite
    
    These are for path data.  Two tests fail, numbers 18 and 20:
    
    Test 18 is to test that the path data parser ignores extraneous
    characters correctly.
    
    Test 20 is for the elliptical arc machinery.

 .gitignore                                         |   4 +-
 .../reftests/svg1.1/paths-data-01-t-ref.png        | Bin 0 -> 25470 bytes
 tests/fixtures/reftests/svg1.1/paths-data-01-t.svg | 151 +++++++++++++++++++++
 .../reftests/svg1.1/paths-data-02-t-ref.png        | Bin 0 -> 33012 bytes
 tests/fixtures/reftests/svg1.1/paths-data-02-t.svg | 124 +++++++++++++++++
 .../reftests/svg1.1/paths-data-03-f-ref.png        | Bin 0 -> 30928 bytes
 tests/fixtures/reftests/svg1.1/paths-data-03-f.svg | 113 +++++++++++++++
 .../reftests/svg1.1/paths-data-04-t-ref.png        | Bin 0 -> 18168 bytes
 tests/fixtures/reftests/svg1.1/paths-data-04-t.svg |  82 +++++++++++
 .../reftests/svg1.1/paths-data-05-t-ref.png        | Bin 0 -> 16086 bytes
 tests/fixtures/reftests/svg1.1/paths-data-05-t.svg |  79 +++++++++++
 .../reftests/svg1.1/paths-data-06-t-ref.png        | Bin 0 -> 7250 bytes
 tests/fixtures/reftests/svg1.1/paths-data-06-t.svg |  83 +++++++++++
 .../reftests/svg1.1/paths-data-07-t-ref.png        | Bin 0 -> 6625 bytes
 tests/fixtures/reftests/svg1.1/paths-data-07-t.svg |  82 +++++++++++
 .../reftests/svg1.1/paths-data-08-t-ref.png        | Bin 0 -> 19348 bytes
 tests/fixtures/reftests/svg1.1/paths-data-08-t.svg |  82 +++++++++++
 .../reftests/svg1.1/paths-data-09-t-ref.png        | Bin 0 -> 17700 bytes
 tests/fixtures/reftests/svg1.1/paths-data-09-t.svg |  79 +++++++++++
 .../reftests/svg1.1/paths-data-10-t-ref.png        | Bin 0 -> 21531 bytes
 tests/fixtures/reftests/svg1.1/paths-data-10-t.svg | 111 +++++++++++++++
 .../reftests/svg1.1/paths-data-12-t-ref.png        | Bin 0 -> 9745 bytes
 tests/fixtures/reftests/svg1.1/paths-data-12-t.svg |  66 +++++++++
 .../reftests/svg1.1/paths-data-13-t-ref.png        | Bin 0 -> 4576 bytes
 tests/fixtures/reftests/svg1.1/paths-data-13-t.svg |  56 ++++++++
 .../reftests/svg1.1/paths-data-14-t-ref.png        | Bin 0 -> 12570 bytes
 tests/fixtures/reftests/svg1.1/paths-data-14-t.svg |  56 ++++++++
 .../reftests/svg1.1/paths-data-15-t-ref.png        | Bin 0 -> 6058 bytes
 tests/fixtures/reftests/svg1.1/paths-data-15-t.svg |  60 ++++++++
 .../reftests/svg1.1/paths-data-16-t-ref.png        | Bin 0 -> 7885 bytes
 tests/fixtures/reftests/svg1.1/paths-data-16-t.svg |  69 ++++++++++
 .../reftests/svg1.1/paths-data-17-f-ref.png        | Bin 0 -> 4456 bytes
 tests/fixtures/reftests/svg1.1/paths-data-17-f.svg |  65 +++++++++
 .../reftests/svg1.1/paths-data-18-f-ref.png        | Bin 0 -> 4691 bytes
 tests/fixtures/reftests/svg1.1/paths-data-18-f.svg | 100 ++++++++++++++
 .../reftests/svg1.1/paths-data-19-f-ref.png        | Bin 0 -> 23426 bytes
 tests/fixtures/reftests/svg1.1/paths-data-19-f.svg | 107 +++++++++++++++
 .../reftests/svg1.1/paths-data-20-f-ref.png        | Bin 0 -> 6858 bytes
 tests/fixtures/reftests/svg1.1/paths-data-20-f.svg |  87 ++++++++++++
 39 files changed, 1655 insertions(+), 1 deletion(-)

commit a41283921856514d0c44f1dc5e69f1177707b95a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Nov 3 08:39:41 2016 -0600

    tests: Add a README.md; make rsvg-test.c's test names more clear
    
    We have a new README.md that says how the tests work and how to deal
    with failed tests.
    
    Additionally, the GTest test names that rsvg-test produces are now
    easier to understand.  The test name
    
      /rsvg-test/reftests/foo/bar.svg
    
    will actually match the file
    
      fixtures/reftests/foo/bar.svg
    
    Whereas before, the test for that file would be called
    "/rsvg/reftest/foo/bar.svg", which isn't entirely obvious.

 .gitignore        |   1 -
 tests/README.md   | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/rsvg-test.c |   4 +-
 3 files changed, 173 insertions(+), 3 deletions(-)

commit 5c7a8bae58286bc3b1d6cefd43a9d3db4bc44c67
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Nov 2 21:34:57 2016 -0600

    path_builder.rs: Port rsvg_path_builder_arc() to Rust.
    
    This is no longer in the C code.  We need tests for this!

 rsvg-path.c              | 160 ------------------------------------
 rust/src/lib.rs          |   1 +
 rust/src/path_builder.rs | 210 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 211 insertions(+), 160 deletions(-)

commit 379dea0418fbfdd47910055579d8cced847e6bb7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 1 19:08:55 2016 -0600

    path_builder.rs: Actually put a ClosePath in our array of cairo::PathSegment
    
    Don't handle Cairo's close_path semantics, of adding an extra move_to,
    by ourselves.  This will happen inside Cairo itself when we
    _add_to_cairo_context().
    
    This makes the Rust tests pass.
    
    But do we now have states we don't need in marker.rs...?

 rust/src/path_builder.rs | 18 ++----------------
 1 file changed, 2 insertions(+), 16 deletions(-)

commit 7f5c09bc15d1011460cfc3688ebe91eac51601b4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 1 18:57:14 2016 -0600

    marker.rs: Use RsvgPathBuilder entirely; don't use Cairo paths
    
    This way RsvgPathBuilder becomes our only internal representation of paths.

 rust/src/marker.rs | 147 +++++++++++++++++++++++++----------------------------
 1 file changed, 68 insertions(+), 79 deletions(-)

commit a9fde1fe351997205c8f4ae377174ccc6e7a378a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 1 18:50:31 2016 -0600

    path_builder.rs: Make RsvgPathBuilder's methods public
    
    Also, fix .get_path_segments(): it does not need a &mut self; it can
    do with a &self since it only lends out the path_segments.

 rust/src/path_builder.rs | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

commit 720f378ebc3917424329a4a93889981572bbb4f9
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 1 18:08:15 2016 -0600

    path_builder.rs: Move to Rust versions of _add_to_cairo_context(), _new(), _destroy()
    
    These are no longer in the C code:
    
      rsvg_path_builder_new()
      rsvg_path_builder_destroy()
      rsvg_path_builder_add_to_cairo_context()
      rsvg_cairo_path_destroy()
    
    RsvgPathBuilder (in Rust) represents its path data as a
    Vec<cairo::PathSegment>, in contrast to the C version, which used a
    hand-built array of cairo_path_data_t with all their idiosyncrasies.
    
    This new version of rsvg_path_builder_add_to_cairo_context() replays the
    path data onto a given cairo_t; it basically replicates the behavior of
    cairo_append_path(), but based on our internal representation of path
    data.

 rsvg-path.c              | 296 ++++++++++++-----------------------------------
 rsvg-path.h              |   6 +-
 rust/src/lib.rs          |   3 +-
 rust/src/path_builder.rs |  39 +++++++
 4 files changed, 114 insertions(+), 230 deletions(-)

commit a6b9f7458bb3461ecb4312d95fecf242df220569
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 1 17:47:42 2016 -0600

    path_builder.rs: Rename path_data to path_segments to reflect its PathSegment elements

 rust/src/path_builder.rs | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

commit 3c8c6a41506ebbc5913cbf1cf60acebe370fedeb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 1 17:08:44 2016 -0600

    path_builder.rs: Compress declarations a bit

 rust/src/path_builder.rs | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

commit 078a6ad19a1ecb862f20fd1bdd7f4458cfd649ab
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Nov 1 17:03:05 2016 -0600

    marker.rs: Use cairo_sys::cairo_path_t correctly
    
    I was requesting the cairo-rs crate somewhat incorrectly in Cargo.toml,
    and not requesting cairo-sys-rs at all.  Thus, I thought I needed to
    patch cairo-rs to let me access a cairo_path_t.  It turns out it's
    already available; one just has to declare the crate correctly...

 rust/Cargo.toml    | 7 ++++++-
 rust/src/marker.rs | 7 +++++--
 2 files changed, 11 insertions(+), 3 deletions(-)

commit e354165200256446aef64c56e892c831806afe6b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 21:59:54 2016 -0600

    path_builder.rs: Start porting RsvgPathBuilder
    
    We'll keep the entire C API of that function for now, as it
    is used from rsvg-shapes.c.

 rust/src/lib.rs          |  10 +++++
 rust/src/path_builder.rs | 100 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+)

commit 6eb8d2305887e0a6b7f80790a6dfe8d9081a9b17
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 21:25:42 2016 -0600

    Cargo.toml: Use my git repo of gtk-rs/cairo for now
    
    We need to be able to wrap cairo_path_t, and the stock cairo binding doesn't
    allow that.

 rust/Cargo.toml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit 1d39ddd4ae89041c2512d8adf0528f9a7afb6fd7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 21:22:08 2016 -0600

    marker.rs: Combine 'derive' attributes into a single one

 rust/src/marker.rs | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

commit 028634fdb25a501380c2589667b20ecd356a42f1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 21:09:20 2016 -0600

    rsvg-path: remove no-op function

 rsvg-path.c | 14 --------------
 1 file changed, 14 deletions(-)

commit 2d21ba64de61d281f51f2c12dcd3e09db280d4bc
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 20:57:20 2016 -0600

    rsvg-path: Make RsvgPathBuilder an opaque struct

 rsvg-path.c | 5 +++++
 rsvg-path.h | 7 ++-----
 2 files changed, 7 insertions(+), 5 deletions(-)

commit 0287b4982118f66e8b7059a3d6aa5aa76bce7b32
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 20:45:37 2016 -0600

    marker.rs: Remove superfluous checks
    
    angle_from_vector() is able to compute a sensible angle even if both
    of the vector's components are zero, so just use it like that.

 rust/src/marker.rs | 13 ++-----------
 1 file changed, 2 insertions(+), 11 deletions(-)

commit 035d6c2451a3daaae1301512c692994121d4f936
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 20:34:59 2016 -0600

    marker.rs: Port rsvg_rust_render_markers() to Rust
    
    This is the interesting part of the old rsvg_render_markers() from C.
    
    That function in C now remains only as a wrapper that extracts a few
    values from the RsvgDrawingCtx and passes them on to
    rsvg_rust_render_markers().  I'll probably add accessor functions later
    so that this kind of wrapper is not necessary.
    
    Also, change the Cargo.toml to build a staticlib.  Re-enable the Rust
    build in the master Makefile.am.
    
    And it works!  The tests pass!
    
    The Makefile.am is fishy; it uses rust/target/debug/*.a instead of
    automatically switching between "debug" and "release".  Also, this is
    not yet integrated into configure.ac at all.
    
    But it works!

 Makefile.am        |  14 +-
 rsvg-marker.c      | 455 ++---------------------------------------------------
 rsvg-marker.h      |   3 +
 rust/Cargo.toml    |   5 +-
 rust/src/lib.rs    |   3 +-
 rust/src/marker.rs | 196 ++++++++++++++++++++++-
 6 files changed, 221 insertions(+), 455 deletions(-)

commit 13e535b90ddf90dc63de53d9180ae511e618ea99
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 14:27:57 2016 -0600

    Render everything in terms of RsvgPathBuilder, not cairo_path_t
    
    We used to pass a cairo_path_t to ctx->render->render_path().  Now that
    is called render_path_builder(), and we pass it an RsvgPathBuilder.
    
    This should let us port rsvg-path.[ch] entirely to Rust.

 rsvg-base.c         |  6 ++--
 rsvg-cairo-clip.c   |  6 ++--
 rsvg-cairo-draw.c   |  4 +--
 rsvg-cairo-draw.h   |  4 +--
 rsvg-cairo-render.c |  2 +-
 rsvg-marker.c       | 14 ++++++--
 rsvg-marker.h       |  2 +-
 rsvg-path.c         | 11 ++-----
 rsvg-path.h         |  3 +-
 rsvg-private.h      |  5 +--
 rsvg-shapes.c       | 92 ++++++++++++++++++++++-------------------------------
 11 files changed, 69 insertions(+), 80 deletions(-)

commit 00baf53cc11750e429a9e278f6b94c5ba12c6d7e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 14:05:32 2016 -0600

    rsvg-path: New function rsvg_path_builder_add_to_cairo_context()
    
    We'll use this to pass the cairo_path_t from an RsvgPathBuilder
    directly into a cairo_t, without copying the path first.

 rsvg-path.c | 16 ++++++++++++++++
 rsvg-path.h |  3 +++
 2 files changed, 19 insertions(+)

commit 32f2115e7a4a70a2f72cce87323605cdebae5bf2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 13:45:22 2016 -0600

    rsvg-path: Make RsvgPathBuilder a heap object
    
    We introduce rsvg_path_builder_new() and rsvg_path_builder_destroy(),
    and change rsvg_path_builder_finish() into an
    rsvg_path_builder_copy_path() that does not destroy the builder while
    extracting the path.
    
    This will make it easier to have long-lived path builders, so that
    callers can render to Cairo directoy from them instead of extracting the
    path themselves.

 rsvg-path.c   |  79 ++++++++++++++++++++++++++++-------------
 rsvg-path.h   |   7 ++--
 rsvg-shapes.c | 110 +++++++++++++++++++++++++++++++---------------------------
 3 files changed, 118 insertions(+), 78 deletions(-)

commit 82f53f93f399416e884872db50b72f59336fe4db
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 12:11:43 2016 -0600

    marker.rs: Test the values of tangent vectors, not just their presence

 rust/src/marker.rs | 31 ++++++++++++++++++++++++++-----
 1 file changed, 26 insertions(+), 5 deletions(-)

commit 5c8cf443eca3a42eab0f0b6aee2884d706c37aed
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Mon Oct 31 09:08:46 2016 -0600

    marker.rs: Compute directionalities, not whether segments are zero-length
    
    find_incoming_directionality_backwards() and its counterpart really want
    to think in terms of directionalities.  They compute the tangent vectors
    of the current segment only if !is_zero_length_segment().  However, they
    don't care if a segment is actually zero-length; they want to know the
    tangent vectors.
    
    So, we replace is_zero_length_segment() with
    get_segment_directionalities(), which return an Option<> with a 4-tuple;
    this tuple has (v1x, v1y, v2x, v2y) only if the segment actually has
    directionality.

 rust/src/marker.rs | 62 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 32 insertions(+), 30 deletions(-)

commit 3ea3f3fe53c442d7edd476fb4852da5fb50a2657
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Sat Oct 29 09:43:01 2016 -0500

    marker.rs: Port find_outgoing_directionality_forwards()
    
    Analogously to find_incoming_directionality_backwards() - we simply copy
    its "shape" now that we know what the initial refactoring looks like.

 rust/src/marker.rs | 24 ++++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

commit 456d3ed5f2dc85496a38f99a3aed3e63ae615d36
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 28 21:30:08 2016 -0500

    marker.rs: Remove auxiliary variables

 rust/src/marker.rs | 21 +++------------------
 1 file changed, 3 insertions(+), 18 deletions(-)

commit 1543bde8e9e0a326818ddf085a68c47a0259a601
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 28 20:45:11 2016 -0500

    marker.rs: port find_incoming_directionality_backwards()

 rust/src/marker.rs | 83 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 74 insertions(+), 9 deletions(-)

commit 7e69e92f515faa7c97023979d6765e39a3baa5ad
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 28 18:54:51 2016 -0500

    marker.rs: port points_equal() and is_zero_length_segment()
    
    Also, new tests for is_zero_length_segment().

 rust/src/marker.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

commit d8978c32636f44b3c3e08c376a1531f19438c6e7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 28 10:40:17 2016 -0500

    Use rsvg_acquire_node_of_type() where type checks are necessary
    
    This replaces the duplicated pattern of acquiring a node, checking its
    type, and releasing the node if it is not of the expected type.

 rsvg-cairo-draw.c | 46 +++++++++++++++++++++++-----------------------
 rsvg-marker.c     | 10 ++--------
 2 files changed, 25 insertions(+), 31 deletions(-)

commit a761759b79f1704be245e12249861a7184738f20
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 28 10:18:28 2016 -0500

    rsvg-base: New function rsvg_acquire_node_of_type()
    
    In many places where we call rsvg_acquire_node(), the next thing
    done is to check that the type of the acquired node is the one
    that particular code expects.  The node is released if it doesn't match.
    
    Encapsulate that pattern in a function so we can use
    it everywhere instead of checking by hand.
    
    Also, we allow rsvg_node_acquire() to take a NULL uri, for convenience.

 rsvg-base.c    | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 rsvg-private.h |  2 ++
 2 files changed, 52 insertions(+), 4 deletions(-)

commit ddd77f691f88db16926c77610a61a28787f0e15d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 28 08:53:38 2016 -0500

    rsvg_path_builder_init(): Remove n_elements argument
    
    The array of cairo_path_data grows as needed, anyway; we just
    start out with a reasonable capacity now, instead of having
    each caller guesstimate on its own.
    
    This will help porting this code to Rust.

 rsvg-path.c   | 10 ++++++----
 rsvg-path.h   |  4 ++--
 rsvg-shapes.c | 20 ++++++--------------
 3 files changed, 14 insertions(+), 20 deletions(-)

commit 2123dbf1b48b150616148253d7a5c771f1754874
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 28 08:42:58 2016 -0500

    rsvg-path: Update some obsolete comments

 rsvg-path.c | 18 ++++++++----------
 rsvg-path.h |  4 +++-
 2 files changed, 11 insertions(+), 11 deletions(-)

commit ae1f5a558ea5a43dd5b37234caeae389763e6720
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Oct 27 21:51:36 2016 -0500

    rsvg-shapes: Move the RsvgNodePath declarations inside the .c file
    
    They are private anyway, and not used elsewhere.

 rsvg-shapes.c | 7 +++++++
 rsvg-shapes.h | 7 -------
 2 files changed, 7 insertions(+), 7 deletions(-)

commit c0263bdd8894f6a41e80715967b122c2435198a8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Oct 27 21:49:32 2016 -0500

    rsvg-marker: Move the RsvgMarker declarations inside the private .c file
    
    They are private anyway; and only used within that file.

 rsvg-marker.c | 12 ++++++++++++
 rsvg-marker.h | 12 ------------
 2 files changed, 12 insertions(+), 12 deletions(-)

commit 5a76a7d55468fc3f01da6d3b2d1bdab6872eae06
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Oct 27 21:47:21 2016 -0500

    Disable building the Rust parts for now
    
    I need to do a little refactoring on the C bits first; the Rust
    bits don't build.

 Makefile.am | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

commit d4247fc059c7c990475d7b29a6f9a46eca07e4bb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Thu Oct 27 19:02:15 2016 -0500

    First cut at building the Rust library from Automake
    
    This uses a .PHONY rule to just run cargo every time.  There is no
    addition to "make clean" yet.
    
    The resulting librsvg_internals.so is trivially linked into the LIBADD
    for the main librsvg library.
    
    I don't know how to handle "cargo build --release" just for the final
    version, while "cargo build" normally.  For the C stuff I just pass
    CFLAGS by hand to autogen.sh.
    
    This is not integrated into configure.ac yet!

 Makefile.am     | 8 ++++++++
 rust/Cargo.toml | 1 +
 2 files changed, 9 insertions(+)

commit 646d565ad0e9a4d584dea6573b250b3567230aeb
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 21:05:50 2016 -0500

    marker.rs: In tests, use the global helper functions; don't duplicate them

 rust/src/marker.rs | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

commit 20fae805ca92e65ed5324a3989f3bd7d0313bd8f
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 21:01:40 2016 -0500

    marker.rs: Create segments without an auxiliary variable

 rust/src/marker.rs | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

commit a0693ea14d7b4e288026c7f885d940f8ad797e19
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 20:58:06 2016 -0500

    marker.rs: Remove temporary variables in tests

 rust/src/marker.rs | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

commit fbf7eed46dc04833f87fc1afa982e0cb0fedf9b7
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 20:55:40 2016 -0500

    marker.rs: Add a disabled test for a sequence of moveto commands
    
    See the comment; Cairo compresses multiple moveto commands
    into a single one, so we don't get the full fixture we need
    for the test.

 rust/src/marker.rs | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

commit f9c447f741c35cdb11d9ca600b618b887d001f0c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 20:44:20 2016 -0500

    marker.rs: Comments to explain what each test does

 rust/src/marker.rs | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

commit 971ee4110e625f49d5b7f2cfb1b8544fc84694c1
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 20:40:13 2016 -0500

    marker.rs: Test for not having a moveto after a closepath

 rust/src/marker.rs | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

commit 983a67fb10b9458ad41faade2115ae0ead289c72
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 20:26:09 2016 -0500

    marker.rs: Test for multiple closed subpaths

 rust/src/marker.rs | 36 +++++++++++++++++++++++++++++++++++-
 1 file changed, 35 insertions(+), 1 deletion(-)

commit e5d861e90926e32d6c4be3b6bed7287a679372ff
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 20:17:30 2016 -0500

    marker.rs: Handle Cairo's artificial moveto after a closepath
    
    Cairo outputs a moveto after every closepath, so that subsequent
    lineto/curveto commands will start at the closed vertex.
    
    We don't want to generate a point (a degenerate segment) for that
    artificial moveto.
    
    To fix this, we add two states, State::Initial and State::ClosedSubpath,
    so that we can differentiate between the very first moveto in a sequence
    of path commands, and the state where we just closed a subpath and we
    expect an incoming artificial moveto.

 rust/src/marker.rs | 92 ++++++++++++++++++++++++++++++------------------------
 1 file changed, 51 insertions(+), 41 deletions(-)

commit 9c93a2a3f9bb57263fee1f86a2a34275eb741c63
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 19:22:30 2016 -0500

    marker.rs: rename SegmentState states to something more meaningful
    
    "Start" and "End" don't really say much about the state of processing
    the current subpath, which is the whole point of the state machine.
    Use NewSubpath and InSubpath instead.

 rust/src/marker.rs | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

commit 80fc5f5d21022cbdeb4e023cbd029d2e8241dec8
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 19:18:54 2016 -0500

    marker.rs: ClosePath *does* need to generate a line at the end of a subpath

 rust/src/marker.rs | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

commit d25221549a39c7b8630a34e370318f54c4b86334
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 18:46:18 2016 -0500

    marker.rs: Test for a closed subpath.  We found a bug!

 rust/src/marker.rs | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

commit 4b2273aadc87b66d238e0c104deb3f3f42241ed2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 18:37:12 2016 -0500

    marker.rs: Make the test assertion be (expected, computed)
    
    Hopefully the computed result will be easier to see if it shows up later
    in the console output...

 rust/src/marker.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit c3c80d25b5d5b23c0cd1899667ed07289441372b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 18:18:46 2016 -0500

    Update the README

 README | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 54 insertions(+), 2 deletions(-)

commit b518bba6be7234333c94c11330e15937bb2957ce
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 18:18:46 2016 -0500

    Update the README

 README | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 54 insertions(+), 2 deletions(-)

commit c0c7be4d6b810d6cde22d81457990cf96845443d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 13:29:38 2016 -0500

    marker.rs: Fix curve tangents in make_curve(), not in the calling code
    
    This way all the segment-handling code looks the same,
    without a special case just for curves.

 rust/src/marker.rs | 35 ++++++++++++++++-------------------
 1 file changed, 16 insertions(+), 19 deletions(-)

commit 9fcf534a636f79e686e7796d9fa0a2a2a077f62e
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 13:26:21 2016 -0500

    marker.rs: Use helper functions to create Segments everywhere

 rust/src/marker.rs | 88 +++++++++++++++++++++++-------------------------------
 1 file changed, 37 insertions(+), 51 deletions(-)

commit cdc5b59afc409fc7a1d15b9587606653f54310fd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 13:01:36 2016 -0500

    marker.rs: Utility function to test path_to_segments()
    
    Instead of converting the path manually for every test, use a helper
    function.

 rust/src/marker.rs | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

commit 7effbe11a3cb64bef645bc7174b1b651d01b763c
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 12:25:52 2016 -0500

    marker.rs: Add utility functions to create segments for tests
    
    Declaring "Segment::LineOrCurve { x1: 42, y1: ... }" by hand is too much
    typing; use helper functions instead so I can at least remove the field
    names.

 rust/src/marker.rs | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

commit 237dd6cc15a420f87706ddf3702e5dcff706d39b
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 12:17:04 2016 -0500

    marker.rs: Test for multiple open subpaths

 rust/src/marker.rs | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

commit b52c851754f90176f5441b9277ba4e23b1597d74
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 12:10:05 2016 -0500

    marker.rs: In tests, factor out creation of helper cairo::Context

 rust/src/marker.rs | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

commit eb0c09967103c01ab736e34a644ae6409f31164a
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 12:06:09 2016 -0500

    marker.rs: Separate segment setup from the state machine logic
    
    We put all the housekeeping for coordinates at the beginning
    of each match case, along with setting up the current segment.
    
    This leaves the state machine logic at the end of each match case,
    and this code is duplicated; hmmm.

 rust/src/marker.rs | 58 +++++++++++++++++++++++++++---------------------------
 1 file changed, 29 insertions(+), 29 deletions(-)

commit e503b9fc375fa14e0a2230d83d07271257fb8670
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 12:00:38 2016 -0500

    marker.rs: Factor out replacement/creation of segments
    
    Move the "push a new segment or modify the last one" code to just before
    the end of the loop.  This way we get rid of the has_first_segment state
    variable and the segment_num counter, and also we get to remove
    duplicated code.

 rust/src/marker.rs | 54 ++++++++++++------------------------------------------
 1 file changed, 12 insertions(+), 42 deletions(-)

commit 755e526d80a8286555a90412b54ea4cff1e358c4
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Oct 26 11:37:01 2016 -0500

    marker.rs: Turn Segment from a struct into an enum
    
    This lets us do away with the "is_degenerate: bool" field, and
    use Degenerate and LineOrCurve variants of the enum instead.  This
    way it is impossible to access fields which are invalid for
    the Degenerate variant.
    
    Thanks to Emmanuele Bassi for the suggestion.

 rust/src/marker.rs | 192 +++++++++++++++++++++++++++++------------------------
 1 file changed, 105 insertions(+), 87 deletions(-)

commit 7559ba4338f1ac47dac0abfe96deb1ad72783c2d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Oct 25 20:37:34 2016 -0500

    marker.rs: Rename p1x/p1y, etc. to x1/y1, etc.
    
    This will make it easier to refactor the Segment struct
    into a tagged enum.

 rust/src/marker.rs | 112 ++++++++++++++++++++++++++---------------------------
 1 file changed, 56 insertions(+), 56 deletions(-)

commit 30f6d8f47838edd4a8a60eb0dbfba0eeb1ca5177
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Oct 25 20:18:26 2016 -0500

    marker.rs: Add test for path_to_segments() for open paths
    
    Turn this into a library.
    
    We export that function and the Segment struct; these may
    not need to be public in the end.

 rust/Cargo.toml    |  6 ++---
 rust/src/lib.rs    |  6 +++++
 rust/src/marker.rs | 71 +++++++++++++++++++++++++++++++-----------------------
 3 files changed, 50 insertions(+), 33 deletions(-)

commit fcdac7669e18882f63cad611b4f86c728ba5a548
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Oct 25 13:13:13 2016 -0500

    marker.rs: Use variables whose purpose is more clear

 rust/src/marker.rs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

commit f27a8c908ac23f5b7560d2279acec44e41b91a25
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Tue Oct 25 10:21:34 2016 -0500

    Start a branch to port bits of librsvg to Rust
    
    I want parts of librsvg to be rewritten in Rust so that the library's
    internals are written in a safe language.  It should be possible to
    preserve the public C API, while internally parts of librsvg are
    written in Rust.
    
    I don't know how to integrate the Rust-built library into the C one yet,
    so this is a work in progress.
    
    To begin, we have path_to_segments() from rsvg-marker.c.  The rest of
    the marker-drawing machinery is still missing; and the ported version
    of that function needs some tests - it doesn't do the right thing with a
    closepath operator.

 rust/Cargo.toml    |  10 +++
 rust/src/marker.rs | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 247 insertions(+)

commit 026cd60eaa1f7f893cdce4fefa464bab1463e336
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 21 16:48:41 2016 -0500

    Oops, removed unused variable

 test-display.c | 3 ---
 1 file changed, 3 deletions(-)

commit f2edb0c6dc65318f4ee2c154fb700c74632e81e5
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 21 16:42:07 2016 -0500

    test-display.c: Remove redundant code for zlib decompression
    
    Same as for rsvg-convert; librsvg can already deal with .svgz by itself.

 test-display.c | 26 --------------------------
 1 file changed, 26 deletions(-)

commit 8b834834abecf9cb492216d29b6d634a8c5aa35d
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 21 12:10:41 2016 -0500

    rsvg-convert: Remove redundant code for zlib decompression
    
    The gio streaming machinery inside librsvg already knows how to
    sniff the incoming data for zlib compression; we don't need
    to explicitly create a decompressor stream here.

 rsvg-convert.c | 28 ----------------------------
 1 file changed, 28 deletions(-)

commit 12cc5ec711e954813cbabb446ff96ad326e728cd
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 21 14:29:45 2016 -0500

    rsvg-base: move duplicated code to a function

 rsvg-base.c | 36 ++++++++++++++++--------------------
 1 file changed, 16 insertions(+), 20 deletions(-)

commit 5a88df059eb78b40f4e0bca35632ad96be128562
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Fri Oct 21 13:30:35 2016 -0500

    Normalize test reference PNGs; font rendering changed a little bit

 tests/fixtures/reftests/bugs/340047-ref.png | Bin 4706 -> 4891 bytes
 tests/fixtures/reftests/bugs/749415-ref.png | Bin 19572 -> 21402 bytes
 tests/fixtures/reftests/bugs/760180-ref.png | Bin 8120 -> 8884 bytes
 3 files changed, 0 insertions(+), 0 deletions(-)

commit e42b622d9c82c2702d3d1f3b981022718cd1084b
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Wed Oct 19 19:34:28 2016 +0800

    Remove rsvg-install.props's during re-generation
    
    This is to ensure the changes in the generated
    build/win32/vs10/rsvg-install.props are applied in
    build/win32/vs[11|12|14] as well.

 build/win32/vs10/Makefile.am | 3 +++
 1 file changed, 3 insertions(+)

commit 6ee81cd434c5b0fa04dccf265281249eff7b7b1d
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Wed Oct 19 14:48:08 2016 +0800

    build/: Force MSVC project file generation on Makefile.am changes
    
    Make the Makefile.am targets for generating the Visual Studio projects re-generate the
    project files and the header listings whenever the Makefile.am's that include
    build/Makefile.msvcproj changes, so that whenever a source/header is added, they will
    be reflected in the projects and in the property sheets that are used to copy the
    headers.
    
    Also ensure that these are applied to the vs11, vs12 and vs14 projects when this
    happens, as they are copied and processed from the Visual Studio 2010 projects.

 build/Makefile-newvs.am |  2 +-
 build/Makefile.msvcproj | 11 +++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

commit 8a0af0123ed54ca9925d9739c508267283486be2
Author: Federico Mena Quintero <federico@gnome.org>
Date:   Wed Jun 8 21:33:42 2016 -0500

    Post-release version bump to 2.40.17

 configure.ac | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

commit ea77fccbccdf4d518d64119ce9d6bc7e28a268fb
Author: Chun-wei Fan <fanchunwei@src.gnome.org>
Date:   Wed Jun 22 10:56:50 2016 +0800

    Visual Studio builds: Look for cairo headers in $(prefix)/include/cairo
    
    Cairo headers could be in $(prefix)/include/cairo, so make sure we look
    for them there as well.  Also rearrange order where headers are looked for
    in Visua Studio 2008 builds, in the order of dependency hierarchy.

 build/win32/vs10/rsvg-build-defines.props  | 2 +-
 build/win32/vs9/rsvg-build-defines.vsprops | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)