Giustificazione, kerning e spaziatura
A partire da Windows 8, DirectWrite offre una serie di funzionalità che consentono di controllare le funzionalità tipografiche, layout e spaziatura di base, ad esempio spaziatura caratteri, kerning di coppia e giustificazione.
Spaziatura caratteri
La spaziatura dei caratteri, nota anche come "rilevamento", è la spaziatura tra i caratteri in un'esecuzione di testo.
Ecco 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 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.
Usare l'interfaccia SetCharacterSpacing in un'interfaccia DWriteTextLayout1 per applicare la spaziatura dei caratteri personalizzata al testo nel layout. Il metodo SetCharacterSpacing accetta la quantità di spazio desiderata prima e dopo il carattere, l'anticipo 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. Usare questo metodo se è necessario un layout di testo personalizzato per avere un controllo avanzato sul layout. Questo metodo consente di fornire ApplyCharacterSpacing con spaziatura iniziale e finale, larghezza minima di avanzamento, lunghezza minima della mappa del cluster, numero di glifi, mapping da intervalli di caratteri a glifi e 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
Kerning è la regolazione della spaziatura contestuale 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 la spaziatura dei caratteri e la spaziatura dei caratteri è il fatto che la spaziatura delle lettere è agnostica per il testo, mentre la kerning viene usata in determinate situazioni tra determinate coppie di caratteri come definito nel tipo di carattere.
L'immagine è un esempio di kerning. La parola AVATAR sulla linea superiore è kerned 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 sulla fine ha più spazio prima di esso. Il testo originale senza kerning è 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 kerning.
Se si vuole sapere se un tipo di carattere supporta la kerning di coppia, è possibile usare il metodo IDWriteFontFace1::HasKerningPairs . Questo metodo restituisce un valore bool pari a 1 se il tipo di carattere supporta coppie di kerning.
L'IDWriteFontFace1 include anche un metodo che consente di accedere alle regolazioni della coppia di kerning per gli indici glifi. GetKerningPairAdjustments consente di immettere una matrice di indici glifi e DirectWrite restituisce una matrice di regolazioni avanzate del glifo. Se un tipo di carattere non supporta la tabella kern, il metodo restituisce zero per le regolazioni avanzate del glifo.
Se si usa il layout di DirectWrite, sono disponibili due metodi nell'interfaccia IDWriteTextLayout1 che consente di impostare la kerning di coppia e di altre informazioni sulla kerning di coppia nel layout. Il metodo SetPairKerning accetta una rappresentazione booleana di se si vuole abilitare la kerning di coppia e un DWRITE_TEXT_RANGE che definisce l'intervallo di testo da applicare a. Se si vuole imparare se la kerning di coppia è abilitata in un intervallo di testo, è possibile usare il metodo GetPairKerning , che accetta la posizione corrente e restituisce un bool corrispondente al fatto che sia abilitata o meno la kerning di coppia e l'intervallo di testo a cui si applica l'impostazione di kerning.
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 lo spazio deve essere aggiunto a una riga di testo e inserendo caratteri di spaziatura in tali opportunità di interruzione. Questi elementi di spaziatura possono essere diversi, anche negli script latini, il testo è giustificato aumentando le larghezze di avanzamento tra elementi, mentre in arabo, il testo è giustificato con un kashida. Ecco un esempio di script arabo e latino sia giustificati che non giustificati.
A partire da Windows 8, DirectWrite include diversi metodi che consentono di giustificare il testo nelle app.
Esiste un valore aggiuntivo nell'enumerazione DWRITE_TEXT_ALIGNMENT . È possibile usare il metodo SetTextAlignment e passare la costante DWRITE_TEXT_ALIGNMENT_JUSTIFIED e DirectWrite giustifica il testo e inserisce il carattere di giustificazione appropriato per lo script.
Se si usa un layout personalizzato, è disponibile un numero di metodi in modo da poter sfruttare la giustificazione. DirectWrite include 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 descrive dove è possibile aggiungere caratteri di giustificazione per giustificare il testo.
La seconda funzione è JustifyGlyphAdvances, che giustifica una matrice di avanzamenti del glifo in modo da adattare la larghezza della linea. Questo metodo accetta la struttura DWRITE_JUSTIFICATION_OPPORTUNITY generata da GetJustificationOpportunities , i progressi del glifo e gli offset del glifo. Genera quindi i progressi del glifo giustificati e un'enumerazione DWRITE_GLYPH_OFFSET che contiene gli offset del glifo giustificati.
La terza funzione è GetJustifiedGlyphs, che riempie i nuovi glifi per script complessi in cui la giustificazione ha aumentato i progressi per 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, sulla lunghezza del testo, sulle dimensioni em degli glifi, sullo script del testo, sul numero di glifi, sulla mappa del cluster, sulle avanzate/offset originali del glifo, sulle avanzate/offset del glifo giustificate e sulle proprietà del glifo. Il metodo restituisce il conteggio del glifo effettivo, la mappa del cluster aggiornata, gli indici del glifo aggiornati con glifi inseriti, gli offset del glifo aggiornati e i progressi del glifo aggiornati.