Cairo (estilizado como cairo ) es una biblioteca gráfica de código abierto que proporciona una API basada en gráficos vectoriales e independiente del dispositivo para el dibujo bidimensional. Escrita en C , admite la salida a múltiples backends, incluidos X11 , Quartz , Win32, SVG , PDF y PostScript . Cairo utiliza la aceleración por hardware cuando está disponible. [ 5 ]
Cairo es utilizado por GTK (versiones 2.8 a 3.x), el motor de diseño Gecko en Mozilla Firefox , WebKit , Poppler e Inkscape , entre otros proyectos. [ 6 ] La biblioteca tiene una doble licencia bajo la Licencia Pública General Reducida de GNU versión 2.1 y la Licencia Pública de Mozilla 1.1.
El nombre deriva del nombre original del proyecto "Xr", interpretado como las letras griegas chi y rho , que juntas suenan como "Cairo", que no debe confundirse con el Chi Rho religioso . [ 7 ]
Historia
Keith Packard y Carl Worth crearon el proyecto para su uso en el Sistema X Window , originalmente llamado Xr (más tarde Xr/Xc ). [ 2 ] El nombre se cambió en julio de 2003 para enfatizar que la biblioteca era multiplataforma y no estaba vinculada a X11. [ 8 ]
Cairo 1.0 se lanzó en 2005, proporcionando una API estable. La versión 1.2 (2006) añadió soporte para backend de PDF y SVG. La versión 1.4 (2007) mejoró el manejo de fuentes y añadió la cairo_push_groupAPI para renderizado fuera de pantalla. La versión 1.10 (2010) introdujo la superficie de grabación, que captura las operaciones de dibujo para su posterior reproducción, y la cairo_regionAPI. [ 5 ]
En 2022, se eliminaron varios backends heredados, incluidos BeOS, OS/2, DirectFB y el backend de OpenGL (que había estado inactivo durante una década). [ 9 ] [ 10 ]
GTK adoptó Cairo para la renderización en la versión 2.8 (2005), y GTK 3.0 (2011) utilizó Cairo para toda la renderización. GTK 4 (2020) cambió a los renderizadores Vulkan y OpenGL a través de GSK, reduciendo el papel de Cairo. [ 11 ]
Arquitectura
Modelo de dibujo

Cairo utiliza un modelo de dibujo de tres capas basado en la composición de Porter-Duff :
- Una máscara se construye a partir de primitivas vectoriales (trayectorias, rectángulos, glifos, curvas de Bezier ).
- Una fuente proporciona datos de color, que pueden ser un color sólido, un degradado, un patrón de mapa de bits u otra superficie.
- La fuente se pinta a través de la máscara sobre una superficie de destino , que representa el backend de salida. [ 5 ]
Este enfoque difiere de los gráficos vectoriales escalables (SVG), que adjuntan atributos de estilo directamente a las formas. [ 12 ]
Sistemas de backend
Cairo admite la salida a múltiples backends ("superficies"):
- Servidores de visualización : Sistema X Window (a través de Xlib y XCB ), Quartz (macOS), Win32 GDI
- Formatos de imagen : PNG , búferes de imagen en memoria
- Formatos de documento : PDF , PostScript , SVG
Los backends heredados para BeOS , OS/2 , DirectFB y OpenGL (directo y a través de glitz) se eliminaron en 2022-2023. [ 9 ] [ 10 ] Se han desarrollado backends experimentales para OpenVG , [ 13 ] Qt , [ 14 ] Skia , [ 15 ] y Direct2D . [ 16 ]
Enlaces de lenguaje
Existen enlaces para C++ , C# y otros lenguajes CLI , Delphi , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme y Smalltalk . [ 17 ]
Diseño de texto complejo
Cairo admite fuentes latinas y CJK, pero no admite directamente sistemas de escritura de texto complejos que requieren la modificación de glifos. Los desarrolladores recomiendan usar Pango para texto complejo, que se integra con Cairo para su representación. [ 18 ]
Software que utiliza El Cairo
- GTK utilizaba Cairo para toda la renderización en la versión 3.x; GTK 4 lo utiliza en un rol reducido. [ 11 ]
- El motor de diseño Gecko de Mozilla adoptó Cairo en Gecko 1.9 ( Firefox 3 ) para la representación del contenido web y la interfaz de usuario. [ 19 ]
- WebKit utiliza Cairo para la renderización en sus versiones GTK y EFL .
- La biblioteca de renderizado de PDF de Poppler utiliza Cairo para la salida con suavizado de bordes.
- Inkscape utiliza Cairo para su visualización en modo esquema y para la exportación a PDF y PostScript. [ 20 ]
- El proyecto Mono utiliza Cairo para implementar sus backends GDI+ (libgdiplus) y System.Drawing. [ 21 ]
- R utiliza Cairo para la salida de gráficos PDF, PostScript y SVG cuando están disponibles. [ 22 ]
- RRDtool reemplazó su biblioteca gráfica interna por Cairo y Pango en la versión 1.3 (2008).
- Gnuplot 4.4 utiliza Cairo para la salida en formato PDF y PNG. [ 23 ]
Ejemplo
Un programa sencillo que genera un archivo SVG usando Cairo:

