World Library  
Flag as Inappropriate
Email this Article

Cairo (graphics)

 

Cairo (graphics)

Cairo (graphics)
The cairo graphics library logo.
Original author(s) Keith Packard, Carl Worth[1]
Developer(s) Carl Worth, Behdad Esfahbod
Stable release 1.14.4 (October 28, 2015 (2015-10-28))
Preview release 1.12.18 (November 7, 2014 (2014-11-07)) [2]
Written in C
Operating system Cross-platform
Type Graphics library
License GNU Lesser General Public License version 2.1 (only) or Mozilla Public License 1.1
Website .orgcairographics

Cairo (stylized as cairo) is a programming library used to provide a vector graphics-based, device-independent API for software developers. It is designed to provide primitives for 2-dimensional drawing across a number of different backends. Cairo is designed to use hardware acceleration[3] when available.

There is a formal proposal on standardizing C++ 2D graphic API based on a mechanical transformation of Cairo.[4]

Contents

  • Software architecture 1
    • Language bindings 1.1
    • Toolkit bindings 1.2
    • Available back-ends 1.3
    • Drawing model 1.4
      • Example 1.4.1
  • Notable usage 2
  • History 3
  • See also 4
  • References 5
  • External links 6

Software architecture

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++, Delphi, Factor, Haskell, Lua, Perl, PHP, Python, Ruby, Scheme, Smalltalk and several others.[5]

Toolkit bindings

Since cairo is only a drawing library, it can be quite useful to integrate it with a graphical user interface toolkit.

  • FLTK has full cairo support (through "--enable-cairo" compile switch).
  • GNUstep currently uses cairo as its primary backend on non-Windows systems.[6]
  • GTK+ has not only full support for cairo, but starting in 2005 with version 2.8, uses cairo to render the majority of its graphical control elements, and since 3.0 all rendering is done through cairo.
  • The cairo development team maintains up-to-date instructions for rendering surfaces to SDL.[7]

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[8] 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,[9] Qt,[10] Skia,[11] and Microsoft's Direct2D.[12]

Drawing model

The Cairo drawing model

The Cairo drawing model is somewhat unorthodox and relies on a three layer model.

Any drawing process takes place in three steps:

  1. First a mask is created, which includes one or more vector primitives or forms, i.e. circles, squares, TrueType fonts, bézier curves, etc.
  2. 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.
  3. 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 SVG vector graphics.

Example

SVG-picture generated by this example

Quite complex "Hello world"-graphics can be drawn with the help of cairo with only a few lines of source code:

1 #include 
 2 #include 
 3 
 4 int main(int argc, char **argv) {
 5    cairo_t *cr;
 6    cairo_surface_t *surface;
 7    cairo_pattern_t *pattern;
 8    int x,y;
 9 
10    surface = 
11      (cairo_surface_t *)cairo_svg_surface_create("Cairo_example.svg", 100.0, 100.0);
12    cr = cairo_create(surface);
13 
14    /* Draw the squares in the background */
15    for (x=0; x<10; x++)
16       for (y=0; y<10; y++)
17           cairo_rectangle(cr, x*10.0, y*10.0, 5, 5);
18 
19    pattern = cairo_pattern_create_radial(50, 50, 5, 50, 50, 50);
20    cairo_pattern_add_color_stop_rgb(pattern, 0, 0.75, 0.15, 0.99);
21    cairo_pattern_add_color_stop_rgb(pattern, 0.9, 1, 1, 1);
22 
23    cairo_set_source(cr, pattern);
24    cairo_fill(cr);
25 
26    /* Writing in the foreground */
27    cairo_set_font_size (cr, 15);
28    cairo_select_font_face (cr, "Georgia",
29        CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD);
30    cairo_set_source_rgb (cr, 0, 0, 0);
31 
32    cairo_move_to(cr, 10, 25);
33    cairo_show_text(cr, "Hallo");
34 
35    cairo_move_to(cr, 10, 75);
36    cairo_show_text(cr, "WorldHeritage!");
37 
38    cairo_destroy (cr);
39    cairo_surface_destroy (surface);
40    return 0;
41 }

Notable usage

Cairo is popular in the open source community for providing cross-platform support for advanced 2D drawing.

  • GTK+, starting in 2005 with version 2.8, uses Cairo to render the majority of its graphical control elements.[13] Since GTK+ version 3, all the rendering is done using Cairo.
  • The Mono Project,[14] including Moonlight,[15] has been using cairo since very early in conception to power the backends of its GDI+ (libgdiplus) and System.Drawing namespaces.
  • The Mozilla project has made use of cairo in recent versions of its Gecko layout engine, used for rendering the graphical output of Mozilla products. Gecko 1.8, the layout engine for Mozilla Firefox 2.0 and SeaMonkey 1.0, used cairo to render SVG and content. Gecko 1.9,[16] the release of Gecko that serves as the basis of Firefox 3, uses cairo as the graphics backend for rendering both web page content and the user interface (or "chrome").
  • The WebKit framework uses cairo for all rendering in the GTK+ and EFL ports. Support has also been added for SVG and content using cairo.
  • The Poppler library uses cairo to render PDF documents. Cairo enables the drawing of antialiased vector graphics and transparent objects.
  • The vector graphics application Inkscape uses the cairo library for its outline mode display, as well as for PDF and PostScript export since release 0.46.[17]
  • MorphOS 2.5 features a shared library implementation of cairo, which was available as stand-alone release for earlier MorphOS versions.
  • AmigaOS 4.1 supports a shared object library of cairo (libcairo.so) in its default installation.
  • FontForge enabled cairo by default for rendering in mid-October 2008.
  • R can output plots in PDF, PostScript and SVG formats using cairo if available.
  • Gnuplot 4.4 now uses cairo for rendering PDF and PNG output.[18]
  • Internet Browser for PlayStation 3 uses cairo since system software update 4.10.
  • Synfig 0.64 now supports optional cairo rendering
  • On-demand graphing of time series data in Graphite

History

Keith Packard and Carl Worth founded the cairo project for use in the X Window System.[19] 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.[20] The name cairo derives from the original name Xr, interpreted as the Greek letters chi and rho.[21]

See also

References

  1. ^
  2. ^
  3. ^
  4. ^
  5. ^
  6. ^
  7. ^
  8. ^
  9. ^
  10. ^
  11. ^
  12. ^
  13. ^
  14. ^
  15. ^
  16. ^
  17. ^
  18. ^
  19. ^
  20. ^
  21. ^

External links

  • Official website
  • cairocffi on GitHub - CFFI-based cairo bindings for Python.
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 


Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.