Библиотека, написанная на одном языке программирования, может использоваться на другом языке, если написаны привязки ; Cairo имеет ряд привязок для различных языков, включая C++ , C# и другие языки CLI , Delphi , Eiffel , Fortran , Factor , Harbour , Haskell , Julia , Lua , Perl , PHP , Python , Ruby , Rust , Scheme , Smalltalk и некоторые другие. например Гамбас (например, Visual Basic). [5]
Привязки инструментария
Поскольку Cairo — это всего лишь библиотека рисования, может быть весьма полезно интегрировать ее с набором инструментов графического интерфейса пользователя.
FLTK имеет полную поддержку Cairo (через --enable-cairoпереключатель компиляции).
GTK начал в 2005 году с версии 2.8 использовать Cairo для рендеринга большинства элементов графического управления , а начиная с версии 3.0 весь рендеринг осуществляется через Cairo.
Команда разработчиков Cairo поддерживает актуальные инструкции по рендерингу поверхностей в SDL . [6]
В разработке находятся и другие серверные части, ориентированные на графические API OpenVG , [8] Qt , [9] Skia , [10] и Microsoft Direct2D . [11] Серверные части BeOS, OS/2 и DirectFB были исключены в 2022 году. [12]
Чертеж модели
Модель чертежа Каира
Модель рисования Каира основана на трехслойной модели.
Любой процесс рисования происходит в три этапа:
Сначала создается маска, которая включает в себя один или несколько векторных примитивов или форм, например, круги, квадраты, шрифты TrueType , кривые Безье и т. д.
Затем необходимо определить источник, который может быть цветом, цветовым градиентом, растровым изображением или какой-либо векторной графикой, и из окрашенных частей этого источника делается высечка с помощью указанной выше маски.
Наконец, результат передается в пункт назначения или на поверхность, которая предоставляется серверной частью для вывода.
Это принципиально отличается от подхода масштабируемой векторной графики (SVG), который определяет цвет фигур с помощью правил каскадных таблиц стилей (CSS). [ нужна цитация ] В то время как Cairo создавал бы маску формы, затем создавал для нее источник, а затем переносил их на поверхность, файл SVG просто определял бы форму с помощью атрибута style. Тем не менее, модели не являются несовместимыми; многие средства визуализации SVG используют Cairo для тяжелой работы. [13]
Пример
Изображение SVG, созданное по этому примеру
Достаточно сложную графику « Hello world » можно нарисовать с помощью Cairo всего лишь с помощью нескольких строк исходного кода :
#include <каир-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 * шаблон = cairo_pattern_create_radial ( 50 , 50 , 5 , 50 , 50 , 50 );cairo_pattern_add_color_stop_rgb ( шаблон , 0 , 0,75 , 0,15 , 0,99 );cairo_pattern_add_color_stop_rgb ( шаблон , 0,9 , 1 , 1 , 1 );cairo_set_source ( cr , шаблон );cairo_fill ( кр );/* Пишем на переднем плане */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 ( кр , 10 , 25 );cairo_show_text ( cr , «Привет» );cairo_move_to ( кр , 10 , 75 );cairo_show_text ( cr , «Википедия!» );cairo_destroy ( кр );cairo_surface_destroy ( поверхность );}
Заметное использование
Cairo популярен в сообществе разработчиков программного обеспечения с открытым исходным кодом благодаря обеспечению кроссплатформенной поддержки расширенных возможностей 2D-рисования.
GTK , начиная с 2005 года с версии 2.8, использует Cairo для рендеринга большинства своих графических элементов управления . [14] Начиная с GTK версии 3, весь рендеринг выполняется с использованием Cairo.
Программа под названием gtk-vector-screenshot, найденная в Debian , позволяет делать векторные снимки экрана (SVG, PDF или PostScript) приложений GTK 3. [15]
Проект Mono Project , [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. С тех пор Маним перешел на использование OpenGL . Эта версия называется ManimGL. [20]
MorphOS 2.5 включает реализацию Cairo с общей библиотекой, которая была доступна как отдельная версия для более ранних версий MorphOS.
AmigaOS 4.1 поддерживает библиотеку общих объектов Cairo (libcairo.so) при установке по умолчанию.
FontForge по умолчанию включил Cairo для рендеринга в середине октября 2008 года.
R может выводить графики в форматах PDF , PostScript и SVG , используя Cairo, если он доступен.
Gnuplot 4.4 теперь использует Cairo для рендеринга PDF и PNG . [21]
Интернет-браузер для PlayStation 3 использует Cairo начиная с обновления системного программного обеспечения 4.10.
Synfig 0.64 теперь поддерживает дополнительный рендеринг Cairo.
Построение графиков данных временных рядов по требованию в Graphite .
Движок виджетов Konfabulator/Yahoo использует Cairo для вывода, идентичного Win32 и Quartz в Mac OS/X .
SolveSpace , бесплатное программное обеспечение 2D и 3D CAD с открытым исходным кодом .
История
Кит Паккард и Карл Уорт основали проект Cairo для использования в системе X Window . [2] Первоначально (по крайней мере, до 2003 года) он назывался Xr или Xr/Xc . Название было изменено, чтобы подчеркнуть идею кроссплатформенной библиотеки для доступа к серверу отображения , не привязанной к X Window System . [22]
Название Каир происходит от первоначального имени Xr , интерпретируемого как греческие буквы хи и ро . [23]
Сложная верстка текста
Cairo поддерживает шрифты на основе латиницы и CJK, но не поддерживает шрифты со сложной компоновкой текста , требующие формирования глифов. [24]