#incluir <cairo-svg.h>#include <stdio.h>int main ( int argc , char ** argv ) {cairo_surface_t * superficie = cairo_svg_surface_create ( "Cairo_example.svg" , 100.0 , 100.0 );cairo_t * cr = cairo_create ( superficie );/* Dibuja los cuadrados en el fondo */para ( int x = 0 ; x < 10 ; ++ x )para ( int y = 0 ; y < 10 ; ++ y )cairo_rectangle ( cr , x * 10.0 , y * 10.0 , 5 , 5 );cairo_pattern_t * patrón = cairo_pattern_create_radial ( 50 , 50 , 5 , 50 , 50 , 50 );cairo_pattern_add_color_stop_rgb ( patrón , 0 , 0.75 , 0.15 , 0.99 );cairo_pattern_add_color_stop_rgb ( patrón , 0.9 , 1 , 1 , 1 );cairo_set_source ( cr , patrón );cairo_fill ( cr );/* Escritura en primer plano */cairo_set_font_size ( cr , 15 );cairo_select_font_face ( cr , "Georgia" , CAIRO_FONT_SLANT_NORMAL , CAIRO_FONT_WEIGHT_BOLD );cairo_set_source_rgb ( cr , 0 , 0 , 0 );cairo_move_to ( cr , 10 , 25 );cairo_show_text ( cr , "Hola" );cairo_move_to ( cr , 10 , 75 );cairo_show_text ( cr , "¡Wikipedia!" );cairo_destroy ( cr );cairo_surface_destroy ( superficie );}Véase también
Referencias
- ↑ "Las aburridas páginas web de Carl" . cworth.org . 2013. Consultado el 11 de julio de 2014 .
- 1 2 "Xr: Renderizado multidispositivo para gráficos vectoriales" . Consultado el 8 de junio de 2009 .
- ↑ "cairo-1.18.4" . www.cairographics.org . Consultado el 12 de marzo de 2025 .
- ↑ "cairo/cairo" . GitLab (freedesktop.org) . Consultado el 10 de marzo de 2026 .
- 1 2 3 "Página principal de El Cairo" . Consultado el 30 de octubre de 2010 .
- ↑ "GTK+ utilizará el motor de vectores Cairo" . 5 de febrero de 2005. Consultado el 27 de diciembre de 2009 .
- ↑ "Hilo de la lista de correo sobre el cambio de nombre de Cairo" . 12 de julio de 2003. Consultado el 2 de diciembre de 2006 .
- ↑ "Hilo de la lista de correo sobre el cambio de nombre de Cairo" . 15 de julio de 2003. Consultado el 8 de junio de 2009 .
- 1 2 Larabel, Michael (27 de febrero de 2022). "La biblioteca gráfica Cairo elimina muchos backends antiguos" . Phoronix . Recuperado el 5 de junio de 2022 .
- 1 2 Larabel, Michael (29 de enero de 2023). "La biblioteca gráfica Cairo deja de ofrecer soporte para OpenGL tras una década de inactividad" . Phoronix . Consultado el 7 de febrero de 2025 .
- 1 2 Equipo de desarrollo de GTK. "Gtk -- 4.0: Preguntas frecuentes" . Consultado el 26 de septiembre de 2025. La
mayor parte del dibujo en GTK ya no se realiza a través de cairo (sino mediante los renderizadores GL o Vulkan de GSK).
- ↑ "GNOME/librsvg" . GitHub . Consultado el 10 de marzo de 2026 .
- ↑ Oyvind Kolas (24 de enero de 2008). "Anuncio del backend de OpenVG" . Consultado el 12 de febrero de 2010 .
- ↑ Vladimir Vukicevic (6 de mayo de 2008). "Bueno, ¿no es lindo?" . Archivado del original el 9 de abril de 2010. Recuperado el 12 de febrero de 2010 .
- ↑ Chris Wilson (31 de agosto de 2009). "Cosas geniales" . Consultado el 12 de febrero de 2010 .
- ↑ Bas Schouten (22 de noviembre de 2009). "Direct2D: procesamiento de hardware en un navegador" . Consultado el 12 de febrero de 2010 .
- ↑ "Clasificaciones lingüísticas de Cairo" . Consultado el 16 de abril de 2014 .
- ↑ "¿Cómo puedo usar Pango en lugar de la API de texto "de juguete" de Cairo?" . Consultado el 20 de marzo de 2024 .
- ↑ "Hoja de ruta de Gecko 1.9" . Consultado el 27 de diciembre de 2009 .
- ↑ "ReleaseNotes046" . Wiki de Inkscape . Consultado el 31 de marzo de 2008 .
- ↑ "Mono - Dibujo" . Consultado el 27 de diciembre de 2009 .
- ↑ "A.2 Bibliotecas y programas útiles" . Instalación y administración de R. Consultado el 29 de junio de 2025 .
- ↑ "Anuncio de la versión 4.4.0 de Gnuplot" . Página principal de Gnuplot . Archivado del original el 14 de mayo de 2011. Consultado el 22 de febrero de 2011 .
Enlaces externos
- Sitio web oficial
- Código fuente de Cairo en GitLab
- "Manual de referencia de la API de Cairo" .
- El Cairo (gráficos)
- Bibliotecas informáticas gratuitas
- Software libre programado en C
- Freedesktop.org
- Bibliotecas de Freedesktop.org
- Bibliotecas de GNOME
- GTK
- Software que utiliza la Licencia Pública General Reducida de GNU.
- Software que utiliza la Licencia Pública de Mozilla.