GTK
Тип | Widget toolkit |
---|---|
Розробники | GNOME Foundation |
Стабільний випуск | 4.8 (6 вересня 2022 ) |
Платформа | кросплатформова програма |
Операційна система | Крос-платформовий |
Мова програмування | C |
Ліцензія | GNU Lesser General Public License |
Онлайн-документація | docs.gtk.org |
Репозиторій | gitlab.gnome.org/GNOME/gtk |
Вебсайт | www.gtk.org |
GTK, колишній GTK+, (від The GIMP ToolKit) — кросплатформовий набір інструментів для створення графічних інтерфейсів користувача. Разом із Qt є одним із найпопулярніших інструментів для Wayland та X Window System.
GTK було розроблено для GNU Image Manipulation Program (GIMP), растрового графічного редактора, у 1997 році Спенсером Кімбалом (Spencer Kimball) та Петером Матісом (Peter Mattis), членами eXperimental Computing Facility (XCF) в UC Berkeley. GTK розвивається в рамках проєкту GNU і є вільним програмним забезпеченням. Код GTK розповсюджується під ліцензією LGPL, що дозволяє використовувати GTK не тільки для розробки вільного ПЗ, а й для створення власницьких програм, не вимагаючи від виробників закритих програм виплати роялті або купівлі спеціальної ліцензії.
До складу тулкіта входить повний набір віджетів, що дозволяють використовувати GTK для проєктів різного рівня і розміру. GTK спеціально спроєктований для підтримки не тільки C/C++, але й інших мов програмування, таких як Perl і Python, що в поєднанні з використанням візуального будівника інтерфейсу Glade дозволяє істотно спростити розробку і скоротити час написання графічних інтерфейсів. Організація виводу в GTK абстрагована від типу віконних систем, наприклад, поставляється бекенд, що забезпечує можливість роботи поверх дисплейного сервера Wayland, а також бекенд, котрий дозволяє здійснювати виведення бібліотеки GTK у вікні веббраузера (запустивши GTK-застосунок на одній машині, можна відкрити браузер на іншій машині і отримати доступ до інтерфейсу цієї програми).
Відтоді як GTK був розроблений в рамках проєкту GIMP, тулкіт використовується в різних проєктах, наприклад, GTK лежить в основі десктоп-оточень GNOME та Xfce, використовується в таких продуктах, як Firefox і OpenOffice/LibreOffice.
GTK+ написана на мові програмування С, і використовує систему об'єктів GObject, що робить її об'єктно-орієнтованою. Платформа GNOME забезпечує міжмовне зв'язування для мов:
- C++ (gtkmm)
- Fortran (gtk-fortran)
- Perl (Gtk2-perl)
- Ruby (ruby-gtk2)
- Python (PyGTK)
- Java (java-gnome) (не доступна Microsoft Windows)
- C# (Gtk#)
- PHP (PHP-GTK)
Іншими розробниками були написані біндінґи для багатьох інших мов програмування (Ada, D, Haskell, Ocaml, Pascal, Pike, Tcl, Euphoria[en] та усіх мов .NET). GTK server[2] забезпечує GTK+ інтерфейсом міжпроцесорної взаємодії, що дозволяє використовувати його у будь-якій мові програмування, котра підтримує механізм введення-виведення (I/O), включно із сценаріями shell. Повний перелік біндінґів можна знайти на сайті проєкту[3].
На відміну від Qt, GTK+ не базується на інших Xt-подібних наборах віджетів. Це надає їй гнучкості і дозволяє використовувати GTK+ на інших системах. Однак, без цієї залежності, GTK+ немає доступу до бази ресурсів X Window System, традиційного способу налаштування програмного забезпечення X11.
Кінцевий користувач може налаштувати зовнішній вигляд графічних елементів за допомогою системи жупанів[що це?]. Існують жупани, котрі імітують вигляд елементів графічних інтерфейсів таких операційних систем, як Windows 95, Motif, Qt, NEXTSTEP, та багатьох інших.
GTK+ спочатку призначалась для X Window System, і вони й по нині залишається її основною платформою. Іншими підтримуваними програмними платформами є Microsoft Windows (Windows 2000 та вище), DirectFB та Quartz (Mac OS X v10.4 та вище, нині знаходиться у стадії розробки).
GTK+ 2 переважає своїми можливостями GTK+ 1. Серед нових можливостей вдосконалене відображення тексту за допомогою Pango, нова система жупанів, вдосконалена доступність за допомогою Accessibility Toolkit, повний перехід на Unicode використовуючи рядки UTF-8 та гнучкіше API. Між тим, GTK+ 2 втратила сумісність з GTK+ 1, і програмісти повинні переписати програмне забезпечення під нову версію бібліотеки.
Починаючи з версії 2.8, GTK+ 2 вимагає бібліотеку Cairo для відображення векторної графіки у GTK+ 2.
10 лютого 2011 відбувся реліз GTK+ 3.0.0[4]. Робота над GTK+ 3 починалася як «велика чистка» і тривала протягом кількох років.
Нововведення:
- Відображенням всього тепер займається Cairo. GDK більше не є обгорткою застарілих X11 drawing API. Це дозволило видалити кілька X11-орієнтованих концепцій (GCs, colormaps, pixmaps). Більшу частину роботи зробив Benjamin Otte з RedHat.
- Підтримка сучасних пристроїв введення. Раніше цим нехтували (мало з основних розробників користуються «екзотичними» пристроями введення). З приходом GTK+ 3 з'явилася підтримка декількох покажчиків, клавіатур тощо.
- Нові API для тем зі знайомим синтаксисом CSS для налаштування і інші вдосконалення, наприклад, анімована зміна станів.
- Гнучкіше керування геометрією.
- Підтримка кількох бекендів GDK. З GTK+ 2.x потрібно було перезбирати програми для їхньої роботи з різними бекендами GDK, бо вони були реалізовані окремими бібліотеками. У GTK+ 3 їх можна вбудувати в одну бібліотеку і вибирати під час виконання. Це полегшить перехід з X11 на Wayland або з Quartz на X11.
- Легка підтримка застосунків. З інтеграцією D-Bus в GIO стало можливим додати клас, який обробляє велику кількість аспектів інтеграції платформи створення програмного забезпечення, таких як відстеження відкритих вікон, забезпечення унікальності, експорт дій тощо. Це все в стадії розробки і буде розширено в майбутньому.
Лінійка випусків | Остання Minor версія | Дата виходу | Основні зміни |
---|---|---|---|
1.0.x | 1.0.? | ? | ? |
1.2.x [Архівовано 25 липня 2020 у Wayback Machine.] | 1.2.10 | 2 квітня 2001 | ? |
2.0.x [Архівовано 27 вересня 2020 у Wayback Machine.] | 2.0.9 | 20 листопада 2002 | ? |
2.2.x [Архівовано 27 вересня 2020 у Wayback Machine.] | 2.2.4 | 4 вересня 2003 | ? |
2.4.x [Архівовано 27 вересня 2020 у Wayback Machine.] | 2.4.14 | 3 грудня 2004 | ? |
2.6.x [Архівовано 28 жовтня 2020 у Wayback Machine.] | 2.6.10 | 18 серпня 2005 | ? |
2.8.x [Архівовано 28 жовтня 2020 у Wayback Machine.] | 2.8.20 | 2 липня 2006 | Інтеграція Cairo |
2.10.x [Архівовано 22 вересня 2020 у Wayback Machine.] | 2.10.14 | 16 липня 2007 | GtkPrint — підтримка друку |
2.12.x [Архівовано 28 вересня 2020 у Wayback Machine.] | 2.12.11 | 12 березня 2008 | GtkBuilder — заміна libglade |
2.14.x [Архівовано 19 жовтня 2020 у Wayback Machine.] | 2.14.3 | 24 вересня 2008 | Перелік новинок [Архівовано 15 лютого 2011 у Wayback Machine.] |
3.0 | 10 лютого 2011 | Перелік новинок [Архівовано 10 вересня 2008 у Wayback Machine.] | |
3.2 | 26 вересня 2011 | Перелік новинок [Архівовано 28 березня 2012 у Wayback Machine.] | |
3.4 | 26 березня 2012 | Перелік новинок [Архівовано 10 вересня 2008 у Wayback Machine.] | |
3.6 | |||
3.8 | 25 березня 2013 | ||
3.10 | 23 вересня 2013 | ||
3.12 | 25 березня 2014 | можливість роботи поверх дисплейного сервера Wayland | |
3.14 | 22 вересня 2014 | підтримка мультитач доведена до практичного застосування; інтегрований власний інтерактивний зневаджувач GtkInspector | |
3.16 | 22 березня 2015 | можливість рисувати через OpenGL без зовнішніх надбудов | |
3.18 | 22 вересня 2015 | ||
3.20 | 21 березня 2016 |
Класичний приклад програми «Привіт, світе!» (англ. «Hello, world!») на мові С з використанням GTK+:
#include <config.h>
#include <gtk/gtk.h>
/*
* Запускаємо головний цикл програми
*/
static void
on_destroy (GtkWidget * widget, gpointer data)
{
gtk_main_quit ();
}
int main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *label;
gtk_init (&argc, &argv);
/* створюємо головне вікно */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* задаємо границю для вікна розміром 20 пікселів */
gtk_container_set_border_width (GTK_CONTAINER (window), 20);
/* задаємо вікну заголовок */
gtk_window_set_title (GTK_WINDOW (window), PACKAGE " " VERSION);
/* задаємо розміри вікна */
gtk_window_set_default_size (GTK_WINDOW (window), 200, 50);
/* Під'єднуємо подію "destroy" головного вікна до нашої функції on_destroy */
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (on_destroy), NULL);
/* створюємо мітку "Привіт, світе!" */
label = gtk_label_new ("Hello, World");
/* і додаємо її до головного вікна */
gtk_container_add (GTK_CONTAINER (window), label);
/* відобразити усі віджети */
gtk_widget_show_all (window);
/* запускаємо головний цикл */
gtk_main ();
return 0;
}
Project Ridley має намір консолідувати розробку низки бібліотек, котрі є частиною GTK+, серед них: libgnome, libgnomeui, libgnomeprint22, libgnomeprintui22, libglade, libgnomecanvas, libegg, libeel та gtkglext[5].
- ↑ http://directory.fsf.org/wiki/gtk+
- ↑ GTK-server (англ.). Архів оригіналу за 27 серпня 2008. Процитовано 16 серпня 2008.
- ↑ Language bindings (англ.). Архів оригіналу за 2 квітня 2011.
- ↑ GTK+ 3.0. Архів оригіналу за 4 березня 2016. Процитовано 6 травня 2022.
- ↑ ProjectRidley — GNOME Live!. Архів оригіналу за 1 березня 2011. Процитовано 17 серпня 2008.
- Домашня сторінка GTK+
- GTK+ Planet
- Foundations of GTK+ Development [Архівовано 14 вересня 2008 у Wayback Machine.], книга для розробників
- Curses надбудова для GTK+
- GTK+ dev-cpp пакунок і runtime для Windows