Well done! Thank Armin, this is really great stuff.

On Mon, Dec 19, 2011 at 1:07 PM, Armin Le Grand <armin.le.gr...@me.com>wrote:

>        Hi *,
>
> as mentioned in [1] I have now finished and reintegrated the first version
> of the Svg replacement from the branch [2] to trunk after uptating and
> building Mac and Win versions. It is stable and works well and is also
> pretty complete from an Svg point of view. Main features/differences to the
> version which was in OOo3.4beta are:
>
> - IP clearance: This change allowed to remove six Gpl/Lgpl libs, namely
> librsvg, libcroco, libgsf, gdk-pixbuf, glib, and pango gettext. These were
> used as an external renderer. The new Svg uses an internal interpreter in a
> new library and some services.
>
> - File Format: In Odf, Svg is now embedded to the Pictures folder as one
> would expect and can be easily extracted. There is also a Png file written
> there as replacement image. The draw:frame is now multi-image capable (as
> the spec allows). In the case of a Svg it writes a good quality Png and the
> original Svg as draw:image elements. Since older (and other) office
> versions are only capable of loading a single (and thus the first) image,
> the Png is written first. This allows file exchange with other and older
> offices. At load time, multi-image support will choose the best quality
> graphic available for further work, e.g. preferring vector format over
> pixel format, pixel format with transparency over non-transparent and loss
> less formats over those with losing info (you get the idea). Other Odf
> implementations (e.g. a viewer) may just use the pixel graphic available.
> Multi-image support is independent from Svg in principle and will work with
> all image file formats. This is implemented for the Drawinglayer graphic
> object (used in Draw/Impress/Calc) and the Writer graphic object (used in
> Writer).
>
> - Interpretation: Svg is no longer interpreted each time it needs to be
> rendered (as by an extrenal renderer), but only once transformed to a
> sequence of primitives. That sequence is then used for all outputs,
> transformed to the graphic object form and viewport (resolution). The
> sequence itself is completely view-independent. Internally, it is reused
> and thus it makes no difference if you have your Svg graphic added once or
> multiple times to your document. The same is true for the replacement Png
> image used. Both, the sequence of primitives and the replacement image are
> created using new Uno Api services. One is capable of converting an
> io::XInputStream to a sequence of primitives, the other is able to convert
> every sequence of primitives to a rendering::XBitmap with given Dpi and
> discrete sizes (pixels, with automatic resolution reduction to a given
> maximum square pixel count). This will be useful for other purposes, too,
> since it creates a fully alpha-capable representation of anything in
> primitive format to use as e.g. sprite.
>
> - Quality: For all graphic processing the created vector graphic in form
> of sequence of primitives is used. This means that You will get best
> quality in all zoom situations and all resolutions. This is also true for
> all exports, e.g. printing or Pdf export which also use the vector format.
> With an external renderer, it is unavoidable to use bitmaps with discrete
> solution here, not only looking bad in high resolutions, but also needing
> more space in most cases. There is one caveat since not all paths here
> already use primitives; some will use the internal MetaFile format
> in-between (One more reason for more reworks to primitive usages in the
> future).
>
> - Completeness: I implemented most Svg features from Svg1.1, but not yet
> using animations or interactions (but possible in the future due to an own
> interpreter, impossible with an extern Svg renderer). It supports all
> geometric Svg forms. It supports Gradients (using a new primitive for this
> which can be reused when we want to add Svg gradients to SdrObjects one
> day), these have a resolution-dependent low-level format to not waste
> runtime on low resolutions. It supports Masks, clipPath, Markers, linked
> content, embedded graphics and Svg (intern, extern, base64), Use nodes,
> Text, Text on curve and patterns. It does not yet support filters, color
> profiles, embedded scripts, interactions and linking. These can be added
> when needed, most of them will need to implement new basic primitives (e.g.
> filtering) which would be useful anyways.
>
> - Side effects: I had to fix cropping (unified with new primitive) which
> works now also for mirrored graphics (vecer worked) and quite some other
> stuff. We are prepared for Svg gradients as possible future feature (we can
> already render them now). You can work with an added Svg as with an graphic
> object; crop it, Break it (To SdrObjects, limited to the transfer over the
> old MetaFile format, though). You can convert an inserted Tux to 3D, You
> can bend the Svg in vector quality in Draw. It is possible to directly
> export the original Svg again by selecting the object and using 'Save as
> Picture...'. You can add Text, Border, fill style, pretty much the same as
> most other graphic objects. You can add shadow which casts shadow as
> expected (also never possible with an external renderer).
>
> - Caveats: This is a bigger change, but most stuff is isolated in the two
> mentioned services. There will be errors (I'm too long a programmer to deny
> that :-)), but I tried to be as careful as possible. To find them, Your
> help will be needed. Please feel free to play around with any Svg You can
> find and report problems early.
>
> [1] http://mail-archives.apache.**org/mod_mbox/incubator-ooo-**
> dev/201112.mbox/%3Cjcamku$fep$**1...@dough.gmane.org%3E<http://mail-archives.apache.org/mod_mbox/incubator-ooo-dev/201112.mbox/%3Cjcamku$fep$1...@dough.gmane.org%3E>
> [2] https://svn.apache.org/repos/**asf/incubator/ooo/branches/**
> alg/svgreplacement<https://svn.apache.org/repos/asf/incubator/ooo/branches/alg/svgreplacement>
>
> Sincerely,
>        Armin
> --
> ALG
>
>

Reply via email to