Xlib - Xlib
![]() | tento článek potřebuje další citace pro ověření.Září 2018) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Vývojáři | X.Org Foundation |
---|---|
První vydání | ~1985[Citace je zapotřebí ] |
Úložiště | ![]() |
Napsáno | C |
Typ | Knihovna |
webová stránka | www |

Xlib (také známý jako libX11) je Systém X Window klient protokolu knihovna napsáno v Programovací jazyk C.. Obsahuje funkce pro interakci s X serveru. Tyto funkce umožňují programátoři psát programy bez znalosti podrobností protokol. Několik aplikací používá Xlib přímo; spíše využívají jiné knihovny, které poskytují funkce Xlib sady nástrojů pro widgety:
- Vnitřní nástroje X Toolkit (Xt)
- Sada widgetů Athena (Xaw)
- Motiv
- FLTK
- GTK
- Qt (Verze X11)
- Tk
- SDL (Simple DirectMedia Layer)
- SFML (jednoduchá a rychlá multimediální knihovna)
Xlib se objevil kolem roku 1985[Citace je zapotřebí ], a je aktuálně používán v GUI pro mnoho Unixový operační systémy. The XCB knihovna je pokus o nahrazení Xlib. Zatímco Xlib se v některých prostředích stále používá, moderní verze serveru X.org implementují Xlib navíc XCB.[1]
Typy dat




Hlavní typy dat v Xlib jsou Zobrazit
[2] struktura a typy identifikátorů.
Neformálně je displej fyzické nebo virtuální zařízení, kde se provádějí grafické operace. The Zobrazit
struktura knihovny Xlib obsahuje informace o displeji, ale co je důležitější, obsahuje informace týkající se kanálu mezi klientem a serverem. Například v a Unixový operační systém, Zobrazit
struktura obsahuje popisovač souboru zásuvka tohoto kanálu (lze jej získat pomocí ConnectionNumber
makro.) Většina funkcí Xlib má a Zobrazit
struktura jako argument, protože buď fungují na kanálu, nebo jsou relativní ke konkrétnímu kanálu. Zejména všechny funkce Xlib, které interagují se serverem, potřebují tuto strukturu pro přístup ke kanálu. Některé další funkce potřebují tuto strukturu, i když fungují lokálně, protože fungují na datech ve vztahu ke konkrétnímu kanálu. Mezi operace tohoto druhu patří například operace ve frontě událostí, která je popsána níže.
Windows, barevné mapy atd. Jsou spravovány serverem, což znamená, že data o jejich skutečné implementaci jsou všechna uložena na serveru. Klient na těchto objektech pracuje pomocí svých identifikátory. Klient nemůže přímo pracovat s objektem, ale může pouze požadovat, aby server provedl operaci určující identifikátor objektu.
Typy Okna
, Pixmap
, Písmo
, Barevná mapa
atd. jsou všechny identifikátory, což jsou 32bitová celá čísla (stejně jako v samotném protokolu X11). Klient „vytvoří“ okno požadavkem, aby server vytvořil okno. To se provádí prostřednictvím volání funkce Xlib, která vrací identifikátor okna, tj. Číslo. Tento identifikátor pak může klient použít pro vyžádání dalších operací ve stejném okně na server.
Identifikátory jsou pro server jedinečné. Většinu z nich mohou různé aplikace použít k odkazování na stejné objekty. Například dvě aplikace, které se připojují ke stejnému serveru, používají stejný odkaz k označení stejného okna. Tyto dvě aplikace používají dva různé kanály, a proto mají dva různé Zobrazit struktury; když však požadují operace se stejným identifikátorem, budou tyto operace provedeny se stejným objektem.
Protokol a události
Funkce Xlib, které odesílají požadavky na server, obvykle tyto požadavky neposílají okamžitě, ale ukládají je do vyrovnávací paměti zvané vyrovnávací paměť požadavku. Termín žádost v tomto případě odkazuje na požadavek od klienta, který je směrován na server: vyrovnávací paměť požadavku může obsahovat všechny druhy požadavků na server, nejen ty, které mají viditelný účinek na obrazovce. Je zaručeno, že vyrovnávací paměť požadavků bude vyprázdněna (tj. Všechny dosud provedené požadavky jsou odesílány na server) po volání funkcí XSync
nebo XFlush
, po volání funkce, která vrací hodnotu ze serveru (tyto funkce blokují, dokud není přijata odpověď), a za některých dalších podmínek.
Xlib ukládá přijaté události do fronty. Klientská aplikace může kontrolovat a načítat události z fronty. Zatímco X server odesílá události asynchronně, aplikace používající knihovnu Xlib jsou povinny explicitně volat funkce Xlib pro přístup k událostem ve frontě. Některé z těchto funkcí mohou blokovat; v tomto případě také vyprázdní vyrovnávací paměť požadavku.
Chyby jsou místo toho přijímány a zpracovávány asynchronně: aplikace může poskytnout obslužnou rutinu chyb, která bude volána vždy, když je přijata chybová zpráva ze serveru.
Není zaručeno, že bude zachován obsah okna, pokud okno nebo některá jeho část nebude viditelná. V tomto případě jsou žádosti zaslány Odhalit
událost, kdy je okno jedné jeho části opět viditelné. Aplikace by pak měla znovu vykreslit obsah okna.
Funkce
Funkce v knihovně Xlib lze seskupit do:
- operace na připojení (
XOpenDisplay
,XCloseDisplay
, ...); - požadavky na server, včetně požadavků na operace (
XCreateWindow
,XCreateGC
, ...) a žádosti o informace (XGetWindowProperty
, ...); a - operace, které jsou pro klienta lokální: operace ve frontě událostí (
XNextEvent
,XPeekEvent
, ...) a další operace s místními daty (XLookupKeysym
,XParseGeometry
,XSetRegion
,XCreateImage
,XSaveContext
, ...)
Příklad


