commit ec1fda53b71bcb1ba94414febd0e5e377d95bbe2 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 14:25:14 2017 -0500 Oops, distribute the svg1.1/resources for the tests as well. tests/Makefile.am | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) commit 5f67aee2aaaac2db8ddcdd0e7d997691f8120dc9 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 13:38:51 2017 -0500 Update NEWS NEWS | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) commit d54556007d35611e03fb9e8c8d98093fec5bb460 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 13:16:15 2017 -0500 Don't pass --verbose to cargo build Quiet the build a little... Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0216b4d9cf5c36f8e67dbcc0c9ec9b19d45b7f91 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 13:14:53 2017 -0500 Makefile.am: Add "cargo vendor" to dist-hook Thanks to https://github.com/endlessm/ostree/blob/47a54bf876023b0cb457bc8a4f4264f9b2ed5438/Makefile.am for the incantations. This makes it possible to release tarballs with all the Rust dependencies embedded in them. Hopefully this paves the way for distros to use Cargo's source replacement to build librsvg with their own versions of dependencies. Makefile.am | 9 ++++++++- rust/cargo-vendor-config | 11 +++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) commit d6683eb7ebb6fe4f3efd7c82e706caf9970ed756 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 11:30:38 2017 -0500 pattern.rs: shorten the way we map option values Thanks to Sergey Bugaev for the tip. rust/src/pattern.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bdc1d2c6975c7882351b3fe0401fee1448444767 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 09:39:30 2017 -0500 RsvgCairoClipRender: Implement the ::render_pango_layout() method, so we can clip text With this, the test masking-path-04-b.svg passes. rsvg-cairo-clip.c | 28 +++++++- .../reftests/svg1.1/masking-path-04-b-ref.png | Bin 88260 -> 92911 bytes .../fixtures/reftests/svg1.1/masking-path-04-b.svg | 79 +++++++++++++++++++++ .../reftests/svg1.1/resources/bluesquidj.png | Bin 0 -> 37497 bytes 4 files changed, 106 insertions(+), 1 deletion(-) commit 589e2dcf53bd05213bb17ed48e24d3f166e4fc92 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 08:45:31 2017 -0500 bgo#621088: rsvg_cairo_clip_render_new(): Don't leave uninitialized fields in the parent RsvgCairoRender A text object used as a clip path caused librsvg to crash. The reason is that when we create an RsvgCairoClipRender, we were leaving an all-zeros clip_render->super.bbox field. This caused two things: 1. An all-zeros RsvgBbox is invalid; it should be "virgin" or actually have a valid affine. 2. We were not preserving the bbox from the parent rendering context, so the clipped objects would not know their viewport size. Now we copy the original cairo_render->bbox to our derived clip_render->super.bbox, and start afresh with an empty bb_stack inside the clip_render. rsvg-cairo-clip.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) commit dde39fccd1804b09ba1d4bfbc784fea8f72e13f6 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 08:09:35 2017 -0500 Remove unused prototype rsvg-cairo-render.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 2f858993d9acf6e57be016b8688e02d0aecb0c25 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 07:54:33 2017 -0500 Add a bunch of masking/clipping tests from the SVG test suite .../reftests/svg1.1/masking-intro-01-f-ref.png | Bin 0 -> 14528 bytes .../reftests/svg1.1/masking-intro-01-f.svg | 81 +++++++++++++ .../reftests/svg1.1/masking-mask-01-b-ref.png | Bin 0 -> 17887 bytes .../fixtures/reftests/svg1.1/masking-mask-01-b.svg | 131 ++++++++++++++++++++ .../reftests/svg1.1/masking-mask-02-f-ref.png | Bin 0 -> 4512 bytes .../fixtures/reftests/svg1.1/masking-mask-02-f.svg | 50 ++++++++ .../reftests/svg1.1/masking-opacity-01-b-ref.png | Bin 0 -> 30924 bytes .../reftests/svg1.1/masking-opacity-01-b.svg | 125 +++++++++++++++++++ .../reftests/svg1.1/masking-path-01-b-ref.png | Bin 0 -> 12226 bytes .../fixtures/reftests/svg1.1/masking-path-01-b.svg | 95 +++++++++++++++ .../reftests/svg1.1/masking-path-02-b-ref.png | Bin 0 -> 13294 bytes .../fixtures/reftests/svg1.1/masking-path-02-b.svg | 84 +++++++++++++ .../reftests/svg1.1/masking-path-03-b-ref.png | Bin 0 -> 23263 bytes .../fixtures/reftests/svg1.1/masking-path-03-b.svg | 134 +++++++++++++++++++++ .../reftests/svg1.1/masking-path-04-b-ref.png | Bin 0 -> 88260 bytes 15 files changed, 700 insertions(+) commit 8b98d9929e071b7f66bf2a3c7b87c60803b50048 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Sep 1 07:12:13 2017 -0500 rsvg-cairo-draw: Comment on how we should be computing bounding boxes for viewports/clipping rsvg-cairo-draw.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit fd6f94b99932d64daca0b6959e73d0ff2d80dfae Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 21:21:01 2017 -0500 marker: Pop the things in the same order as NodeSvg and NodeUse, to make this easier to refactor rust/src/marker.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 5405a2fb96ea7a39cd17d78499279f11c1dfbd9d Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 21:04:38 2017 -0500 marker.rs: Unconditionally push a viewbox, to make this easier to refactor rust/src/marker.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit d2549f2fc2782c970c121305df041201590165dc Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 20:48:26 2017 -0500 Add coords-viewattr-03-b.svg to the test suite .../reftests/svg1.1/coords-viewattr-03-b-ref.png | Bin 0 -> 24302 bytes .../reftests/svg1.1/coords-viewattr-03-b.svg | 94 +++++++++++++++++++++ 2 files changed, 94 insertions(+) commit 5cc00b78918bfb8dcd4b62f440d80a2148ee17d4 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 20:39:48 2017 -0500 NodeUse: Unconditionally push a viewbox, to make this easier to refactor rust/src/structure.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 060c3ef390519ccd708255fd65bf8adc09644175 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 20:29:07 2017 -0500 Add struct-use-09-b.svg and coords-viewattr-02-b.svg to the test suite The "use" one is for nested use/symbol. The "viewattr" one is for preserveAspectRatio on image elements. .../reftests/svg1.1/coords-viewattr-02-b-ref.png | Bin 0 -> 37569 bytes .../reftests/svg1.1/coords-viewattr-02-b.svg | 716 +++++++++++++++++++++ .../reftests/svg1.1/struct-use-09-b-ref.png | Bin 0 -> 6556 bytes tests/fixtures/reftests/svg1.1/struct-use-09-b.svg | 74 +++ 4 files changed, 790 insertions(+) commit 5afb3a858f63e7dedf6ef7b73726acb3d2072175 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 20:03:22 2017 -0500 ViewBox: Represent unspecified view boxes as Option<ViewBox> We still have RsvgViewBox with an "active" boolean field for the C code. The Rust code now handles Option<ViewBox> throughout, and only exposes that to C with rsvg_node_svg_get_view_box(). rust/src/marker.rs | 28 ++++++++-------- rust/src/pattern.rs | 26 ++++++++------- rust/src/structure.rs | 46 ++++++++++++-------------- rust/src/viewbox.rs | 89 +++++++++++++++++++++++---------------------------- 4 files changed, 89 insertions(+), 100 deletions(-) commit 60b1a31da424a1700c4d3dc6ca7d3f515bc1f420 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 18:44:19 2017 -0500 NodeUse: normalize to default values as early as possible rust/src/structure.rs | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) commit 6dab70a53f480a61ca04c3b93d83b8b23a464842 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 31 13:46:29 2017 -0500 Remove unnecessary includes rsvg-base-file-util.c | 3 +-- rsvg-base.c | 3 +-- rsvg-cairo-render.c | 2 +- rsvg-cond.c | 1 - rsvg-file-util.c | 1 - rsvg-filter.h | 3 +-- rsvg-gobject.c | 1 - rsvg-styles.c | 1 - rsvg.c | 1 - 9 files changed, 4 insertions(+), 12 deletions(-) commit b97e590442e3178298cee47dd5239cb71a709720 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Aug 30 10:01:58 2017 -0500 Regenerate test reference files now that text rendering is fixed .../reftests/svg1.1/coords-trans-02-t-ref.png | Bin 8349 -> 8286 bytes .../reftests/svg1.1/coords-trans-03-t-ref.png | Bin 7902 -> 7889 bytes .../reftests/svg1.1/coords-trans-04-t-ref.png | Bin 6655 -> 6654 bytes .../reftests/svg1.1/coords-trans-05-t-ref.png | Bin 8140 -> 8105 bytes .../reftests/svg1.1/coords-trans-06-t-ref.png | Bin 8526 -> 8493 bytes .../reftests/svg1.1/filters-composite-02-b-ref.png | Bin 16647 -> 16613 bytes .../reftests/svg1.1/paths-data-04-t-ref.png | Bin 18160 -> 18138 bytes .../reftests/svg1.1/paths-data-05-t-ref.png | Bin 16048 -> 16037 bytes .../reftests/svg1.1/paths-data-06-t-ref.png | Bin 7255 -> 7242 bytes .../reftests/svg1.1/paths-data-07-t-ref.png | Bin 6646 -> 6628 bytes .../reftests/svg1.1/paths-data-08-t-ref.png | Bin 19314 -> 19317 bytes .../reftests/svg1.1/pservers-grad-08-b-ref.png | Bin 38874 -> 38874 bytes 12 files changed, 0 insertions(+), 0 deletions(-) commit c70000117fb6e7dabdb77c1c8cc1067add7da6d9 Author: Massimo <sixtysix@inwind.it> Date: Wed Aug 30 09:55:48 2017 -0500 bgo#587721: Update the PangoLayout for the new matrix before rendering If the cairo_t's transformation changes between the time the PangoLayout is created and the time it is shown, one needs to pango_cairo_update_layout() first. rsvg-cairo-draw.c | 4 ++++ .../reftests/bugs/587721-text-transform-ref.png | Bin 0 -> 3910 bytes .../fixtures/reftests/bugs/587721-text-transform.svg | 13 +++++++++++++ .../reftests/bugs/777834-empty-text-children-ref.png | Bin 9653 -> 9386 bytes 4 files changed, 17 insertions(+) commit 6c3bccd588571c102003fcc2dca67a01623f04e6 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 29 15:15:01 2017 -0500 Oops, sort the list of supported SVG features so <switch> works We use the list of supported features with bsearch(), and the list was not sorted. Added struct-cond-03-t.svg from the SVG test suite to this effect. The reference PNG is different from the official test suite's original one, because we do NOT support the SVG DOM feature. Still, the test file lets us test for <switch> working based on supported feature names. rsvg-cond.c | 7 +- .../reftests/svg1.1/struct-cond-03-t-ref.png | Bin 0 -> 4433 bytes .../fixtures/reftests/svg1.1/struct-cond-03-t.svg | 83 +++++++++++++++++++++ 3 files changed, 87 insertions(+), 3 deletions(-) commit 86bb7e1e43312314ca53417b85df7f6667dfa78a Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 29 09:19:41 2017 -0500 bgo#785276: Don't crash on empty or single-byte files Sigh... We also modify tests/crash.c to test for this condition, and add a couple of new tests. rsvg-base.c | 11 ++++++++++- tests/crash.c | 12 ++++++++---- tests/fixtures/crash/785276-empty.svg | 0 tests/fixtures/crash/785276-short-file.svg | 1 + 4 files changed, 19 insertions(+), 5 deletions(-) commit 4b67fb5d7690419d1b2f97c380f6245b81d4604a Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 29 08:50:22 2017 -0500 Add struct-cond-01-t.svg from the SVG test suite This is a basic test for the <switch> element that uses an unsupported extension name in the requiredExtensions attribute. .../reftests/svg1.1/struct-cond-01-t-ref.png | Bin 0 -> 4498 bytes .../fixtures/reftests/svg1.1/struct-cond-01-t.svg | 61 +++++++++++++++++++++ 2 files changed, 61 insertions(+) commit d38cb2e3de1a5a23e14e9ea5d0f788cab3511088 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 29 08:48:08 2017 -0500 bgo#634514: Don't render unknown elements and their sub-elements We were representing unknown elements as a NodeGroup, so their children would be rendered. Now we represent them as NodeDefs. This is like a NodeGroup, but it doesn't do any rendering of itself or its children. The SVG spec says that we should stop rendering the file if we encounter an unknown element, but it seems that real-world renderers are more lenient - so we'll just not render unknown elements and their children. https://bugzilla.gnome.org/show_bug.cgi?id=634514 rsvg-base.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 40a049cee1705e768d43d67d6dfc4bcda0be0098 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 29 08:27:18 2017 -0500 PathBuilder: use LargeArc and Sweep types instead of plain booleans This makes it easier to see what the arguments PathBuilder::arc() are about. rust/src/path_builder.rs | 27 ++++++++++++++++++++------- rust/src/path_parser.rs | 11 +++++++++-- rust/src/shapes.rs | 8 ++++---- 3 files changed, 33 insertions(+), 13 deletions(-) commit 95355f7f0ab0cb1ad0313bbf7a93d0e403c5810e Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 22 20:50:50 2017 -0500 PathCommand: derive PartialEq so we can remove a custom comparison function rust/src/path_builder.rs | 3 ++- rust/src/path_parser.rs | 66 ++---------------------------------------------- 2 files changed, 4 insertions(+), 65 deletions(-) commit 177b7401265c1adfd6a973067ded31f17ffb3fe2 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 22 20:33:08 2017 -0500 Switch from cairo::PathSegment to our own PathCommand throughout rust/src/marker.rs | 12 ++++++------ rust/src/path_builder.rs | 28 ++++++++++++++-------------- rust/src/path_parser.rs | 44 ++++++++++++++++++++++---------------------- 3 files changed, 42 insertions(+), 42 deletions(-) commit d7aff34d2fa7e5b6c059b049b9f50ed858949ebc Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 12:15:52 2017 -0600 path_builder.rs: Declare a PathCommand enum We will move PathBuilder from storing cairo::PathSegment directly, to storing its own PathCommand. This will be an enum similar to Cairo's, but that can also store SVG's Arc command, and possibly SVG's quadratic Béziers, too. Currently, when adding markers to a path, we have unwanted markers in the middle of arcs, as they get exploded into Bézier curve segments. By having our own Arc PathCommand, we can defer the arc-to-Béziers step until we finally feed the PathBuilder into Cairo. This should also make it possible to have tests for parsing Arc commands; currently there are none. rust/src/path_builder.rs | 7 +++++++ 1 file changed, 7 insertions(+) commit 29dce41359437df138bda8ddb1971dbfbe8b4187 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 22 20:41:03 2017 -0500 Require lalrpop 0.13.1 - now we can build on Rust nightly as well rust/Cargo.lock | 189 +++++++++++++++++++++----------------------------------- rust/Cargo.toml | 4 +- 2 files changed, 73 insertions(+), 120 deletions(-) commit 1ef560fef2c41686fa7ff165c038b12978327102 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Aug 21 14:30:41 2017 -0500 Update to the released cairo-rs 0.2.0 Yay! rust/Cargo.lock | 50 +++++++++++++++++++++++++------------------------- rust/Cargo.toml | 20 ++++++++++++-------- 2 files changed, 37 insertions(+), 33 deletions(-) commit caf234cf0453cc9a1b1ad9144562c2f0f309c79f Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Aug 17 15:23:16 2017 -0500 bgo#786372 - In the style element, the type attribute should default to "text/css" Per https://www.w3.org/TR/SVG/styling.html#StyleElementTypeAttribute , if a <style> element doesn't specify a "type" attribute, then it should be as if type="text/css". We should really pick up that value from the svg element's contentStyleType, but we don't read that yet. https://bugzilla.gnome.org/show_bug.cgi?id=786372 rsvg-base.c | 15 ++++++++++++++- .../reftests/bugs/786372-default-style-type-ref.png | Bin 0 -> 287 bytes .../fixtures/reftests/bugs/786372-default-style-type.svg | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) commit 7e5384590b8ff1a6d5d693365059165adf60330f Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Aug 11 18:55:17 2017 -0500 rsvg_handle_get_position_sub(): test for the presence of a toplevel node as soon as possible rsvg-base.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 747eb2c49e7a39314492bd0e628c16ccca633235 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Aug 11 18:30:20 2017 -0500 rsvg_standard_element_start(): Remove unnecessary check No creator function should ever return a NULL node, so assert that and remove the check. For elements of unknown type, we already turn them into groups in get_node_creator_for_element_name(). rsvg-base.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) commit 46c8688aa1795958fb1308c2bf5ea29295fe6c23 Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Fri Mar 3 15:19:42 2017 +0800 build: Check for PangoFT2/FontConfig availability On Windows the GTK+ stack does not hard depend on PangoFT2 (thus Fontconfig--GTK+ uses PangoWin32 to do the Font discovery and configuration stuff by default, unless one uses an envvar to force PangoFT2 usage), unlike *NIX platforms, so we need to check for it by doing: -On Windows, enable the test code that uses PangoFT2/FontConfig if PangoFT2 and FontConfig is found during configure. On Visual Studio builds, this is set to be disabled in config.h.win32(.in), and can be manually enabled by uncommenting #define HAVE_PANGOFT2 1 in config.h.win32 prior to the build (or rebuild). This continues to have FontConfig and PangoFT2 to act as an optional dependency. -On non-Windows platforms, make PangoFT2 and FontConfig a hard dependency, which is what the current code assumes. We might probably need to make the custom TTF load via PangoWin32 and/or the native Windows API to run the tests when PangoFT2 and FontConfig are not found on Windows. Also bump the Pango dependency to 1.38 as the test code uses API that is introduced in 1.38.x. https://bugzilla.gnome.org/show_bug.cgi?id=779405 config.h.win32.in | 3 +++ configure.ac | 19 ++++++++++++++++++- rsvg-cairo-clip.c | 2 ++ rsvg-cairo-draw.c | 12 +++++++++++- rsvg-cairo-render.c | 7 +++++++ rsvg-cairo-render.h | 5 +++++ 6 files changed, 46 insertions(+), 2 deletions(-) commit 8a93c3d192510eac4ff38a24194e1eb2ed2dc412 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 8 17:23:17 2017 -0500 Update NEWS NEWS | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit 31b6af3ce820d4f1b652ea72f8a0d9476c1f2937 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 8 13:19:06 2017 -0500 rsvg_handle_dispose(): Free the libxml2 parser context If the RsvgHandle was written to but not closed, then we'll still have an XML parser context at dispose time - don't leak it. Fixes the leak in https://bugzilla.gnome.org/show_bug.cgi?id=777833#c2 rsvg-base.c | 4 ++-- rsvg-gobject.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) commit 88c63cf76ed9a6fb0fbed8ad3c794ff81fad101b Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 8 13:08:41 2017 -0500 RsvgHandle: use a state field instead of finished/is_closed/first_write flags This makes it easier to see, well, which reading state we are in. rsvg-base.c | 39 ++++++++++++++++++++++++++++----------- rsvg-cairo-render.c | 2 +- rsvg-gobject.c | 3 +-- rsvg-private.h | 14 ++++++++++---- rsvg.c | 2 +- 5 files changed, 41 insertions(+), 19 deletions(-) commit fe78b716ab4780056a11402cad109446acb0ac70 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 8 10:32:39 2017 -0500 rsvg-base.c: Use rsvg_free_xml_parser_and_doc() throughout rsvg-base.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) commit 27449ad35391e7b03a29c1579a751a682222bcb1 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 8 10:23:04 2017 -0500 rsvg_free_xml_parser_and_doc(): New function; we'll use it instead of freeing things by hand libxml2's xmlFreeParserCtxt(c) does not free the underlying c->myDoc; that needs to be freed separately. We are forgetting to do that in a couple of places, so rsvg_free_xml_parser_and_doc() will take care of that in a single place. http://xmlsoft.org/html/libxml-parser.html#xmlFreeParserCtxt rsvg-base.c | 20 ++++++++++++++++++++ rsvg-private.h | 3 +++ 2 files changed, 23 insertions(+) commit fbdcc506d95aa74c27ab7299f70d072d527d0313 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 8 09:49:54 2017 -0500 rsvg-gobject.c: Use FALSE, not 0 rsvg-gobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 712ec1f7a261287d15491de401188a9c60924cca Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Aug 8 09:49:06 2017 -0500 rsvg-gobject.c: Tighten an assertion rsvg-gobject.c | 2 ++ 1 file changed, 2 insertions(+) commit 717595e7333df1a2d8f2514f1761cafae432cd6b Author: Philip Withnall <withnall@endlessm.com> Date: Fri Jan 27 14:06:18 2017 +0000 tools: Fix a minor memory leak of command line arguments https://bugzilla.gnome.org/show_bug.cgi?id=777833 tools/rsvg-tools-main.c | 1 + 1 file changed, 1 insertion(+) commit 63f008bd20df3bd3379c8e17ff244b10c91859de Author: Philip Withnall <withnall@endlessm.com> Date: Fri Jan 27 14:02:11 2017 +0000 tools: Fix an incorrect g_new() call It was allocating an array of guint8 pointers, rather than an array of guint8s. This resulted in an allocation 4 times too large, which is a bug, but not one which would cause crashes. Coverity ID: 1398303 https://bugzilla.gnome.org/show_bug.cgi?id=777833 tools/rsvg-tools-main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dfe34c8757debd07d4ef2f6f0381b2bcac1addc0 Author: Ting-Wei Lan <lantw44@gmail.com> Date: Mon Aug 7 21:43:10 2017 -0500 bgo#782098 - Don't pass deprecated --nogtkinit to gtkdoc-scangobj doc/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 58e4b44053272770a2d6434d89e05dc80e096605 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Aug 7 13:43:59 2017 -0500 Update Cargo.lock rust/Cargo.lock | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) commit 344a1c1c63e194b218cf82474ec5684345fa2cda Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Aug 7 11:19:28 2017 -0500 bgo#779489 - Link to pangoft2 as well The link was failing on MacOS, since apparently pangoft2 is not linked in there by default. https://bugzilla.gnome.org/show_bug.cgi?id=779489 configure.ac | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 951555887a5b03280d04c17b8f85a3490bd6f0f3 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 16:45:56 2017 -0500 De-reference Parser's tokens when matching, for legibility rust/src/length.rs | 18 +++++++++--------- rust/src/opacity.rs | 8 ++++---- rust/src/parsers.rs | 10 +++++----- 3 files changed, 18 insertions(+), 18 deletions(-) commit 47895f00461271271e6c668c259d87ea3160f777 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 13:06:16 2017 -0500 Remove unused imports rust/src/bbox.rs | 1 - 1 file changed, 1 deletion(-) commit 4b90afa0c8909f1e27166b3c4a120ff1d989cd8d Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 13:05:47 2017 -0500 Refactor some more to avoid Ok() all over the place rust/src/parsers.rs | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) commit e4a3aeb00fd10a13b4d5ad2b58b46f383219e8fc Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 13:02:39 2017 -0500 opacity.rs: Refactor to not have Ok() all over the place rust/src/opacity.rs | 56 +++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 25 deletions(-) commit 829b3281d9b927cfdc3db3a7133424b6be6be5ac Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 12:57:01 2017 -0500 length.rs: Refactor parser to not have Ok() all over the place rust/src/length.rs | 107 +++++++++++++++++++++++++++-------------------------- 1 file changed, 54 insertions(+), 53 deletions(-) commit df0ecd978cc21c1dd3cc03eecde7efd9fc066542 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 12:51:50 2017 -0500 Adjust for rust-cssparser API changes rust/src/length.rs | 20 +++++++++++--------- rust/src/opacity.rs | 4 ++-- rust/src/parsers.rs | 6 +++--- 3 files changed, 16 insertions(+), 14 deletions(-) commit 35089d4c5c415b0a133f5298cdd8c2d35dd039cb Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 12:44:41 2017 -0500 Cargo.toml: Explicitly use the master branch of cairo-rs and friends ... because it hasn't made a release yet that includes Matrix::try_invert() nor the Debug/PartialEq traits for Matrix rust/Cargo.lock | 57 +++++++++++++++++++++++---------------------------------- rust/Cargo.toml | 24 ++++++++++++++++-------- 2 files changed, 39 insertions(+), 42 deletions(-) commit 7066c9cd028e9a946dee4963d362cc6bdef33c52 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 12:24:33 2017 -0500 Adjust to rust-cssparser API changes rust/src/color.rs | 3 ++- rust/src/length.rs | 15 ++++++++------- rust/src/opacity.rs | 9 +++++---- rust/src/parsers.rs | 26 +++++++++++++++----------- 4 files changed, 30 insertions(+), 23 deletions(-) commit 89e84d9788e100784dc7f9a9f32286a545b95820 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 12:11:17 2017 -0500 Update to cairo-rs changes rust/Cargo.lock | 92 ++++++---------------------------------- rust/Cargo.toml | 4 +- rust/src/bbox.rs | 4 +- rust/src/gradient.rs | 3 +- rust/src/marker.rs | 3 +- rust/src/parse_transform.lalrpop | 3 +- rust/src/pattern.rs | 15 +++---- rust/src/structure.rs | 3 +- rust/src/transform.rs | 4 +- 9 files changed, 36 insertions(+), 95 deletions(-) commit 67031d6646f299486dbdb4924588495d23d84566 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 11:07:59 2017 -0500 aspect_ratio.rs: Update to the macro syntax in bitflags 0.9.1 rust/Cargo.toml | 2 +- rust/src/aspect_ratio.rs | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) commit a268072facb45c56492af9167e97e9e26a420212 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 11:04:35 2017 -0500 Cargo.toml: Move other crates to crates.io rust/Cargo.lock | 32 ++++++++++++++++++++++---------- rust/Cargo.toml | 6 ++---- 2 files changed, 24 insertions(+), 14 deletions(-) commit 2473df014aed6082cad10156240bbe3f3501ffb9 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 10:57:42 2017 -0500 Cargo.toml: make more compact; use crates.io rust/Cargo.lock | 304 ++++++++++++++++++++++++++++++++++++-------------------- rust/Cargo.toml | 32 ++---- 2 files changed, 206 insertions(+), 130 deletions(-) commit dc2986f1dc73cad8d0e579f76200e03fc57b1390 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jul 31 10:25:18 2017 -0500 Cargo.toml: Use the upstream cairo-rs now that Matrix::try_invert() is merged rust/Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 73bd77fd9bb9f1581ec29c38646d35392a91d31e Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 21 18:39:39 2017 -0500 path_parser.rs: Use a shorter name for the declared lifetime of the chars_enumerator rust/src/path_parser.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 1bf93897ba40058c94d17883c4555a150d32ec72 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jul 20 20:41:53 2017 -0500 Remove the nom dependency. So long, and thanks for all the fish. rust/Cargo.lock | 7 ------- rust/Cargo.toml | 5 ----- rust/src/lib.rs | 2 -- 3 files changed, 14 deletions(-) commit 7fecfb8644276900fc536823701e489a88662b3a Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jul 20 20:39:16 2017 -0500 parsers::list_of_points() - Implement with cssparser instead of nom rust/src/parsers.rs | 163 ++++++++-------------------------------------------- 1 file changed, 25 insertions(+), 138 deletions(-) commit c41b703beb1a429aeafeec71bbdd00f300a1636d Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jul 20 15:10:27 2017 -0500 RsvgViewBox::from_str(): Implement in terms of parsers::number_list() The syntax is the same. rust/src/parsers.rs | 39 +++++---------------------------------- rust/src/viewbox.rs | 43 ++++++++++++++++++++++++------------------- 2 files changed, 29 insertions(+), 53 deletions(-) commit 03b2fb6e379d99b0094de58ef131e64c1835950b Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jul 20 14:05:54 2017 -0500 property_bag::parse_or_none() doesn't need T to implement Default Only parse_or_default() does. rust/src/property_bag.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b1dd396128ff6e6e7896cbb9a3f23a574c4f689e Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jul 19 16:45:18 2017 -0500 parsers::angle_degrees(): Implement with rust-cssparser instead of nom rust/src/parsers.rs | 48 +++++++++++++++++------------------------------- 1 file changed, 17 insertions(+), 31 deletions(-) commit 0bd5b447f6367da8cea9c62ef6c55646ce150d84 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jul 19 16:35:49 2017 -0500 length.rs: Implement Length::parse() with rust-cssparser, not with nom rust/src/length.rs | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) commit 10711bb1a54f6f772b468c214e92b6fd0ede81a9 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jul 19 13:45:39 2017 -0500 parsers: Test that number_and_units() can parse percentages and units beginning with "e" rust/src/parsers.rs | 2 ++ 1 file changed, 2 insertions(+) commit 401c323270f307be0774780f85db605921929f96 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jul 19 13:37:01 2017 -0500 parsers::view_box() - Deal in &str and Result, not in &[u8] and nom::IResult rust/src/parsers.rs | 20 ++++++++++---------- rust/src/viewbox.rs | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) commit e52741e768bf2e1df0d27fa85f3a74917c943a92 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jul 19 13:12:50 2017 -0500 parsers::coordinate_pair() - This doesn't need to be public rust/src/parsers.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b52da5b626f57426b454cfba60cc8ce9e7497eb4 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jul 19 13:11:29 2017 -0500 parsers::number_and_units() - Deal in &str and plain Result, not &[u8] and nom::IResult rust/src/length.rs | 58 ++++++++++++++++++++++++++--------------------------- rust/src/parsers.rs | 24 +++++++++++++--------- 2 files changed, 44 insertions(+), 38 deletions(-) commit c354bf77ad484884500be707ddd894e0a2ae78c7 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jul 19 12:10:30 2017 -0500 parsers::list_of_points() - take a &str, not a &[u8] We'll move away from nom, to reduce the number of parsing libraries. rust/src/parsers.rs | 20 ++++++++++---------- rust/src/shapes.rs | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) commit cc2793c92e7eae3bab215bd12a47e4d40c203c86 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 14 11:41:21 2017 -0500 tests/README.md: Fix the markup a bit tests/README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit a90065a189370fce2cae6051b5000f270f34ad0c Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 14 11:34:43 2017 -0500 Makefile.am: Oops, add rust/build.rs to the sources Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 9dbe4e2175e9ba858358b2d11115a094531b80bb Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 14 11:10:13 2017 -0500 coords-viewattr-01-b.svg - New test for the preserveAspectRatio attribute Sigh, we should have had this from the beginning. No wonder the tests didn't catch the bug from the previous commit. .../reftests/svg1.1/coords-viewattr-01-b-ref.png | Bin 0 -> 16515 bytes .../reftests/svg1.1/coords-viewattr-01-b.svg | 140 +++++++++++++++++++++ 2 files changed, 140 insertions(+) commit d8ab3534c3ce407fd0db09df611a84636d84ad14 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 14 10:54:23 2017 -0500 aspect_ratio.rs: Sigh, use the correct capitalization for xMinYMin et al I copied the constant names incorrectly as XminYmin; the correct case in the SVG spec is xMinYMin and similarly for the others. Fuck camelCase. rust/src/aspect_ratio.rs | 80 ++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 40 deletions(-) commit 762d570ac599a001b6ba23110fc0789546f48770 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 7 11:42:35 2017 -0500 rsvg-filter: Deal with errors in all callers to rsvg_filter_get_result() rsvg-filter.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit d4587391cf11915fc6129aeaaf5d013292fa0d4b Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 7 11:38:56 2017 -0500 rsvg-filter: Return NULL for invalid surfaces in rsvg_filter_get_{result,in}() rsvg-filter.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) commit 1910a0e0f77aa344a344758c15e83142dd30da4e Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jul 7 11:29:04 2017 -0500 feGaussianBlur: Don't try to blur an invalid surface This is a stop-gap measure to deal with invalid surfaces being fed to this filter. We get a surface which is not in CAIRO_STATUS_SUCCESS, and so its width/height are 0. In reality we should be able to bubble up errors from cairo_*_surface_create(), but we don't do that yet. rsvg-filter.c | 5 +++++ 1 file changed, 5 insertions(+) commit 6a94a7aa4f722bd08f7b677900d0329309ed029f Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jul 6 13:02:03 2017 -0500 feTile: don't divide by zero if the input surface has empty bounds Thanks to Stefan Cornelius <scorneli@redhat.com> for the test file. rsvg-filter.c | 5 +++++ 1 file changed, 5 insertions(+) commit ecf9267a24b2c3c0cd211dbdfa9ef2232511972a Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 27 17:12:51 2017 -0500 bgo#783835 - Don't divide by zero in box_blur_line() for gaussian blurs We were making the decision to use box blurs, instead of a true Gaussian kernel, based on the size of *both* x and y dimensions. Do them individually instead. rsvg-filter.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) commit 818ad22366e2f1337077cee65151aef120ee77df Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 27 09:40:37 2017 -0500 feConvolveMatrix: Use an enum for edgeMode, not ints rsvg-filter.c | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) commit 77e296fd852597359bfc973e0778269132474072 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jun 26 21:03:37 2017 -0500 Move README to README.md and mark it up a bit README => README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a7e1953a343459762f362a069b6024567c8dda06 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jun 26 21:01:28 2017 -0500 Add a CONTRIBUTING.md in preparation for gitlab.gnome.org CONTRIBUTING.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README | 14 ++--------- 2 files changed, 79 insertions(+), 12 deletions(-) commit 375836db1a49e0940d9e326e6932d176d542a216 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jun 22 13:28:42 2017 -0500 rsvg-convert.1 - Remove references to Sourceforge rsvg-convert.1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 828e959ea6f85be5ebbb562e9bbd60c4e40e7e52 Merge: 23fb47e facef14 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 20 18:01:37 2017 -0500 Merge remote-tracking branch 'origin/master' commit 23fb47e93335ce885187be7fcc0e884c8c5bfc7e Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 20 18:00:24 2017 -0500 rsvg_css_parse_number_list(): Copy the array with copy_from_slice(), not manually rust/src/parsers.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit dc4756378535d5db3b9c0a07deb607b0f71bcd70 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 20 11:02:08 2017 -0500 Move rsvg_css_parse_number_list() completely to Rust. Yay! Unfortunately there is no to_glib_full() for arrays of doubles. We call g_malloc_n() by hand to create an array that C can consume, and fill it with the values that we parsed. rsvg-css.c | 38 ------------------------------- rsvg-css.h | 3 ++- rust/src/lib.rs | 1 + rust/src/parsers.rs | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 67 insertions(+), 40 deletions(-) commit 6e1b205de44673e6bd3acb28d3eb1422f46424bc Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 20 10:36:32 2017 -0500 Little update to NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit 78bb1392d3b45ca7ace11aa5de097e4c4d8dd446 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 20 09:25:48 2017 -0500 Make rsvg_css_parse_number_list() correspond to the Rust version And start turning the callers into using the new API. Also, this actually makes feConvolveMatrix be rendered. Apparently they weren't working at all before? rsvg-css.c | 25 ++++++++++++++------- rsvg-css.h | 14 +++++++++++- rsvg-filter.c | 72 ++++++++++++++++++++++++++++++++++++++++++++++------------- 3 files changed, 87 insertions(+), 24 deletions(-) commit 35cca0035a6c75b258e2f4cdc0968d68557d8d50 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jun 19 20:29:08 2017 -0500 parsers.rs: Add tests for garbage in number lists rust/src/parsers.rs | 6 ++++++ 1 file changed, 6 insertions(+) commit f70d5ea50cb726970cf7b6e5215f09cf2cd37732 Author: Federico Mena Quintero <federico@gnome.org> Date: Sat Jun 17 13:11:31 2017 -0500 parsers::number_list() - New function to replace rsvg_css_parse_number_list() rust/src/parsers.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) commit facef142477c7e13b773254bc7ace683c8096ea5 Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Thu Jun 15 20:16:43 2017 +0800 win32/rsvg-rust.mak: Streamline Rust build process As the recommended way to setup Rust is via rustup, set the default toolchain/target during the NMake build process, so that one will only need to have the Rust executables in their PATH and ensure that they have the needed toolchains (i686-pc-windows-msvc and/or x86_64-pc-windows-msvc) installed via rustup. Please note that we are being conservative here-we use the stable releases of the toolchains only. If using a beta/nightly toolchain release, one needs to update this file for this purpose. win32/rsvg-rust.mak | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit fd1be778fe90ff5e4c47d8074ee1f44fba7d8e01 Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Tue May 9 18:17:29 2017 -0700 win32/replace.py: Fix replacing items in files with UTF-8 content Some files that this script will process might have UTF-8 items in there, which can cause problems on Python 3.x as it is more strict and careful on unicode issues. Fix this by: -Doing what we did before on Python 2.x -Opening the file with encoding='utf-8' on Python 3.x win32/replace.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit f4a6ccbc54eb8a1f91fb22ea08754f4076e4db1f Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 13 09:09:08 2017 -0500 Handle parse errors in all calls to rsvg_css_parse_number_optional_number() rsvg-filter.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) commit 2f8629e873cd68856714cedf95379fe60b927981 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 13 09:00:23 2017 -0500 rsvg_css_parse_number_optional_number(): Move to Rust Also, make it return a gboolean for errors. rsvg-css.c | 19 ------------------- rsvg-css.h | 4 +++- rust/src/lib.rs | 4 ++++ rust/src/parsers.rs | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 20 deletions(-) commit 12ba8ba37f1e3f5655568889aa3a4e8ad24bd4fc Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 13 08:51:14 2017 -0500 transform.rs: Add missing 'extern' How did this work? rust/src/transform.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 0f77b0d160c4f601821b0f36c8bc2c6bd2ff3592 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 13 08:40:31 2017 -0500 parsers::number_optional_number(): New parser https://www.w3.org/TR/SVG/types.html#DataTypeNumberOptionalNumber rust/src/parsers.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) commit 32dd5e66f29a989b1b5df850941acb993260bb01 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 6 17:31:09 2017 -0500 Gradient: Factor out method to add color stops from a Node rust/src/gradient.rs | 37 ++++++++++--------------------------- 1 file changed, 10 insertions(+), 27 deletions(-) commit 7c991a72cecaed2e8252682f5b6e3c1b74694f61 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jun 6 17:16:44 2017 -0500 gradient.rs: Fully move gradients to Rust. Yay! We introduce NodeGradient, and move all the machinery to turn a node with children for color stops into our existing Gradient structure. rsvg-base.c | 6 +- rsvg-cairo-draw.c | 100 ++--------------- rsvg-paint-server.c | 181 ------------------------------ rsvg-paint-server.h | 78 +------------ rust/src/gradient.rs | 312 +++++++++++++++++++++++++++------------------------ rust/src/lib.rs | 6 +- 6 files changed, 186 insertions(+), 497 deletions(-) commit 22d1459fd908cea9bf781acd8548355c740a4274 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Jun 5 10:38:32 2017 -0500 PaintServerSpread: Use this instead of plain cairo::enums::Extend for gradients We define PaintServerSpread as a newtype on cairo::enums::Extend, so we can implement FromStr and Default for it. This will let us parse the "spreadMethod" property in gradients with our usual machinery. rust/src/gradient.rs | 12 ++++++------ rust/src/paint_server.rs | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) commit 48f986a583f4a4d42c9db26c083c92ddf1f55cc2 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jun 2 11:49:27 2017 -0500 *.rs - get rid of unused imports rust/src/aspect_ratio.rs | 6 ++---- rust/src/bbox.rs | 6 +++--- rust/src/drawing_ctx.rs | 12 +++++------- rust/src/gradient.rs | 11 ++++------- rust/src/length.rs | 10 ++++------ rust/src/lib.rs | 16 ++++++++-------- rust/src/marker.rs | 11 ++++------- rust/src/node.rs | 19 ++++++------------- rust/src/parsers.rs | 3 +-- rust/src/path_builder.rs | 17 +++++++++-------- rust/src/path_parser.rs | 2 -- rust/src/pattern.rs | 19 ++++++++----------- rust/src/property_bag.rs | 10 +++------- rust/src/shapes.rs | 3 ++- rust/src/structure.rs | 11 +++-------- rust/src/transform.rs | 14 ++++++-------- rust/src/viewbox.rs | 6 +++--- 17 files changed, 71 insertions(+), 105 deletions(-) commit 4e7f5e1e8cc497e9293b6ff48181b276ee94ca89 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jun 2 11:01:50 2017 -0500 pt.rs: Remove auxiliary file for parse_transform.lalrpop I didn't know that extern creates are conventionally defined in lib.rs, and used as "use ::some_extern_create" from actual modules. Lalrpop doesn't support "extern crate blah"; it assumes the conventional usage. Makefile.am | 1 - rust/src/lib.rs | 1 - rust/src/parse_transform.lalrpop | 4 ++-- rust/src/pt.rs | 1 - 4 files changed, 2 insertions(+), 5 deletions(-) commit b09d893f0ac263454021d4a232f16611ac281daf Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jun 2 10:23:23 2017 -0500 rsvg_state_inherit_run(): When inheriting stop_color, mark the presence of the new color This makes pservers-grad-18-b.svg pass again. It makes me nervous that *that* test breaks often, and we have no lower-level tests for that kind of gradient/stop inheritance. Hmm, do we need to do this for *all* the other properties, too? rsvg-styles.c | 2 ++ 1 file changed, 2 insertions(+) commit 59bec0b08d30bb59976d7f2eb6e4277cdf23fb58 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jun 2 09:53:02 2017 -0500 Move NodeStop over to Rust. Yay! This reimplements gradient_add_color_stops_from_node() in Rust based on the old C code. rsvg-base.c | 2 +- rsvg-cairo-draw.c | 31 +----------- rsvg-paint-server.c | 140 --------------------------------------------------- rsvg-paint-server.h | 17 ++----- rust/src/gradient.rs | 31 ++++++++---- rust/src/lib.rs | 2 +- rust/src/node.rs | 4 ++ rust/src/stop.rs | 4 +- 8 files changed, 36 insertions(+), 195 deletions(-) commit 660d55a5ebf2aa9324488f8e0e612b7ad60bdcf3 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jun 2 09:18:21 2017 -0500 NodeStop: add get_offset() and get_rgba() functions rust/src/stop.rs | 8 ++++++++ 1 file changed, 8 insertions(+) commit 6253c01b7693f311fd1283d4a1cd724ba7635c6a Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 18:28:55 2017 -0500 stop.rs: Start porting the gradient stop element to Rust Makefile.am | 1 + rust/src/lib.rs | 5 ++ rust/src/stop.rs | 169 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 175 insertions(+) commit eafedf3c202e754fa4514e85c17d58497ba6796e Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 16:22:42 2017 -0500 drawing_ctx::state_get_current_color() - Promote the u32 result to a full Color value Although we don't support "inherit" as a value for the "color" property (i.e. what is used to specify currentColor), we'll support it later --- this is embodied in the Color structure. rust/src/color.rs | 12 ++++++++++++ rust/src/drawing_ctx.rs | 8 ++++---- 2 files changed, 16 insertions(+), 4 deletions(-) commit 8b39e54bef7b1d40cf5d72bc04bce31382f59419 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 16:22:01 2017 -0500 drawing_ctx::state_free() - Bind rsvg_state_free() for Rust rust/src/drawing_ctx.rs | 5 +++++ 1 file changed, 5 insertions(+) commit b5c440e429db4aad7d9fa4f361fcc6c37abea4df Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 16:21:27 2017 -0500 opacity_to_u8(): Make public rust/src/opacity.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1d4643783c1facacfc4ba54a66b3701f36667fbe Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 16:20:18 2017 -0500 Length: make the length and unit fields public We'll need to access them from the Rust code to validate things rust/src/length.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f5bccefa472d63f56c26d9186d26a2daa7707dda Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 13:15:01 2017 -0500 drawing_ctx::state_get_stop_opacity() - Analogous to ::state_get_stop_color() rust/src/drawing_ctx.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 8238741217495fa138279d14714a14dbce4bb62e Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 13:12:10 2017 -0500 Opacity::from_opacity_spec(): New function, to deal only in Result<Opacity, ...> Instead of dealing with OpacitySpec in the Rust code. This is analogous to Color::from_color_spec(). rust/src/opacity.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit 0112a1e8a1cc50ebd601c22d8e08003f01aefe61 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 13:02:40 2017 -0500 drawing_ctx::state_get_stop_color(): Return a Result<Color>, not a ColorSpec We want to use ColorSpec only for marshalling to/from C. Inside the Rust code we only want to use a Color enum, and indicate a parse error thereof by a Result<Color, ...>. rust/src/drawing_ctx.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 4fa9b849994a11e0bf53528b19f8dac9373e520b Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 12:59:14 2017 -0500 Color::from_color_spec() - Turn a ColorSpec from C back into a Result<Color> We'll use this to think only in Rustic terms, instead of having to piece out a ColorSpec which can indicate a ParseError. rust/src/color.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) commit b267dca3ca927a06a37fd02b13fd1820e8adfa1c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 12:58:18 2017 -0500 rsvg_state_get_stop_opacity(): New function to expose this property to Rust rsvg-styles.c | 10 ++++++++++ rsvg-styles.h | 3 +++ 2 files changed, 13 insertions(+) commit edb8827d501b75d26e8098bc7899559f1b41fae3 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 09:41:11 2017 -0500 Remove unused prototype rsvg-css.h | 2 -- 1 file changed, 2 deletions(-) commit fd0f38b44436af67679335240e797e262b36aa4c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 08:26:47 2017 -0500 rsvg_css_parse_opacity(): Move entirely to Rust. Yay! We also move RsvgOpacitySpec and RsvgOpacityKind to rsvg-css.h, to keep them together with RsvgColorSpec/Kind. Makefile.am | 1 + rsvg-css.c | 17 ------------ rsvg-css.h | 19 +++++++++++-- rsvg-styles.c | 54 ++++++++++++++++++++++++++++--------- rsvg-styles.h | 14 ---------- rust/src/lib.rs | 6 +++++ rust/src/opacity.rs | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 144 insertions(+), 45 deletions(-) commit ba4c3a96d5ce797fbeb19ab00b52ce46a0112f87 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 31 07:32:37 2017 -0500 StopOpacity: Rename to RsvgOpacitySpec To be consistent with RsvgColorSpec rsvg-paint-server.c | 8 ++++---- rsvg-styles.c | 8 ++++---- rsvg-styles.h | 14 +++++++------- 3 files changed, 15 insertions(+), 15 deletions(-) commit 32477f56bf930e2d2e69edadc16d2f9c76b81c4e Author: Federico Mena Quintero <federico@gnome.org> Date: Tue May 30 19:43:30 2017 -0500 opacity.rs: Implement an Opacity struct and a parser for it This can parse inherit | <number> rust/src/lib.rs | 1 + rust/src/opacity.rs | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) commit d644712c05ee2320403ca7cf6e726438355b602e Author: Federico Mena Quintero <federico@gnome.org> Date: Tue May 30 16:32:01 2017 -0500 StopOpacity: Turn into a struct; put both the "kind" enum and the actual opacity value here This makes the stop-opacity property be similar to the stop-color one. rsvg-paint-server.c | 8 ++++---- rsvg-styles.c | 11 +++++------ rsvg-styles.h | 15 ++++++++++----- 3 files changed, 19 insertions(+), 15 deletions(-) commit 37479d8adfee8675a0c308af6bf54260418b21b2 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon May 29 19:17:38 2017 -0500 rsvg_state_get_current_color(): Expose to Rust rsvg-styles.c | 18 ++++++++++++++---- rsvg-styles.h | 3 +++ rust/src/drawing_ctx.rs | 7 +++++++ 3 files changed, 24 insertions(+), 4 deletions(-) commit 5c0a332f1af1db35a8e77d2232043268612f0613 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon May 29 19:11:21 2017 -0500 rsvg_state_get_stop_color(): New helper function to expose state->stop_color to Rust rsvg-styles.c | 9 +++++++++ rsvg-styles.h | 3 +++ rust/src/drawing_ctx.rs | 14 ++++++++++++++ 3 files changed, 26 insertions(+) commit 2f469fe4e3d262fff766aa0e6c73d57e8d1e09bb Author: Federico Mena Quintero <federico@gnome.org> Date: Tue May 30 10:26:13 2017 -0500 Remove redundant STOP_OPACITY_UNSPECIFIED We use state->has_stop_opacity for that. I am really not liking the way rsvg_state_inherit_run() has the logic for whether a particular attribute is inherited or not. This should be at the "stop" element level --- the attributes *are* cascaded as expected for other elements. rsvg-paint-server.c | 38 +++++++++++++++++++++++++------------- rsvg-styles.c | 20 +++++++++++++++----- rsvg-styles.h | 1 - 3 files changed, 40 insertions(+), 19 deletions(-) commit 863408e5af4a49b51835bbd0ca2a858c4dc143ae Author: Federico Mena Quintero <federico@gnome.org> Date: Tue May 30 08:48:01 2017 -0500 StopColor: Remove unused enum rsvg-styles.h | 7 ------- 1 file changed, 7 deletions(-) commit 8e25e05d2ef989bb0d6df6f8df4b3dd9843e8d31 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue May 30 08:26:21 2017 -0500 rsvg_css_parse_vbox(): Remove unused function rsvg-css.c | 39 --------------------------------------- rsvg-css.h | 3 +-- 2 files changed, 1 insertion(+), 41 deletions(-) commit 765512f7d8a456e6874092b86ef3df1219be8cd8 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon May 22 19:58:14 2017 -0500 Make RsvgState.stop_color be an RsvgCssColorSpec; don't have an auxiliary StopColorMode anymore rsvg-paint-server.c | 54 ++++++++++++++++++++++++++++++++++++++--------------- rsvg-styles.c | 37 +++++------------------------------- rsvg-styles.h | 5 ++--- 3 files changed, 46 insertions(+), 50 deletions(-) commit 3cf93f386adb02806c5c0e4a1b88bd2aa7b36ad8 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon May 22 07:54:23 2017 -0500 pattern.rs: Fully implement NodePattern in Rust. Yay! We had an auxiliary Pattern structure, which is what the patterns machinery used to resolve patterns at rendering time. However, the SVG data for patterns was still being kept in the C code. Now we have a Rust NodePattern, as expected, and the C code does not have any patterns machinery anymore (other than RsvgPaintServer's to actually call up the pattern.) rsvg-base.c | 2 +- rsvg-cairo-draw.c | 20 +---- rsvg-paint-server.c | 116 -------------------------- rsvg-paint-server.h | 48 +---------- rust/src/lib.rs | 4 +- rust/src/pattern.rs | 236 ++++++++++++++++++++++++++-------------------------- 6 files changed, 122 insertions(+), 304 deletions(-) commit d0d393ffa0ce98b9dd86ccd428b385a0bfa8dba2 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon May 22 07:50:41 2017 -0500 structure.rs: Fix passing a dangling pointer (!) If we have "x: Option<String>", and try to pass a C string to a C function like some_c_func (x.map_or (ptr::null (), |s| String::to_glib_none (&s).0)); Then some_c_func() gets a dangling pointer. The Stash that glib-rs creates to store the temporary C string only has the lifetime of the closure, so by the time some_c_func() is called, the Stash has already been dropped. I understand that *that* happens; I don't understand why Rust lets us get away with it (maybe because we are just passing pointers around, and not ownership-tracked references?) This is the Valgrind log, FWIW: let class = property_bag::lookup (pbag, "class"); let id = property_bag::lookup (pbag, "id"); unsafe { rsvg_parse_style_attrs (handle, raw_node, str::to_glib_none ("svg").0, class.map_or (ptr::null (), |s| String::to_glib_none (&s).0), id.map_or (ptr::null (), |s| String::to_glib_none (&s).0), pbag); } ==7321== Invalid read of size 1 ==7321== at 0x4C2F2A2: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==7321== by 0x795DD89: vfprintf (in /lib64/libc-2.25.so) ==7321== by 0x7A0F807: __vasprintf_chk (in /lib64/libc-2.25.so) ==7321== by 0x6E294A8: g_vasprintf (in /usr/lib64/libglib-2.0.so.0.5200.1) ==7321== by 0x6E03FBC: g_strdup_vprintf (in /usr/lib64/libglib-2.0.so.0.5200.1) ==7321== by 0x6E04078: g_strdup_printf (in /usr/lib64/libglib-2.0.so.0.5200.1) ==7321== by 0x4E76221: rsvg_parse_style_attrs (rsvg-styles.c:1493) ==7321== by 0x4F45621: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::hb7b2d3cd2f7c7d5d (structure.rs:561) ==7321== by 0x4EDB68C: rsvg_internals::node::Node::with_impl::h88684eea38e6e1fd (node.rs:201) ==7321== by 0x4F452D6: rsvg_node_svg_apply_atts (structure.rs:554) ==7321== by 0x4E79BDE: rsvg_end_element (rsvg-base.c:847) ==7321== by 0x57C676C: ??? (in /usr/lib64/libxml2.so.2.9.4) ==7321== Address 0xc313360 is 0 bytes inside a block of size 9 free'd ==7321== at 0x4C2D2DB: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==7321== by 0x4EBB97C: alloc::heap::deallocate::h6e0d0f9d31bcfa2f (heap.rs:113) ==7321== by 0x4EBBC3B: alloc::heap::box_free::h18dbd884648a8b49 (heap.rs:162) ==7321== by 0x4EB41B2: drop::h4f84cb290e8a5854 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1) ==7321== by 0x4E867F8: drop_contents::h929e7f93fb30bf14 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1) ==7321== by 0x4EB4FD6: drop::h929e7f93fb30bf14 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1) ==7321== by 0x4EB4B4C: drop::h78bf7138ba782926 (in /home/federico/src/librsvg-latest/.libs/librsvg-2.so.2.41.1) ==7321== by 0x4F453E8: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h66dfed3b9ec8f9dc (structure.rs:565) ==7321== by 0x4E8F406: _$LT$core..option..Option$LT$T$GT$$GT$::map_or::h31e2639fe31ed744 (option.rs:404) ==7321== by 0x4F455E9: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::hb7b2d3cd2f7c7d5d (structure.rs:565) ==7321== by 0x4EDB68C: rsvg_internals::node::Node::with_impl::h88684eea38e6e1fd (node.rs:201) ==7321== by 0x4F452D6: rsvg_node_svg_apply_atts (structure.rs:554) ==7321== Block was alloc'd at ==7321== at 0x4C2E2CF: realloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==7321== by 0x4FFBED1: reallocate (heap.rs:79) ==7321== by 0x4FFBED1: reserve_exact<u8> (raw_vec.rs:319) ==7321== by 0x4FFBED1: reserve_exact<u8> (vec.rs:479) ==7321== by 0x4FFBED1: std::ffi::c_str::CString::from_vec_unchecked::hb6396f8c4a1f41e5 (c_str.rs:224) ==7321== by 0x4FFBE61: std::ffi::c_str::CString::_new::h4d618af53b7229c0 (c_str.rs:201) ==7321== by 0x4E98318: std::ffi::c_str::CString::new::h12e4003256bfa812 (c_str.rs:195) ==7321== by 0x4E83989: _$LT$collections..string..String$u20$as$u20$glib..translate..ToGlibPtr$LT$$u27$a$C$$u20$$BP$const$u20$i8$GT$$GT$::to_glib_none::h5555f4a2685fe24b (translate.rs:360) ==7321== by 0x4F453BB: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::_$u7b$$u7b$closure$u7d$$u7d$::h66dfed3b9ec8f9dc (structure.rs:565) ==7321== by 0x4E8F406: _$LT$core..option..Option$LT$T$GT$$GT$::map_or::h31e2639fe31ed744 (option.rs:404) ==7321== by 0x4F455E9: rsvg_internals::structure::rsvg_node_svg_apply_atts::_$u7b$$u7b$closure$u7d$$u7d$::hb7b2d3cd2f7c7d5d (structure.rs:565) ==7321== by 0x4EDB68C: rsvg_internals::node::Node::with_impl::h88684eea38e6e1fd (node.rs:201) ==7321== by 0x4F452D6: rsvg_node_svg_apply_atts (structure.rs:554) ==7321== by 0x4E79BDE: rsvg_end_element (rsvg-base.c:847) ==7321== by 0x57C676C: ??? (in /usr/lib64/libxml2.so.2.9.4) rust/src/structure.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 24d736b58569b4af756f0613c8785e418bc4b65d Author: Federico Mena Quintero <federico@gnome.org> Date: Mon May 22 07:49:55 2017 -0500 property_bag.rs: New function transform_or_none() to parse transformation matrixes rust/src/property_bag.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 39779313e9726af1ff6e806ae8df542906631b66 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri May 19 15:02:48 2017 -0500 Cargo.toml: Turn on link-time optimizations in release mode Wow, this reduces the library size a lot! Thanks to Luke Nukem for the tip http://lukenukem.co.nz/gsoc/2017/05/16/gso_2.html rust/Cargo.toml | 3 +++ 1 file changed, 3 insertions(+) commit 6f3a063a95bbee29886e54e5c38fba3c12951933 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri May 19 17:07:41 2017 -0500 Makefile.am: Oops, put the target directory under rust Not directly under the toplevel Makefile.am | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 7294c856b9f15f81e7ed95eb2302845032d8023b Author: Federico Mena Quintero <federico@gnome.org> Date: Fri May 19 22:44:01 2017 -0500 Fully move rsvg_css_parse_color() to Rust. Yay! We keep a C function rsvg_css_parse_color_() that just calls the Rust one. This is so that the linker will make the C symbol visible; this is the quirky function that gets exported just for the benefit of rsvg-convert.c. Makefile.am | 1 + rsvg-convert.c | 10 ++++- rsvg-css.c | 123 +++------------------------------------------------- rsvg-css.h | 34 ++++++++++++++- rsvg-filter.c | 65 +++++++++++++++++++++++++-- rsvg-paint-server.c | 70 +++++++++++++++++++++--------- rsvg-styles.c | 93 ++++++++++++++++++++++++++++++++------- 7 files changed, 237 insertions(+), 159 deletions(-) commit c45dd9f2519cc56fc8f57746605a881f2f939336 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri May 19 21:47:07 2017 -0500 color.rs: Implement the new version of rsvg_css_parse_color() in Rust The prototype is different from what it was in C. We'll change it so that instead of just returning a guint32 argb and the inherit flag (... which is used backwards, anyway), it will return an actual struct with all the possible cases. rust/src/color.rs | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++---- rust/src/lib.rs | 8 ++++ 2 files changed, 123 insertions(+), 8 deletions(-) commit 267e6f284380461da248b9898b82eeaaea956478 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri May 19 20:21:01 2017 -0500 color.rs: Convert directly from cssparser's Result to our ColorSpec rust/Cargo.lock | 22 +++++----- rust/Cargo.toml | 3 +- rust/src/color.rs | 125 ++++++++++++++++-------------------------------------- 3 files changed, 48 insertions(+), 102 deletions(-) commit 68f2eee9bbac7903b48cf729b2634d6c876cb001 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri May 19 19:53:57 2017 -0500 color.rs: Declare ColorKind and ColorSpec that we can represent in C rust/src/color.rs | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ rust/src/lib.rs | 3 +++ 2 files changed, 76 insertions(+) commit a8f2ef109c71cdbec14b05dc07d1734866a93f8e Author: Federico Mena Quintero <federico@gnome.org> Date: Fri May 19 18:56:16 2017 -0500 Start using the servo/rust-cssparser crate to parse colors This is not wired to the real librsvg code yet; it's just a test of using that crate. rust/Cargo.lock | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ rust/Cargo.toml | 5 +++ rust/src/color.rs | 69 +++++++++--------------------- rust/src/lib.rs | 2 + 4 files changed, 150 insertions(+), 50 deletions(-) commit 81bbfe8e5a9815bda2f63d694900021a3c3d8a80 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu May 18 13:13:18 2017 -0500 RawColor: Add new_rgb() and new_argb() constructors to make callers nicer rust/src/color.rs | 65 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 26 deletions(-) commit 8f56c9048b057081005436f34dda206e55edca84 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu May 18 12:21:46 2017 -0500 color.rs: Start a parser for color specifications We want to remove the C version of rsvg_css_parse_color(). rust/src/color.rs | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ rust/src/lib.rs | 1 + 2 files changed, 102 insertions(+) commit bce3987021fe503bfb620ac9c99b95e36f3476fd Author: Federico Mena Quintero <federico@gnome.org> Date: Thu May 18 07:07:49 2017 -0500 Sanitize the indentation specifiers for Emacs/Vim Tabs are 8 spaces! Indentantion is 4 spaces! rsvg-base-file-util.c | 2 +- rsvg-base.c | 2 +- rsvg-cairo-clip.c | 4 ++-- rsvg-cairo-clip.h | 4 ++-- rsvg-cairo-draw.c | 4 ++-- rsvg-cairo-draw.h | 4 ++-- rsvg-cairo-render.c | 4 ++-- rsvg-cairo-render.h | 4 ++-- rsvg-cairo.h | 4 ++-- rsvg-cond.c | 4 ++-- rsvg-convert.c | 4 ++-- rsvg-css.c | 4 ++-- rsvg-css.h | 4 ++-- rsvg-defs.c | 4 ++-- rsvg-defs.h | 4 ++-- rsvg-file-util.c | 4 ++-- rsvg-filter.c | 4 ++-- rsvg-filter.h | 4 ++-- rsvg-gobject.c | 4 ++-- rsvg-image.c | 4 ++-- rsvg-image.h | 4 ++-- rsvg-marker.h | 4 ++-- rsvg-mask.c | 4 ++-- rsvg-mask.h | 4 ++-- rsvg-paint-server.c | 4 ++-- rsvg-paint-server.h | 4 ++-- rsvg-path-builder.h | 4 ++-- rsvg-private.h | 4 ++-- rsvg-shapes.h | 4 ++-- rsvg-structure.h | 4 ++-- rsvg-styles.c | 4 ++-- rsvg-styles.h | 4 ++-- rsvg-text.c | 4 ++-- rsvg-text.h | 4 ++-- rsvg-view.c | 4 ++-- rsvg.c | 4 ++-- rsvg.h | 4 ++-- 37 files changed, 72 insertions(+), 72 deletions(-) commit 21720f56a7a960c10650a3ba3a983f2f305adb6d Author: Federico Mena Quintero <federico@gnome.org> Date: Wed May 17 21:16:41 2017 -0500 Replace g_new() with g_new0() throughout We should not have uninitialized memory! I'm not confident that we are actually initializing every struct field by hand. rsvg-base.c | 2 +- rsvg-cairo-draw.c | 2 +- rsvg-cairo-render.c | 3 ++- rsvg-css.c | 4 ++-- rsvg-defs.c | 2 +- rsvg-filter.c | 14 +++++++------- rsvg-mask.c | 2 +- rsvg-paint-server.c | 10 +++++----- rsvg-styles.c | 10 +++++----- 9 files changed, 25 insertions(+), 24 deletions(-) commit 2b1c4020c51015b3d6508e7fb477314db7a25139 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue May 16 18:01:22 2017 -0500 structure.rs: Completely move NodeUse, NodeSymbol to Rust rsvg-structure.c is no more. Yay! Makefile.am | 8 +- rsvg-base.c | 4 +- rsvg-cairo-render.c | 2 +- rsvg-defs.h | 1 + rsvg-image.c | 1 + rsvg-structure.c | 240 -------------------------------------------------- rsvg-structure.h | 15 ++-- rust/src/lib.rs | 2 + rust/src/strtod.rs | 174 ------------------------------------ rust/src/structure.rs | 221 ++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 240 insertions(+), 428 deletions(-) commit 573a3ee75630936a8a0f91fb4757cf7af10708a2 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue May 16 14:36:02 2017 -0500 Export rsvg_state_has_overflow() to Rust rsvg-styles.c | 5 +++++ rsvg-styles.h | 3 +++ rust/src/drawing_ctx.rs | 5 +++++ 3 files changed, 13 insertions(+) commit e050320825fe9572c431c7f79d3db41580f0e6b1 Author: Jeremy Bicha <jbicha@ubuntu.com> Date: Fri Apr 7 14:59:59 2017 -0500 bgo#778666 - Use our own thumbnailer specification file GNOME 3.24 requires an external thumbnailer program, so define which MIME-types we support thumbnailing from within gdk-pixbuf-thumbnailer. The relevant commit in gnome-desktop is https://git.gnome.org/browse/gnome-desktop/commit/?id=b69fde6 https://bugzilla.gnome.org/show_bug.cgi?id=778666 gdk-pixbuf-loader/Makefile.am | 9 +++++++++ gdk-pixbuf-loader/librsvg.thumbnailer.in | 4 ++++ 2 files changed, 13 insertions(+) commit 5acb65bb10a429fdfcf429255c3c3a0ce6f21ac1 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 16:39:44 2017 -0500 property_bag.rs: Remove unused function rust/src/property_bag.rs | 5 ----- 1 file changed, 5 deletions(-) commit 1d4fa99863d199f80b9c31b82b95dc2a50c21ccc Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 16:29:59 2017 -0500 transform.rs: bool -> glib_sys::gboolean rust/src/transform.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit fd8112168c88e2b84beecfbfd63e6180ed6d5478 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 16:29:41 2017 -0500 pattern.rs: bool -> glib_sys::gboolean rust/src/pattern.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) commit 702d7c048556c484b1ecf14a0e2d28a69f326862 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 16:12:56 2017 -0500 Remove a bunch of unused rsvg_path_builder_*() functions All the callers are now in shapes.rs, so the functions exported from RsvgPathBuilder to C can be removed now. Also, remove rsvg_path_parser_from_str_into_builder() from the Rust code; it's also unused. rsvg-path-builder.h | 37 ---------------------- rust/src/lib.rs | 11 ------- rust/src/path_builder.rs | 80 ------------------------------------------------ rust/src/path_parser.rs | 16 ---------- 4 files changed, 144 deletions(-) commit aeed2129bccc924e75d61a2f3c4271aea94ed42c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 16:06:54 2017 -0500 node.rs: bool -> glib_sys::gboolean rust/src/node.rs | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) commit 0e78607c59001ac42c33d4542f37d55c073ae211 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 15:59:23 2017 -0500 gradient.rs: bool -> glib_sys::gboolean rust/src/gradient.rs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit 403683964947098a0dfc4fa6680605b26b73e66c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 15:37:28 2017 -0500 drawing_ctx.rs: Return values of gboolean map to glib_sys::gboolean, not bool rust/src/drawing_ctx.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 35042a16f2de1b8c146580e8d3741e4d58f0811f Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 15:37:04 2017 -0500 bbox.rs: Use glib_sys::gboolean, not bool for repr(C) structs rust/Cargo.lock | 1 + rust/Cargo.toml | 4 ++++ rust/src/bbox.rs | 29 ++++++++++++++++--------- rust/src/marker.rs | 6 +++--- rust/src/pattern.rs | 2 +- rust/src/structure.rs | 2 +- rust/src/viewbox.rs | 59 ++++++++++++++++++++++++++++++--------------------- 7 files changed, 64 insertions(+), 39 deletions(-) commit 28227ae6decbac86efefc74ce2bffbbc2c34ddfd Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Apr 26 14:27:10 2017 -0500 viewbox.rs: Use gboolean, not bool for field in a repr(C) struct See https://github.com/rust-lang/rfcs/issues/992 - bool in Rust does not repr(C) as any C type in particular. I was naively assuming that it would repr(C) as int, which is equivalent to gboolean. This makes tests/fixtures/dimensions/bug612951.svg pass again. We were calling rsvg_node_svg_get_view_box() and getting a garbage value inside vbox.active - the low byte actually set as expected, and the high bits set to garbage. rust/src/viewbox.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit f11fd6c5ce55ea9fba831b47ab0a75178f87bd96 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Apr 21 21:32:44 2017 -0500 Shorten filenames so tar can grok them, sigh ...sform-ref.png => 634324-blur-negative-transform-ref.png} | Bin ...ing-transform.svg => 634324-blur-negative-transform.svg} | 0 2 files changed, 0 insertions(+), 0 deletions(-) commit 3506ff8ab14dd47a3565b719aeffe76138fe8619 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Apr 18 11:29:10 2017 -0500 Add test files for the previous commit ...aussian-blur-with-negative-scaling-transform-ref.png | Bin 0 -> 14003 bytes ...24-gaussian-blur-with-negative-scaling-transform.svg | 14 ++++++++++++++ 2 files changed, 14 insertions(+) commit f7ccfbff857b5ec8d7ace494e20f28d97f1c91f1 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Apr 18 11:22:18 2017 -0500 bgo#634324 - Gaussian blur with negative-scaling transformation matrix is not rendered When we figure out the standard deviations for Gaussian blurs, we were simply multiplying the given values by the scaling factors in the current transformation. But if this is a negative-scaling matrix, we'd get negative values, and we would not do a blur at all. Take the absolute value of the scaled factors instead. https://bugzilla.gnome.org/show_bug.cgi?id=634324 rsvg-filter.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit f7e0d256c9b07bd7c34b1bd213e50fd9481120ab Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 31 14:05:05 2017 -0600 Update .gitignore .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 7c42644d1664a219c9f84dbbbf0551364e822ce5 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 30 10:48:13 2017 -0600 parse_transform.lalrpop: Use a maybe_comma construct instead of Num2 This makes the generated parser smaller. Thanks to Niko Matsakis for the suggestions! rust/src/parse_transform.lalrpop | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) commit fdbbca254e260d9089ed63336f6617c666ea14fb Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 18:11:47 2017 -0600 Node: new function Node::is_ancestor() rust/src/node.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) commit d1d11ffbec7ebae92f2e41f0effeece4f7f2faf5 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 16:02:19 2017 -0600 NodeSvg: validate the width and height attributes rust/src/structure.rs | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) commit 8962d89d0f08b0b32ad72b25dd6125d1819a5e0e Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 16:01:35 2017 -0600 Make NodeError::value_error() take two &str arguments, for convenience rust/src/error.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4ec908b71f9f19d0d37c98879188a72308c00433 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 15:18:27 2017 -0600 Add struct-use-04-b.svg from the SVG 1.1 test suite This file modified to look for includes in the "resources" subdirectory. Also, rename the "images" directory to "resources", and modify rsvg-test.c to ignore that directory as well. This is because struct-use-04-b.svg includes another SVG file inside resources/, and if that directory weren't ignored, rsvg-test would look inside it for SVG files to try rendering as tests. .../svg1.1/{images => resources}/20x20.png | Bin .../{images => resources}/struct-symbol-01.png | Bin .../fixtures/reftests/svg1.1/resources/svgRef4.css | 4 ++ .../fixtures/reftests/svg1.1/resources/svgRef4.svg | 41 +++++++++++++ .../reftests/svg1.1/struct-symbol-01-b.svg | 2 +- tests/fixtures/reftests/svg1.1/struct-use-01-t.svg | 2 +- .../reftests/svg1.1/struct-use-04-b-ref.png | Bin 0 -> 19927 bytes tests/fixtures/reftests/svg1.1/struct-use-04-b.svg | 65 +++++++++++++++++++++ tests/rsvg-test.c | 2 +- 9 files changed, 113 insertions(+), 3 deletions(-) commit 1c3c23fd024a61e4bfd7eadb9522f42833acba16 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 15:00:04 2017 -0600 Add struct-use-03-t.svg from the SVG 1.1 test suite .../reftests/svg1.1/struct-use-03-t-ref.png | Bin 0 -> 7785 bytes tests/fixtures/reftests/svg1.1/struct-use-03-t.svg | 76 +++++++++++++++++++++ 2 files changed, 76 insertions(+) commit f51f24535c36a290432ad50ac16dee9c1c58ac5a Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 14:57:33 2017 -0600 Add struct-use-01-t.svg from the SVG 1.1 test suite We modify this file to include 20x20.png from a subdirectory. tests/fixtures/reftests/svg1.1/images/20x20.png | Bin 0 -> 1038 bytes .../reftests/svg1.1/struct-use-01-t-ref.png | Bin 0 -> 15253 bytes tests/fixtures/reftests/svg1.1/struct-use-01-t.svg | 112 +++++++++++++++++++++ 3 files changed, 112 insertions(+) commit 8386ecb10ebe9674db364dfd5f5d3906c9498201 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 14:48:46 2017 -0600 Add struct-symbol-01-b.svg from the SVG 1.1 test suite We modify this file to include the struct-symbol-01.png image in a subdirectory of the dir where the SVG file resides, instead of looking for it in an "unrelated" directory. .../reftests/svg1.1/images/struct-symbol-01.png | Bin 0 -> 71497 bytes .../reftests/svg1.1/struct-symbol-01-b-ref.png | Bin 0 -> 52263 bytes .../reftests/svg1.1/struct-symbol-01-b.svg | 89 +++++++++++++++++++++ 3 files changed, 89 insertions(+) commit e91e03239e05a6d7d9f3ee81a7c9937c5186ac33 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 14:05:26 2017 -0600 parse_transform.lalrpop: Don't use "comma?" everywhere; use a helper production This shrinks the generated parse_transform.rs from 800652 bytes to 417847 bytes. rust/src/parse_transform.lalrpop | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 9d0b8f48831088c8defc120be9d061721bc85cfe Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 11:08:45 2017 -0600 Remove unused rsvg_css_parse_frequency() function. rsvg-css.c | 29 ----------------------------- rsvg-css.h | 2 -- 2 files changed, 31 deletions(-) commit dc06dad7941024a877c0cfe9ebd307eeacf4142a Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 11:07:51 2017 -0600 Remove unused rsvg_css_parse_time() function. rsvg-css.c | 27 --------------------------- rsvg-css.h | 2 -- 2 files changed, 29 deletions(-) commit 0584ecef87b05588efdfff2792c5966cfd4c0c79 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 11:07:01 2017 -0600 Remove unused rsvg_css_parse_angle() function. rsvg-css.c | 34 ---------------------------------- rsvg-css.h | 2 -- 2 files changed, 36 deletions(-) commit fe148d81bd76d3df79017108cef33a1303ad2981 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 11:04:32 2017 -0600 rsvg-filter.c: "azimuth", "elevation", "limitingConeAngle" are numbers, not angles Per the spec, these attributes specity plain numbers, which are interpreted as degrees. They are not CSS/SVG angle values with deg/rad/grad units. rsvg-filter.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ef6d3b7ef53e6395d2f92d08be6c5417d3feb944 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 08:25:06 2017 -0600 Oops, list all the new Rust files in the toplevel Makefile.am While Cargo does its own dependency tracking, autotools needs to know about the source files so it will call Cargo when necessary. Makefile.am | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit 5ecce07b482d5b991a47d16ba03a51f80ad7cbb5 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 07:31:54 2017 -0600 NodeSvg: Don't inline the computation of the SVG's affine Make it more clear by actually performing each step separately. rust/src/structure.rs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) commit 6c3ea8ee997b5e2ea3d40387c45b9a1ef2b3e847 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 23 08:25:54 2017 -0600 NodeSvg: Only access self.atts if it is non-null The contents of self.atts will be null if an <svg> element has no attributes. This is because node_set_atts() in the C code will not call a Node.set_atts() method if the property bag is empty. While that is an optimization to avoid a bunch of hash lookups on empty hash tables, it does mean that node implementations cannot assume that their set_atts() method is always called. I'm not sure that I like this. Maybe we should just profile things with/without the extra hash lookups and see if they make a difference. rust/src/structure.rs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) commit 91ef809cb41fcf7b20f53bd236053b3a39f336a9 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 16:29:33 2017 -0600 structure.rs: Finish moving NodeSvg over to Rust. Yay! rsvg-base.c | 8 +- rsvg-structure.c | 193 ------------------------------------------------ rsvg-structure.h | 11 ++- rust/src/lib.rs | 4 + rust/src/structure.rs | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 214 insertions(+), 203 deletions(-) commit 11e32a86153deb16501a55490dd391650e5bef96 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 16:28:51 2017 -0600 Node.get_parent() - new method; returns a strong Rc<Node> Reimplement rsvg_node_get_parent() in terms of it. rust/src/node.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit 101186586f1915b2e020ad1cea31573448c64dbb Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 16:28:14 2017 -0600 property_bag.rs: Wrap rsvg_property_bag_dup() and rsvg_property_bag_free() in Rust rust/src/property_bag.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 7def4117c63f12ffef9d22be1639d5614a783815 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 16:27:24 2017 -0600 property_bag.rs: New functions length_or_value(), parse_or_value() For callers who want to specify an explicit value instead of just using the default value for a type. rust/src/property_bag.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit db81b26045d20b92c667347447c82e6873d7693b Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 13:55:05 2017 -0600 rsvg-structure: Make RsvgNodeSvg an opaque structure Add accessor functions rsvg_node_svg_get_size(), rsvg_node_svg_get_view_box(). rsvg-base.c | 17 ++++++++++------- rsvg-structure.c | 30 ++++++++++++++++++++++++++++++ rsvg-structure.h | 11 +++++------ 3 files changed, 45 insertions(+), 13 deletions(-) commit a394b7fc1ee56081268718bce0396c40288776f5 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 16:26:16 2017 -0600 Oops, add the build file for lalrpop rust/build.rs | 5 +++++ rust/src/pt.rs | 1 + 2 files changed, 6 insertions(+) commit 18e8526227ddc6d3d963eaf36ba2a458ff7fef3b Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 13:35:57 2017 -0600 rsvg_parse_style_pairs(): remove unused "ctx" argument rsvg-paint-server.c | 2 +- rsvg-styles.c | 4 ++-- rsvg-styles.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) commit 7ae3b046c74bbdc2a277ce92c6a623aab43d7e18 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 13:31:58 2017 -0600 rsvg_lookup_parse_style_pair(): remove unused "ctx" argument rsvg-styles.c | 92 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 46 insertions(+), 46 deletions(-) commit 440db4d63f7e9f5a74bb2cd5d4d15165da3aad20 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 13:29:50 2017 -0600 rsvg_parse_style_pair(): remove unused "ctx" argument rsvg-styles.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit b9dbe3bdfde71899af9f090b923ad35513006670 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 11:01:18 2017 -0600 transform.rs: Implement rsvg_parse_transform() fully in Rust And remove it from rsvg-styles.c. Yay! rsvg-styles.c | 157 -------------------------------------------------- rsvg-styles.h | 1 + rust/src/lib.rs | 4 ++ rust/src/transform.rs | 24 ++++++++ 4 files changed, 29 insertions(+), 157 deletions(-) commit c06fbc77e32212d8563599cddce76d53c8391c59 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 10:44:55 2017 -0600 transform.rs: New public function parse_transform() This wraps parse_TransformList as generated by lalrpop. It converts lalrpop errors into our own AttributeError, and validates the resulting transformation matrix. rust/src/transform.rs | 95 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 14 deletions(-) commit 40bc9477dcce9a73884823f7543b63e45a85b59c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 09:50:56 2017 -0600 transform.rs: Move the transform parsing tests from parsers.rs to here We'll need to wrap the raw parsers from lalrpop to validate the generated transformation matrices, so we'll put those functions in this file as well. rust/src/lib.rs | 1 + rust/src/parsers.rs | 129 +------------------------------------------------- rust/src/transform.rs | 127 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 127 deletions(-) commit 03138e684e09130747293a0e7a2946a2c311000c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 09:20:45 2017 -0600 parse_transform.lalrpop: Parse chained transform lists rust/src/parse_transform.lalrpop | 27 +++++++++++++++++++++------ rust/src/parsers.rs | 17 +++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) commit 426c583568beac561bd8d6665f9b069d844f84b7 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 08:56:16 2017 -0600 parse_transform.lalrpop: Parse the "skewX" and "skewY" transforms rust/src/parse_transform.lalrpop | 18 ++++++++++++++++++ rust/src/parsers.rs | 24 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) commit 1f74649e75e36065e1f4349d7a3ee595d7557e9e Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 08:46:43 2017 -0600 parse_transform.lalrpop: Parse the "rotate" transform rust/src/parse_transform.lalrpop | 19 +++++++++++++++++++ rust/src/parsers.rs | 20 ++++++++++++++++++++ 2 files changed, 39 insertions(+) commit fa7548f03d375ac7697359eb8bfc41053a51b5e4 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 08:09:14 2017 -0600 parse_transform.lalrpop: Point to the correct section of the spec rust/src/parse_transform.lalrpop | 4 ++++ 1 file changed, 4 insertions(+) commit 368b887bd98b498e60f54585035fc9df7dd12b8f Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 08:08:07 2017 -0600 parse_transform.lalrpop: Parse the "scale" transform rust/src/parse_transform.lalrpop | 5 +++++ rust/src/parsers.rs | 12 ++++++++++++ 2 files changed, 17 insertions(+) commit c82d223bb5d6016284b806e7611e872157b9c15a Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 08:02:21 2017 -0600 parse_transform.lalrpop: Parse the "translate" transform rust/src/parse_transform.lalrpop | 5 +++++ rust/src/parsers.rs | 12 ++++++++++++ 2 files changed, 17 insertions(+) commit ba8264a7fc85bf448f23a0809d86b3f99c7eb2db Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 22 07:30:54 2017 -0600 parse_transform.lalrpop: Parse the "matrix" transform rust/Cargo.lock | 52 ++++++++++++++++++++-------------------- rust/Cargo.toml | 10 ++++---- rust/src/lib.rs | 1 + rust/src/parse_transform.lalrpop | 20 +++++++++++++++- rust/src/parsers.rs | 18 ++++++++++++++ 5 files changed, 70 insertions(+), 31 deletions(-) commit 121cdb556b53b6b807aa58afca62b9eef7564b09 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 20:40:42 2017 -0600 parse_transform.rs: Start a lalrpop parser for the "transform" attribute rust/Cargo.lock | 321 +++++++++++++++++++++++++++++++++++++++ rust/Cargo.toml | 10 ++ rust/src/lib.rs | 1 + rust/src/parse_transform.lalrpop | 7 + rust/src/parsers.rs | 24 +++ 5 files changed, 363 insertions(+) commit d9315d14847f7d3d5e2c8634a4f2b765a3c84dbe Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 16:56:20 2017 -0600 pattern.rs: Organize the used modules a bit rust/src/pattern.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 691cd35ea83f35c4c7bd460b0a88fb53b364b0ff Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 16:54:30 2017 -0600 property_bag.rs: Implement parse_or_none(), length_or_none() And reimplement length_or_default()/parse_or_default() in terms of those. These parse a value from a string, or return None as an Option. rust/src/property_bag.rs | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) commit 08cd6c8ba763cb58b486ce80d54d22454d68a17e Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 16:54:00 2017 -0600 paint_server.rs: Fix errors rust/src/paint_server.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit c7d4ad44f1651c9d8f0c87c99ed0f5121a0e7371 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 16:53:29 2017 -0600 pattern.rs: Implement FromStr for PatternContentUnits rust/src/pattern.rs | 8 ++++++++ 1 file changed, 8 insertions(+) commit adaa39a1b2ed148cd79801623b9cb5d54b539b0e Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 14:46:31 2017 -0600 pattern.rs: Use PatternContentUnits instead of obj_cbbox boolean values rust/src/pattern.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) commit 8000fcf7c293c7b2da505d7f3e484b9cba7ad83b Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 14:37:41 2017 -0600 pattern.rs: Use PaintServerUnits instead of obj_bbox boolean values rust/src/pattern.rs | 58 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 21 deletions(-) commit 83311d90ffdbe736b0b42f74b370b1fa309cc87a Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 14:32:49 2017 -0600 pattern.rs: Define a PatternContentUnits newtype This is the same as a PaintServerUnits, but with a different default value. rust/src/pattern.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit a8673e04851a65b7b9abff48dd2d3a68943ea389 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 14:22:14 2017 -0600 gradient.rs: Use PaintServerUnits instead of obj_bbox boolean values rust/src/gradient.rs | 60 +++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 27 deletions(-) commit d47b875bd6575f42addea9fa2436e8b2129d30b4 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 14:13:11 2017 -0600 Implement Default for PaintServerUnits, to yield ObjectBoundingBox rust/src/paint_server.rs | 6 ++++++ 1 file changed, 6 insertions(+) commit 69903c259ec2f52538ef9b5e4f044afb9a3f9b62 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 14:06:54 2017 -0600 paint_server.rs: New file with a PaintServerUnits enum This has the userSpaceOnUse and objectBoundingBox values from the SVG spec. We'll use this enum instead of boolean values for obj_bbox and similar. rust/src/lib.rs | 1 + rust/src/paint_server.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) commit 1165cc80a0712c41904b3e6b3f09755736c67392 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Mar 21 13:43:29 2017 -0600 Check the result on all uses of rsvg_parse_transform() and propagate errors rsvg-paint-server.c | 27 +++++++++++++++++++++------ rsvg-styles.h | 2 +- 2 files changed, 22 insertions(+), 7 deletions(-) commit 15825e361380984d3be1d46052980a7321ff6948 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 21:44:03 2017 -0600 structure.rs: Port NodeGroup, NodeDefs, NodeSwitch to Rust They need to be done in a single step, since they all shared bits of implementation with RsvgNodeGroup. Now they are independent of each other. rsvg-base.c | 14 +++--- rsvg-structure.c | 106 -------------------------------------------- rsvg-structure.h | 12 +++-- rust/src/lib.rs | 8 ++++ rust/src/structure.rs | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 143 insertions(+), 116 deletions(-) commit 1652fdd81b9d2f653f9a5859d89f5e767d344449 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 21:43:25 2017 -0600 Add a C getter for rsvg_state_get_cond_true() ... and wrap it in Rust; we'll need it there. rsvg-styles.c | 5 +++++ rsvg-styles.h | 3 +++ rust/src/drawing_ctx.rs | 5 +++++ 3 files changed, 13 insertions(+) commit 88ce4366de6dc072f2ddf31b331d1f73c18f1af6 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 20:20:56 2017 -0600 Add struct-svg-03-f.svg from the SVG 1.1 test suite This tests nested SVG elements. .../reftests/svg1.1/struct-svg-03-f-ref.png | Bin 0 -> 5890 bytes tests/fixtures/reftests/svg1.1/struct-svg-03-f.svg | 68 +++++++++++++++++++++ 2 files changed, 68 insertions(+) commit e594049adcb84fe89758e6e3d26dbb4f011f2ad9 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 19:58:46 2017 -0600 marker.rs: Don't convert from *const RsvgNode to RsvgNode twice This is still a bit ugly, since for convenience we pass both the node and the cnode to Marker::render(). Hopefully this will go away eventually. rust/src/marker.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit e1dcf6dd77f020107f8eff7fb6d549e66928d65d Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 19:53:00 2017 -0600 Wrap Node::draw_children() with rsvg_node_draw_children() and use that ... instead of the old _rsvg_node_draw_children(). rsvg-cairo-clip.c | 2 +- rsvg-cairo-draw.c | 2 +- rsvg-private.h | 5 +++++ rsvg-structure.c | 20 ++------------------ rsvg-structure.h | 3 --- rust/src/drawing_ctx.rs | 8 -------- rust/src/lib.rs | 1 + rust/src/marker.rs | 3 ++- rust/src/node.rs | 8 ++++++++ rust/src/pattern.rs | 3 ++- 10 files changed, 22 insertions(+), 33 deletions(-) commit 4762790f83d6eef8aa444d3ad21c81dc271edfa1 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 19:34:54 2017 -0600 node.rs: new method Node::draw_children() This will replace _rsvg_node_draw_children() rust/src/node.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 1c9ed2b6e9987fa9bc867616bc3842a1420083ac Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 19:31:50 2017 -0600 drawing_ctx.rs: Wrap rsvg_drawing_ctx_draw_node_from_stack() rust/src/drawing_ctx.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 4e8de80c75930ddaf124804106efdc740b2b6615 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 19:21:42 2017 -0600 Factor out a function to add a node and its ancestors to the RsvgDrawingCtx's stack This bit of code was duplicated in three places; move it to a single function. rsvg-base.c | 28 +++++++++++++++------------- rsvg-cairo-render.c | 9 +-------- rsvg-private.h | 4 +++- 3 files changed, 19 insertions(+), 22 deletions(-) commit 6d993e990fcadeec6d52e5997178c2e3fe57dfa1 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 19:05:10 2017 -0600 rsvg_handle_render_cairo_sub(): Traverse and ref ancestors correctly We get a new reference from rsvg_node_get_parent(); this wasn't being used correctly. rsvg-cairo-render.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 8411039335cb6b26b581fa8ce680cbe4877c60fc Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 19:00:04 2017 -0600 Rename rsvg_node_draw_from_stack() to rsvg_drawing_ctx_draw_node_from_stack() This is really the concern of RsvgDrawingCtx, since it has the drawing stack in question. Moved this function from rsvg-structure.c to rsvg-base.c, which is where most of the other RsvgDrawingCtx functions are. rsvg-base.c | 33 +++++++++++++++++++++++++++++++-- rsvg-cairo-draw.c | 2 +- rsvg-cairo-render.c | 2 +- rsvg-private.h | 3 +++ rsvg-structure.c | 35 +++-------------------------------- rsvg-structure.h | 2 -- 6 files changed, 39 insertions(+), 38 deletions(-) commit 3b118396dded327e1b7bce43dfe37ed518a19e65 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 08:39:42 2017 -0600 bgo#776932: Don't render nodes whose "transform" attribute is invalid In the SVG 1.1 test suite, coords-trans-09-t.svg comes with this transform: <g transform="matrix(0 0 0 0 0 0)"> which is invalid. Now we detect whether transforms are in fact invalid, and propagate this info so that the corresponding nodes are not rendered. https://bugzilla.gnome.org/show_bug.cgi?id=776932 rsvg-styles.c | 36 +++++--- .../reftests/svg1.1/coords-trans-09-t-ref.png | Bin 0 -> 17268 bytes .../fixtures/reftests/svg1.1/coords-trans-09-t.svg | 102 +++++++++++++++++++++ 3 files changed, 127 insertions(+), 11 deletions(-) commit edd363a090ea477cf5f2e4b4151e2b5ea6191d18 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 08:08:21 2017 -0600 rsvg-styles.c: Set a node's error when the transform can't be parsed rsvg-styles.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) commit 1d2a4fc8e924d960ad51c95b2a2b1590f60e805a Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 08:05:41 2017 -0600 Remove unused imports rust/src/viewbox.rs | 2 -- 1 file changed, 2 deletions(-) commit 80dbfe0bad0e24379058a4220ed240a94d101ae4 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 08:04:28 2017 -0600 node.rs: New function rsvg_node_set_attribute_parse_error() We will use this from the C code to set a node as being in error, for example, when failing to parse an attribute value. rsvg-private.h | 4 ++++ rust/src/lib.rs | 1 + rust/src/node.rs | 25 +++++++++++++++++++++++++ 3 files changed, 30 insertions(+) commit 5ae4a79781beeee268e65ab92bf60110480ce19e Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 07:48:20 2017 -0600 NodeError: use a String for the attr_name, not a &'static str For now, we'll need to keep around attr_names that come from the C code. We don't know if the pointers we are passed are to statically-allocated strings or not, so we'll just use full Strings on the heap for NodeError. rust/src/error.rs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 882265e5bfccf0d8227ee3d2cfe3fb3fef374fcc Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 07:37:10 2017 -0600 rsvg_parse_style_attrs(): Take a full RsvgNode, not an RsvgState rsvg-base.c | 2 +- rsvg-structure.c | 2 +- rsvg-styles.c | 9 ++++++--- rsvg-styles.h | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) commit d54c0ea585299ec3b8d85f0f7df7dffa4b98187f Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 16 07:21:15 2017 -0600 tests: Add the coords-trans-{01-08} tests from the SVG 1.1 test suite These are basic tests for affine transformations. .../reftests/svg1.1/coords-trans-01-b-ref.png | Bin 0 -> 11819 bytes .../fixtures/reftests/svg1.1/coords-trans-01-b.svg | 239 +++++++++++++++++++++ .../reftests/svg1.1/coords-trans-02-t-ref.png | Bin 0 -> 8349 bytes .../fixtures/reftests/svg1.1/coords-trans-02-t.svg | 176 +++++++++++++++ .../reftests/svg1.1/coords-trans-03-t-ref.png | Bin 0 -> 7902 bytes .../fixtures/reftests/svg1.1/coords-trans-03-t.svg | 99 +++++++++ .../reftests/svg1.1/coords-trans-04-t-ref.png | Bin 0 -> 6655 bytes .../fixtures/reftests/svg1.1/coords-trans-04-t.svg | 88 ++++++++ .../reftests/svg1.1/coords-trans-05-t-ref.png | Bin 0 -> 8140 bytes .../fixtures/reftests/svg1.1/coords-trans-05-t.svg | 88 ++++++++ .../reftests/svg1.1/coords-trans-06-t-ref.png | Bin 0 -> 8526 bytes .../fixtures/reftests/svg1.1/coords-trans-06-t.svg | 82 +++++++ .../reftests/svg1.1/coords-trans-07-t-ref.png | Bin 0 -> 11482 bytes .../fixtures/reftests/svg1.1/coords-trans-07-t.svg | 70 ++++++ .../reftests/svg1.1/coords-trans-08-t-ref.png | Bin 0 -> 13265 bytes .../fixtures/reftests/svg1.1/coords-trans-08-t.svg | 76 +++++++ 16 files changed, 918 insertions(+) commit ef8fd91518f96f449aba4900104dd055ed0e968a Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 23:04:51 2017 -0600 property_bag.rs: Remove unused lookup_and_parse() This is the one that didn't propagate errors. Now, the only public function left that doesn't propagate errors is lookup(). rust/src/property_bag.rs | 17 ----------------- 1 file changed, 17 deletions(-) commit 665a71f17c78f229e0d209a25bcd0ed18790fa18 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 23:00:48 2017 -0600 marker.rs: Implement error handling for parsing MarkerUnits and MarkerOrient Simplify by using an AttributeError instead of a custom error type. Errors for the "markerUnits" and "orient" attributes get propagated now. Also, add tests for those parsers. rust/src/marker.rs | 70 +++++++++++++++++++++++++++++------------------------- 1 file changed, 37 insertions(+), 33 deletions(-) commit 61c355cb22064e331228dc389500da447be6a900 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 22:42:57 2017 -0600 property_bag.rs: Turn lookup_length() into length_or_default(); return errors We used to return an RsvgLength with a default value in case of error. Now we actually return a Result. rust/src/marker.rs | 4 ++-- rust/src/property_bag.rs | 8 +++----- rust/src/shapes.rs | 30 +++++++++++++++--------------- 3 files changed, 20 insertions(+), 22 deletions(-) commit 9452ba089960926cd8475f73e7c19d8dc97cfa15 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 22:22:29 2017 -0600 property_bag.rs: Make parse_or_default() know only about AttributeError, not ParseError Now the parsing step must yield an AttributeError, not a low-level ParseError. Make aspect_ratio.rs, length.rs, viewbox.rs emit an AttributeError, not a ParseError. Use parse_or_default() for the "vbox" property of marker.rs. rust/src/aspect_ratio.rs | 9 +++++---- rust/src/error.rs | 7 +++++++ rust/src/length.rs | 24 +++++++++++++++++++++--- rust/src/marker.rs | 2 +- rust/src/property_bag.rs | 4 ++-- rust/src/viewbox.rs | 43 +++++++++++-------------------------------- 6 files changed, 47 insertions(+), 42 deletions(-) commit 69cebc0e6a83c5bb27da7da39a70837ec01b1608 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 21:52:10 2017 -0600 length.rs: Make Length::parse()'s Result have a ParseError And fix some leftover cut&paste in shapes.rs rust/src/length.rs | 14 +++++++++----- rust/src/shapes.rs | 2 -- 2 files changed, 9 insertions(+), 7 deletions(-) commit d2e4e1fde4debb6c5ed577322df7e218e906f916 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 21:39:42 2017 -0600 error.rs: Remove unused argument rust/src/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d483d93f838ba0c3eafc155d3bfc9f516bc5f675 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 21:37:27 2017 -0600 property_bag.rs: New function parse_or_default() This looks up a key in the property bag. If the key is not found, returns a default value. If the key is found, then the string value is parsed. If the parse is successful, that value is returned. Otherwise, we turn that into a NodeError with a parse error inside. Make marker.rs use that for the "aspect" attribute. rust/src/aspect_ratio.rs | 46 +++++++++++++++++++++------------------------- rust/src/marker.rs | 1 + rust/src/property_bag.rs | 14 ++++++++++++++ 3 files changed, 36 insertions(+), 25 deletions(-) commit d5391b91c42ff823c9d669d8f03106eb12e3f674 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 20:59:10 2017 -0600 error.rs: Fix is_parse_error() and is_value_error() rust/src/error.rs | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) commit bbea658427ff3d3b693fb46f07ea17d4b70c0618 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 20:42:32 2017 -0600 error.rs: Implement From<ParseError> for AttributeError This lets us convert a low-level ParseError implicitly to a higher-level AttributeError. rust/src/error.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) commit a8175940714b68751a74e0c32fd2f4cffeba4c06 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Mar 15 19:30:01 2017 -0600 lib.rs: Remove exports that don't need to be exported rust/src/lib.rs | 5 ----- 1 file changed, 5 deletions(-) commit 148612df7886df5b7763f5cfee3445af2162fa91 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 16:07:53 2017 -0600 parsers.rs: New helper ParseError::new() which duplicates the description string itself Since these are error structures for long-term storage, we can't keep slices into the parsed buffers or anything like that. So, we store a plain String. rust/src/parsers.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) commit 371ba76abd2f972d0b13f189827beb96cb4b87f3 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 15:59:59 2017 -0600 ParseError: Remove the description field; only leave the display field All descriptions were basically "parse error"; so leave only the human-readable meaningful text. rust/src/parsers.rs | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) commit 7c8ddd0017321d966cbc9c27357babc31c10e144 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 15:52:00 2017 -0600 error.rs: Move the NodeError machinery here, so other files can use it ... also, we renamed our struct from Error to NodeError, avoid getting it confused with std::error::Error. rust/src/error.rs | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ rust/src/lib.rs | 1 + rust/src/node.rs | 65 ++++-------------------------------------------------- rust/src/shapes.rs | 3 ++- 4 files changed, 68 insertions(+), 62 deletions(-) commit d44b0ec3765f7aa5080edfd5f8e3b1296a278fa7 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 14:14:24 2017 -0600 node.rs: Only drop the RsvgState if *not* in testing mode We don't have rsvg_state_free() available if we are linking in testing mode. Conditionally compile the Drop trait then; there are no leaks because in testing mode we don't create RsvgState objects anyway. The effect of this commit is to actually free the states in release mode! rust/src/node.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 4cea62cacbf9b433ac53aa842184fc453342a73f Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 14:13:19 2017 -0600 Shuffle around node::Error and AttributeError Now Error has the attr_name and an AttributeError, which actually has Parse and Value matches. rust/src/node.rs | 59 +++++++++++++++++++++++-------------- rust/src/parsers.rs | 83 +++++++++++++++++++++++++++++++++++------------------ rust/src/shapes.rs | 19 ++++++------ 3 files changed, 103 insertions(+), 58 deletions(-) commit 0697d8f35b8fcd2561617c62aa8353047b5929d2 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 14:11:50 2017 -0600 Remove unused imports rust/src/marker.rs | 1 - 1 file changed, 1 deletion(-) commit 4a12cf685beae89c3aa22887d395719200241e89 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 12:14:59 2017 -0600 parsers.rs: Removed example code Thanks again to Sebastian for this. rust/src/parsers.rs | 62 ----------------------------------------------------- 1 file changed, 62 deletions(-) commit 673b0f5b6390f25a9c6cd8cf572c93f13995abf5 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 10:47:52 2017 -0600 Node::draw(): Don't draw nodes that are in error rust/src/node.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 657182c210416c627232dcce4d370c7f268e37ee Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 10:46:43 2017 -0600 Make NodeTrait::set_atts() return a NodeResult Set this on node.result from the toplevel Node::set_atts() that calls into NodeTrait::set_atts(). For now, just return Ok from all the set_atts() implementations; we'll propagate errors later. rust/src/cnode.rs | 4 +++- rust/src/marker.rs | 4 +++- rust/src/node.rs | 7 ++++--- rust/src/shapes.rs | 24 ++++++++++++++++++------ 4 files changed, 28 insertions(+), 11 deletions(-) commit 28bb98cfb493e7f5c294ccd53faea5f78f9acfa1 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 10:23:15 2017 -0600 node.rs: Implement fmt::Display and error::Error for node::Error We have an AttributeError struct that we use to hold an attribute's name, and the actual error which that attribute caused. node::Error in turn is an enum for parse errors, invalid values, etc., that each hold an AttributeError to describe the attribute in question. rust/src/node.rs | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) commit 356cfdf8dddfd4054c4d8308410ba0c19f848f1a Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Mar 3 09:23:24 2017 -0600 node.rs: Start defining node::Error type This in the context of https://bugzilla.gnome.org/show_bug.cgi?id=776932 A "transform (0, 0, 0, 0, 0, 0)" attribute ripples down the code, so that we try to invert that matrix and panic. We'll keep a "result" field inside struct Node. When a node parses/validates its attributes, it will set that result to Err if it finds a problem. This is how we'll remember that a node "is in error", to use the SVG spec's terminology. Later, Node::draw() will not render a node that is in error. We can also do optimizations in the call stack above Node::draw(); for example, making rsvg_node_draw_from_stack() ignore nodes that are in error so that it can avoid doing a state inheritance for a node in error. rust/src/node.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) commit 5dffb6de39a6520bf5d120f0a92273e829c69216 Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Mon Mar 6 15:04:20 2017 +0800 Visual Studio builds: Generate .pc files upon "install" This makes it easier for build systems that demand for the presence of .pc files (such as Meson) to find packages. win32/vs12/Makefile.am | 1 + win32/vs12/rsvg-install.propsin | 10 ++++++++++ win32/vs12/rsvg-install.vcxproj | 14 ++++++++++++-- win32/vs12/rsvg-install.vcxproj.filters | 21 +++++++++++++++++++++ win32/vs12/rsvg-version-paths.props.in | 4 ++++ win32/vs14/Makefile.am | 1 + win32/vs15/Makefile.am | 1 + 7 files changed, 50 insertions(+), 2 deletions(-) commit 9b56f3f7dcfbca6a0fd491ef17aa301fdf5457ed Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Fri Mar 3 17:19:43 2017 +0800 Visual Studio builds: Add scripts to generate .pc files Integration into the Visual Studio process will follow, this uses Python to generate librsvg-2.0.pc. win32/Makefile.am | 3 ++ win32/pc_base.py | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ win32/replace.py | 109 +++++++++++++++++++++++++++++++++++++++++++++++ win32/rsvgpc.py | 33 +++++++++++++++ 4 files changed, 269 insertions(+) commit da0cd7b2ccf2ffc0b5a4b709cfe356b821665e35 Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Fri Mar 3 15:43:01 2017 +0800 Visual Studio builds: Include package version in property sheets This is done so that we can use this info to generate .pc files for Visual Studio builds. configure.ac | 1 + ...{rsvg-version-paths.props => rsvg-version-paths.props.in} | 12 ++++++++++++ 2 files changed, 13 insertions(+) commit 8bf4354fdc3703c0ea6ecec86ce2f3583933c03a Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 18:50:39 2017 -0600 bgo#777834: Don't try to render text whose PangoLayout has zero extents Text elements sometimes have children with empty strings for their contents, so PangoLayout returns an ink_rect with (width, height) = (0, 0). In this case, we would set a bbox's size to (0, 0), then use that in an affine matrix, and try to invert it, and kaboom. https://bugzilla.gnome.org/show_bug.cgi?id=777834 rsvg-cairo-draw.c | 8 ++++++-- .../reftests/bugs/777834-empty-text-children-ref.png | Bin 0 -> 9653 bytes .../reftests/bugs/777834-empty-text-children.svg} | 0 3 files changed, 6 insertions(+), 2 deletions(-) commit 215ddf63e04708fcd8de006cfe0c477d9f0dd4d2 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 15:08:03 2017 -0600 marker.rs: Add initial tests for the generated markers and their angles The test for a closed subpath passes: we are not generating the correct direction for the end marker in a closed subpath. https://bugzilla.gnome.org/show_bug.cgi?id=777854 rust/src/marker.rs | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) commit 772f1e13bbc59193728199399606aeadd3bd95f3 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 14:51:43 2017 -0600 marker.rs: Split tests into modules for parser tests and directionality tests rust/src/marker.rs | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) commit ace7de082695c494e196a01399760df147f7f528 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 14:43:02 2017 -0600 marker.rs: Use a single emit_marker() function, not one for each endpoint rust/src/marker.rs | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-) commit 3ae42ec3b16fc80da06f228262fb415aa945efa9 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 14:37:07 2017 -0600 marker.rs: Inline a couple of functions that only get used once rust/src/marker.rs | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) commit 9c78cacc7b8c6641da2a949bc93adf6128cb8544 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 14:28:50 2017 -0600 marker.rs: Implement render_markers_for_path_builder() in terms of an emitter Also, fix the syntax for our function pointer; the helpers need to be generic on a Fn(). rust/src/marker.rs | 71 +++++++++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 38 deletions(-) commit 8af629cf948c74121ada87f16ca9eb1279efb9ab Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 13:23:39 2017 -0600 marker.rs: Pass around MarkerType values, not marker names Figure out the marker names only at rendering time rust/src/marker.rs | 49 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 14 deletions(-) commit 1756c70e1eb81e7048cfcd63682e7fe11687f3fc Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 13:10:56 2017 -0600 marker.rs: Extract marker positions from segments in separate functions rust/src/marker.rs | 50 ++++++++++++++++++++------------------------------ 1 file changed, 20 insertions(+), 30 deletions(-) commit 717a9d141d8abee9847c2e381e36b21f297a4058 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 13:02:56 2017 -0600 marker.rs: Add a type definition for a MarkerRenderFn This will take a marker type (start/middle/end) and all the parameters for rendering a marker. rust/src/marker.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit a829ddd6cb1c4ff43bfb3eeb5b26ccff875b4109 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 12:55:20 2017 -0600 marker.rs: Rename the render_marker_*() functions to emit_marker_() We'll move to a model where those functions take a lambda to actually render the marker or otherwise use its final position/angle/etc. This way we can have tests for the generated markers without going to the rendering step. rust/src/marker.rs | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) commit 57372a4808e7bbc7d85606d7c7de43767550cd28 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Mar 2 12:48:47 2017 -0600 marker.rs: Move declarations closer to their use rust/src/marker.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) commit 9a3be46109973fbe585ec998b13f6a4caeb88346 Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Thu Mar 2 11:11:06 2017 +0800 Visual Studio builds: Add facilities to build with FontConfig PangoFT2 (and thus FontConfig) are not required portions of the GTK+ stack on Windows, but since the tests currently rely on this, make it easier for people who want to build with FontConfig to build the tests. win32/vs12/rsvg-build-defines.props | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit a6243bac418102db9af0c9a092f5d118f617b61c Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Thu Mar 2 01:09:28 2017 +0800 Visual Studio builds: Fix Cargo output path The previous move of the projects to win32/ missed updating this part. Fix this. win32/rsvg-rust.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7861db7b19e14c1c081aef43d6f8320d15514689 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 28 19:08:57 2017 -0600 lib.rs: Don't include strtod.rs for now We are using nom for the parsers instead of our own strtod(). Just keep it around for its tests. rust/src/lib.rs | 1 - 1 file changed, 1 deletion(-) commit e440ddfd00ee8ffb2810e441a3eb618afb37199a Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 28 19:08:20 2017 -0600 pattern.rs: Remove rsvg_pattern_node_has_children(); implement in Rust node.rs: Make Node.children public rsvg-paint-server.c | 27 --------------------------- rsvg-paint-server.h | 3 --- rust/src/node.rs | 10 +++++----- rust/src/pattern.rs | 14 ++++++++++---- 4 files changed, 15 insertions(+), 39 deletions(-) commit d15c379ad7c5d32da181bed57f9011c86970ce83 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 28 15:33:12 2017 -0600 Make the get_c_impl() implementations unreachable for nodes implemented in Rust They used to return a ptr::null(), but this value should really never get used, and the get_c_impl() method should not be called for nodes that are implemented in Rust. Assert that this is so. rust/src/marker.rs | 3 +-- rust/src/node.rs | 2 +- rust/src/shapes.rs | 13 ++++++------- 3 files changed, 8 insertions(+), 10 deletions(-) commit e299ef0e285f7d1267528a38d8c41596b89da526 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 22:12:15 2017 -0600 RsvgLength::parse() - return a Result, not an RsvgLength The callers now deal with errors from parsing. In reality we ignore the errors and fall back to default values, but the parsing machinery is there now to detect errors. rust/src/gradient.rs | 14 ++-- rust/src/length.rs | 198 +++++++++++++++++++++++------------------------ rust/src/marker.rs | 6 +- rust/src/parsers.rs | 6 +- rust/src/pattern.rs | 8 +- rust/src/property_bag.rs | 4 +- rust/src/shapes.rs | 20 ++++- 7 files changed, 133 insertions(+), 123 deletions(-) commit 48f48648d1db5735f257f60915ae463cf1a35e58 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 21:18:22 2017 -0600 parsers.rs: make the angle() nom parser number_and_units() instead It can really extract any combination of a floating point number plus a unit-like string. We'll use this for other purposes, too. rust/src/parsers.rs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) commit 2f4ed2e3c140c9d925254be8f4a91fa21bcf0696 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 21:02:36 2017 -0600 length.rs: Be more explicit about what we match for default units rust/src/length.rs | 5 +++++ 1 file changed, 5 insertions(+) commit acbd87449144473ceddce8c419616e61cf25063d Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 20:16:01 2017 -0600 property_bag.rs: New functions lookup_and_parse(), lookup_length() The former does T::from_str() and uses T::default() for the parsing and default values. The latter parses an RsvgLength, and lets the caller specify a LengthDir. This makes the set_atts() functions a bit less verbose. rust/src/marker.rs | 20 ++++++----------- rust/src/property_bag.rs | 31 +++++++++++++++++++++++++++ rust/src/shapes.rs | 56 +++++++++++++----------------------------------- 3 files changed, 52 insertions(+), 55 deletions(-) commit 6dd4ffd62f9d68799d1b2372a05422440fa0d279 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 16:37:59 2017 -0600 marker.rs: Fully implement markers in Rust. rsvg-marker.c is gone! Makefile.am | 1 - rsvg-marker.c | 214 ----------------------------------------------------- rsvg-marker.h | 8 -- rust/src/marker.rs | 140 ++++++++++++++++++++++++++++++----- 4 files changed, 123 insertions(+), 240 deletions(-) commit 1112a20c355043cb962b0f3d4c89ee4c0e3978ae Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 16:35:46 2017 -0600 node.rs: Add a Node::with_impl() method, to access the NodeTrait impl out of band This is a bit sketchy, because we use the downcast-rs crate to actually be able to downcast a our "node_impl: Box<NodeTrait>" field into the concrete implementation type. At first we'll use this in the marker.rs implementation, as markers are not rendered from the normal ::draw() method. Maybe we'll find a way to make this cleaner at some point. rust/Cargo.lock | 7 +++++++ rust/Cargo.toml | 4 ++++ rust/src/lib.rs | 7 +++++++ rust/src/node.rs | 14 +++++++++++++- 4 files changed, 31 insertions(+), 1 deletion(-) commit 70f390d8692442ba1ec1df0c33b0725920e78a23 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 16:34:15 2017 -0600 drawing_ctx.rs: Import rsvg_drawing_ctx_acquire_node_of_type() rust/src/drawing_ctx.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 63b7e671f81edb532790d2c0642a6b0333a07172 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 12:46:29 2017 -0600 Rename and export rsvg_drawing_ctx_add_clipping_rect() to Rust rsvg-base.c | 2 +- rsvg-image.c | 2 +- rsvg-marker.c | 10 +++++----- rsvg-private.h | 2 +- rsvg-structure.c | 6 +++--- rust/src/drawing_ctx.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 57 insertions(+), 11 deletions(-) commit c73e54122b94e73bf7e4bf2eba405a88ff85501e Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 12:43:40 2017 -0600 New helper function rsvg_state_is_overflow() To be used from the Rust code. rsvg-styles.c | 5 +++++ rsvg-styles.h | 3 +++ 2 files changed, 8 insertions(+) commit fc90f896b813d711964ab289940f574ee5ecf44f Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 11:15:17 2017 -0600 Unfinished: Move the rest of rsvg-marker.c to Rust rsvg-base.c | 2 +- rsvg-marker.c | 4 +- rsvg-marker.h | 6 ++ rust/src/marker.rs | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 179 insertions(+), 4 deletions(-) commit c624f17f1605bbb3319229d7040602e1e07ba4ee Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 10:38:37 2017 -0600 parsers.rs: Add parser for angle_degrees() rust/src/parsers.rs | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) commit 58585772e6b0852a2b4a7fb65477e2cbe7f0f18d Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 07:42:21 2017 -0600 Remove unused rsvg_render_markers() This is handled from within the Rust code now. rsvg-marker.h | 4 ---- rust/src/lib.rs | 4 ---- rust/src/marker.rs | 10 ---------- 3 files changed, 18 deletions(-) commit 67b7c18666ccaca80bb56c0acb42d4ee5b401e84 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 07:32:11 2017 -0600 shapes.rs: Trim whitespace from the list-of-points string before parsing it rust/src/shapes.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 98f21cd6a33879df078d141b98055472bd2e66b9 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 27 07:20:59 2017 -0600 viewbox.rs: Trim whitespace before parsing the viewBox string It seems like it will be easier to trim surrounding whitespace before calling nom, than doing it in nom itself. rust/src/viewbox.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 0dc61d3b499dd4e180e4dac2685f1f21140cc35c Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 24 08:37:50 2017 -0600 rsvg-shapes.c is gone now; all the basic shapes are in shapes.rs now Makefile.am | 1 - rsvg-base.c | 4 +- rsvg-cairo-clip.c | 1 + rsvg-shapes.c | 165 ---------------------------------------------------- rsvg-shapes.h | 17 +++--- rust/src/lib.rs | 2 + rust/src/shapes.rs | 61 ++++++++++++++++--- rust/src/viewbox.rs | 2 - 8 files changed, 68 insertions(+), 185 deletions(-) commit 6cfbc00b400fbad789671162514084063c6184c3 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 23 17:27:04 2017 -0600 parsers.rs: Start a parser for SVG's list-of-points Thanks to Sebastian Köln in #rust for the help with nom. We are still missing optional whitespace at the beginning and end of the list-of-points, but I can't get nom to do that. rust/src/parsers.rs | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 144 insertions(+), 4 deletions(-) commit 1bfa2d7b0e85b8c31d7bf9fd55cdfbd0455ca5eb Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Thu Feb 23 11:59:29 2017 +0800 Visual Studio builds: Move projects to win32/ Move the projects to win32/ from build/win32/, so that one will need to go down one less level down the tree to reach the project files, and will allow the autotools modules (Makefile.msvcproj, Makefile-newvs.am, Makefile.msvc-introspection) to be in sync with the ones in GLib and G-I master. This also makes the support of Visual Studio 2017 complete by allowing it in the NMake Makefiles, which is a must for this package since NMake Makefiles are used to build the Rust bits on Visual Studio, as well as for introspection builds. Makefile.am | 18 +-- build/Makefile-newvs.am | 57 -------- build/Makefile.am | 1 - build/Makefile.msvcproj | 149 -------------------- configure.ac | 9 +- win32/Makefile-newvs.am | 55 ++++++++ {build/win32 => win32}/Makefile.am | 2 +- {build => win32}/Makefile.msvc-introspection | 70 +++++----- win32/Makefile.msvcproj | 153 +++++++++++++++++++++ {build/win32 => win32}/detectenv-msvc.mak | 4 +- {build/win32 => win32}/introspection-msvc.mak | 4 +- {build/win32 => win32}/rsvg-introspection-msvc.mak | 0 {build/win32 => win32}/rsvg-rust.mak | 10 +- {build/win32 => win32}/vs12/Makefile.am | 8 +- {build/win32 => win32}/vs12/README.txt | 0 .../vs12/libpixbufloader-svg.vcxproj | 16 +-- .../vs12/libpixbufloader-svg.vcxproj.filters | 2 +- {build/win32 => win32}/vs12/librsvg.sln | 0 .../win32 => win32}/vs12/rsvg-build-defines.props | 2 +- .../vs12/rsvg-convert.vcxproj.filtersin | 0 {build/win32 => win32}/vs12/rsvg-convert.vcxprojin | 14 +- {build/win32 => win32}/vs12/rsvg-gen-srcs.props | 4 +- {build/win32 => win32}/vs12/rsvg-install.propsin | 0 {build/win32 => win32}/vs12/rsvg-install.vcxproj | 18 +-- {build/win32 => win32}/vs12/rsvg-rust.vcxproj | 0 .../win32 => win32}/vs12/rsvg-version-paths.props | 2 +- {build/win32 => win32}/vs12/rsvg-view-3.vcxproj | 16 +-- .../vs12/rsvg-view-3.vcxproj.filters | 2 +- {build/win32 => win32}/vs12/rsvg.vcxproj.filtersin | 4 +- {build/win32 => win32}/vs12/rsvg.vcxprojin | 54 +++----- {build/win32 => win32}/vs14/Makefile.am | 5 +- {build/win32 => win32}/vs15/Makefile.am | 5 +- 32 files changed, 315 insertions(+), 369 deletions(-) commit 9a927252b2a4d7e81aa12b3201d5757deb571560 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 21 21:19:59 2017 -0600 viewbox.rs: Implement FromStr for RsvgViewBox based on the parsers parsers.rs: Don't validate the viewBox's width and height here; do it upstream rust/src/parsers.rs | 26 +++++++++----- rust/src/viewbox.rs | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 115 insertions(+), 10 deletions(-) commit 8aa9b069315f57102eb471d69f2675f28076a3e8 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 21 20:32:56 2017 -0600 node.rs: New utility function boxed_node_new() for the node creators Factor its code out of the rsvg_node_foo_new() from shapes.rs. rust/src/cnode.rs | 11 +---------- rust/src/node.rs | 19 +++++++++++++++++++ rust/src/shapes.rs | 37 +++++++++++++++---------------------- 3 files changed, 35 insertions(+), 32 deletions(-) commit c6d8a57928534b4eb0e7e95fea6e7ec2b757d549 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 21 20:18:15 2017 -0600 parsers.rs: New parser for the viewBox attribute It just returns whatever default errors there are in Nom. We should translate them to meaningful errors at some point. rust/Cargo.lock | 4 ++-- rust/Cargo.toml | 4 +++- rust/src/parsers.rs | 29 ++++++++++++++++++++++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) commit 112ce31aa0193de9601f90c3316e6ecb66cae48d Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 21 20:03:21 2017 -0600 rust/src: Remove unused muts, modules, etc. rust/src/node.rs | 33 ++++++++++++++++----------------- rust/src/path_parser.rs | 1 - 2 files changed, 16 insertions(+), 18 deletions(-) commit 5941032d1d547defb30c629b23a75a9b6d55421a Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 21 20:02:02 2017 -0600 Update Cargo.toml for cairo-rs upstream Now that it has my fixes for SurfacePattern.create(), we can use it. rust/Cargo.lock | 16 ++++++++-------- rust/Cargo.toml | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) commit 41b944569917d1c316bc12297a07e18ac3b29ee0 Author: Sebastian Dröge <sebastian@centricular.com> Date: Tue Feb 21 10:05:57 2017 -0600 Add the start of a nom-based parser for floating-point numbers rust/Cargo.lock | 7 ++++++ rust/Cargo.toml | 3 +++ rust/src/lib.rs | 4 +++ rust/src/parsers.rs | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+) commit 7a56919ff83c4e214527f9b7c7a4d6d83c44a148 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 18:28:36 2017 -0600 shapes.rs: NodeEllipse fully implemented in Rust! Factor out the function to draw ellipses and circles, too. rsvg-base.c | 2 +- rsvg-shapes.c | 100 --------------------------------------------- rsvg-shapes.h | 6 ++- rust/src/lib.rs | 1 + rust/src/shapes.rs | 118 +++++++++++++++++++++++++++++++++++++++++------------ 5 files changed, 99 insertions(+), 128 deletions(-) commit e36a432082d2e6c281891c9b5832c30ac3f7089d Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 18:07:04 2017 -0600 shapes.rs: NodeCircle fully implemented in Rust! rsvg-base.c | 2 +- rsvg-shapes.c | 94 ------------------------------------------------------ rsvg-shapes.h | 6 ++-- rust/src/lib.rs | 1 + rust/src/shapes.rs | 83 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 97 deletions(-) commit 489cd04ea075b78821bbfdc01292855968ed30c2 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 17:30:18 2017 -0600 shapes.rs: NodeRect completely implemented in Rust! rsvg-base.c | 2 +- rsvg-shapes.c | 194 +------------------------------------------------- rsvg-shapes.h | 6 +- rust/src/lib.rs | 1 + rust/src/shapes.rs | 205 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 5 files changed, 210 insertions(+), 198 deletions(-) commit 987b611d32e4038d04668a3c4ea305ea3e1502df Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 17:28:44 2017 -0600 node.rs: Remove unused mut rust/src/node.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4ba0fef19bff5542b7ca9ad2857dd4ae7ef896bf Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 16:06:16 2017 -0600 shapes.rs: NodeLine completely implemented in Rust. Yay! rsvg-base.c | 2 +- rsvg-shapes.c | 73 ---------------------------------------- rsvg-shapes.h | 6 ++-- rust/src/lib.rs | 1 + rust/src/shapes.rs | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 104 insertions(+), 76 deletions(-) commit 458c7ff1e51ee730380c50690591c38207ad4b54 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 16:04:24 2017 -0600 length.rs: Implement trait Default for RsvgLength rust/src/length.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) commit df252a8409a30985b7b75afd20e540dfc67f60c4 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 16:03:39 2017 -0600 Remove an unused unsafe block rust/src/node.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ee07e154453b05776c3594f648932bad43606d38 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 15:27:46 2017 -0600 shapes.rs: Factor out function to render a path builder rust/src/shapes.rs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) commit f7593e3b802afa4971db80c373dcfec1c8f4b8c5 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 14:01:02 2017 -0600 shapes.rs: Fully implement NodePath in Rust. Yay! rsvg-base.c | 2 +- rsvg-shapes.c | 61 ------------------------------------------------------ rsvg-shapes.h | 4 +++- rust/src/lib.rs | 51 ++++++++++++++++++++++++--------------------- rust/src/shapes.rs | 25 +++++++++++++++------- 5 files changed, 49 insertions(+), 94 deletions(-) commit 608b05a1e24f321a072d3c8b699efdec36a56717 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 13:59:44 2017 -0600 cnode.rs: Factor out function to convert a *const RsvgNode into an Option<Weak<Node>> We'll need this throughout the code to bring in the parent nodes from C rust/src/cnode.rs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) commit 917499fd86be5e135f83edc03d0fa2c5e19f47ac Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 13:49:10 2017 -0600 drawing_ctx.rs: Bring in rsvg_state_new() rust/src/drawing_ctx.rs | 5 +++++ 1 file changed, 5 insertions(+) commit 8e824c8eb682edb134c85955f88c23ea58f83909 Author: Federico Mena Quintero <federico@gnome.org> Date: Mon Feb 20 08:01:16 2017 -0600 shapes.rs: Render the path's markers rust/src/marker.rs | 56 +++++++++++++++++++++++++++++------------------------- rust/src/shapes.rs | 5 +++-- 2 files changed, 33 insertions(+), 28 deletions(-) commit 0d82f0a783c216b03330264db85deae5ef9f7497 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 17 10:33:57 2017 -0600 find_last_chars_node(): Unref the last chars node we found if a tspan overrides it rsvg-base.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 66ee4b61dd84ca945f45272d5122318b70e74a1e Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 17 10:29:47 2017 -0600 test-utils.c: Fix a string leak tests/test-utils.c | 2 ++ 1 file changed, 2 insertions(+) commit 7035711b7eaf60a7ac06e9e0854f7834cc07df40 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 17 10:24:18 2017 -0600 rsvg-test.c: Fix a couple of leaked strings tests/rsvg-test.c | 3 +++ 1 file changed, 3 insertions(+) commit f8c3891851296926c3695b1abb9cc9cb67cf840f Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 17 10:19:15 2017 -0600 Don't leak the PangoFontMap we create only for tests We weren't storing that fontmap at all, so it was re-created an leaked for every text item (!). Now we create the fontmap for testing, use it throughout the duration of the render, and free it when the render is done. rsvg-cairo-draw.c | 11 ++++++----- rsvg-cairo-render.c | 6 ++++++ rsvg-cairo-render.h | 1 + 3 files changed, 13 insertions(+), 5 deletions(-) commit 551a3a1cceabd7678cb65b3e71c121a09e492776 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 17 10:06:52 2017 -0600 rsvg_characters_impl(): Unref the chars node we just created It didn't leak before the addition of refcounting because the node would be freed along with the handle->all_nodes. Now that handle->all_nodes stores its own ref to the chars node, we discard ours here. rsvg-base.c | 2 ++ 1 file changed, 2 insertions(+) commit 3a5f8a3c50799468794a0076dac0d699eff21841 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 17 09:56:06 2017 -0600 Remove unused import. rust/src/node.rs | 1 - 1 file changed, 1 deletion(-) commit 21b181b948433cae9477541b74479a08f386ee65 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 23:17:31 2017 -0600 Ref the found node when iterating through children to find a specific node The callback from rsvg_node_foreach_child() does not get to keep the child reference anymore; it has to ref() it. rsvg-base.c | 3 ++- rsvg-filter.c | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) commit 6c36a2fdf268e715da2636b4bf201816a2cf7cd9 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 23:10:24 2017 -0600 Oops, don't assert on null nodes rsvg-base.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit ca5cb86d1756c2864121a69b1a67bb87b663a712 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 22:07:14 2017 -0600 Disable tests/styles for now, as rsvg_node_get_state() is not exported ... and the test uses that internal function. Ugh. tests/Makefile.am | 3 ++- tests/styles.c | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) commit 739c73cfe8c3c9f3a328cf24592faa0945834477 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 21:47:55 2017 -0600 Don't use node1 == node2; use rsvg_node_is_same() The former is invalid now. rsvg-base.c | 2 +- rsvg-styles.c | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) commit 4853f512a67dbabfe3285d7e5a3cca51949b7003 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 23:09:54 2017 -0600 fix: implement rsvg_node_add_child() rust/src/node.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit f3c0ff0b523ef4f9eadf8a362b8e548058c3493b Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 21:39:17 2017 -0600 Unref the parent node after calling rsvg_node_get_parent() This function now returns a new strong reference to the parent, so we must unref() it when we are done with it. rsvg-base.c | 20 +++++++++++++------- rsvg-cairo-render.c | 8 +++++--- rsvg-defs.c | 2 +- rsvg-gobject.c | 2 +- rsvg-structure.c | 41 +++++++++++++++++++++++++++++------------ rsvg-styles.c | 20 +++++++++++++++++--- 6 files changed, 66 insertions(+), 27 deletions(-) commit 2fca04ad9e3bf3850b287b76267d7a3059f505ab Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 21:09:21 2017 -0600 Ref/unref the nodes at the toplevel rsvg-base rsvg-base.c | 14 ++++++++++---- rsvg-defs.c | 4 ++-- rsvg-gobject.c | 3 +++ 3 files changed, 15 insertions(+), 6 deletions(-) commit aec1ceac95759cdea7330d51c4e877e6edc93347 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 16 21:08:16 2017 -0600 node.rs: New function rsvg_node_is_same() to compare node pointers On the C side, two RsvgNode* can be different and yet refer to the same Node in the Rust code. This function can be used to test for that. That is, if (node_a == node_b) is no longer valid in the C code. Instead, use this: if (rsvg_node_is_same (node_a, node_b)) rsvg-private.h | 4 ++++ rust/src/lib.rs | 1 + rust/src/node.rs | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 70 insertions(+), 2 deletions(-) commit 2477434b4c8ec179b372817d464104ba06f20b30 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 15 19:44:40 2017 -0600 node.rs: Implement rsvg_node_ref() and rsvg_node_unref() In Rust, we have Rc<Node> for the main refcounted node struct. We export that to C by boxing as Box<Rc<Node>>, since an Rc<Node> normally lives in the stack - that is, the Rc is in the stack, and the Node and its refcount are in the heap. When we ref() a node, we return a new Box: Box::into_raw (Box::new (node.clone ())) This means that in C, "x = rsvg_node_ref (y)" gives you back a pointer x that is different from y! Both refer to the same Node in the Rust world, and after that the node has one more refcount, as expected. When we unref() a node, we expect you to call "x = rsvg_node_unref (x)". This returns NULL, so your x=NULL after that, i.e. the node that was in x is not accessible anymore. rsvg-base.c | 2 +- rsvg-private.h | 15 ++++++++---- rust/src/cnode.rs | 8 +++---- rust/src/lib.rs | 1 + rust/src/node.rs | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 84 insertions(+), 13 deletions(-) commit efcbb9c933286c1b729e08df038e350923699239 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 19:39:59 2017 -0600 Use rsvg_node_unref() to get rid of the nodes rsvg-gobject.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit c29590058adf3269e716e49296ea0efbb45a19d2 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 19:39:35 2017 -0600 Don't try to access a node->state directly, use rsvg_node_get_state() instead rsvg-cairo-clip.c | 9 ++++++--- rsvg-cairo-draw.c | 15 ++++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) commit 190b9c271ea2e45b3c7d92a7cfc9bfcc0b541164 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 19:26:00 2017 -0600 Audit casts in callers of rsvg_drawing_ctx_acquire_node_of_type() The pattern was RsvgNodeFoo *foo = (RsvgNodeFoo *) rsvg_drawing_ctx_acquire_node_of_type (ctx, FOO); This is wrong now, since RsvgNode is a Rust structure. Instead, do RsvgNode *node; RsvgNodeFoo *foo; node = rsvg_drawing_ctx_acquire_node_of_type (ctx, FOO); foo = rsvg_rust_cnode_get_impl (node); rsvg-cairo-clip.c | 8 ++++-- rsvg-cairo-clip.h | 2 +- rsvg-cairo-draw.c | 82 ++++++++++++++++++++++++++++++++++------------------- rsvg-filter.c | 8 +++--- rsvg-filter.h | 2 +- rsvg-paint-server.c | 2 +- 6 files changed, 66 insertions(+), 38 deletions(-) commit 0256e231b33213bd3a913ac6695e09c8a83766a3 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 18:47:33 2017 -0600 rsvg-text.[ch]: Move over to rsvg_rust_cnode_new() rsvg-text.c | 166 +++++++++++++++++++++++++++++++++--------------------------- rsvg-text.h | 6 +-- 2 files changed, 95 insertions(+), 77 deletions(-) commit 935af237ddee0df61b5257aa5e5e87d34c567f88 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 18:28:10 2017 -0600 rsvg-mask.[ch]: Move over to rsvg_rust_cnode_new() rsvg-mask.c | 62 ++++++++++++++++++++++++++++++++++--------------------------- rsvg-mask.h | 6 ++---- 2 files changed, 37 insertions(+), 31 deletions(-) commit 1b0bc79ec58f46e4a2bdd925ecef18efbe4f4dfe Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 18:09:16 2017 -0600 rsvg-marker.[ch]: Move over to rsvg_rust_cnode_new() rsvg-marker.c | 46 ++++++++++++++++++++++++++-------------------- rsvg-marker.h | 2 +- 2 files changed, 27 insertions(+), 21 deletions(-) commit 4164381a3aecd3a76e5673fea8bb1f62208f28a4 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 17:46:08 2017 -0600 Move the RsvgNodeChars implementation over to rsvg_rust_cnode_new() rsvg-base.c | 60 ++++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 20 deletions(-) commit 75166d4e90e6a243281c23270fd44e21d2923719 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 14 17:45:47 2017 -0600 rsvg-image.[ch]: Move over to rsvg_rust_cnode_new() rsvg-image.c | 47 +++++++++++++++++++++++++---------------------- rsvg-image.h | 3 +-- 2 files changed, 26 insertions(+), 24 deletions(-) commit 58cdd65496f15bf926539847504d1072bf639d72 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 10 17:15:20 2017 -0600 rsvg-paint-server.[ch]: Move over to rsvg_rust_cnode_new() rsvg-paint-server.c | 138 +++++++++++++++++++++++++++------------------------- rsvg-paint-server.h | 12 ++--- rsvg-private.h | 1 - rsvg-structure.h | 1 - 4 files changed, 75 insertions(+), 77 deletions(-) commit 3794a2aac624b20ac5f710d40bdd18f026cef2d2 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 10 11:30:46 2017 -0600 rsvg-filter.[ch]: Move over to rsvg_rust_cnode_new() rsvg-cairo-draw.c | 2 +- rsvg-filter.c | 905 +++++++++++++++++++++++++----------------------------- rsvg-filter.h | 43 ++- 3 files changed, 438 insertions(+), 512 deletions(-) commit a971a55ab5920ebd7ca0426839ca137e0fa26f06 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Feb 10 11:16:30 2017 -0600 pattern.rs: Remove unused imports rust/src/pattern.rs | 4 ---- 1 file changed, 4 deletions(-) commit 5d524850efaa21ca84706977da2c2fa0f8d74e55 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 9 21:00:22 2017 -0600 cnode.rs: New function rsvg_rust_cnode_get_impl() to fetch the C-side implementation We need this for a couple of special cases that are *not* implementations of node methods and yet want to use the impl structures. For example, rsvg_handle_get_dimensions_sub() wants to peek at the toplevel svg->vbox. We add a Node.get_c_impl() method, and a NodeTrait.get_c_impl(). The CNode actually implements this last one by returning its stored c_node_impl. Nodes implemented fully in Rust will return just a null pointer. We can hopefully remove that method once everything is implemented in Rust. * Move rsvg-structure.[ch] over to rsvg_rust_cnode_new() The new rsvg_foo_node_new() functions use rsvg_rust_cnode_new() internally instead of the old _rsvg_node_init(). Also, the RsvgFooNode structs don't have a "super" field anymore, since RsvgNode is now an opaque struct from the Rust code. We re-do the virtual methods for all of rsvg-structure.c. Other files will follow. * Move rsvg-shapes.[ch] over to rsvg_rust_cnode_new(). rsvg-base.c | 25 +-- rsvg-private.h | 26 ++- rsvg-shapes.c | 271 ++++++++++++++++-------------- rsvg-shapes.h | 14 +- rsvg-structure.c | 483 +++++++++++++++++++++++++---------------------------- rsvg-structure.h | 27 +-- rust/src/cnode.rs | 17 +- rust/src/lib.rs | 1 + rust/src/node.rs | 24 ++- rust/src/shapes.rs | 6 + 10 files changed, 466 insertions(+), 428 deletions(-) commit 3cb68cdb73261d2b1df69c9a71aa5bdce89d75d8 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 9 20:59:16 2017 -0600 node.rs: Free the node.state in our Drop impl The RsvgState is a C-managed resource, so we need to free it by hand. rust/src/node.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) commit df2f97707e703afa3af7252df878a1df0f2236f5 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 9 17:15:57 2017 -0600 Remove RsvgNode's declaration from the C code And make RsvgNodeGroup / RsvgNodeUse / RsvgNodeSymbol private. rsvg-private.h | 8 -------- rsvg-structure.c | 20 ++++++++++++++++++++ rsvg-structure.h | 19 ------------------- 3 files changed, 20 insertions(+), 27 deletions(-) commit 0d0069d364ca8dc6f16f7710527f4f4eebf4ebbd Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 9 16:56:14 2017 -0600 Implement more generic RsvgNode methods in Rust to replace the C functions We use the new rsvg_node_get_type() throughout. rsvg-base.c | 63 ++++++----------------------------------------------- rsvg-cairo-draw.c | 12 +++++----- rsvg-filter.c | 8 +++---- rsvg-paint-server.c | 4 ++-- rsvg-private.h | 18 ++++++++++++++- rsvg-shapes.c | 2 +- rsvg-structure.c | 2 +- rsvg-text.c | 4 ++-- rust/src/lib.rs | 3 +++ rust/src/node.rs | 36 ++++++++++++++++++++++++++++-- 10 files changed, 77 insertions(+), 75 deletions(-) commit a7ae2be3ee40a9560f1ad571a65a7c608a3f9726 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 9 15:42:46 2017 -0600 The C-side representation of Nodes is a Box<Rc<Node>> A refcounted node, in the heap. Just like a GObject. The rest of the code doesn't compile yet; this just fixes cnode.rs and node.rs to hopefully their semi-final versions. rust/src/cnode.rs | 38 +++++++++++++++++------------------ rust/src/node.rs | 58 +++++++++++++++++++++++++---------------------------- rust/src/pattern.rs | 2 +- rust/src/shapes.rs | 4 ++-- 4 files changed, 48 insertions(+), 54 deletions(-) commit df6eb69fe45f6d8dfe5fa04ae583aa9603276edc Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jan 26 13:11:14 2017 -0600 cnode.rs: New stub for having a node implemented in C, accessible from Rust node.rs: The node_impl needs to be a Box<NodeTrait>, as the actual implementation will live in the heap: can't have a lifetime specifier there. We also have a new rsvg_rust_cnode_new() to create nodes from C and wrap the C structures that will actually implement them. rust/src/cnode.rs | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ rust/src/lib.rs | 9 +++++++ rust/src/node.rs | 67 ++++++++++++++++++++++++++---------------------- rust/src/shapes.rs | 4 +-- 4 files changed, 122 insertions(+), 32 deletions(-) commit 08748372d923de65ab6df0c2940ecdc81fae5433 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Dec 2 10:00:11 2016 -0600 node.rs: Start implementing the basic Node struct in Rust rsvg-private.h | 1 + rust/src/drawing_ctx.rs | 5 +- rust/src/gradient.rs | 2 +- rust/src/lib.rs | 4 ++ rust/src/node.rs | 147 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 155 insertions(+), 4 deletions(-) commit 190cd386c5572f93abede09500b763e59b530b4a Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jan 24 21:27:49 2017 -0600 New function rsvg_node_draw() just to call the vmethod rsvg-base.c | 6 ++++++ rsvg-private.h | 3 +++ rsvg-structure.c | 2 +- 3 files changed, 10 insertions(+), 1 deletion(-) commit 8a528b61e42fb55baf40364ffb4e9cfa2eb2a86b Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jan 24 21:24:45 2017 -0600 Rename rsvg_node_draw() to rsvg_node_draw_from_stack() The new name indicates that we are drawing from the stack of nodes-to-draw. The name rsvg_node_draw() will be used just to call the vmethod. rsvg-base.c | 4 ++-- rsvg-cairo-draw.c | 2 +- rsvg-cairo-render.c | 2 +- rsvg-marker.c | 2 +- rsvg-structure.c | 8 ++++---- rsvg-structure.h | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) commit db7ce753772df059aad2cee1853af19440d24a75 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Jan 24 21:12:05 2017 -0600 New function rsvg_node_set_atts() It will be called from the Rust code. rsvg-base.c | 8 +++++++- rsvg-private.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) commit bb4c37bfb016add32e1a90091174d5ca0e7b0fbb Author: Chun-wei Fan <fanchunwei@src.gnome.org> Date: Wed Feb 15 14:48:27 2017 +0800 Visual Studio builds: Support Visual Studio 2017 Update the autotools scripts so that we can support Visual Studio 2017 by copying the 2013 projects and update items as necessary to produce the 2017 projects Note that the toolset version string format changed for Visual Studio 2017, so allow one to use a custom toolset version string, otherwise a default toolset version string string will be generated as it was before. Note also that Visual Studio 2017 aims to be compatible with Visual Studio 2015 on the CRT level, so it should be possible to use 2017-built binaries with 2015-built binaries. build/Makefile-newvs.am | 14 ++++++++++++-- build/win32/Makefile.am | 2 +- build/win32/vs12/Makefile.am | 1 + build/win32/vs15/Makefile.am | 28 ++++++++++++++++++++++++++++ configure.ac | 8 ++++++++ 5 files changed, 50 insertions(+), 3 deletions(-) commit b591609e05849f43448b0b4e653c4edbccb9e11c Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Feb 9 10:34:53 2017 -0600 gradient.rs, pattern.rs: Do the fallbacks with a macro for less verbosity Instead of a bunch of if self.foo.is_none () { self.foo = Some (default_value); } for defaults, or instead of if self.foo.is_none () { self.foo = fallback.foo; } for fallbacks, we now have a macro that can be invoked as fallback_to! (self.foo, some_value); which seems easier to read. The macro is duplicated for both gradient.rs and pattern.rs, but we will refactor those two files into a single thing anyway. rust/src/gradient.rs | 76 +++++++++++++++++++++++++++++++++------------------- rust/src/pattern.rs | 67 +++++++++++++++++++++++++++------------------ 2 files changed, 90 insertions(+), 53 deletions(-) commit 11d530b57a929ca948489d0984ab0c617aa446b3 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 13:58:49 2017 -0600 Test pservers-pattern-09-f.svg from the official test suite I believe the official reference image is wrong. The test SVG says that both cases in the file should render the fallback color (green), and that is indeed what we do. However, the official reference image only renders the first case in green, and doesn't render the second case at all. .../reftests/svg1.1/pservers-pattern-09-f-ref.png | Bin 0 -> 5840 bytes .../reftests/svg1.1/pservers-pattern-09-f.svg | 70 +++++++++++++++++++++ 2 files changed, 70 insertions(+) commit 8a81a5aa8af4ec0e799d0359ae121959f41863b2 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 13:50:07 2017 -0600 More test files for patterns .../reftests/svg1.1/pservers-pattern-06-f-ref.png | Bin 0 -> 6103 bytes .../reftests/svg1.1/pservers-pattern-06-f.svg | 65 ++++++++++++++++++++ .../reftests/svg1.1/pservers-pattern-07-f-ref.png | Bin 0 -> 7651 bytes .../reftests/svg1.1/pservers-pattern-07-f.svg | 65 ++++++++++++++++++++ .../reftests/svg1.1/pservers-pattern-08-f-ref.png | Bin 0 -> 7654 bytes .../reftests/svg1.1/pservers-pattern-08-f.svg | 66 +++++++++++++++++++++ 6 files changed, 196 insertions(+) commit 0da1da04567336bbf2c76afc754b32e474db3f89 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 13:47:47 2017 -0600 Oops, actually allow recursive fallbacks for patterns and gradients. Include a new test file for this in patterns. rust/src/gradient.rs | 4 +- rust/src/pattern.rs | 4 +- .../reftests/svg1.1/pservers-pattern-05-f-ref.png | Bin 0 -> 7148 bytes .../reftests/svg1.1/pservers-pattern-05-f.svg | 64 +++++++++++++++++++++ 4 files changed, 66 insertions(+), 6 deletions(-) commit 5936677f710adb54618c79aa7a8bd45cca9ec2e3 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 13:27:18 2017 -0600 Add more test files for patterns .../reftests/svg1.1/pservers-pattern-04-f-ref.png | Bin 0 -> 6160 bytes .../reftests/svg1.1/pservers-pattern-04-f.svg | 70 +++++++++++++++++++++ 2 files changed, 70 insertions(+) commit 5804c73d0e7ef249a3c5e7c32947b565d7eba036 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 12:50:21 2017 -0600 Use the alternate solid color if a pattern cannot be acquired This fixes the last case in pservers-pattern-03-f.svg, which has a fill with an invalid URI and an alternate color for the fill. rsvg-cairo-draw.c | 21 +++-- .../reftests/svg1.1/pservers-pattern-03-f-ref.png | Bin 0 -> 6074 bytes .../reftests/svg1.1/pservers-pattern-03-f.svg | 91 +++++++++++++++++++++ 3 files changed, 105 insertions(+), 7 deletions(-) commit 16ae767a8c43bb35d180923c5a3caad73859e04d Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 12:38:42 2017 -0600 Allow pattern specifications to have a fallback color, per the spec See here: https://www.w3.org/TR/SVG/painting.html#SpecifyingPaint A paint specification can be a color, or "<funciri> [somecolor]". If the optional color is specified, it will be used in case the paint server specified by the IRI is not valid (not found, doesn't have enough parameters, or somehow doesn't manage to paint anything). rsvg-cairo-draw.c | 105 ++++++++++++++++++++++++++++++++-------------------- rsvg-paint-server.c | 63 ++++++++++++++++++++++++------- rsvg-paint-server.h | 17 ++++++--- rust/src/pattern.rs | 17 ++++++--- 4 files changed, 137 insertions(+), 65 deletions(-) commit 0eb00115efa034c1dfd1f920bcfa76b985b6f9ff Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 11:34:57 2017 -0600 rsvg_get_url_string(): Add argument to return the rest of the string after the IRI Also, move rsvg_get_url_string() to a more reasonable place than rsvg-mask.c (?). rsvg-base.c | 26 ++++++++++++++++++++++++++ rsvg-mask.c | 17 ----------------- rsvg-paint-server.c | 2 +- rsvg-private.h | 2 +- rsvg-styles.c | 18 +++++++++--------- 5 files changed, 37 insertions(+), 28 deletions(-) commit b4dfdddd34776b514d298886a67b776243a51ecb Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 09:25:19 2017 -0600 Add two tests of SVG patterns .../reftests/svg1.1/pservers-pattern-01-b-ref.png | Bin 0 -> 20788 bytes .../reftests/svg1.1/pservers-pattern-01-b.svg | 108 +++++++++++++++++++++ .../reftests/svg1.1/pservers-pattern-02-f-ref.png | Bin 0 -> 35135 bytes .../reftests/svg1.1/pservers-pattern-02-f.svg | 61 ++++++++++++ 4 files changed, 169 insertions(+) commit 198103a59c208a1562e101d89d90e7068d0018dd Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 8 08:22:38 2017 -0600 pattern.rs: New file; resolution of pattern fallbacks is now done in Rust rsvg-cairo-draw.c | 178 +++++++++--------------------------------------- rsvg-cairo-draw.h | 2 + rsvg-paint-server.c | 140 +++++++++---------------------------- rsvg-paint-server.h | 40 ++++++++++- rust/Cargo.toml | 2 + rust/src/drawing_ctx.rs | 32 +++++++++ rust/src/lib.rs | 7 ++ rust/src/pattern.rs | 178 +++++++++++++++++++++++++++++++++++++----------- 8 files changed, 286 insertions(+), 293 deletions(-) commit e4a637ae9120217b7750b7e15dc55f57261669ad Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 7 16:25:19 2017 -0600 Oops, update Cargo.lock rust/Cargo.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit b6fda463b2a95611d069bfa649cf9afae7c8e1db Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 7 16:21:22 2017 -0600 marker.rs: Remove unused mut rust/src/marker.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2272e80ceb6890a5e705289a85d0b764e7cb2e18 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 7 14:59:45 2017 -0600 Remove unused prototypes rsvg-paint-server.h | 6 ------ 1 file changed, 6 deletions(-) commit 6964d9c4aa2df03cbb174adde6a8e442b662f435 Author: Federico Mena Quintero <federico@gnome.org> Date: Tue Feb 7 14:22:59 2017 -0600 Cargo.toml: oops, don't point to files in my homedir... Right now we depend on a few unmerged features to cairo-rs, hence the link to my fork cairo-rs on Github. rust/Cargo.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit bf7c14c34a680cf6b8e96ca547e02b5977063ed2 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 22:46:47 2017 -0600 aspect_ratio.rs: Add test for parsing "none" rust/src/aspect_ratio.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 5432ad4ec6501737db969a1d894bfe151817591a Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 22:26:31 2017 -0600 AspectRatio: make to_u32() and from_u32() methods of AspectRatio rust/src/aspect_ratio.rs | 146 +++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 73 deletions(-) commit 728466f88ce7fe27e357d528ee4c4d07cd0682bb Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 21:53:05 2017 -0600 pattern.rs: Beginning of the Pattern code in Rust rust/src/pattern.rs | 328 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 328 insertions(+) commit d9f178fb710d44d49fa1fed8804857074e2a0d28 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 21:59:04 2017 -0600 Fix: cargo.lock rust/Cargo.lock | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) commit 1f2af214e50162f044e33b1f29de02ec954d0e13 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 21:52:38 2017 -0600 Update Cargo.toml and Cargo.lock rust/Cargo.lock | 29 +++++++++++++++++------------ rust/Cargo.toml | 6 ++++-- 2 files changed, 21 insertions(+), 14 deletions(-) commit fbfdc927ad81705f61cd06719fc60ebf84c29399 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 21:52:14 2017 -0600 util.rs: Move clone_fallback_name() here We'll use it in the patterns code as well rust/src/gradient.rs | 10 ++-------- rust/src/util.rs | 12 +++++++++++- 2 files changed, 13 insertions(+), 9 deletions(-) commit 4e8b8b848678d756d200448825af4c111e85a24b Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jan 27 18:37:14 2017 -0600 draw_ctx.rs: New functions to get/set the current state's affine Eventually we'll have a big-hammer function to get the whole current state and smaller functions to operate on *that*. But for now, this solves our need to have access to the current affine in pattern.rs. rsvg-base.c | 13 +++++++++++++ rsvg-private.h | 6 ++++++ rust/src/drawing_ctx.rs | 23 +++++++++++++++++++---- 3 files changed, 38 insertions(+), 4 deletions(-) commit c9f2b2965951f08171be89ae6c12c8d4939236e0 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jan 27 18:43:42 2017 -0600 util.rs: Move double_equals() and the renamed DBL_EPSILON here rust/src/marker.rs | 10 +++------- rust/src/util.rs | 6 ++++++ 2 files changed, 9 insertions(+), 7 deletions(-) commit 6417cc6df3d52265db7506ceb341a45cdc9dd8ed Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jan 27 15:17:15 2017 -0600 viewbox.rs: Rust equivalent to RsvgViewBox rsvg-private.h | 1 + rust/src/lib.rs | 6 ++++++ rust/src/viewbox.rs | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+) commit 6dde4f80ed4f99484bb0949b2daa59e334b2e311 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 21:18:26 2017 -0600 Use rsvg_aspect_ratio_compute() from Rust throughout; remove rsvg_preserve_aspect_ratio() rsvg-cairo-draw.c | 7 ++++--- rsvg-css.h | 10 ++++++++++ rsvg-image.c | 47 ++++------------------------------------------- rsvg-image.h | 3 --- rsvg-marker.c | 8 ++++---- rsvg-structure.c | 15 ++++++++------- rust/src/aspect_ratio.rs | 16 ++++++++++++++++ rust/src/lib.rs | 3 ++- 8 files changed, 48 insertions(+), 61 deletions(-) commit 8aaaf38ee194a76a479cc4ce9699e9a74ff243b7 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 21:06:51 2017 -0600 aspect_ratio.rs: New method AspectRatio.compute() to do the actual fitting rust/src/aspect_ratio.rs | 93 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) commit 26c2dc2be6b28294100b215ba53438ce823c80bf Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 14:54:46 2017 -0600 Removed rsvg_css_parse_aspect_ratio(); use the Rust rsvg_aspect_ratio_parse() instead rsvg-css.c | 44 -------------------------------------------- rsvg-css.h | 4 ++++ rsvg-image.c | 4 ++-- rsvg-image.h | 4 ++-- rsvg-marker.c | 4 ++-- rsvg-paint-server.c | 2 +- rsvg-paint-server.h | 2 +- rsvg-structure.c | 4 ++-- rsvg-structure.h | 4 ++-- 9 files changed, 16 insertions(+), 56 deletions(-) commit 0cde6ad587116931d6039936b42e893a9322d5b1 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 14:33:17 2017 -0600 aspect_ratio.rs: New function for the C code, rsvg_aspect_ratio_parse() rust/src/aspect_ratio.rs | 29 +++++++++++++++++++++++++++++ rust/src/lib.rs | 1 + 2 files changed, 30 insertions(+) commit bb55551f632ae1cee5fbb44e8ed8509d703a3fc8 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 14:18:00 2017 -0600 Make aspect_ratio.rs's types public rust/src/aspect_ratio.rs | 4 ++-- rust/src/lib.rs | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) commit fd24f04c061412325ed4c0d13dff675090baf75b Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 14:12:01 2017 -0600 aspect_ratio.rs: Initial docs rust/src/aspect_ratio.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 6c02c64d0a1597ea99d20c1292c4ff9755e15c59 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 13:55:36 2017 -0600 aspect_ratio.rs: New module to parse preserveAspectRatio attributes Per https://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute rust/Cargo.lock | 55 ++++++--- rust/Cargo.toml | 1 + rust/src/aspect_ratio.rs | 309 +++++++++++++++++++++++++++++++++++++++++++++++ rust/src/lib.rs | 5 + 4 files changed, 350 insertions(+), 20 deletions(-) commit 41a847e21826bdc839d42956d5ab5a22cab6e32f Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Feb 1 09:41:20 2017 -0600 Add RSVG_ASPECT_RATIO_DEFER even if it is not supported right now This is for the "defer" flag used in preserveAspectRatio values for image elements. rsvg-css.c | 2 ++ rsvg-css.h | 3 ++- rsvg-image.c | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) commit 11d99a03757473c6bd10ca6837cf027975131d45 Author: Massimo <sixtysix@inwind.it> Date: Fri Jan 27 09:22:02 2017 -0600 marker.rs: New tests for angle bisection, and fix larger-than-half-turn angles https://bugzilla.gnome.org/show_bug.cgi?id=776297#c3 rust/src/marker.rs | 109 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 102 insertions(+), 7 deletions(-) commit 968e4e86c6958d7f7f7f0434a383c023dedba5d4 Author: Federico Mena Quintero <federico@gnome.org> Date: Fri Jan 27 09:10:37 2017 -0600 marker.rs: Factor out function to bisect the incoming/outgoing angles We'll use a separate test for this, as it is still causing trouble. rust/src/marker.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 3449c93c7fbb696d4217fd74cfbe68cc43f4353f Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jan 26 20:28:13 2017 -0600 pattern_apply_fallback(): Don't access node->children->len directly Use a helper function to see if a node has any children at all. rsvg-paint-server.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) commit 1e5a51cf4f58f6d297123c53339b3f9a89a6a869 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jan 26 20:14:51 2017 -0600 rsvg-filter.c: Iterate the children of nodes with rsvg_node_foreach_child() rsvg-filter.c | 177 +++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 112 insertions(+), 65 deletions(-) commit cfc4a514f3a0a548ea200de312f62b809db9c9e4 Author: Federico Mena Quintero <federico@gnome.org> Date: Thu Jan 26 19:38:13 2017 -0600 rsvg-filter: Remove the 'upself' nonsense Rename those variables for their actual purpose rsvg-filter.c | 200 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 100 insertions(+), 100 deletions(-) commit b795df9bc6d483427846fd4829f7bd0e0ac641d7 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jan 11 17:53:24 2017 -0600 Add Cargo.lock to git Per https://blog.ometer.com/2017/01/10/dear-package-managers-dependency-resolution-results-should-be-in-version-control/ Okay, this is not everything we should do, but it's a start. rust/Cargo.lock | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) commit 45d855f82ba6ddaa534f42ee22783a90955bb160 Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jan 11 15:33:31 2017 -0600 bgo#777155 - Ignore patterns that have close-to-zero dimensions A fuzzed file yielded a pattern that had (0, 0) for a pattern's width and height. We try to invert a scaling matrix based on those dimensions; this would fail for such a pattern. Now we ignore patterns that have unspecified dimensions, or that are very close to zero. https://bugzilla.gnome.org/show_bug.cgi?id=777155 rsvg-cairo-draw.c | 13 ++++-- .../render-crash/777155-zero-sized-pattern.svg | 50 ++++++++++++++++++++++ 2 files changed, 59 insertions(+), 4 deletions(-) commit 3a3becd2045ed6b5e264bdfbd7c53c799e5abe7c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jan 11 15:50:26 2017 -0600 tests/render-crash: New test for things that crash the rendering code Sometimes we don't have rendering bugs in the generated image, but SVG files that just crash the rendering code. Add a test for this. If you put a SVG under tests/fixtures/render-crash, that file is expected to render and *not* crash. The actual rendered image is ignored. tests/Makefile.am | 6 +++++ tests/render-crash.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) commit ec3353e89a0dc0063c74c61483ed894cc96341ae Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jan 4 15:00:00 2017 -0600 Use a hard-coded font file to render test images, for predictable font rendering If we depend on whatever Fontconfig finds on the system (or the user's configuration, or any number of variables not under our control), "make distcheck" will certainly fail. Now we ship a specific font file (LiberationSans-Regular.ttf) that is used only for the reftests. We use that in addition to explicitly setting font rendering options for tests. Also, re-normalize all the reference images to this new font. Thanks to Vlad Vukicevic for the idea to use a hard-coded font file, and to Christian Hergert for the Fontconfig / Pango incantations. Makefile.am | 1 + rsvg-cairo-draw.c | 37 +++++++++++++++++++-- rsvg-cairo-render.c | 6 ++++ rsvg-cairo-render.h | 3 ++ tests/Makefile.am | 1 + tests/fixtures/reftests/bugs/340047-ref.png | Bin 4707 -> 4779 bytes tests/fixtures/reftests/bugs/749415-ref.png | Bin 21402 -> 21862 bytes tests/fixtures/reftests/bugs/760180-ref.png | Bin 8698 -> 8640 bytes .../reftests/svg1.1/filters-color-02-b-ref.png | Bin 6066 -> 6231 bytes .../reftests/svg1.1/filters-composite-02-b-ref.png | Bin 15899 -> 16647 bytes .../reftests/svg1.1/painting-marker-01-f-ref.png | Bin 8581 -> 8454 bytes .../reftests/svg1.1/painting-marker-02-f-ref.png | Bin 9237 -> 9172 bytes .../reftests/svg1.1/painting-marker-03-f-ref.png | Bin 28067 -> 29006 bytes .../reftests/svg1.1/painting-marker-04-f-ref.png | Bin 26711 -> 27598 bytes .../reftests/svg1.1/painting-marker-06-f-ref.png | Bin 8698 -> 8640 bytes .../reftests/svg1.1/painting-marker-07-f-ref.png | Bin 5001 -> 5158 bytes .../svg1.1/painting-marker-properties-01-f-ref.png | Bin 6097 -> 6175 bytes .../reftests/svg1.1/paths-data-01-t-ref.png | Bin 25377 -> 25436 bytes .../reftests/svg1.1/paths-data-02-t-ref.png | Bin 32835 -> 32917 bytes .../reftests/svg1.1/paths-data-03-f-ref.png | Bin 30742 -> 30956 bytes .../reftests/svg1.1/paths-data-04-t-ref.png | Bin 17951 -> 18160 bytes .../reftests/svg1.1/paths-data-05-t-ref.png | Bin 15946 -> 16048 bytes .../reftests/svg1.1/paths-data-06-t-ref.png | Bin 7143 -> 7255 bytes .../reftests/svg1.1/paths-data-07-t-ref.png | Bin 6473 -> 6646 bytes .../reftests/svg1.1/paths-data-08-t-ref.png | Bin 18934 -> 19314 bytes .../reftests/svg1.1/paths-data-09-t-ref.png | Bin 17284 -> 17595 bytes .../reftests/svg1.1/paths-data-10-t-ref.png | Bin 20633 -> 20995 bytes .../reftests/svg1.1/paths-data-12-t-ref.png | Bin 9603 -> 9704 bytes .../reftests/svg1.1/paths-data-13-t-ref.png | Bin 4400 -> 4526 bytes .../reftests/svg1.1/paths-data-14-t-ref.png | Bin 12393 -> 12525 bytes .../reftests/svg1.1/paths-data-15-t-ref.png | Bin 5862 -> 6001 bytes .../reftests/svg1.1/paths-data-16-t-ref.png | Bin 7651 -> 7879 bytes .../reftests/svg1.1/paths-data-17-f-ref.png | Bin 4287 -> 4464 bytes .../reftests/svg1.1/paths-data-18-f-ref.png | Bin 4644 -> 4781 bytes .../reftests/svg1.1/paths-data-19-f-ref.png | Bin 23376 -> 23515 bytes .../reftests/svg1.1/paths-data-20-f-ref.png | Bin 8996 -> 9144 bytes .../reftests/svg1.1/pservers-grad-01-b-ref.png | Bin 9241 -> 9758 bytes .../reftests/svg1.1/pservers-grad-02-b-ref.png | Bin 22010 -> 22622 bytes .../reftests/svg1.1/pservers-grad-03-b-ref.png | Bin 9534 -> 9805 bytes .../reftests/svg1.1/pservers-grad-04-b-ref.png | Bin 23348 -> 24018 bytes .../reftests/svg1.1/pservers-grad-05-b-ref.png | Bin 63786 -> 65037 bytes .../reftests/svg1.1/pservers-grad-06-b-ref.png | Bin 20711 -> 21260 bytes .../reftests/svg1.1/pservers-grad-07-b-ref.png | Bin 10707 -> 11051 bytes .../reftests/svg1.1/pservers-grad-08-b-ref.png | Bin 37401 -> 38874 bytes .../reftests/svg1.1/pservers-grad-09-b-ref.png | Bin 5885 -> 6207 bytes .../reftests/svg1.1/pservers-grad-10-b-ref.png | Bin 8955 -> 9229 bytes .../reftests/svg1.1/pservers-grad-11-b-ref.png | Bin 56219 -> 56357 bytes .../reftests/svg1.1/pservers-grad-12-b-ref.png | Bin 23336 -> 23747 bytes .../reftests/svg1.1/pservers-grad-13-b-ref.png | Bin 93256 -> 93434 bytes .../reftests/svg1.1/pservers-grad-14-b-ref.png | Bin 24421 -> 24537 bytes .../reftests/svg1.1/pservers-grad-15-b-ref.png | Bin 10028 -> 10180 bytes .../reftests/svg1.1/pservers-grad-16-b-ref.png | Bin 4619 -> 4738 bytes .../reftests/svg1.1/pservers-grad-18-b-ref.png | Bin 4613 -> 4733 bytes .../reftests/svg1.1/pservers-grad-21-b-ref.png | Bin 11389 -> 11549 bytes .../reftests/svg1.1/pservers-grad-22-b-ref.png | Bin 7414 -> 7605 bytes .../reftests/svg1.1/pservers-grad-23-f-ref.png | Bin 6130 -> 6129 bytes .../reftests/svg1.1/pservers-grad-24-f-ref.png | Bin 7252 -> 7313 bytes .../svg1.1/pservers-grad-stops-01-f-ref.png | Bin 6353 -> 6356 bytes tests/resources/LiberationSans-Regular.ttf | Bin 0 -> 139764 bytes 59 files changed, 46 insertions(+), 2 deletions(-) commit d55767e71bc87de3304e386665011c4c77881c0c Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jan 4 14:08:26 2017 -0600 Use a separate function to set PangoContext font options for testing rsvg-cairo-draw.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) commit 9cf196542f8fe58580a5566df2bba9406824a78a Author: Federico Mena Quintero <federico@gnome.org> Date: Wed Jan 4 15:04:20 2017 -0600 Post-release version bump to 2.41.1 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)