ukotvit menu |
GTK+ je napsáno v jazyce C, ale cílem jeho vývojářů je snadná použitelnost i v jiných jazycích, z čehož těží i Python a jeho GTK+ nadstavba PyGTK. Proto je GTK+ (navzdory neobjektovému jazyku C) objektově orientované. Dalším cílem vývojářů GTK+ je snadná přenositelnost mezi platformami (UNIX, Windows, ...) a architekturami (různé typy nekompatibilních procesorů). To dohromady klady vysoké nároky na kvalitu a přenositelnost kódu, které GTK+ splňuje.
Z toho důvodu je GTK+ modulární a skládá se ze tří vrstev GLib-GDK-GTK a několika dalších částí, jako Pango, Cairo a dalších. Některé z těchto částí jsou samostatné knihovny, použitelné i bez GTK+. S výjimkou knihovny Cairo byly ale všechny napsány primárně pro GTK+.
GLib [1] je samostatná knihovna a základ všeho. Staví na ni všechny ostatní GTK+ knihovny. Jejím cílem je snadná přenositelnost a zjednodušení programování v C. GLib zavádí vlastní, na platformě a architektuře nezávislé, datové typy, dynamický typový systém, nové vyšší datové typy, signály, objektové paradigma a řadu šikovných funkcí, třeba pro alokaci paměti, práci s kódováním a podobně.
GObject [2] je fyzicky součástí GLib, ale logicky je to samostatná část. Zavádí do GTK+ objektové paradigma, které je pro GUI toolkity ideální a významně usnadňuje používání GTK+ v objektově orientovaných jazycích. Je to základní objekt, z kterého jsou odvozeny všechny ostatní objekty v GTK+. Tato část GLib je v Pythonu dostupná jako modul gobject.
GDK [3] je nízkoúrovnňová GUI knihovna. Definuje základní grafické datové typy, umožňuje kreslení primitivních tvarů, jako body, čáry a podobně, práci s barvami, obrazovkou, okny, kurzory, obrázky, interakci se správcem oken, a další nízkoúrovňové operace a operace závislé na operačním systému. V UNIXech je postaveno nad xlib X Window Serveru a ve windows (domnívám se) nad GDI a Win32 API. Cílem této knihovny je setřít rozdíly mezi jednotlivými platformami. Od GTK+ 2.8 ji s tímto pomáhá vektorová knihovna Cairo, která si na starost bere systémově nazávislé kreslení na obrazovku (a ne jen na ni). Další pomocník je knihovna Pango, která ma na starost práci s texty. V Pythonu je GDK knihovna přístupná jako modul gdk.
GTK [4] je základní GUI knihovna, pro kterou všechny ostatní knihovny pracují. Je tedy postavena nejvýše a programátor GUI aplikace pracuje především s ní. Například vytvoří widget Label a nastaví mu nějaký text. Na pozadí se pak používá GObject a funkce z GLib, GDK, ATK, Pango a podobně, ale tím se programátor GUI aplikace vůbec nemusí zabývat. Proto je programování v GTK+ tak snadné a GTK+ programy snadno přenositelné.
GTK+ obsahuje především definice widgetů a dialogů a funkce pro práci se styly, Drag and Drop, signály, klávesovými zkratkami a podobně. V Pythonu je dostupná jako objekt gtk.
Pango [5] je samostatná [6] knihovna pro sjednocení práce s fonty a pro formátování a vykreslení textů. Může k tomu používat další různé knihovny, jako FreeType, fontconfig, Cairo, Win32 API a podobně v závislosti na systému a dlaších okolnostech. Pro programátora GUI aplikace je prakticky neviditelná, protože se používá transparentně. Zajímavá je pouze podpora jednoduchého XML jazyka podobnému HTML pro snadné formátování textů třeba v popiscích nebo názvech tlačítek a podobně. Knihovna je v Pythonu dostupná jako modul pango.
Pnago [7] je knihovna, která má na starost přístupnost (accessibility) pro různě indisponované (zrakově, motoricky) uživatele. GTK+ aplikace by tak díky této knihovně mely být použitelné i pro ně. Nevyznám se v této oblasti, takže to nedovedu posoudit. Ani nevím zda je tato podpora automatická, nebo se pro ní něco musí udělat.
Cairo [7] je samostatná [7]vektorová grafická knihovna s výstupem nazávislým na zařízení. Vyjadřovací schopnosti této knihovny jsou na úrovni PDF. Výstup je možný na obrazovku v různých window systémech (X Window, MS Windows), na tiskárnu (PS), do souboru jako vektorový obrázek (PDF) nebo bitmapový (PNG). Další výstupní tzv. povrchy lze přidávat. V současné době je experimentální výstup do Open GL, tedy hardwarově akcelerovaný výstup. GTK+ od verze 2.8 používá Cairo jako backend pro vykreslování, čímž se z GTK+ stal moderní vektorový GUI toolkit, schopný přizpůsobit se různým rozlišením obrazovek. Další obrovská výhoda je sjednocení výstupu na obrazovku a na tiskárnu. Díky tomu GTK+ ve verzi 2.10 mohlo přinést kvalitní podporu tisku.
[7]