1. 17 Aug, 2019 1 commit
  2. 13 Aug, 2019 1 commit
  3. 30 Jul, 2019 1 commit
  4. 29 Jul, 2019 2 commits
  5. 01 Jul, 2019 1 commit
    • Federico Mena Quintero's avatar
      (#481): Length::parse() - don't expect_exhausted() · b53df7d8
      Federico Mena Quintero authored
      This makes me somewhat concerned, since it means that somewhere in the
      callers we should probably do expect_exhausted(), but we aren't doing
      it currently.
      The specific problem here is that in an SVG with
        <tspan x="2209 2903 3394 3792 4190 4626 5117" y="18611" id="tspan1053">Current</tspan>
      i.e. a tspan with multiple positions in the "x" attribute, the whole
      attribute yields a parse error because there is extra stuff after the
      initial 2209.
      While the text-related elements should realy parse a list of Length
      for their x/y/dx/dy attributes, we'll use this little hack for now:
      let there be extra data after a length value, so at least the first
      value goes through.
      Fixes #481
  6. 04 Jun, 2019 1 commit
  7. 31 May, 2019 1 commit
  8. 24 May, 2019 1 commit
  9. 27 Mar, 2019 1 commit
  10. 07 Mar, 2019 1 commit
    • Federico Mena Quintero's avatar
      (#433): Use the old logic when measuring geometries · d0b0da25
      Federico Mena Quintero authored
      The old logic of passing magic viewports/vboxes when measuring
      geometries is incompatible with the new logic of doing everything with
      respect to the caller's viewport.
      So, to keep the old-style geometries working, this makes *that* a
      special case.  DrawingCtx::new() now takes a "measuring" boolean
      argument, and NodeSvg::draw() checks it when setting up its
      This looks like a hack, but I want to think of it as
      behavior-preserving code that just hasn't been refactored yet.
      A bunch of test files jiggled a bit as a result of the new rendering
      logic; I verified them by hand and regenerated them.
      Fixes GNOME/librsvg#433
  11. 08 Jan, 2019 1 commit
  12. 02 Jan, 2019 1 commit
  13. 29 Dec, 2018 1 commit
  14. 28 Dec, 2018 1 commit
    • Federico Mena Quintero's avatar
      Move failing test to ignore-filters-displace-01-f.svg · 8f7d4f94
      Federico Mena Quintero authored
      This test fails because its rendered text is offset a bit from what it
      used to be.  This happens because xml:space normalization is a bit
      funky in this branch.
      "Funky" means that XML space handling is underspecified in the SVG 1.1
      spec.  The 2.0 spec makes it more complicated; not idea if it is
      I'll disable this test for now and take care of space handling later.
      I'd rather have the refactored text code instead of the old recursive
  15. 14 Dec, 2018 1 commit
  16. 12 Dec, 2018 3 commits
  17. 28 Nov, 2018 1 commit
  18. 22 Nov, 2018 1 commit
  19. 18 Nov, 2018 2 commits
    • Federico Mena Quintero's avatar
      rsvg_decode_data_uri(): Restore ability to pass a null out_mime_type · aeb168ae
      Federico Mena Quintero authored
      Merge request !153 was due to a bug when calling
      rsvg_decode_data_uri() with out_mime_type=NULL.  This was allowed in
      the pre-rustification version of that function.  This commit restores
      that behavior, and adds a test for
        <xi:include href="data:text/xml,&lt;xml...">
      since the tests were not hitting that code path, which contained the crash.
    • Federico Mena Quintero's avatar
      Port data: url parsing to Rust · d9464d20
      Federico Mena Quintero authored
      This uses the data-url crate.  One change in behavior is that data-url
      is strict about data: URLs having a MIME-type chunk in them.  This
      will be an apparent regression from issue #152, which requested that
      image data be sniffed if a data: URL doesn't have a MIME-type.
      However, https://fetch.spec.whatwg.org/#data-urls indeed indicates
      that data: URLs without a MIME-type are invalid.
      This removes the test files for issue #152, since they are expected to
      fail now.
  20. 17 Nov, 2018 2 commits
  21. 16 Nov, 2018 1 commit
  22. 06 Nov, 2018 1 commit
  23. 05 Nov, 2018 1 commit
    • Federico Mena Quintero's avatar
      (#372): Fix mis-rendering in small arc segments · e47dd173
      Federico Mena Quintero authored
      The code was checking for division by 0.0 a bit too aggressively.  For
      small radiuses (say, 0.25 units), this gives intermediate results that
      are perfectly (and exactly!) representable within f64, but the code
      was checking for 0 too coarsely.
      Regenerated the test reference files for Adwaita that got minor
      rendering changes because of this.
  24. 24 Oct, 2018 1 commit
    • Federico Mena Quintero's avatar
      (#363): Fix whitespace removal around <tspan> elements · 2b31e7ec
      Federico Mena Quintero authored
      When there is something like
        <text>hello <tspan>world</tspan></text>
      librsvg would trim away the space after "hello", so the rendered text
      looked like "helloworld".
      Now we only trim the ends of NodeChars elements if they don't have an
      adjacent sibling; in the example above, the tspan is the sibling to
      the right, and so the rightmost space in the "hello " NodeChars
      doesn't get trimmed.
      This makes the rendering in 340047.svg match Firefox; regenerated the
      test reference file for that, and made it always use a sans-serif
      Fixes #363
  25. 09 Oct, 2018 1 commit
  26. 02 Oct, 2018 1 commit
  27. 01 Oct, 2018 1 commit
  28. 27 Sep, 2018 2 commits
    • Federico Mena Quintero's avatar
      (#349): Don't panic when loading an external image that is bigger than Cairo's limits · 4386196b
      Federico Mena Quintero authored
      We were failing to return a GError, and the Rust code panicked in
      from_glib_full(error), as error = NULL then.
    • Federico Mena Quintero's avatar
      (#348): Fix incorrect font sizing · dc4f5845
      Federico Mena Quintero authored
      Pango considers the font size in a PangoFontDescription to be in
      points, and it converts to pixels by using the resolution set in
      However, we were passing our plainly normalized Length values to
      pango::FontDescription::set_size(), i.e. we were passing them in
      pixels, not points.  Thus, Pango was applying extra scaling, and
      messing up the final size.
      This commit hardcodes a value of 72.0 for Pango's resolution.  This is
      so that it will not apply any extra scaling on top of our
      computations.  We are doing the inches-to-pixels conversion, instead
      of letting Pango do it.
      This commit adds 348-font-size-48dpi.svg which two pairs of squares
      and text elements, which should both render at the same size:  one
      pair is done in userspace pixels, and the other pair is done in
      This commit also regenerates 310-font-size-at-48dpi-ref.png - it is
      the only other file that uses absolute font sizes.
  29. 26 Sep, 2018 1 commit
  30. 25 Sep, 2018 2 commits
  31. 24 Sep, 2018 2 commits
    • Federico Mena Quintero's avatar
      (#344): Don't let a viewBox with overflowing numbers pass through · 7b440303
      Federico Mena Quintero authored
      This commit adds expect_finite_number() and finite_f32() to parsers.rs.
      Part of issue #344 is that we need to validate parsed numbers, as
      cssparser can give us back -inf or inf when it overflows.  These
      values ripple down the code and end up creating a NaN inside a
      cairo::Matrix, which makes it invalid.
      This commit introduces a CssParserExt trait to have an
      expect_finite_number() method for cssparser::Parser, and the
      corresponding, low-level finite_f32() validation function.
      Those functions return a Result<f32, ValueErrorKind>.  This commit
      makes the following return a ValueErrorKind for the error case as
      * impl Parse for f64
      * parsers::number()
      * parsers::number_optional_number()
      * parsers:;integer()
      * parsers::integer_optional_integer()
      This has implications in all the callers, since they used to expect a
      ParseError, but must now expect ValueErrorKind.
      The biggest change is in transform.rs.  For simplicity, the individual
      parsers for transform functions now have two sections:  the first
      extracts f32 from cssparser::Parser, and the second validates those
      numbers and computes the final result --- instead of doing everything
      at the same time.
    • Federico Mena Quintero's avatar
  32. 21 Sep, 2018 1 commit
    • Federico Mena Quintero's avatar
      (#341): Don't infinite-loop with cyclic pattern references · 011dca9a
      Federico Mena Quintero authored
      In each loop iteration in resolve_pattern() we drop the AcquiredNode,
      and so we can't use the implicit stack of acquired nodes to test for
      This commit introduces a NodeStack helper, which code can use to catch
      reference cycles explicitly.
      We also have new test program for files that cause infinite loops.