جی‌تی‌کی

**جی‌تی‌کی+**  یک ابزار ویجت برای ایجاد واسط گرافیکی کاربر است. جی‌تی‌کی+ به همراه کیوت، از محبوبترین ابزارهای توسعه واسط گرافیکی کاربر برای سامانه پنجره اکس به حساب می‌آیند. جی‌تی‌کی+ هم‌اکنون توسط بنیاد گنوم نگهداری می‌شود.

جی‌تی‌کی+ در اصل برای نرم‌افزار گیمپ نوشته شده بود. گیمپ یک نرم‌افزار آزاد برای ویرایش تصاویر بیت‌مپی است. جی‌تی‌کی در سال ۱۹۹۷ توسط اسپنسر کیمبال و پیتر ماتیس از اعضای XCF در دانشگاه کالیفرنیا، برکلی نوشته شد.

این کتابخانه تحت پروانه گنو ال‌جی‌پی‌ال منتشر می‌شود که هم به نرم‌افزارهای آزاد و هم به نرم‌افزارهای انحصاری اجازه می‌دهد از این کتابخانه استفاده کنند. همچنین نام جی‌تی‌کی+ از نام پیشین خود یعنی «جی‌تی‌کی» می‌آید. علامت + نشان می‌دهد که این کتابخانه نسخه بهبودیافته و بهینه شده جی‌تی‌کی است.

جی‌تی‌کی+ از کتابخانه اکس برای ترسیم ویجت‌ها استفاده می‌کند. استفاده از کتابخانه اکس انعطاف‌پذیری به همراه دارد و به جی‌تی‌کی+ اجازه می‌دهد بر روی پلتفرم‌هایی که در آنها سامانه پنجره اکس وجود ندارند هم اجرا شود. در حالی که جی‌تی‌کی+ در درجه اول سامانه پنجره اکس را مورد هدف قرار داده، اما می‌توان از آن بر روی پلتفرم‌های دیگری مانند مایکروسافت ویندوز و اواس ده هم استفاده کرد.

## ویژگی های جی تی کی
یکی از قدرتمندترین ویژگی های GTK، قالب بندی است. ظاهر تمامی ویجت ها و عناصر گرافیکی در GTK را میتوان تقریبا با تمام جزئیات سفارشی کرد. از رنگ متن گرفته تا شکل گوشه های یک دکمه. معمولا ویجت ها از ظاهر تم سیستمی که نرم افزار روی آن اجرا میشود، استفاده میکنند. برای مثال تصویر راست نرم افزاری بر روی سخت افزار Raspberry Pi و محیط دسکتاپ آن و تم سفارشی PIX و تصویر چپ روی اوبونتو لینوکس، دسکتاپ گنوم و تم Yaru میباشد. 
جایگزین=تصویر بارگذاری نشد.|بندانگشتی|تفاوت میان پنجره و ویجت های آن در Raspberry Pi و Ubuntu Linux که نشان دهنده وابستگی GTK به تم سیستم عامل است. تصویر سمت راست در اوبونتو و تصویر سمت چپ در Raspberry Pi
از ویژگی های دیگر این کتابخانه محبوب، امکان استفاده از CSS برای استایل دهی به ویجت ها و پنجره نرم افزار است. استفاده از این ویژگی باعث تغییر ظاهر ویجت ها میشود ولی باز هم قالب کلی ویجت ها تحت امر theme سیستم عامل است. در زیر میتوانید یک نمونه ساده از استایل دهی و تغییر رنگ پنجره نرم افزار و ویجت دکمه را در CSS مشاهده کنید :
```css
window {
  background-color: #898989;
}
button {
  background-color: #0274d9;
}
```
از مهمترین نرم افزار هایی که به برنامه نویس در راستای ساخت رابط کاربری اش کمک شایانی میکند، میتوان به نرم افزار های Glade و Cambalache اشاره کرد. در تصویر زیر میتوانید ظاهر نرم افزار Glade که نرم افزار رسمی GTK میباشد را مشاهده کنید :
جایگزین=تصویر بارگذاری نشد.|بندانگشتی|ظاهر نرم افزار Glade در GTK
خود این نرم افزار با GTK ساخته شده است. علاوه بر آن، نرم افزار های متعدد دیگری برای آشنایی تازه واردین GTK با این پلتفرم ساخت شده است که یکی از آنها،مجموعه نرم افزار های Gtk Demo میباشد. این مجموعه نرم افزار که با GTK نوشته شده است، درون خود لیستی بلند از مثال های متعدد GTK با زبان سی را شامل میشود و قابل نصب روی تمام توزیع های لینوکسی میباشد.

