# Compositing window manager

Un compositing window manager è un componente dell'interfaccia grafica di un computer che gestisce la posizione delle finestre e i loro confini.

## Caratteristiche peculiari

La differenza principale tra un compositing window manager e un normale window manager è che invece di disegnare tutte le finestre in una sola immagine, l'immagine di ogni finestra viene scritta in un buffer di memoria indipendente, solitamente nella scheda video, quindi l'immagine definitiva da visualizzare sullo schermo viene composta (da qui il nome) da tutte le immagini delle finestre. In questo modo è possibile trattare la visualizzazione finale in molti metodi, ad esempio è possibile mappare una finestra all'interno di una texture di un oggetto 3D, oppure è possibile utilizzare le accelerazioni 2D delle moderne GPU mappando le finestre in aree da sovrapporre a tutte le altre con effetti di alpha blending.

## Aspetti positivi

I benefici nell'utilizzo di un compositing window manager sono nel liberare la CPU dalle operazioni di ridisegno e composizione delle finestre sullo schermo per demandare questa operazione alla GPU della scheda grafica. Un altro vantaggio della composizione è che se un programma smette di disegnare la propria finestra, questa mantiene l'ultima rappresentazione valida. La caratteristica forse più in vista per l'utente è la possibilità di applicare svariati effetti grafici alle finestre e al desktop intero.

## Programmi di compositing window manager

Microsoft Windows ha introdotto il supporto alla composizione 3D del desktop con Aero incluso da Windows Vista. Apple Mac OS X invece ha il supporto alla composizione grazie a Quartz Compositor fin dalla versione 10.0. Diverso è lo scenario su Linux, esistono svariati sistemi di compositing 3D ed esclusivamente 2D. Tra i compositing window manager 3D quelli più maturi sono Compiz, KWin e Mutter, mentre tra quelli 2D utilizzanti la sola estensione XRender del server X.Org si annoverano Metacity, xfwm4 e xcompmgr (meno evoluto dei precedenti).

## Confronto con gli stacking window managers

