Библиотека, написанная на одном языке программирования, может использоваться на другом языке, если написаны привязки ; Cairo имеет ряд привязок для различных языков, включая C++ , C# и другие языки CLI , Delphi , Eiffel , Fortran , Factor , Harbour , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme , Smalltalk и несколько других, таких как Gambas (подобно Visual Basic). [5]
Привязки к инструментам
Поскольку Cairo — это всего лишь библиотека для рисования, ее интеграция с набором инструментов графического пользовательского интерфейса может оказаться весьма полезной.
FLTK имеет полную поддержку Cairo (через --enable-cairoпереключатель компиляции).
GTK начал использовать Cairo в 2005 году с версии 2.8 для рендеринга большинства своих графических элементов управления , а начиная с версии 3.0 весь рендеринг выполняется через Cairo.
Команда разработчиков Cairo поддерживает актуальные инструкции по рендерингу поверхностей в SDL . [6]
Доступные бэкэнды
Cairo поддерживает вывод (включая растеризацию ) на ряд различных бэкэндов , известных в его коде как «поверхности». Поддержка бэкэндов включает вывод в X Window System , как через Xlib , так и через XCB , Win32 GDI , OS X Quartz Compositor , BeOS API, OS/2 , контексты OpenGL (напрямую [7] и через glitz), локальные буферы изображений, файлы PNG , PDF , PostScript , DirectFB и SVG .
В разработке находятся и другие бэкэнды, ориентированные на графические API OpenVG , [8] Qt , [9] Skia , [10] и Direct2D от Microsoft . [11] Бэкэнды BeOS, OS/2 и DirectFB были прекращены в 2022 году. [12]
Рисунок модели
Модель рисования Каира основана на трехслойной модели.
Любой процесс рисования происходит в три этапа:
Сначала создается маска, которая включает в себя один или несколько векторных примитивов или форм, например, круги, квадраты, шрифты TrueType , кривые Безье и т. д.
Затем необходимо определить источник, который может быть цветом, цветовым градиентом, растровым изображением или векторной графикой, и из окрашенных частей этого источника делается высечка с помощью определенной выше маски.
Наконец, результат передается в пункт назначения или на поверхность, которая предоставляется серверной частью для вывода.
Это представляет собой принципиально иной подход, нежели масштабируемая векторная графика (SVG), которая задает цвет фигур с помощью правил каскадных таблиц стилей (CSS). [ требуется ссылка ] В то время как Cairo создает маску фигуры, затем создает для нее источник, а затем переносит их на поверхность, файл SVG просто указывает фигуру с атрибутом style. При этом модели не являются несовместимыми; многие рендереры SVG используют Cairo для тяжелой работы. [13]
#include <cairo-svg.h>#include <stdio.h>int main ( int argc , char ** argv ) {cairo_surface_t * поверхность = cairo_svg_surface_create ( "Cairo_example.svg" , 100.0 , 100.0 );cairo_t * cr = cairo_create ( поверхность );/* Рисуем квадраты на заднем плане */для ( int x = 0 ; x < 10 ; ++ x )для ( int y = 0 ; y < 10 ; ++ y )cairo_rectangle ( cr , x * 10.0 , y * 10.0 , 5 , 5 );cairo_pattern_t * pattern = cairo_pattern_create_radial ( 50 , 50 , 5 , 50 , 50 , 50 );cairo_pattern_add_color_stop_rgb ( pattern , 0 , 0.75 , 0.15 , 0.99 );cairo_pattern_add_color_stop_rgb ( шаблон , 0.9 , 1 , 1 , 1 );cairo_set_source ( cr , pattern );cairo_fill ( cr );/* Пишем на переднем плане */cairo_set_font_size ( cr , 15 );cairo_select_font_face ( cr , "Грузия" , 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 , "Привет" );cairo_move_to ( cr , 10 , 75 );cairo_show_text ( cr , "Википедия!" );cairo_destroy ( cr );cairo_surface_destroy ( поверхность );}
Известное использование
Cairo популярен в сообществе разработчиков ПО с открытым исходным кодом, поскольку обеспечивает кроссплатформенную поддержку для расширенного 2D-рисования.
GTK , начиная с версии 2.8 2005 года, использует Cairo для рендеринга большинства своих графических элементов управления . [14] Начиная с версии GTK 3, весь рендеринг выполняется с помощью Cairo.
Программа gtk-vector-screenshot, найденная в Debian, позволяет делать векторные (SVG, PDF или PostScript) снимки экрана приложений GTK 3. [15]
Проект Mono [16] , включающий Moonlight [17], с самого начала использовал Cairo для поддержки внутренних частей пространств имен GDI+ (libgdiplus) и System.Drawing .
Проект Mozilla использовал Cairo в своем движке компоновки Gecko , который используется для рендеринга графического вывода продуктов Mozilla. Gecko 1.8, движок компоновки для Mozilla Firefox 2.0 и SeaMonkey 1.0, использовал Cairo для рендеринга контента SVG и <canvas> . Gecko 1.9, [18] выпуск Gecko, который служит основой Firefox 3 , использует Cairo в качестве графического бэкэнда для рендеринга как содержимого веб-страницы, так и пользовательского интерфейса (или «хрома»).
Фреймворк WebKit использует Cairo для всего рендеринга в портах GTK и EFL . Также была добавлена поддержка для контента SVG и <canvas> с использованием Cairo. [ необходима цитата ]
Библиотека Poppler использует Cairo для рендеринга PDF-документов. Cairo позволяет рисовать сглаженную векторную графику и прозрачные объекты. [ необходима цитата ]
Приложение векторной графики Inkscape использует библиотеку Cairo для отображения в режиме контура, а также для экспорта в форматы PDF и PostScript , начиная с версии 0.46. [19]
Первоначальная версия Manim , называемая ManimCairo, математический анимационный движок, используемый в анимациях видео 3Blue1Brown на YouTube. С тех пор Manim перешел на использование OpenGL . Эта версия называется ManimGL. [20]
MorphOS 2.5 включает в себя реализацию общей библиотеки Cairo, которая была доступна как отдельный релиз для более ранних версий MorphOS. [ необходима ссылка ]
AmigaOS 4.1 поддерживает общую объектную библиотеку Cairo (libcairo.so) в своей установке по умолчанию. [ необходима цитата ]
Кит Паккард и Карл Ворт основали проект Cairo для использования в X Window System . [2] Первоначально (по крайней мере до 2003 года) он назывался Xr или Xr/Xc . Название было изменено, чтобы подчеркнуть идею кроссплатформенной библиотеки для доступа к серверу отображения , не привязанной к X Window System . [22]
Название Cairo происходит от оригинального названия Xr , интерпретируемого как греческие буквы хи и ро . [23]
Сложная компоновка текста
Cairo обрабатывает шрифты на основе латиницы и CJK, но напрямую не поддерживает шрифты со сложной текстовой раскладкой , требующие формирования глифов. Разработчики Cairo рекомендуют использовать Pango , который обеспечивает сложную текстовую раскладку и может интегрироваться с Cairo. [24]