Cairo (Bibliothek)

Cairo (Bibliothek)
Cairo
Der Cairo-Banner
Basisdaten
Entwickler: Das Cairo-Team
Aktuelle Version: 1.8.6
(13. Dezember 2008)
Betriebssystem: UNIX, Linux, Windows, Mac OS X, BeOS
Kategorie: Grafikbibliothek
Lizenz: LGPL/MPL
Deutschsprachig: nein
cairographics.org

Cairo ist eine freie 2D-Grafikbibliothek. Sie ermöglicht über eine geräteunabhängige, vektorbasierte API für Softwareentwickler die Ausgabe auf verschiedenen sogenannten Back-Ends. Derzeit wird die Ausgabe auf dem X Window System, unter Win32, in lokale Bildpuffer, und in die Dateiformate PNG, PostScript, PDF und SVG als stabil bezeichnet. Back-Ends für die Ausgabe unter OpenGL (via Glitz), Quartz, XCB, DirectFB, BeOS und OS/2 befinden sich in Entwicklung.

Cairo wurde so gestaltet, dass es – soweit vorhanden – bei allen Ausgabe-Back-Ends die Möglichkeit der Beschleunigung durch den Grafikprozessor, beispielsweise zur Kantenglättung, nutzt.

Die Cairo-Entwicklung wurde ursprünglich unter dem Namen Xr beziehungsweise Xr/Xc von Keith Packard und Carl Worth für den Gebrauch mit dem X Window System begonnen.

Konkurrenztechnologien sind WPF sowie GDI+ von Microsoft und Quartz von Apple.

Inhaltsverzeichnis

Zeichenmodell

Cairos Zeichenmodell

Cairo verfolgt eine ungewöhnliche Zeichentechnik, die auf einem dreigliedrigen Schichtenmodell basiert (siehe Bild „Cairos Zeichenmodell“):

Ein Zeichenvorgang findet statt, indem eine Mask (engl. Maske) erstellt wird, welche eine oder mehrere Vektorenprimitivien bzw. -formen beinhaltet, d. h. Kreise, Vierecke, TTF-Schriften, Bezierkurven, usw. Anschließend muss eine Source (engl. Quelle) definiert werden, welche z. B. aus einer Farbe, einem Farbverlauf, einer Bitmap- oder Vektorgrafik bestehen kann. Nun wird mit der Mask wie mit einer Ausstechform der bemalte Teil aus der Source rausgestochen. Das Ergebnis wird schließlich auf die Destination bzw. Surface übertragen, welche durch das Ausgabebackend gestellt wird.

Damit wird ein grundsätzlich anderer Ansatz verfolgt als z. B. bei SVG-Vektorgrafiken.

Programmierbeispiel

Das von diesem Programm generierte SVG-Bild

Cairo wurde in C geschrieben, zudem gibt es Sprachbindungen zu vielen anderen Programmiersprachen, unter anderem Haskell, Java, Perl, Python, Scheme, Smalltalk.

Auch komplexere „Hallo Welt“-Grafiken lassen sich mit Cairo bereits mit wenigen Zeilen Quelltext zeichnen:

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

Zunächst werden in Zeile fünf und sechs eine SVG-Surface sowie ein Cairo-Objekt erstellt. Anschließend kann mit diesem gezeichnet werden, in dem jeweils Formen gezeichnet werden und eine Quelle (cairo_set_source_...) festgelegt wird. In Zeile 16f wird auf diese Weise ein 10x10-Feld von regelmäßigen Quadraten generiert, welches anschließend mit einem radialen Farbverlauf gezeichnet wird. Ab Zeile 28 wird eine einfache Möglichkeit dargestellt, um mit Cairo Texte zu zeichnen.

Verwendung

In der Open-Source-Community findet Cairo dank seiner Fähigkeit, plattformunabhängige qualitativ hochwertige 2D-Zeichnungen zu erstellen, weite Verbreitung. Unter anderem verwenden diverse Toolkits für Grafische Benutzeroberflächen, Browserengines und Grafikprogramme Cairo.

Verwendung in Grafiktoolkits

Cairo-clock-smooth-1.ogg
Beispiel: Das Zeichnen einer transparenten Uhr mit Cairo realisiert

Cairo wird seit Version 2.8.0 von GTK+ unterstützt. Damit ist es möglich, von GTK+-Widgets einen Cairokontext (cairo_t, siehe Zeile fünf im Beispiel) zu erlangen und dann mit Cairofunktionen in diesen zu zeichnen.[1] Mit den gleichen Methoden zeichnet GTK+ intern ab dieser Version die meisten seiner Widgets mit Cairo[2] und kann damit von hardwarebeschleunigtem Rendering profitieren.

Die Entwickler der C++-Anbindung von GTK+, gtkmm, stufen das Zeichnen mit dem GDK schon heute als veraltet (deprecated) ein, weil die Zeichenfunktionen von GDK kompliziert zu bedienen und vergleichsweise leistungsschwach sind. Stattdessen wird die ausnahmslose Benutzung von Cairo empfohlen.[3]

Auch das FLTK kann Cairo zum Zeichnen der kompletten Oberfläche nutzen.[4]

