Una biblioteca escrita en un lenguaje de programación se puede utilizar en otro lenguaje si se escriben enlaces ; Cairo tiene una variedad de enlaces para varios lenguajes, incluidos C++ , C# y otros lenguajes CLI , Delphi , Eiffel , Fortran , Factor , Harbor , 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 sólo una biblioteca de dibujos, puede resultar muy útil integrarla con un conjunto de herramientas de interfaz gráfica de usuario.
FLTK tiene soporte completo para Cairo (a través del --enable-cairocambio de compilación).
GTK comenzó en 2005, con la versión 2.8, a utilizar Cairo para renderizar la mayoría de sus elementos de control gráfico , y desde la versión 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 . [6]
Backends disponibles
Cairo admite la salida (incluida la rasterización ) en varios back-ends 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 , BeOS API, OS/2 , contextos OpenGL (directamente [7] y mediante glitz), buffers de imágenes locales, Archivos PNG , PDF , PostScript , DirectFB y SVG .
Hay otros back-ends en desarrollo dirigidos a las API de gráficos OpenVG , [8] Qt , [9] Skia , [10] y Direct2D de Microsoft . [11] Los backends de BeOS, OS/2 y DirectFB se eliminaron en 2022. [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 hace un troquelado con la ayuda de la máscara definida anteriormente.
Finalmente, el resultado se transfiere al destino o superficie, que proporciona el back-end para la salida.
Esto constituye un enfoque fundamentalmente diferente de los gráficos vectoriales escalables (SVG), que especifican el color de las formas con reglas de hojas de estilo en cascada (CSS). [ cita necesaria ] 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 styleatributo. Dicho esto, los modelos no son incompatibles; Muchos renderizadores SVG utilizan Cairo para trabajos pesados. [13]
Ejemplo
Se pueden dibujar gráficos bastante complejos de " Hola mundo " con la ayuda de Cairo con sólo unas pocas líneas de código fuente :
#incluir <cairo-svg.h>#incluir <stdio.h>int principal ( 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 );patrón_cairo_t * patrón = patrón_cairo_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 );el 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 brindar soporte multiplataforma para dibujo 2D avanzado.
GTK , a partir de 2005 con la versión 2.8, utiliza Cairo para renderizar la mayoría de sus elementos de control gráfico . [14] Desde la versión 3 de GTK, todo el renderizado se realiza utilizando 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] incluido Moonlight , [17] ha estado utilizando Cairo desde muy temprano en su concepción para alimentar los back-ends de sus espacios de nombres GDI+ (libgdiplus) y System.Drawing .
El proyecto Mozilla ha utilizado 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, utilizó Cairo para representar contenido SVG y <canvas> . Gecko 1.9, [18] la versión de Gecko que sirve como base de Firefox 3 , utiliza Cairo como back-end de gráficos para representar tanto el contenido de la página web como la interfaz de usuario (o "chrome").
El marco WebKit utiliza Cairo para todos los renderizados en los puertos GTK y EFL . También se ha agregado soporte para contenido SVG y <canvas> usando Cairo.
La biblioteca Poppler utiliza Cairo para renderizar documentos PDF. Cairo permite dibujar gráficos vectoriales suavizados y objetos transparentes.
La aplicación de gráficos vectoriales Inkscape utiliza la biblioteca Cairo para su visualización en modo de esquema, así como para la exportación de PDF y PostScript desde la versión 0.46. [19]
La versión original de Manim se conoce como ManimCairo, un motor de animación matemático utilizado en las animaciones de los videos de YouTube de 3Blue1Brown. Desde entonces, Manim ha pasado a utilizar OpenGL . Esta versión se conoce como ManimGL. [20]
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 El Cairo (libcairo.so) en su instalación predeterminada.
FontForge habilitó Cairo de forma predeterminada para el renderizado a mediados de octubre de 2008.
R puede generar gráficos en formatos PDF , PostScript y SVG utilizando Cairo, si está disponible.
Gnuplot 4.4 ahora usa Cairo para renderizar salidas PDF y PNG . [21]
Internet Browser para PlayStation 3 utiliza Cairo desde la actualización de software del sistema 4.10.
Synfig 0.64 ahora admite el renderizado opcional de Cairo.
Gráficos bajo demanda de datos de series temporales en Graphite .
El motor de widgets Konfabulator/Yahoo utiliza Cairo para obtener resultados idénticos tanto para Win32 como para Quartz en Mac OS/X .
Keith Packard y Carl Worth fundaron el proyecto Cairo para su uso en el sistema X Window . [2] Originalmente (hasta al menos 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 . [22]
El nombre Cairo deriva del nombre original Xr , interpretado como las letras griegas chi y rho . [23]
Diseño de texto complejo
Cairo maneja fuentes basadas en latín y CJK, pero no admite directamente fuentes de diseño de texto complejas , que requieren dar forma a los glifos. Los desarrolladores de Cairo recomiendan usar Pango , que proporciona un diseño de texto complejo y puede integrarse con Cairo. [24]
^ "Las aburridas páginas web de Carl". cworth.org . 2013 . Consultado el 11 de julio de 2014 .
^ ab "Xr: renderizado entre dispositivos para gráficos vectoriales" . Consultado el 8 de junio de 2009 .
^ "Lanzamiento de Cairo 1.18: primer lanzamiento estable en cinco años". www.phoronix.com . Consultado el 23 de septiembre de 2023 .
^ "Página de inicio de El Cairo" . Consultado el 30 de octubre de 2010 .
^ "Enlaces de idiomas de El Cairo" . Consultado el 16 de abril de 2014 .
^ "SDL". El Cairo . 2009-02-17 . Consultado el 3 de noviembre de 2014 .
^ Chris Wilson (22 de julio de 2009). "Nuevo backend OpenGL fusionado" . Consultado el 12 de febrero de 2010 .
^ Øyvind Kolås (24 de enero de 2008). "Anuncio del backend de 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: procesamiento de hardware en un navegador" . Consultado el 12 de febrero de 2010 .
^ Larabel, Michael (27 de febrero de 2022). "La biblioteca de gráficos de El Cairo elimina muchos backends antiguos". Forónix . Consultado el 5 de junio de 2022 .
^ "GNOME/librsvg". GitHub .
^ "GTK+ para utilizar el motor vectorial Cairo" . Consultado el 27 de diciembre de 2009 .
^ "Detalles del paquete gtk-vector-screenshot extendido". 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 de Gecko 1.9" . Consultado el 27 de diciembre de 2009 .
^ "Notas de la versión046". Wiki Inkscape . Consultado el 31 de marzo de 2008 .
^ "Tutorial de ManimCE por TheoremOfBeethoven - Tutorial de ManimCE por documentación de TB". zavden.github.io . Consultado el 29 de enero de 2023 .
^ "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". 15 de julio de 2003 . Consultado el 8 de junio de 2009 .
^ "Hilo de la lista de correo sobre el cambio de nombre de El Cairo". 12 de julio de 2003 . Consultado el 2 de diciembre de 2006 .
^ "¿Cómo uso Pango en lugar de la API de texto" juguete "de El Cairo?" . Consultado el 20 de marzo de 2024 .
enlaces externos
Wikimedia Commons tiene medios relacionados con El Cairo (gráficos) .
Página web oficial
cairocffi en GitHub – Enlaces Cairo basados en CFFI para Python
"Manual de referencia de la API de El Cairo".
"El Cairo aquí, allá y en todas partes". Linux.Ars . Ars Técnica . 23 de agosto de 2005.