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(-)