Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A partire da Windows 8, DirectWrite offre una serie di funzionalità che consentono di controllare le funzionalità tipografiche, di layout e spaziatura di base, ad esempio la spaziatura dei caratteri, la crenatura delle coppie e la giustificazione.
Spaziatura caratteri
La spaziatura dei caratteri, conosciuta anche come "tracking", è la distanza tra i caratteri in una sequenza di testo.
Di seguito è riportato un esempio di rilevamento. La prima riga non applica alcun rilevamento al testo. La seconda riga aumenta la spaziatura dei caratteri e la terza riga riduce la spaziatura dei caratteri.
A partire da Windows 8, DirectWrite aggiunge questi metodi qui per controllare la spaziatura dei caratteri nel testo.
Se si usa il layout di DirectWrite, è possibile usare i metodi IDWriteTextLayout1::GetCharacterSpacing e IDWriteTextLayout1::SetCharacterSpacing per questo scopo.
Utilizzare il metodo GetCharacterSpacing per determinare la spaziatura dei caratteri corrente e restituisce il carattere corrente, la spaziatura prima e dopo il carattere, la larghezza minima di avanzamento e una struttura DWRITE_TEXT_RANGE che contiene informazioni sulla posizione iniziale e sulla lunghezza del testo rimanente.
Utilizzare SetCharacterSpacing su un'interfaccia DWriteTextLayout1 per applicare la propria spaziatura dei caratteri al testo nel layout. Il metodo SetCharacterSpacing occupa la quantità di spazio desiderata prima e dopo il carattere, l'avanzamento minimo consentito e un DWRITE_TEXT_RANGE che definisce l'intervallo per applicare la spaziatura.
Se si usa un layout personalizzato, DirectWrite supporta l'impostazione della spaziatura dei caratteri con IDWriteTextAnalyzer1::ApplyCharacterSpacing. Utilizzare questo metodo se è necessario un layout di testo personalizzato per avere un controllo avanzato sul layout. Questo metodo consente di fornire ApplyCharacterSpacing con la spaziatura iniziale e finale, la larghezza minima di avanzamento, la lunghezza della mappa del cluster, il numero di glifi, il mapping da intervalli di caratteri a glifi e la larghezza avanzata di ogni glifo se si usa un layout personalizzato. Il metodo restituisce i progressi del glifo modificato e un'enumerazione DWRITE_GLYPH_OFFSET con i nuovi offset all'origine di ogni glifo.
Crenatura
La crenatura è la regolazione contestuale della spaziatura tra coppie o triplette di lettere. La spaziatura specifica tra set di caratteri può aumentare la leggibilità e migliorare l'aspetto del testo. La differenza importante tra crenatura e spaziatura dei caratteri è il fatto che la spaziatura delle lettere sia indipendente dal testo che spazia, mentre la crenatura viene usata in determinate situazioni tra determinate coppie di caratteri come definito nel tipo di carattere.
Questa immagine è un esempio di crenatura. La parola AVATAR sulla linea superiore è crenatura per rendere la parola più naturale. Come si può vedere dalle caselle rosse intorno ai caratteri, c'è più spaziatura applicata tra le prime quattro lettere, mentre la R alla fine ha più spazio prima di esso. Il testo originale senza crenatura si trova sulla seconda riga. La crenatura in questo esempio rende la parola più leggibile e più naturale.
Il carattere avanza tra coppie di caratteri archiviati nella tabella kern e DirectWrite analizza tale tabella e restituisce le informazioni tramite le API di crenatura.
Se vuoi sapere se un carattere supporta le coppie di crenatura, puoi usare il metodo IDWriteFontFace1::HasKerningPairs. Questo metodo restituisce un valore bool pari a 1 se il tipo di carattere supporta le coppie di crenatura.
Il IDWriteFontFace1 include anche un metodo che consente di accedere alle regolazioni della coppia di crenatura per gli indici del glifo. GetKerningPairAdjustments consente di immettere una matrice di indici di glifi e DirectWrite restituisce una matrice di regolazioni avanzate del glifo. Se un tipo di carattere non supporta la tabella di crenatura, il metodo restituisce zeri per le regolazioni dell'avanzamento del glifo.
Se si usa il layout DirectWrite, sono disponibili due metodi nell'interfaccia IDWriteTextLayout1 che consentono di impostare la crenatura abbinata e apprendere di più sulla crenatura abbinata nel layout. Il metodo SetPairKerning accetta una rappresentazione booleana che indica se si desidera abilitare o meno il kerning di coppia e un DWRITE_TEXT_RANGE che definisce l'intervallo di testo su cui applicarlo. Se vuoi sapere se la crenatura di coppia è abilitata in un intervallo di testo, puoi usare il metodoGetPairKerning, che accetta la posizione corrente e restituisce un valore bool corrispondente al fatto che sia abilitata o meno la crenatura della coppia e l'intervallo di testo a cui si applica l'impostazione di crenatura.
Giustificazione
La giustificazione è il processo di allineamento del testo in modo che riempia tutto lo spazio all'interno di una colonna aumentando i progressi tra caratteri o cluster glifi o aggiungendo caratteri di giustificazione per ottenere lo stesso effetto. In generale, questa operazione viene eseguita determinando dove è necessario aggiungere spazio a una riga di testo e inserendo caratteri di spaziatura in tali opportunità di interruzione. Questi elementi di spaziatura possono anche differire, negli script latini, il testo è giustificato aumentando la larghezza di avanzamento tra gli elementi, mentre in arabo, il testo è giustificato con un kashida. Di seguito è riportato un esempio di alfabeto arabo e latino giustificato e non giustificato.
A partire da Windows 8, DirectWrite include diversi metodi che ti consentono di giustificare il testo nelle tue app.
Nell'enumerazione DWRITE_TEXT_ALIGNMENT è presente un valore aggiuntivo. È possibile usare il metodo SetTextAlignment e passare la costante DWRITE_TEXT_ALIGNMENT_JUSTIFIED, così DirectWrite giustificherà il testo e inserirà il carattere di giustificazione appropriato per lo script.
Se si usa un layout personalizzato, sono disponibili diversi metodi in modo da poter sfruttare la giustificazione. DirectWrite ha tre metodi nell'interfaccia IDWriteTextAnalyzer1 che è possibile usare per aggiungere giustificazione a un layout personalizzato.
Il primo metodo è GetJustificationOpportunities, che accetta il testo che si vuole giustificare e restituisce una struttura DWRITE_JUSTIFICATION_OPPORTUNITY che delinea dove è possibile aggiungere caratteri di giustificazione per giustificare il testo.
La seconda funzione è JustifyGlyphAdvances, che giustifica un array di avanzamenti dei glifi in modo che si adattino alla larghezza della linea. Questo metodo accetta la struttura DWRITE_JUSTIFICATION_OPPORTUNITY che GetJustificationOpportunities genera, gli avanzamenti dei glifi e gli offset dei glifi. Genera quindi i progressi giustificati del glifo e un'enumerazione DWRITE_GLYPH_OFFSET che contiene gli offset giustificati del glifo.
La terza funzione è GetJustifiedGlyphs, che riempie i nuovi glifi per gli script complessi in cui la giustificazione ha aumentato i progressi per i glifi. getJustifiedGlyphs deve essere chiamato solo se lo script ha un carattere di giustificazione specifico come restituito da GetScriptProperties. Questo metodo accetta informazioni sul tipo di carattere, la lunghezza del testo, la dimensione em dei glifi, la scrittura del testo, il numero di glifi, la mappa del cluster, gli avanzamenti/offset originali del glifo, gli avanzamenti/offset giustificati del glifo e le proprietà dei glifi. Il metodo restituisce il conteggio effettivo dei glifi, la mappa del cluster aggiornata, gli indici del glifo aggiornati con glifi di giustificazione inseriti, gli offset del glifo aggiornati e i progressi del glifo aggiornati.