https://github.com/svgpp/svgpp
C++ SVG library
https://github.com/svgpp/svgpp
Last synced: about 2 months ago
JSON representation
C++ SVG library
- Host: GitHub
- URL: https://github.com/svgpp/svgpp
- Owner: svgpp
- License: bsl-1.0
- Created: 2014-02-18T19:23:21.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2024-02-29T13:56:10.000Z (about 1 year ago)
- Last Synced: 2024-07-31T22:49:50.484Z (9 months ago)
- Language: C++
- Homepage:
- Size: 8.49 MB
- Stars: 536
- Watchers: 36
- Forks: 100
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- License: LICENSE_1_0.txt
Awesome Lists containing this project
- AwesomeCppGameDev - svgpp
README
SVG++ library 1.3.0
=======================Please visit http://svgpp.org/ for description, tutorial and reference.
#### About
SVG++ library can be thought of as a framework, containing parsers for various SVG syntaxes, adapters that simplify
handling of parsed data and a lot of other utilities and helpers for the most common tasks.
Take a look at [Tutorial](http://svgpp.org/lesson01.html) to get the idea about what it is.#### SVG++ features
* Is a header-only library
* Can be used with any XML parser
* Compile time configured - no virtual functions
* Minimal runtime overhead - you pay only for what you get
* Has wide range of possible uses:* Fully functional, conforming SVG viewers
* Simple in-app SVG rasterizers
* Import modules of vector editing software
* Implementing path-only input of SVG format with minimal efforts in any graphics or math software
* Requires only Boost library itself (demo, tests and sample have their own requirements)
* Compatible with C++11, but requires conforming implementation, due to heavy usage of templates
* Supports any character type (`char` and `wchar_t`). Other (Unicode from C++11) were not tested, but should be ok.#### SVG 1.1 features covered by SVG++
* Path data - parsing, simplification
* Transform list - parsing, simplification
* Color, including ICC color - parsing
* Lengths - highly configurable handling of SVG lengths, full support of all SVG length units
* Basic shapes - optional conversion to path
* Style attribute - parsing, taking in account differences in parsing presentation attributes and style properties
* Automatic marker positions calculation
* Viewport and viewbox handling#### SVG++ is NOT
* An SVG viewer or library that produces raster image from SVG
(though C++ demo app included, which renders SVG with [AGG](http://antigrain.com), GDI+ or [Skia](https://code.google.com/p/skia/) graphics library)
* Renders anything itself#### What's new
* SVG++ update 1.2.1 fixes handling text content inside `` element that is a child of `` element.
* SVG++ update 1.2 focuses on reducing compiler memory usage by allowing separation
of template heavy Boost.Spirit code to other compilation unit.#### How to Help
* *CSS Processor.* Processing CSS is outside of SVG++ scope, but it'll be nice to have some generic implementation of CSS
selectors to use at preprocessing stage.
* *SVG Filter Effects.* Some filters are already implemented in demo application but the complete solution requires more efforts.
Generic enough parts may fit in SVG++ source base. Usage of Boost.GIL may make the code more reusable.
* *Animation.* Implementation of animation in the demo application. Probably some utilities may get to SVG++.
* Try to reduce compiler memory usage by switching to some C++11 metaprogramming library (brigand?).
Evaluate upgrade to Boost.Spirit 3.0.
* Extend demo with Cairo support?
* More wrappers for XML parsers?
* Evolve demo to fully functional SVG rendering component for one of the graphic engines.
A major gap in demo's SVG implementation is text and font support. It'll be too complex to make it cross-engine, but
for the single engine chosen and probably with third-party libraries like FreeType it's pretty feasible.