کایرو (کتابخانه گرافیکی)

**کایرو** نام کتابخانه گرافیکی است که برای انجام کارهای گرافیکی دو بعدی درست شده است و دارای API یا مجموعه توابعی است که برنامه‌نویسان بتوانند آن را در تولید نرم‌افزار برای انجام کارهای گرافیکی دو بعدی به کار بگیرند.
کایرو به گونه‌ای طراحی شده است که در صورت وجود امکانات سخت‌افزاری در رایانه شتاب‌دهنده سخت‌افزاری را به کار گیرد. کتابخانه کایرو در اصل به زبان سی نوشته شده است ولی به زبان‌های دیگر هم منتقل شده است.

## '''بستگی زبانی یا رابط زبانی'''
برای برنامه کایرو بستگی زبانی‌های مختلفی نوشته شده. این برنامه‌ها اجازه می‌دهند که از کتابخانه‌ای که به یک زبان برنامه‌نویسی نوشته شده است در زبان برنامه‌نویسی دیگری به کار گرفته شود. کایرو مجموعه‌ای از بستگی‌های زبانی را برای زبان‌های مختلف از جمله سی‌پلاس‌پلاس، سی‌شارپ و زبان‌های دیگر مانند واسط خط فرمان، دلفی، ایفل، فرترن، فکتور، هاربر، هسکل، جولیا، لوآ، پرل، پی‌اچ‌پی، پایتون، روبی، راست، اسکیم، اسمال‌تاک و چندین زبان دیگر مانند گامباس (شبیه ویژوال بیسیک) دارد.

## کاربردهای شناخته‌شده کتابخانه کایرو
* GTK+
* پروژه Mono
* بنیاد Mozilla برای انجام Render صفحات در سیستم صفحه بندی Gecko از این کتابخانه بهره می‌برد.

## تاریخچه
کیث پاکارد و کارل وورث پروژه کایرو را برای استفاده در سامانه پنجره اکس بنیان نهادند. در ابتدا (حداقل تا سال ۲۰۰۳) **Xr** یا **Xr/Xc** نامیده می‌شد. این نام برای این که بر چند پلتفرم بودن این کتابخانه تمرکز شود تغییر یافت. این نام جدید کمک می‌کند که بر روی ایده برنامه چند پلتفورمی برای دسترسی به سرور نمایشگر تأکید شود و نام کتابخانه از وابستگی این کتابخانه به سامانه پنجره اکس رها شود.] نام کایرو از نام اصلی Xr گرفته شده است که به عنوان حروف یونانی خی (تلفظ انگلیسی: **کای**) و رو (تلفظ انگلیسی: **رو**) و در نتیجه ترکیب **کایرو** درست می‌شود.

## نمونه
یک نمونه از برنامه «سلام، دنیا!» که نسبتا پیچیده هم هست را اینجا می‌بینید.  
```c
#include <cairo-svg.h>
#include <stdio.h>

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(surface);

    /* Draw the squares in the background */
    for (int x = 0; x < 10; ++x)
       for (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(pattern, 0.9, 1, 1, 1);

    cairo_set_source(cr, pattern);
    cairo_fill(cr);

    /* Writing in the foreground */
    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, "Hallo");

    cairo_move_to(cr, 10, 75);
    cairo_show_text(cr, "Wikipedia!");

    cairo_destroy(cr);
    cairo_surface_destroy(surface);
}
```


## چینش متن پیچیده
کایرو فونت های مبتنی بر لاتین و چینش متن پیچیده را مدیریت می‌کند، اما مستقیماً از فونت‌هایی با چینش متن پیچیده که نیاز به شکل‌دهی به حروف دارند پشتیبانی نمی‌کند. توسعه دهندگان کایرو استفاده از پنگو را پیشنهاد می‌کنند که چینش متن پیچیده را ارائه می‌کند و می‌تواند در کنار کایرو برای این کار به کار گرفته شود.

= جستارهای همانند = 
* وب‌جی‌ال

= منابع =

کایرو
رده:جی‌تی‌کی+
رده:فری‌دسکتاپ.ارگ
رده:کتابخانه‌های رایانه‌ای آزاد
رده:کتابخانه‌های گنوم
رده:گنوم
رده:نرم‌افزار
رده:نرم‌افزارهای آزاد نوشته‌شده با سی
رده:نرم‌افزارهای دارای پروانه ال‌جی‌پی‌ال
رده:نرم‌افزارهایی که از پروانه موزیلا استفاده می‌کنند