*Tämä artikkeli käsittelee käyttöliittymäkirjastoa. Lyhenteen muita merkityksiä on lueteltu täsmennyssivulla.*

**GTK** eli **GIMP Toolkit** (aikaisemmin **GTK+**) on useissa käyttöjärjestelmissä toimiva graafinen käyttöliittymäkirjasto. Se on Qt:n ohella suosituimpia X-ikkunointijärjestelmälle kehitettyjä käyttöliittymäkirjastoja. GTK on ohjelmoitu C-kielellä ja lisensoitu LGPL-lisenssillä. Nykyään se on GNU-projektin osa.

Alun perin GTK kehitettiin GIMP-kuvankäsittelyohjelmaa varten. Nykyään GTK on käytössä useissa merkittävissä Unix/Linux-järjestelmien työpöytäympäristöissä. Esimerkiksi GNOME ja Xfce rakentuvat sen päälle. Myös kämmenmikrojen Maemo-kehitysalusta käyttää GTK:ta. Se on käytössä joissakin suosituissa käyttöjärjestelmäriippumattomissa ohjelmissa kuten Pidginissä.

Historia
--------

GTK kehitettiin GIMPin tarpeisiin.
GTK:n kehittivät alun perin Spencer Kimball, Peter Mattis ja Josh MacDonald vuonna 1997 GIMP-kuvankäsittelyohjelman käyttöön Unix-käyttöjärjestelmien (mm. Linuxin) X Window Systemissä. Aluksi projektin nimenä oli pelkästään GTK, mutta se muutettiin GTK+:ksi oliopohjaisten laajennosten myötä.
GIMPin edeltävät versiot olivat käyttäneet kaupallista Motif-kirjastoa, johon Mattis ei ollut tyytyväinen.
Vähitellen GTK+:a alkoivat käyttää myös useat muut ohjelmistot, mukaan lukien samana vuonna alkunsa saanut GNOME-työpöytäympäristö.

Ensimmäinen vakaa versio, GTK+ 1.0 julkaistiin huhtikuussa 1998. Se sisälsi GIMPin tarvitsemat peruskomponentit. Helmikuussa 1999 julkaistu 1.2-versio käsitti useita laajennuksia ja oli tarkoitettu pelkän GIMPin sijaan yleiseen käyttöön.

Vuonna 2019 projektin nimi muuttui takaisin muotoon GTK.

### GTK+ 2

GNOME-työpöytä tummalla GTK+-teemalla
Seuraava versio, GTK+ 2.0 julkaistiin maaliskuussa 2002 yli kolmen vuoden kehitystyön jälkeen. Se sisälsi useita merkittäviä muutoksia ja rikkoi yhteensopivuuden aiempien versioiden kanssa. Uudistuksia olivat muun muassa tekstin renderöinnin siirtäminen Pango-kirjastolle, GObject-oliojärjestelmän eriyttäminen GLib-kirjastoon ja tuki Windows-alustalle.

Tämän jälkeen projektissa siirryttiin nopeampaan julkaisuaikatauluun ja yhteensopivuuden säilyttäviin aiemman päälle rakentaviin päivityksiin. Uusia versioita on julkaistu vaihtelevin väliajoin noin kerran vuodessa. Viimeinen 2.x-sarjan versio oli tammikuussa 2011 julkaistu 2.24, jonka jälkeen kaikki uusi kehitys kohdennettiin 3.x-sarjaan.

### GTK+ 3

Pitkän vakaan kauden edetessä alkoi esiintyä keskustelua seuraavasta suuremmasta uudistuksesta, osittaisesta yhteensopivuuden rikkomisesta ja vanhentuneiden rajapintojen poistamisesta.
Luonnos GTK+ 3:n kehityssuunnitelmasta julkaistiin huhtikuussa 2009 ja lopullinen versio 3.0 julkaistiin helmikuussa 2011. Ohjelmointiteknisten parannusten ja refaktoroinnin lisäksi muutoksia 2.x-sarjaan verrattuna ovat muun muassa nykyaikaistettu syötelaitteiden tuki, uusi CSS:ään perustuva teemajärjestelmä ja yksinomaan Cairoon perustuva renderöinti.

