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

نویسنده(های)
اصلی
کیث پاکارد, کارل ورث[۱]
توسعه‌دهنده(ها)کارل ورث، بهداد اسفهبد
انتشار اولیهپیش از ۲۰۰۳ (۲۰۰۳-خطا: زمان نامعتبر}})[۲]
انتشار پایدار
الگو:Latest stable software release/cairo
مخزنgitlab.freedesktop.org/cairo/cairo
نوشته‌شده باسی (زبان برنامه‌نویسی)
نوعکتابخانه گرافیکی
مجوزGNU Lesser General Public License version 2.1 (only) or Mozilla Public License 1.1
وبگاه

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

بستگی زبانی یا رابط زبانی

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

کاربردهای شناخته‌شده کتابخانه کایرو

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

تاریخچه

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

نمونه

یک نمونه از برنامه «سلام، دنیا!» که نسبتا پیچیده هم هست را اینجا می‌بینید.

فایل اس‌وی‌جی تولیدشده با نمونه برنامه این جستار
#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);
}

چینش متن پیچیده

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

جستارهای همانند

منابع

  1. "Carl's boring web pages". cworth.org. 2013. Retrieved July 11, 2014.
  2. 1 2 "Xr: Cross-device Rendering for Vector Graphics". Retrieved June 8, 2009.
  3. "Cairo homepage". Retrieved October 30, 2010.
  4. "Cairo Language Bindings". Retrieved April 16, 2014.
  5. "Mailing list thread about the Cairo name change". July 15, 2003. Retrieved June 8, 2009.
  6. "Mailing list thread about the Cairo name change". July 12, 2003. Retrieved December 2, 2006.
  7. "How do I use Pango instead of Cairo's "toy" text API?". Retrieved March 20, 2024.