Uso di più viewport in DirectManipulation
Quando si usano più viewport, hit testingdetermina quali viewport sono interessati dall'input dell'utente prendendo la posizione dello schermo di un contatto e determinando quale rettangolo di visualizzazione raggiunge il contatto.
Uno scenario comune nella manipolazione diretta consiste nell'inserire un riquadro di visualizzazione all'interno di un altro, noto anche come riquadro di visualizzazione annidamento. Se il contatto raggiunge più di un viewport, l'ordine delle chiamate SetContact da WndProc della finestra determina la relazione padre-figlio dei viewport annidati.
Regola: l'elemento figlio deve chiamare SetContactprima di chiamare l'elemento padre.
Un contatto scende in un riquadro di visualizzazione. SetContact deve prima essere chiamato sul riquadro di visualizzazione arancione (figlio) e quindi sul riquadro di visualizzazione verde (padre) per stabilire la gerarchia corretta.
Destinazione del riquadro di visualizzazione corretto
Un contatto può essere associato a un numero qualsiasi di viewport e ogni contatto può essere assegnato a un set diverso di viewport.
Ogni viewport può essere configurato per supportare interazioni specifiche, in base alle esigenze.
In base a queste impostazioni, la manipolazione diretta identifica il riquadro di visualizzazione che gestisce l'input. Il viewport più figlio nella gerarchia di hit testing ha la prima possibilità di gestire l'input. Tuttavia, sia il concatenamento che l'innalzamento di livello padre possono modificare il riquadro di visualizzazione che gestisce l'input.
Concatenamento
Quando viene raggiunta la fine del contenuto durante una manipolazione, la manipolazione diretta applica un effetto limite per indicare che il contenuto non può andare oltre. Tuttavia, se un viewport figlio viene concatenato a un viewport padre, questo effetto viene eliminato. Al contrario, il viewport predecessore più vicino nella gerarchia di hit testing che supporta la manipolazione, gestisce l'input. Se la direzione della manipolazione viene invertita in modo che il predecessore torni al punto in cui è stato attivato il concatenamento, la manipolazione "unchains" e il controllo torna al viewport figlio.
Quando l'utente esegue la panoramica del riquadro di visualizzazione figlio fino al bordo del contenuto, la manipolazione "concatena" al riquadro di visualizzazione padre e l'utente inizia invece a eseguire la panoramica del contenuto padre.
Nota
Gli assi X e Y si concatenano indipendentemente l'uno dall'altro, quindi se una panoramica diagonale raggiunge il limite x prima del limite y, la manipolazione sposta l'elemento padre nella direzione x mentre continua a spostare l'elemento figlio nella direzione y. Per abilitare o disabilitare il concatenamento, chiamare l'API SetChaining nel viewport figlio.
Rotaie
La specifica delle guide nella configurazione di un viewport influisce sulla modalità di concatenamento dell'input dal riquadro di visualizzazione. In particolare, l'input non può concatenare da un riquadro di visualizzazione figlio sottoposto a guida al padre nella modalità di panoramica "non railed" delle guide. Per concatenare l'input quando sono impostate le guide, l'utente deve avere una panoramica verticale o orizzontale e essere bloccata sulle guide.
Zoom
Se un viewport figlio è annidato all'interno di un elemento padre ed entrambi sono configurati per lo zoom, una manipolazione dello zoom può concatenare da figlio a padre. Tuttavia, se la manipolazione continua, funziona solo sull'elemento padre e non può "scollegare" l'elemento figlio. Se l'utente concatena uno zoom da figlio a padre, la manipolazione diretta sospende l'elemento figlio fino a quando tutti i contatti associati alla manipolazione non vengono rimossi dallo schermo. A questo punto, l'elemento figlio viene rilasciato dalla sospensione e l'utente può eseguire la panoramica del riquadro di visualizzazione figlio.
Targeting dei movimenti: promozione padre
La destinazione dei movimenti è il processo in base al quale la manipolazione diretta raggruppa i contatti e determina il riquadro di visualizzazione che elabora l'input. La promozione padre si riferisce ai casi in cui l'input viene trasferito dall'elemento figlio all'elemento padre. Ad esempio, quando un utente inserisce due contatti e avvicina le dita all'interno di un riquadro di visualizzazione figlio configurato solo per lo scorrimento, l'input viene promosso all'elemento padre in modo che si verifichi lo zoom. La promozione padre viene eseguita indipendentemente dal fatto che il concatenamento sia abilitato nel viewport figlio.
A differenza del concatenamento, l'innalzamento di livello padre non viene invertito. Il viewport padre continua a elaborare l'input di interazione fino a quando tutti i contatti non vengono revocati (i viewport figlio interrompono l'elaborazione dell'input).