Xlib
Xlib è una libreria per il protocollo X Window System, sviluppata in C. Contiene funzioni usabili da un client per interfacciarsi con il server grafico. Tramite queste funzioni i programmatori possono scrivere codice senza conoscere i dettagli del protocollo. Poche applicazioni usano Xlib direttamente; generalmente impiegano altre librerie che usano le funzioni di Xlib per fornire i blocchi logici per costruire l'interfaccia: Xlib fece la sua comparsa circa nel 1985 ed è utilizzata nelle interfacce grafiche di molti sistemi operativi Unix-like. La libreria XCB è un'alternativa a Xlib. Tipi di datoI primi tipi di dato in Xlib sono la struttura Informalmente lo schermo è un dispositivo, fisico o virtuale, sul quale si effettuano operazioni grafiche. La struttura Le finestre, le mappe di colore ed altri sono amministrati dal server, che significa che i dati della loro istanza attuale sono tutti nel server. Il client opera su questi oggetti tramite i loro identificatori. Non si può operare direttamente su un oggetto, ma solo richiedere al server di compiere l'azione sull'oggetto specificato dall'identificatore. I tipi Gli identificatori sono unici per il server. Per la maggior parte possono essere utilizzati da diverse applicazioni per riferirsi agli stessi oggetti. Ad esempio, due applicazioni connesse allo stesso server possono usare lo stesso riferimento per specificare la stessa finestra. Queste applicazioni usano due diversi canali, e quindi hanno due strutture FunzioniLe funzioni nella libreria di Xlib possono essere raggruppate in:
EsempioIl seguente programma crea una finestra con un piccolo quadrato nero in essa. /*
* Un'applicazione base con Xlib disegnante un quadrato in una finestra.
* gcc input.c -o output -lX11
*/
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
Display *display;
Window window;
XEvent event;
char *msg = "Hello, World!";
int s;
/* apre una connessione col server */
display = XOpenDisplay(NULL);
if (display == NULL)
{
fprintf(stderr, "Cannot open display\n");
exit(1);
}
s = DefaultScreen(display);
/* crea una finestra */
window = XCreateSimpleWindow(display, RootWindow(display, s), 10, 10, 200, 200, 1,
BlackPixel(display, s), WhitePixel(display, s));
/* sceglie gli eventi che ci interessano */
XSelectInput(display, window, ExposureMask | KeyPressMask);
/* mostra la finestra */
XMapWindow(display, window);
/* ciclo per eventi */
while (1)
{
XNextEvent(display, &event);
/* disegna o ridisegna la finestra */
if (event.type == Expose)
{
XFillRectangle(display, window, DefaultGC(display, s), 20, 20, 10, 10);
XDrawString(display, window, DefaultGC(display, s), 50, 50, msg, strlen(msg));
}
/* esce con la pressione di un tasto */
if (event.type == KeyPress)
break;
}
/* chiude la connessione al server */
XCloseDisplay(display);
return 0;
}
Il client crea una connessione col server invocando Il quadrato è disegnato chiamando Per questo motivo il disegno del contenuto della finestra è fatto in un ciclo di eventi. Prima di entrare nel ciclo gli eventi di interesse vengono scelti, in questo caso con Voci correlateAltri progetti
Collegamenti esterni
|