### GTK 4

GTK 4.0 on ensimmäinen pääjulkaisu, jossa on palattu aiempaan nimeen GTK (ei enää GTK+). GTK 4.0 on julkaistu joulukuussa 2020.

### Tuleva kehitys

Jatkossa projektin suunnitelmissa on muun muassa asettelu- ja teemajärjestelmän laajentaminen sekä yhteensopivuuden kehittäminen Gnome 3:n kanssa.

Arkkitehtuuri
-------------

GTK:n piirtämä liukusäädin.
Glade on ohjelma GTK-käyttöliittymien suunnitteluun ja rakentamiseen.
GTK perustuu neljään projektin kehittämään kirjastoon:

* **GLib** on matalan tason kirjasto, joka sisältää yleisiä rajapintoja ja funktioita esimerkiksi tietorakenteiden ja säikeiden hallintaan sekä tapahtumien käsittelyyn.
* **Pango** on tekstin renderöintiin tarkoitettu kirjasto, jossa on huomioitu erityisesti tuki eri kielille ja kirjoitusjärjestelmille.
* **Cairo** on kirjasto kaksiulotteisen grafiikan tuottamiseen.
* **ATK** on esteettömyyskäyttöliittymäkirjasto, jonka avulla ohjelmat voivat tukea esimerkiksi suurennosta ja vaihtoehtoisia syöttölaitteita.

GTK on kirjoitettu C-kielellä käyttäen GLibin GObject-oliojärjestelmää. Sitä on mahdollista käyttää useimmilla suosituilla ohjelmointikielillä kuten esimerkiksi C++, Java, C sharp ja Python. GTK on pääasiassa kohdennettu X Window Systemille, mutta se toimii myös Windowsissa ja tuki Mac OS:n Quartzille on kehitteillä.

Käyttöliittymän elementtien ulkoasua on GTK:ssa mahdollista vaihdella erilaisilla *teemamoottoreilla* sekä niille tehdyillä teemoilla.

### Esimerkkiohjelma

Seuraava C-kielinen ohjelma luo GTK+ 2:ta käyttäen ikkunan, joka sisältää tekstin "Hello, world!".

Esimerkkiohjelma Human-teemalla.

```
#include <gtk/gtk.h>

int main(int argc, char\* argv[])
{
 /\* Alustaa GTK:n. \*/
 gtk\_init(&argc, &argv);
 
 /\* Luo uuden ikkunan ja asettaa sille otsikon. \*/
 GtkWidget\* window = gtk\_window\_new(GTK\_WINDOW\_TOPLEVEL);
 gtk\_window\_set\_title(GTK\_WINDOW(window), "Hello World");
 
 /\* Asettaa ikkunalle 60 pikseliä leveän marginaalin reunoille. \*/
 gtk\_container\_set\_border\_width(GTK\_CONTAINER(window), 60);
 
 /\* Luo tekstin "Hello World" ja liittää sen ikkunaan. \*/
 GtkWidget\* label = gtk\_label\_new("Hello, world!");
 gtk\_container\_add(GTK\_CONTAINER(window), label);
 
 /\* Yhdistää ikkunansulkemisviesti pääsilmukan lopettamiseen niin, että
 \* ohjelma sammuu kun ikkuna suljetaan. \*/
 g\_signal\_connect(window, "destroy", G\_CALLBACK(gtk\_main\_quit), NULL);
 
 /\* Näyttää ikkunan ja sen sisällön. \*/
 gtk\_widget\_show\_all(window);
 
 /\* Siirtyy suorittamaan pääsilmukkaa. \*/
 gtk\_main();
 
 return 0;
}

```

