Drawable (X11)
Il nome collettivo, nel protocollo X, di tutto ciò su cui si può disegnare: una finestra o un pixmap, trattati in modo identico da ogni richiesta di disegno.
X11 separa ciò che è visibile da ciò su cui si disegna. Una finestra è una superficie sullo schermo con una posizione, un posto nell'ordine di sovrapposizione e degli eventi; un pixmap è un blocco di memoria del server che non ha nulla di tutto ciò. Eppure ogni richiesta di disegno, come PolyLine, FillRectangle, PutImage o CopyArea, accetta come destinazione un semplice drawable, e al protocollo non importa di quale tipo sia. Per questo il double buffering si può fare a mano: si disegna in un pixmap e lo si copia nella finestra. I requisiti sono che la profondità coincida tra drawable e contesto grafico, che entrambi appartengano allo stesso schermo e che la finestra sia di classe InputOutput; una finestra InputOnly, che esiste solo per catturare eventi, risponde a ogni tentativo di disegno con BadMatch.
La famiglia è cresciuta nel tempo. L'estensione Composite trasforma dietro le quinte ogni finestra reindirizzata in un pixmap, e XCompositeNameWindowPixmap lo consegna perché un window manager con compositing possa dipingere la finestra come texture. XRender sovrappone il suo Picture a un drawable, GLX ha GLXDrawable per finestre, pixmap e pbuffer, e il backend X di Cairo prende un drawable come argomento. In Xlib il tipo è semplicemente un identificatore di risorsa: un drawable è in fondo la promessa che il numero inviato indichi qualcosa su cui il server può disegnare. Wayland non ha un equivalente: lì il client invia buffer già pronti e il server non disegna nulla per nessuno.