Written in C | ||
![]() | ||
Original author(s) Initial release before 2003; 14 years ago (2003) Stable release 1.15.4 (December 9, 2016; 2 months ago (2016-12-09)) [±] Repository cgit.freedesktop.org/cairo/ |
Cairo (stylized as cairo) is an open source programming library that provides a vector graphics-based, device-independent API for software developers. It provides primitives for two-dimensional drawing across a number of different back ends. Cairo uses hardware acceleration when available.
Contents
- Language bindings
- Toolkit bindings
- Available back ends
- Drawing model
- Example
- Notable usage
- History
- References
There is a formal proposal to standardize C++ 2D graphic API based on a mechanical transformation of Cairo.
Language bindings
A library written in one programming language may be used in another language if bindings are written; Cairo has a range of bindings for various languages including C++, C# and other CLI languages, Delphi, Factor, Haskell, Lua, Perl, PHP, Python, Ruby, Scheme, Smalltalk and several others.
Toolkit bindings
Since Cairo is only a drawing library, it can be quite useful to integrate it with a graphical user interface toolkit.
Available back-ends
Cairo supports output to a number of different back-ends, known as "surfaces" in its code. Back-ends support includes output to the X Window System, via both Xlib and XCB, Win32 GDI, OS X Quartz Compositor, the BeOS API, OS/2, OpenGL contexts (directly and via glitz), local image buffers, PNG files, PDF, PostScript, DirectFB and SVG files.
There are other back-ends in development targeting the graphics APIs OpenVG, Qt, Skia, and Microsoft's Direct2D.
Drawing model
The Cairo drawing model is somewhat unorthodox and relies on a three layer model.
Any drawing process takes place in three steps:
- First a mask is created, which includes one or more vector primitives or forms, i.e., circles, squares, TrueType fonts, bézier curves, etc.
- Then source must be defined, which may be a color, a color gradient, a bitmap or some vector graphics, and from the painted parts of this source a die cut is made with the help of the above defined mask.
- Finally the result is transferred to the destination or surface, which is provided by the back-end for the output.
This constitutes a fundamentally different approach from Scalable Vector Graphics.
Example
Quite complex "Hello world"-graphics can be drawn with the help of Cairo with only a few lines of source code:
Notable usage
Cairo is popular in the open source community for providing cross-platform support for advanced 2D drawing.
History
Keith Packard and Carl Worth founded the Cairo project for use in the X Window System. It was originally (until at least 2003) called Xr or Xr/Xc. The name was changed to emphasize the idea of a cross-platform library to access display server, not tied to the X Window System. The name Cairo derives from the original name Xr, interpreted as the Greek letters chi and rho.