Dank seiner Plattformunabhängigkeit wird Cairo auch in wxWidgets verwendet.[5]

Auch das Mono-Projekt verwendet seit den ersten Versionen Cairo, um die GDI+-Oberfläche zu zeichnen.

Das Standard Widget Toolkit verwendet Cairo seit Version 3.1 auf Linux für seine Zeichen-API.


Verwendung in Browserengines

Mozilla Firefox 3 rendert alle Webseiten mit Cairo

In Gecko-basierten Webbrowsern wird Cairo ab der Gecko-Version 1.8 (unter anderem beispielsweise verwendet ab Firefox 1.5) zur Darstellung von SVG-Dateien verwendet[6] und ab Gecko-Version 1.9 (Firefox 3) zusätzlich auch zur Darstellung der gesamten grafischen Benutzeroberfläche (XUL), einschließlich von Webseiten.[7]

Auch WebKit verwendet Cairo zum Rendern aller grafischen Elemente in seinem GTK+-Port. SVG- und <canvas>-Elemente werden dabei ebenfalls mittels Cairo gerendert.


Verwendung in Grafiksoftware

Die Inhalte des Umriss-Fensters (im Bild unten rechts) werden von Cairo gezeichnet

Seit Version 0.46 verwendet das Vektorgrafik-Programm Inkscape Cairo für den Umriss-Anzeigemodus sowie für das Schreiben von PDF- und PostScript-Dokumenten[8].

Auch die PDF-Rendering-Engine Poppler verwendet Cairo zum Rendern von PDF-Dokumenten. Als Abspaltung von Xpdf findet Poppler in vielen verbreiteten PDF-Betrachtern wie Evince und Okular Verwendung.

Cairo kann in dem Office-Paket OpenOffice.org seit Version 2 für hardwarebeschleunigte Präsentationseffekte benutzt werden.

Selbst Programme wie rsvg verwenden Cairo zum Rendern. Auf diese Weise entstehen Bitmapgrafiken aus SVG-Dateien, eine Technik, von der beispielsweise auch die Wikipedia Gebrauch macht.

Anbindung an andere Programmiersprachen

Dank seiner Implementierung in der Programmiersprache C sind Anbindungen an andere Programmiersprachen (language bindings) einfach umzusetzen. Es existieren Bindungen für C++ (cairomm, analog zu gtkmm), Java, Haskell, Mono/.NET, Perl, PHP, Python, Ruby, Objective Caml, Scheme, Lua, Vala und vielen anderen[9].

Weblinks

Einzelnachweise

  1. Cairo Interaction im GDK Reference Manual
  2. Einen Ansatz dazu hat Julien Boulnois mit seiner cairo-gtk-engine entwickelt
  3. Programming with gtkmm , Chapter 15. The Drawing Area Widget bzw. Appendix F. Drawing With GDK
  4. Auf der Projekthomepage des FLTK: Article #622: New Poll: FLTK2 and Cairo
  5. Using Cairo from wxWidgets sowie svg in wxwidgets
  6. http://weblogs.mozillazine.org/tor/archives/2006/04/why_cairo.html
  7. http://developer.mozilla.org/devnews/index.php/2006/02/22/cairo-is-being-switched-on-for-windows-nightly-builds/
  8. Release Notes for Version 0.46 aus der Inkscape-Wiki (engl.)
  9. Projekthomepage: Language bindings

Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • German University in Cairo — Vorlage:Infobox Hochschule/Mitarbeiter fehltVorlage:Infobox Hochschule/Professoren fehlt German University in Cairo Gründung 2003 …   Deutsch Wikipedia

  • CyGNOME — GNOME GNOME 2.22 Basisdaten …   Deutsch Wikipedia

  • GNOME — 2.22 Basisdaten …   Deutsch Wikipedia

  • GNU Network Object Model Environment — GNOME GNOME 2.22 Basisdaten …   Deutsch Wikipedia

  • Seahorse — GNOME GNOME 2.22 Basisdaten …   Deutsch Wikipedia

  • Gecko (Rendering Engine) — Gecko / libxul Entwickler: Mozilla Foundation Aktuelle Version: 1.9 (17. Juni 2008) Betriebssystem: Plattformunabhängig Kategorie: Engine …   Deutsch Wikipedia

  • Gecko Rendering Engine — Gecko / libxul Entwickler: Mozilla Foundation Aktuelle Version: 1.9 (17. Juni 2008) Betriebssystem: Plattformunabhängig Kategorie: Engine …   Deutsch Wikipedia

  • Libxul — Gecko / libxul Entwickler: Mozilla Foundation Aktuelle Version: 1.9 (17. Juni 2008) Betriebssystem: Plattformunabhängig Kategorie: Engine …   Deutsch Wikipedia

  • WxWidgets — Dieser Artikel wurde auf der Qualitätssicherungsseite des Portals Freie Software eingetragen. Beteilige dich an der Diskussion und hilf mit, den Artikel zu verbessern. wxWidgets …   Deutsch Wikipedia

  • WxWindows — Dieser Artikel wurde auf der Qualitätssicherungsseite des Portals Freie Software eingetragen. Beteilige dich an der Diskussion und hilf mit, den Artikel zu verbessern. wxWidgets …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”