Esimerkkiohjelman voi kääntää GCC-kääntäjällä komennolla `gcc -Wall helloworld.c -o helloworld $(pkg-config --cflags --libs gtk+-2.0)` ja suorittaa tämän jälkeen `./helloworld` -komennolla. Lopputulos näkyy oheisessa kuvassa.

Käyttö
------

GIMPissä GTK vastaa käyttöliittymäelementtien kuten valikoiden, vierityspalkkien sekä painikkeiden piirtämisestä ja hallinnasta.
GTK:ta on käytetty pohjana monissa graafisissa ympäristöissä ja niiden ohjelmissa. Sitä käyttäviä työpöytäympäristöjä ovat muun muassa GNOME, Xfce ja ROX Desktop. Lisäksi se on käytössä esimerkiksi Nokian kämmentietokoneille suunnatussa Maemo-kehitysalustassa sekä OLPC-projektin Sugar-käyttöliittymässä.

Käytössä olevan työpöydän tai alustan ei kuitenkaan tarvitse perustua GTK:hon, jotta sitä hyödyntäviä ohjelmia voisi käyttää; riittää, että järjestelmä sisältää tarvittavat kirjastotiedostot. Tästä syystä GTK onkin käytössä myös useissa monella käyttöjärjestelmällä toimivissa ohjelmissa. Yleisiä GTK:ta käyttäviä ohjelmia ovat muun muassa Abiword, Mozilla Firefoxin Linux-versio, GIMP, Inkscape ja Pidgin.

Katso myös
----------

* Qt
* Motif

Lähteet
-------

* GTK+ History *people.redhat.com*. Viitattu 30. huhtikuuta 2009. (englanniksi)
* GTK+ - Overview *The GTK+ Project*. Viitattu 30. huhtikuuta 2009. (englanniksi)[vanhentunut linkki]

### Viitteet

1. ↑  4.12.4, 17. marraskuuta 2023 (viitattu 18. marraskuuta 2023). Tieto on haettu Wikidatasta.
2. 1 2 3  GTK+ renamed to GTK *lwn.net*. Viitattu 24.3.2019. (englanniksi)
3. ↑  What is the + in GTK+? [GTK 2.x] *GTK+ FAQ*. Viitattu 30. huhtikuuta 2009. (englanniksi)
4. ↑
5. ↑  Matthias Clasen: GTK+ 2.24.0 *gtk-devel-list -sähköpostilista*.  30.1.2011. Viitattu 22.2.2011. (englanniksi)
6. ↑  Gtk+ Hackfest 2008: Day one and a half *Silicon Island*.  11.3.2008. Viitattu 23.5.2009. (englanniksi)
7. ↑  Steps to get to GTK+ 3.0 *gtk-devel-list -postituslista*.  3.6.2008. Viitattu 23.5.2009. (englanniksi)
8. ↑  Gtk+ 3 Roadmap Draft *gtk-devel-list -postituslista*.  9.4.2009. Viitattu 23.5.2009. (englanniksi)
9. 1 2  GTK+ 3.0.0 released *gnome-announce-list -postituslista*.  10.2.2011. Viitattu 11.2.2011. (englanniksi)
10. ↑  GTK 4.0 *blog.gtk.org*.  16.12.2020. Viitattu 1.1.2021. (englanniksi)
11. ↑  GTK+ 3 is here *blogs.fedoraproject.org*.  10.2.2011. Viitattu 11.2.2011. (englanniksi)[vanhentunut linkki]
12. ↑  Information about the native Mac OS X port of GTK+ *live.gnome.org*. Viitattu 30. huhtikuuta 2009. (englanniksi)

Aiheesta muualla
----------------

CommonsCommons
Wikimedia Commonsissa on kuvia tai muita tiedostoja aiheesta **GTK**.
* GTK:n viralliset sivut (englanniksi)
* GTK Linux.fi-wikissä (suomeksi)

### Käyttö ohjelmoinnissa

* GTK+ 2.0 -tutoriaali (englanniksi)