Il window manager invia a ciascuna finestra un messaggio per ridipingere se stessa ogni volta che è appropriato (come quando viene ridimensionata o quando un'altra finestra passa davanti ad essa). Con un stacking window manager, il processo di riverniciatura può essere danneggiato quando un programma lento, che non risponde o che presenta bug non risponde ai messaggi in modo tempestivo. Un programma dannoso può far apparire instabile il sistema semplicemente trascurando di ridipingere la sua finestra. Quindi, possono verificarsi una o più delle seguenti condizioni:
* una finestra ritagliata non ridipinge le regioni scoperte, risultando in spazi vuoti o una "traccia" lasciata dietro da un'altra finestra
* parti di finestre (come le ombre decorative) vengono lasciate indietro e non vengono adeguatamente ridipinte
* gli aggiornamenti dello schermo diventano insopportabilmente lenti
* l'intero schermo si blocca fino a quando il programma non risponde o viene terminato
Con un gestore di composizione, se una finestra smette di ridipingere se stessa quando richiesto dal gestore di finestre, il suo ultimo ridisegno rimarrà visualizzato e la finestra potrebbe essere oscurata. Spesso, il titolo cambia per riflettere lo stato della finestra come non risponde. Un programma può impedire che la sua finestra venga spostata o non mappata, ma generalmente non causerà problemi di ridisegno.

## Composizione ed effetti 3D nei sistemi operativi

Nella composizione, gli effetti 3D potrebbero essere applicati alle finestre per fornire effetti desktop 3D. I moderni gestori di finestre di compositing utilizzano l'accelerazione hardware 3D. Il software di gestione delle finestre di composizione comunica con l'hardware grafico tramite interfacce di programmazione come OpenGL o Direct3D.

### Linux

Lo stacking dei gestori di finestre in esecuzione sul server X richiedeva un'estensione di chroma keying o green screening. La composizione è stata introdotta tramite l'estensione "Composite". I gestori di composizione utilizzano l'accelerazione hardware tramite questa estensione, se disponibile.
In Linux e UNIX, la capacità di eseguire il compositing con accelerazione 3D completa richiedeva modifiche fondamentali a X11 per poter utilizzare l'accelerazione hardware. In origine, iniziarono ad apparire numerose implementazioni X11 modificate progettate attorno a OpenGL, incluso Xgl. L'introduzione di AIGLX ha eliminato la necessità di utilizzare Xgl e consentirebbe ai gestori di finestre di eseguire la composizione accelerata 3D su un server X standard, pur consentendo il rendering diretto. Attualmente, le schede NVIDIA, Intel e AMD supportano AIGLX.
Compiz ha introdotto un effetto cubo, che consente all'utente di vedere fino a 6 desktop virtuali contemporaneamente. Ogni desktop viene convertito in una texture superficiale del cubo, che può essere ruotata a piacimento. Compiz mostra una vasta gamma di effetti 2D e 3D e ha requisiti hardware relativamente bassi. Nel 2012, Compiz è stato incluso in Ubuntu Linux ed è stato abilitato automaticamente quando l'hardware e i driver supportati erano disponibili e l'utente non aveva selezionato la modalità 2D.
Mutter (Metacity + Clutter) ha sostituito Metacity come window manager predefinito per GNOME ed è presente in GNOME Shell di GNOME 3.0. Utilizza il motore di visualizzazione Clutter, che è stato portato su tutti i principali sistemi operativi, netbook e smartphone.
Dalla versione 4, il window manager di KDE KWin ha capacità di composizione. KWin offre molte delle stesse funzionalità presenti anche in Compiz.

### Java

Project Looking Glass era un gestore di finestre che combinava il rendering 3D e il linguaggio di programmazione Java multipiattaforma. Nel 2021 è inattivo e rilasciato sotto GNU General Public License. La distribuzione Granular Linux live CD include Looking Glass come window manager opzionale.
All'indomani della sua interruzione, alcune delle sue funzionalità, come il cambio di copertina e le anteprime dal vivo delle miniature, sono state trovate su altri gestori di finestre. Le sue caratteristiche più originali includevano l'inclinazione delle finestre, i telai delle finestre su due lati e gli sfondi a scorrimento parallasse.

### AmigaOS 4 e MorphOS

Sebbene siano in grado di funzionare su hardware compatibile con il 3D, AmigaOS 4 e MorphOS sono progettati per funzionare su vecchi computer Amiga legacy, a partire dall'Amiga 1200. In quanto tali, i loro window manager hanno per lo più funzionalità di rendering planare che includono stratificazione composita, alpha blending, gradienti, alta risoluzione e desktop multipli ("schermi") che possono parzialmente ritagliarsi l'un l'altro.

### Microsoft Windows

Sebbene il window manager in Windows 2000 esegua la composizione, non esegue trasformazioni come un alpha per pixel. Poche applicazioni commerciali hanno sfruttato l'alfa blending; i programmi freeware sono stati tra i primi a sperimentarlo, anche se tramite impostazioni opzionali. La composizione è stata introdotta con Desktop Window Manager in Windows Vista.
Windows Vista e Windows 7 consentono all'utente di disabilitare Desktop Window Manager selezionando le impostazioni dell'aspetto di Windows Basic. Inoltre, viene disabilitato automaticamente da Windows per eseguire l'overlay hardware tramite il filtro Overlay Mixer.

## Usabilità e piacere per gli occhi

L'approccio di composizione rende più facile implementare una serie di funzionalità che rendono l'interfaccia utente più accessibile, più semplice da usare o con elementi di piacere per gli occhi.

### Lenti di ingrandimento

La grafica vettoriale, come i caratteri TrueType e gli elementi con accelerazione 3D, può essere espansa senza degrado (solitamente a causa dell'aliasing). Una lente di ingrandimento dello schermo ingrandisce un'area dello schermo, facilitando la lettura di parti di testo, sia per prevenire l'affaticamento degli occhi, per gli ipovedenti o semplicemente a distanza. Gli effetti di zoom come la lente d'ingrandimento fish-eye e gli effetti desktop di zoom forniscono questa funzionalità.

### Anteprima dal vivo

È possibile visualizzare un'anteprima di una finestra in una miniatura a comparsa quando l'utente passa con il mouse sul pulsante della barra delle applicazioni associato. Ciò consente all'utente di identificare e gestire diversi programmi in esecuzione contemporaneamente.

### Cambio finestra

Le finestre con nomi e icone simili tendono a creare confusione, soprattutto quando le loro barre del titolo si sovrappongono; la posizione di ciascuna di queste finestre sulla barra delle applicazioni deve essere memorizzata. Quando ci sono molte finestre aperte in questo modo, l'utente deve spesso ricorrere a tentativi ed errori, facendo clic uno alla volta su ciascun pulsante della barra delle applicazioni, prima di procedere. Il cambio di finestra consente di visualizzare rapidamente in anteprima più finestre contemporaneamente riorganizzandole temporaneamente su uno sfondo decorativo. Dopo aver effettuato una selezione, le finestre vengono quindi riportate alla loro disposizione originale.
La selezione inizia quando l'utente immette una combinazione di tasti di scelta rapida, sposta il puntatore del mouse su un punto attivo sullo schermo o, in alcune situazioni, utilizza la rotellina del mouse. Gli elementi vengono esplorati utilizzando la tastiera o il mouse. Un elemento viene selezionato rilasciando il tasto di scelta rapida, premendo il tasto Invio o facendo clic su di esso con il mouse.

#### Flip switcher

Il flip switcher è un miglioramento della funzione di commutazione Alt-Tab. Le finestre in esecuzione sono disposte in una pila, simile a un selettore in stile flip in un jukebox degli anni '50 o in un Rolodex. In alcuni sistemi, l'utente può premere Alt-Maiusc-Tab per navigare all'indietro. Le transizioni visive vengono applicate a ciascun elemento durante la navigazione.

#### Cambio copertina

Il cambio di copertina è come il cambio di vibrazione con poche differenze, principalmente visive. Invece di una pila con la selezione in alto, vengono mostrate due pile simmetriche con la selezione corrente in primo piano e al centro (simile alla funzione di inclinazione della finestra in Looking Glass).
Cover Flow è un'implementazione del cambio di copertura in macOS. Le versioni più recenti utilizzano la sfocatura per ridurre l'enfasi sugli elementi non selezionati. Cover Flow è stato implementato anche in altri software pubblicati da Apple come iTunes.

#### Cambio suoneria

La commutazione dell'anello è come la commutazione del flip, tranne per il fatto che le finestre si muovono in cerchio, con la selezione corrente davanti, di solito in basso. La maggior parte dei gestori di finestre compositing includono questa funzionalità out of the box, e applicazioni di terze parti, come ad esempio 3D-desktop, sono inoltre disponibili.

#### Raggruppamento

L'utente può raggruppare le finestre insieme, in modo che in ogni gruppo sia visibile solo una finestra alla volta. In Compiz, la cornice della finestra viene capovolta per indicare quando la finestra attiva nel suo gruppo è stata modificata.

#### Exposé

macOS mostra un'anteprima di ogni finestra sullo schermo affiancandole. Altri sistemi con funzionalità simili (Microsoft Windows, Compiz, KWin, applicazioni di terze parti) sono indicati come cloni di Exposé. Il tasto di scelta rapida per attivare Exposé non è Alt-Tab, ma piuttosto F3.

#### Mission Control

Mac OS X 10.7 combina molte altre funzionalità di composizione sviluppate da Apple, come Exposé, Dashboard e Spaces, in un programma più ampio chiamato Mission Control.

### Motori widget

Su macOS, i "widget" (applet monouso) come un orologio, un blocco note e una calcolatrice possono essere visualizzati premendo un tasto di scelta rapida. I motori dei widget velocizzano il lavoro mantenendo i widget di uso comune accessibili senza essere invadenti. Sono gestiti dal programma Dashboard in macOS.
Compiz inizia con un Widget Layer vuoto, che consente all'utente di aggiungere applicazioni facendo clic su di esse. Una varietà di widget sono supportati, tra cui Screenlets, gDesklets e SuperKaramba.
Windows Vista fornisce gadget che l'utente può inserire in Windows Sidebar (gadget Sidebar), una pagina iniziale di Windows Live (gadget Web) o uno schermo esterno, come il telefono cellulare dell'utente (gadget SideShow). La barra laterale di Windows era una partizione visibile in Windows Vista ed è stata eliminata in Windows 7, insieme ai gadget della barra laterale che sono stati modificati in Gadget desktop.

### Facciate dell'interfaccia utente

Metisse implementa le facciate dell'interfaccia utente, un sistema che fornisce agli utenti modi semplici per adattare, riconfigurare e ricombinare le interfacce grafiche esistenti, attraverso l'uso di tecniche di manipolazione diretta.

## Elenco dei gestori di finestre di composizione

* 3Dwm, un gestore di spazi di lavoro tridimensionale e una piattaforma generica per interfacce utente 3D. Nel giugno 2006 questo progetto è inattivo.
* Desktop Window Manager e il tema Windows Aero su Windows
* Quartz Compositor su macOS
* Compiz
* Marco (fork da GNOME Metacity)
* KWin (dalla versione 3.3)
* Mutter
* Xfwm da Xfce (dalla versione 4.2)
* Mir (dalla versione 1.0)
* Metisse window system

## Elenco dei gestori di composizione autonomi

* xcompmgr – un'alternativa minima a Compiz
* Compton – un fork corretto di bug di dcompmgr, che è un fork di xcompmgr (non mantenuto dal 2017)
* Picom – un compositore leggero per X11. È un fork di Compton.
* Cairo Compmgr (Cairo Composite Manager) – un componente aggiuntivo di composizione per i gestori di finestre esistenti. Utilizza Cairo, una libreria di grafica vettoriale utilizzata anche in GTK.
* Unagi Compositing Manager – un gestore di composizione che può essere utilizzato insieme a un gestore di finestre esistente. Utilizza la libreria XCB (non mantenuto dal 2014).
* MCompositor – utilizzato sui telefoni MeeGo.

## Sistemi operativi con gestori di finestre di composizione

* Mac OS X 10.0 e versioni successive
* qualsiasi sistema operativo Unix-like che utilizza XOrg / AIGLX o Xgl
* AmigaOS 4
* MorphOS 2.0 e versioni successive
* Windows Vista e versioni successive

## Esempi

* Metacity window manager in GNOME 2.20
* Ubuntu 8.04 Hardy Heron esegue Shift Switcher di Compiz in modalità Flip.
* Cambio finestra di base in Xgl