Hlavní navigace

Linuxový desktop - grafické nadstavby

Stanislav Brabec

Nezbytnou součástí desktopového prostředí je grafická nadstavba. O co se jedná a k čemu slouží, se dozvíme v dnešním dílu. Zároveň se seznámíme s nejběžnějšími nadstavbami.

K čemu je grafická nadstavba (graphical toolkit), když samotný X server umí vše, co k zobrazování potřebujeme? Odpověď je poměrně jednoduchá – události, které zasílá X server, a příkazy, kterým rozumí, jsou na příliš nízké úrovní, než aby mohly posloužit jako uživatelské rozhraní programu.

Proto bylo třeba definovat vyšší úroveň abstrakce – grafickou nadstavbu. V ní se již nemusíme bavit s X serverem o tom, v jakém místě okna vytvořit nápis, jaké písmo zvolit a jaký rámeček budou mít tlačítka.

Činnost nadstavby

Jako příklad činnosti nadstavby uvedu jednoduché dialogové okno s nápisem a tlačítky Ano, Ne.

Pro grafickou nadstavbu může být takové dialogové okno přímo předpřipraveným objektem. Příkazem, který předáme grafické nadstavbě, je: „Vytvoř dialogové okno s nápisem Jaká je vaše odpověď a s možnými odpověďmi Ano a Ne.“ V doplňkových volbách takového příkazu pak můžeme nalézt instrukce, jak se chovat, když uživatel použije klávesnici, jak zareagovat na zavírací tlačítko apod.

Protože dialogové okno samo o sobě není jediný grafický objekt, sama grafická nadstavba provede konstrukci z jednotlivých prvků – v okně otevře dvě podřízená okna (vzpomeňme si, co jsme si řekli v druhém dílu o hierarchickém stromu oken) – horní s nápisem a dolní, které se bude dále dělit na další dvě podřízená okna s jednotlivými tlačítky. Nápis a tlačítko jsou již základní prvky grafické nadstavby.

Ale pro X server je například takové tlačítko značně složitý objekt – skládá se přinejmenším z rámečků, pozadí a nápisu. Prvním úkolem grafické nadstavby je tedy umět vykreslit grafický prvek za pomoci příkazů X serveru.

I grafická nadstavba komunikuje v řeči událostí. Programy vlastnící okna dostávají od X serveru zprávy o událostech, které se oken týkají a o které si aplikace zažádala.

Je zřejmé, že například podřízené okno, které tvoří tlačítko, musí reagovat na kliknutí myši – taková zpráva bude v grafické nadstavbě převedena na událost grafické nadstavby„Stisknutí tlačítka“. Méně si však uvědomujeme, že moderní nadstavby reagují i na pouhý pohyb myši prosvětlením tlačítka. I o takovou událost si tedy musí požádat, byť slouží jen pro potřeby nadstavby.

Kromě těchto událostí dostává od X serveru občas žádost o překreslení okna (např. bylo-li okno zakryto) nebo od souborového systému zprávu o změně tématu (skinu). I to jsou události pro vnitřní potřebu.

Komunikace nadřízených a podřízených oken

Způsob komuninace mezi nadřízenými a podřízenými okny je nejlépe vidět při změně velikosti okna – spravované okno v první úrovni obdrží od správce oken žádost o změnu velikosti. Kdyby okno neodeslalo požadavek svým podřízeným a provedlo jej, část okna by se jednoduše ořízla (nebo se zvětšil prázdný okraj). Dialogové okno však tento požadavek zasílá – nejdříve jej obdrží dvojice „podoken“ nad sebou. Od horního „podokna“ jej obdrží nápis, od dolního další dvě „podpodokna“ s tlačítky. Každé z těchto oken se může rozhodnout dle svého uvážení (a volby programátora), zda na takovou žádost zareaguje samo, či zda požadavek rozdělí a pošle na vyřízení podřízeným. Okna, která požadavek vykonají, pošlou tuto zprávu nadřízeným, a od nich opačnou cestou putuje zpět až ke správci oken.

Výsledkem, který uvidíme, je změna velikost okna, nebo „zaseknutí“ správce oken v případě, že žádné z oken není ochotno požadavek vyřídit.

Nejrozšířenější nadstavby

Nejstarší nadstavbou pro X je bezesporu Athena (Xaw). Vznikla společně s X a dodnes je jejich součástí. S jejím návrhem přišla i mezivrstva tzv. zdrojů X (X resources) – techniky, která umožňuje popsat vlastnosti aplikace pomocí textového souboru. Tyto soubory najdeme v adresáři /etc/X11/app-defaults a souboru.Xdefaults v domovském adreáři. Soubory popisují zvláštním jazykem zástupných znaků, jak se má daný typ prvků vykreslovat. Před obecnými definicemi dostávají přednost konkrétní (tedy ty, které mají méně zástupných znaků). Přes nesporně kvalitní programátorský koncept patří Athena k vizuálně nejošklivějším nadstavbám.

Známé aplikace používající Athenu: XTerm, xvidtunem Xmag, XDVI, všechny aplikace přibalené k XFree86 a některé binární verze Emacsu.

Vzhled Atheny při zachování kompatibility se pokouší vylepšit projekt Xaw3D. Přesto se významně nerozšířil.

Známé aplikace používající Xaw3D: GV.

Konkurenční OSF/Motif byl dlouho dostupný pouze komerčně. Vyznačuje se stabilním uživatelským rozhraním. Nyní existují dokonce dvě volné implemetace – Lesstif a Open Motif. Používá též zdroje X, ale při své práci vykresluje grafické elementy pomocí tzv. gadgetů, které nevyužívají celou strukturu oken, a tím šetří paměť a rychlost (na rozdíl od tzv. widgetů, které jsou založeny na úplných instancích oken X Window Systemu). Za dobu své existence se stal prakticky průmyslovým standardem UNIXových komerčních aplikací.

Známé aplikace používající Motif: Netscape Communicator ve verzi 4 a starší, některé binární verze Emacsu.

Prostředí Qt firmy TrollTech již patří do nové generace nadstaveb, nepoužívá totiž mezivrstvu zdrojů X. Je napsáno v jazyce C++, obsahuje v sobě podpory změny grafického vzhledu (skinů), rozsáhlého použití písma i obrázků.

Známé aplikace používající Qt: Qt se stalo základem desktopového prostředí KDE.

Prostředí GTK+ vzniklo původně jako pomůcka pro uživatelské rozhraní programu GIMP. Později se projekt osamostatnil a stal se novou grafickou nadstavbou. Je založen na jazyce C a stal se jedním ze dvou nejrozšířenějších nadstaveb. Taktéž v sobě obsahuje podporu změny grafického vzhledu (skinů), rozsáhlého použití písma i obrázků. Nynější verze je GTK2.

Známé aplikace používající GTK+: GIMP, GTK+ se stalo základem desktopového prostředí GNOME.

Našli jste v článku chybu?
18. 2. 2003 10:32
Stanislav Brabec (neregistrovaný)

To bylo porovnání Motifu s Athenou. Rozdíly by se měly výrazněji projevit až u složitých aplikací s vnořenými strukturami a údajně by měl být Motif rychlejší. Moderní GUI používají buď plné instance oken nebo vlastní datové typy. Je to z prostého důvodu - chcete-li udělat skinovatelné GUI s podkladovými obrázky reagujícími na pohyb myši, nemůžete se předem omezit na jednoduchý datový typ, jakým je XmGadget. MWM a UIL jsou standardní součástí každé implementace OSF/Motif, tedy i těch volnýc…