Následující program vytvoří okno s malým černým čtverečkem:
/* Jednoduchá aplikace Xlib pro vytváření okna a kreslení rámečku v něm. gcc vstup.c -o výstup -lX11*/ #zahrnout <X11/Xlib.h>#zahrnout <stdio.h>#zahrnout <stdlib.h>#zahrnout <string.h> int hlavní(prázdnota){ Zobrazit *Zobrazit; Okno okno; XEvent událost; char *zpráva = "Ahoj světe!"; int s; // otevřené připojení k serveru Zobrazit = XOpenDisplay(NULA); -li (Zobrazit == NULA) { fprintf(stderr, "Nelze otevřít displej n"); výstup(1); } s = Výchozí obrazovka(Zobrazit); // vytvořit okno okno = XCreateSimpleWindow(Zobrazit, RootWindow(Zobrazit, s), 10, 10, 200, 200, 1, BlackPixel(Zobrazit, s), WhitePixel(Zobrazit, s)); // vyberte druh událostí, které nás zajímají XSelectInput(Zobrazit, okno, ExposureMask | KeyPressMask); // namapovat (zobrazit) okno XMapWindow(Zobrazit, okno); // smyčka události pro (;;) { XNextEvent(Zobrazit, &událost); // nakreslení nebo překreslení okna -li (událost.typ == Odhalit) { XFillRectangle(Zobrazit, okno, VýchozíGC(Zobrazit, s), 20, 20, 10, 10); XDrawString(Zobrazit, okno, VýchozíGC(Zobrazit, s), 50, 50, zpráva, strlen(zpráva)); } // ukončení stiskem klávesy -li (událost.typ == KeyPress) přestávka; } // uzavřít připojení k serveru XCloseDisplay(Zobrazit); vrátit se 0; }
Klient vytvoří spojení se serverem voláním XOpenDisplay
. Poté požaduje vytvoření okna s XCreateSimpleWindow
. Samostatný hovor na XMapWindow
je nezbytné pro mapování okna, to znamená pro jeho zviditelnění na obrazovce.
Čtverec je nakreslen voláním XFillRectangle
. Tuto operaci lze provést až po vytvoření okna. Jednorázové provedení však nemusí stačit. Ve skutečnosti není vždy zaručeno zachování obsahu okna. Například pokud je okno zakryté a poté znovu odkryté, může být nutné překreslit jeho obsah. Program je informován o tom, že okno nebo jeho část musí být nakresleno na recepci Odhalit
událost.
Kreslení obsahu okna se proto provádí uvnitř zpracování událostí smyčkou. Před vstupem do této smyčky jsou vybrány události, které aplikace zajímají, v tomto případě s XSelectInput
. Smyčka události čeká na příchozí událost: pokud je touto událostí stisknutí klávesy, aplikace se ukončí; pokud se jedná o událost vystavení, je vykreslen obsah okna. Funkce XNextEvent
blokuje a vyprázdní vyrovnávací paměť požadavku, pokud ve frontě není žádná událost.
Ostatní knihovny
Xlib neposkytuje podporu pro tlačítka, nabídky, posuvníky atd. Takové widgety jsou poskytovány jinými knihovnami, které zase používají Xlib. Existují dva druhy takových knihoven:
- knihovny postavené na vrcholu Vnitřní nástroje X Toolkit knihovna (Xt), která poskytuje podporu pro widgety, ale neposkytuje žádný konkrétní widget; konkrétní widgety poskytuje sada widgetů knihovny, které používají Xt, jako např Xaw a Motiv;
- knihovny, které poskytují sady widgetů pomocí Xlib přímo, bez knihovny Xt, jako jsou X verze GTK, Qt, FLTK a fpGUI.
Aplikace, které používají některou z těchto knihoven widgetů, obvykle před vstupem do hlavní smyčky specifikují obsah okna a nemusí s nimi explicitně manipulovat Odhalit
události a překreslete obsah okna.
The XCB knihovna je alternativou k Xlib. Jeho dva hlavní cíle jsou: zmenšení velikosti knihovny a přímý přístup k protokolu X11. Byla vytvořena modifikace Xlib, která používá XCB jako vrstvu nízké úrovně.
Reference
- ^ "Přijetí".
- ^ "Zobrazit strukturu na freedesktop CVS". Hledání tipu: typedef struct _XDisplay Display.
externí odkazy
- Oficiální programová dokumentace nadace X.Org Foundation, včetně nejnovější verze Rozhraní Xlib - C jazyk X. v několika formátech.
- Krátký návod na Xlib
- Ruční stránky pro všechny funkce Xlib
- Stránky Kentona Lee na X Window a Motif
- Delší výukový program pro Xlib
- Použití Xlib pro vytvoření modulu spořiče obrazovky