S GTK+ multiplatformně

18. 3. 2003
Doba čtení: 4 minuty

Sdílet

Cílem seriálu je ukázat možnosti a použití knihovny GTK+, nastínit problémy při multiplatformním vývoji, se kterými jsme se setkali, a jejich řešení. Podíváme se na výhody i nevýhody této knihovny, na kompilaci a dojde i na jednoduché příklady použití. Na obsahu dalších dílů se můžete podílet i vy, naši čtenáři. Diskuzní fórum je vám k dispozici.

Prolog

Většina lidí si pro svou činnost, ať je jakákoliv, hledá vhodný nástroj. Stejná situace je i při softwarovém vývoji. Společně s přáteli jsme se nyní u jednoho zastavili a docela se nám zalíbil. Rádi bychom vás s ním blíže seznámili a ukázali možné použití.

Příklady použití budou v jazyce C, případně C++. Bylo by dobré, aby měl čtenář jasnou představu o rozdílu mezi linkerem, compilerem apod.

Multiplatformní aplikace

Volba frameworku (programovací prostředí, knihovny, atd.) je zásadní pro každý projekt a je závislá na jeho typu. Naše rozhodnutí pro GTK+ řady 2.x mělo několik důvodů. Hledali jsme vhodný nástroj pro tvorbu uživatelského rozhraní a požadovali jsme následující:

  • bezproblémové fungování ve Win32 a běžných Unixech
  • dostatečná škála již hotových prvků (combo boxy, listy, stromy…)
  • intuitivní ovládání (jak při programování, tak používání)
  • příjemný vzhled uživatelského rozhraní
  • rozumná licenční politika (nejlépe LGPL)
  • bezvadná podopora různých národních prostředí (hlavně čeština, angličitna)

Tato kritéria se nám zdá, že splňuje GTK+ ve verzi 2.0 a vyšší.

GTK+ 2.x – vlastnosti

Knihovna vznikla jako toolkit pro program GIMP (odtud název Gimp ToolKit=GTK). Je založena na třech základních knihovnách:

GLib – nízkoúrovňová knihovna pro základní funkce zpracování zpráv, vlákna, dynamicky nahrávané knihovny

Pango – knihovna pro vykreslování písma, zpracování textu v mezinárodním prostředí, všechen text je zpracováván v kódování utf-8

ATK – knihovna pro zajištění alternativních vstupních zařízení

Vlastní knihovna GTK+ poskytuje rozhraní pro práci s grafickými prvky, jejich rozložením, vytváření oken a manipulaci s nimi. Ukázka rozhraní vytvořeného pomocí knihovny je na následujícím obrázku.

rozhraní vytvořeného pomocí knihovny GTK+

Základní prvky uživatelského rozhraní:

  • okna, dialogová okna
  • tlačítka, nástrojové lišty, menu, kontextová menu
  • textové popisy, pole pro vkládání textu
  • spustitelné seznamy (combo box), seznamy (list), stromy
  • prvky pro zobrazování obrázku
  • základní dialogy výběr souboru, písma, barvy, textová informace apod.
  • další prvky, jako jsou stavový řádek, posuvníky, záložky atd.

Některé další důležité vlastnosti:

  • podpora mezinárodního prostředí kódování utf-8
  • podpora vícevláknových aplikací

Více informací je možno nalézt na stránkách knihovny.

GTK+ 2.x problémy, nevýhody

Shrnutí hlavních problémů, které v knihovně vidíme:

a) Chybějící podporu tisku tisk je nutno řešit na vyšší úrovni, je obtížné posoudit, zda je to dobře, či nikoliv. V rámci projektu GNOME vzniká nová tisková knihovna, zda ji bude možno použít multiplatformě, není zatím zcela jasné.

b) Starý File dialog – dialog pro otvírání a zavírání souborů se nezměnil od verze 1.x. Je silně omezen a neumožňuje filtrování souborů, implementace pro Win32 nemá samostatné políčko pro výběr disku (bylo by asi vhodnější, aby byl podobnější chování ve Win32 nebo KDE)