## مثال ساده در GTK4 در زبان سی
نسخه چهارم کتابخانه GTK تفاوت فاحشی با نسخه های قبلی و حتی قبل تر از آن نداشته است بلکه مجموعه دستورات و توابع گرافیکی نرم افزار از تابع main به تابع ثانویه دیگری موسوم به `activate` منتقل شده است ( البته نام تابع کاملا اختیاری است ) و توسط g_signal_connect آن تابع اجرا میشود.
```c
#include <gtk/gtk.h> // gtk4

static void activate (GtkApplication* app,
          gpointer        user_data)
{
  GtkWidget *window;
  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
  gtk_window_present (GTK_WINDOW (window));
}

int main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}
```


### توضیحات خط به خط
در خط اول، ما مجموعه توابع و کتابخانه های gtk را به نرم افزار شامل کردیم. بدنه و اصل دستورات نرم افزارمان درون تابع `activate` قرار دارد و و تابع main تنها وظیفه اجرای این تابع را به روش درست دارد. در خط 16، ما یک نوع داده انتزاعی با نام app و نوع GtkApplication ایجاد کردیم. این داده انتزاعی کلاسی است که بسیاری از جنبه های مهم یک برنامه GTK را به شیوه ای راحت مدیریت می کند. هر GtkApplication دارای یک شناسه نام است که مدیریت نرم افزار ها را برای سیستم عامل راحت تر میکند مانند همان شناسه ای که برای اپلیکیشن های اندروید استفاده میشود. این شناسه ها برای نرم افزار DBus و آیکون نرم افزار در دسکتاپ ( .desktop ) و ... مورد استفاده قرار میگیرد. در آخر نرم افزار توسط g_application_run اجرا و کد خطا برگردانده و در متغیر status ذخیره میشود.

در تابع activate، خط ششم باعث ایجاد نوع داده انتزاعی پنجره میشود و در خط بعد، متغیر مقداردهی میشود. خطوط هشتم و نهم برای تغییر تایتل پنجره، اندازه پیشفرض پنجره هنگام ظاهر شدن آن و قبل از تغییر آن توسط کاربر میشود و در نهایت، خط دهم باعث نمایش پنجره و پایدار شدن نرم افزار و عدم پایان نرم افزار میشود ( شبیه یک حلقه بی پایان ) تا کاربر برای خروجی، دکمه X را فشار دهد یا نرم افزار خود اقدام به خروج نماید.

### کامپایل کردن نرم افزار
برای کامپایل کردن این کد با استفاده از کامپایلر GCC به این شکل عمل کنید و بجای example-0.c، نام فایل سورس تان و بجای example-0 نام فایل اجرایی خروجی تان را جاگذاری کنید :
```bash
gcc $( pkg-config --cflags gtk4 ) -o example-0 example-0.c $( pkg-config --libs gtk4 )
```


## نرم‌افزارهای کاربردی

برخی از نرم‌افزارهای کاربردی و معروف که از جی‌تی‌کی+ استفاده می‌کنند عبارتند از:

* نرم‌افزارهای پروژه گنوم
* گیمپ - یک نرم‌افزار ویرایش تصاویر
* اینک‌اسکیپ یک نرم‌افزار ویرایش تصاویر برداری
* ابی‌ورد - یک واژه‌پرداز
* آنجوتا - یک محیط توسعه مجتمع
* اکیگا - یک نرم‌افزار برای ویدئو کنفرانس
* گنوم وب - یک مرورگر وب
* اوولوشن - یک مدیر اطلاعات شخصی
* گنومریک - یک نرم‌افزار برای صفحه گسترده
* گرمپز - یک نرم‌افزار ایجاد و ویرایش شجره‌نامه
* میدوری (مرورگر وب) - یک مرورگر وب
* پیچین - نرم‌افزاری برای چت
* وایرشارک - یک نرم‌افزار برای تجزیه و تحلیل بسته‌های شبکه

فهرست منبع :

* C & GUI Programming 2nd Edition, Simon Long book
* https://docs.gtk.org/gtk4/getting_started.html
* https://docs.gtk.org/gtk3/getting_started.html
* https://docs.gtk.org/gtk3/class.Application.html
* https://flathub.org

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