Cairo (estilizado como cairo ) es una biblioteca de gráficos de código abierto que proporciona una API independiente del dispositivo basada en gráficos vectoriales para desarrolladores de software . Proporciona primitivas para el dibujo bidimensional en varios extremos posteriores diferentes . Cairo usa aceleración de hardware [4] cuando está disponible.
Autor (es) original (es) | Keith Packard , Carl Worth [1] |
---|---|
Desarrollador (es) | Carl Worth, Behdad Esfahbod |
Versión inicial | Antes de 2003 [2] |
Lanzamiento estable | 1.17.4 (29 de noviembre de 2020 [3] ) [±] |
Repositorio | cgit |
Escrito en | C |
Tipo | Biblioteca de gráficos |
Licencia | GNU Lesser General Public License versión 2.1 (solo) o Mozilla Public License 1.1 |
Sitio web | www |
Arquitectura de software
Enlaces de idioma
Una biblioteca escrita en un lenguaje de programación puede usarse en otro lenguaje si se escriben enlaces ; Cairo tiene una gama de enlaces para varios lenguajes, incluidos C ++ , C # y otros lenguajes CLI , Delphi , Eiffel , Factor , Harbour , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme , Smalltalk y varios otros como Gambas (Como Visual Basic). [5]
Enlaces del kit de herramientas
Dado que Cairo es solo una biblioteca de dibujos, puede resultar muy útil integrarlo con un conjunto de herramientas de interfaz gráfica de usuario.
- FLTK tiene soporte completo de Cairo (a través del modificador de compilación "--enable-cairo").
- GNUstep actualmente usa Cairo como su back-end principal en sistemas que no son Windows . [6]
- GTK no solo tiene soporte completo para Cairo, sino que a partir de 2005 con la versión 2.8, usa Cairo para renderizar la mayoría de sus elementos de control gráfico , y desde 3.0 todo el renderizado se realiza a través de Cairo.
- El equipo de desarrollo de Cairo mantiene instrucciones actualizadas para renderizar superficies en SDL . [7]
Back-end disponibles
Cairo admite la salida (incluida la rasterización ) a varios back- end diferentes , conocidos como "superficies" en su código. El soporte de back-end incluye salida al sistema X Window , a través de Xlib y XCB , Win32 GDI , OS X Quartz Compositor , la API de BeOS , OS / 2 , contextos OpenGL (directamente [8] y mediante glitz), búferes de imágenes locales, Archivos PNG , PDF , PostScript , DirectFB y SVG .
Hay otros back-end en el desarrollo dirigidos a las API de gráficos OpenVG , [9] Qt , [10] Skia , [11] y Direct2D de Microsoft . [12]
Modelo de dibujo
El modelo de dibujo de El Cairo se basa en un modelo de tres capas.
Cualquier proceso de dibujo se lleva a cabo en tres pasos:
- Primero se crea una máscara, que incluye una o más primitivas o formas vectoriales, es decir, círculos, cuadrados, fuentes TrueType , curvas de Bézier , etc.
- Luego se debe definir la fuente, que puede ser un color, un degradado de color, un mapa de bits o algunos gráficos vectoriales, y a partir de las partes pintadas de esta fuente se realiza un troquelado con la ayuda de la máscara definida anteriormente.
- Finalmente, el resultado se transfiere al destino o superficie, que es proporcionado por el back-end para la salida.
Esto constituye un enfoque fundamentalmente diferente de los gráficos vectoriales escalables , que especifica directamente el color de las formas con hojas de estilo en cascada . Mientras que Cairo crearía una máscara de una forma, luego crearía una fuente para ella y luego la transferiría a la superficie, un archivo SVG simplemente especificaría la forma con un style
atributo. Dicho esto, los modelos no son incompatibles; muchos renderizadores SVG usan Cairo para trabajos pesados. [13]
Ejemplo
Se pueden dibujar gráficos bastante complejos de " Hola mundo " con la ayuda de Cairo con solo unas pocas líneas de código fuente :
#include #include int main ( int argc , char ** argv ) { cairo_surface_t * surface = 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 ); / * Escribiendo 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 );}
Uso notable
Cairo es popular en la comunidad de código abierto por proporcionar soporte multiplataforma para dibujo 2D avanzado.
- GTK , a partir de 2005 con la versión 2.8, utiliza Cairo para representar la mayoría de sus elementos de control gráfico . [14] Desde GTK versión 3, todo el renderizado se realiza usando Cairo.
- Un programa llamado gtk-vector-screenshot que se encuentra en Debian permite tomar capturas de pantalla vectoriales (SVG, PDF o PostScript) de aplicaciones GTK 3. [15]
- El Proyecto Mono , [16] incluyendo Moonlight , [17] ha estado usando Cairo desde muy temprano en su concepción para alimentar los back- end de sus espacios de nombres GDI + (libgdiplus) y System.Drawing .
- El proyecto Mozilla ha hecho uso de Cairo en su motor de diseño Gecko , utilizado para representar la salida gráfica de los productos Mozilla. Gecko 1.8, el motor de diseño para Mozilla Firefox 2.0 y SeaMonkey 1.0, usó Cairo para renderizar contenido SVG y . Gecko 1.9, [18] el lanzamiento de Gecko que sirve como base de Firefox 3 , usa Cairo como el back-end de gráficos para renderizar tanto el contenido de la página web como la interfaz de usuario (o "chrome").
- El marco WebKit usa Cairo para todas las representaciones en los puertos GTK y EFL . También se ha agregado soporte para contenido SVG y
- La biblioteca Poppler usa Cairo para renderizar documentos PDF. Cairo permite el dibujo de gráficos vectoriales antialias y objetos transparentes.
- La aplicación de gráficos vectoriales Inkscape utiliza la biblioteca Cairo para su visualización en modo de contorno, así como para la exportación de PDF y PostScript desde la versión 0.46. [19]
- MorphOS 2.5 presenta una implementación de biblioteca compartida de Cairo, que estaba disponible como versión independiente para versiones anteriores de MorphOS.
- AmigaOS 4.1 admite una biblioteca de objetos compartidos de Cairo (libcairo.so) en su instalación predeterminada.
- FontForge habilitó Cairo de forma predeterminada para la representación a mediados de octubre de 2008.
- R puede generar gráficos en formatos PDF , PostScript y SVG usando Cairo si está disponible.
- Gnuplot 4.4 ahora usa Cairo para renderizar salida PDF y PNG . [20]
- El navegador de Internet para PlayStation 3 usa Cairo desde la actualización 4.10 del software del sistema.
- Synfig 0.64 ahora admite la representación opcional de Cairo.
- Graficación bajo demanda de datos de series de tiempo en Graphite .
- El Konfabulator / Yahoo Widget Engine usa Cairo para la salida idéntica a Win32 y Cuarzo en Mac OS / X .
Historia
Keith Packard y Carl Worth fundaron el proyecto Cairo para su uso en el sistema X Window . [2] Originalmente (al menos hasta 2003) se llamaba Xr o Xr / Xc . El nombre se cambió para enfatizar la idea de una biblioteca multiplataforma para acceder al servidor de visualización , no vinculada al sistema X Window . [21] El nombre Cairo deriva del nombre original Xr , interpretado como las letras griegas chi y rho . [22]
Ver también
- Mostrar PostScript y Quartz 2D
- Motor de gráficos Skia
- Marco de Starling
- WebGL
Referencias
- ^ "Páginas web aburridas de Carl" . cworth.org . 2013 . Consultado el 11 de julio de 2014 .
- ^ a b "Xr: Representación entre dispositivos para gráficos vectoriales" . Consultado el 8 de junio de 2009 .
- ^ "Últimas noticias de el cairo" . Consultado el 8 de junio de 2021 .
- ^ "Página de inicio de El Cairo" . Consultado el 30 de octubre de 2010 .
- ^ "Enlaces de idioma de El Cairo" . Consultado el 16 de abril de 2014 .
- ^ Fedor, Adam (29 de septiembre de 2011). "Resumen de valores predeterminados de usuario para GNUstep Backend" . Consultado el 3 de noviembre de 2014 .
- ^ "El Cairo - SDL" . 2009-02-17 . Consultado el 3 de noviembre de 2014 .
- ^ Chris Wilson (22 de julio de 2009). "Nuevo backend OpenGL combinado" . Consultado el 12 de febrero de 2010 .
- ^ Øyvind Kolås (24 de enero de 2008). "Anuncio de backend OpenVG" . Consultado el 12 de febrero de 2010 .
- ^ Vladimir Vukićević (6 de mayo de 2008). "Bueno, ¿no es eso Qt?" . Archivado desde el original el 9 de abril de 2010 . Consultado el 12 de febrero de 2010 .
- ^ Chris Wilson (31 de agosto de 2009). "Cosas interesantes" . Consultado el 12 de febrero de 2010 .
- ^ Bas Schouten (22 de noviembre de 2009). "Direct2D: hardware renderizado de un navegador" . Consultado el 12 de febrero de 2010 .
- ^ https://github.com/GNOME/librsvg
- ^ "GTK + para utilizar Cairo Vector Engine" . Consultado el 27 de diciembre de 2009 .
- ^ "Detalles del paquete gtk-vector-screenshot en stretch" . Debian . GitHub
- ^ "Mono - Dibujo" . Consultado el 27 de diciembre de 2009 .
- ^ "Notas a la luz de la luna" . Consultado el 27 de diciembre de 2009 .
- ^ "Hoja de ruta Gecko 1.9" . Consultado el 27 de diciembre de 2009 .
- ^ "ReleaseNotes046" . Wiki de Inkscape . Consultado el 31 de marzo de 2008 .
- ^ "Anuncio de la versión 4.4.0 de Gnuplot" . Página de inicio de Gnuplot . Archivado desde el original el 14 de mayo de 2011 . Consultado el 22 de febrero de 2011 .
- ^ "Hilo de la lista de correo sobre el cambio de nombre de El Cairo" . Consultado el 8 de junio de 2009 .
- ^ "Hilo de la lista de correo sobre el cambio de nombre de El Cairo" . Consultado el 2 de diciembre de 2006 .
enlaces externos
- Página web oficial
- cairocffi en GitHub : enlaces de Cairo basados en CFFI para Python
- "Manual de referencia de la API de Cairo" .
- "El Cairo aquí, allá y en todas partes" . Linux.Ars . Ars Technica .
- "Gráficos multiplataforma con el cairo" .
- "Comparación de bibliotecas de imágenes PHP" .
- "El tutorial de gráficos de El Cairo" .