c) Chybějící nástoj pro rychlý obousměrný návrh dialogů – dialogy je možno vytvářet pomocí programu Glade, ten bohužel není integrován s vývojovým prostředím (např. Anjuta)

První příklad v GTK+

Po poměrně rozsáhlém úvodu je možno se konečně pustit do tvorby vlastního prvního programu. Snad nelze začít jinak nežli aplikací označovanou jako Hello World.

Hello World

Program vytvoří jednoduché okno s jedním tlačítkem. Po jeho stisknutí dojde k ukončení aplikace.

Hello World

Jak zkompilovat

Jednou z důležitých voleb projektu je také použitý překladač a v čem a jak vytvářet pravidla sestavení. Zde uvedeme, jak postupovat v GNU prostředí – obvykle Linux, způsob kompilace stejného kódu ve Win32 (Mingw, případně MSVC 6,7).

V případě, že je čtenář obeznámen s použitím nástrojů jako autoconf, automake, je možno přejít na další kapitolu.

Stručný úvod k automake, autoconf

Před první kompilací je nutno určit rozložení souborů v adresářích. Budeme chtít dosáhnout stavu, kdy budeme mít jeden Makefile pro všechny platformy (vyjma MSVC 6,7). Programy autoconf a automake slouží pro automatizované generování skriptu configure (umožňuje konfiguraci projektu před kompilací) a následně vytvoření souborůMakefile. Šablonou pro ně jsou soubory označené jako Makefile.am, kde je popsáno, co a jak se má kompilovat.

Každý podadresář projektu bude mít vlastní definiční soubor Makefile.am, ze kterého bude vygenerován patřičný Makefile.

Začneme vytvořením adresářů a skriptu configure.in. Komentáře se zapisují s prefixem dnl.

První dva řádky zajistí korektní inicializaci, dále následující příkazy:

AC_PROG_CC 

Dále je nutno vytvořit hlavní soubor Makefile.am, který zajistí kompilaci všech podadresářů, tento soubor je tedy poměrně jednoduchý:

Nyní je již nutno vytvořit pravidla sestavení pro adresář chap4. Uvedený příklad provede kompilaci souboru example1.c

Nyní je projekt připraven pro vygenerování zbývajících chybějících souborů a spuštění kompilace.

  1. Zavolejte aclocal, který vygeneruje soubor aclocal.m4 s makry
  2. Zavolejte automake -a, dojde k vygenerování chybějících standardních souborů (textové soubory o verzi, readme apod.)
  3. Zavolejte autoconf, finální program vygeneruje soubor configure

Nyní je již vše připraveno pro běžnou kompilaci a další vývoj.

Kompilace ve Win32

Jestliže primární vývoj probíhá v Linuxu nebo jiném unixovém prostředí, je pro kompilaci nejlepší použít prostředí MinGW ( http://www.min­gw.org ). Zde je největším úskalím správné umístění souborů .pc do systémového adresáře nebo lépe nastavení systémové proměnné PKG_CONFIG_PATH. Velmi užitečné je také mít nainstalován Cygwin, umožňuje spouštet autoconfa automake.

Alternativně je možno kompilovat v MSVC, zde se vytvoří běžný projekt. Je nutno nastavit správně adresáře, kde se hledají hlavičkové soubory a knihovny. Obdobně nastavit správně vstupní soubory linkeru, zde je nevýhodou nutnost všechny ručně zapsat.

Závěr

Velmi se těšíme na odezvu čtenářů a podle ní budeme pokračovat v tomto seriálu. Na úplný závěr jsme přichystali dvě ukázky části aplikace, jednou v prostředí Windows a podruhé v Linuxu.

ict ve školství 24

Ukázka z Win32
Ukázka z Windows (česky)



Ukázka Linux
Ukázka z Linuxu (anglicky)

Autor článku