2012-08-29 3 views
5

Quando si utilizza - [NSString drawInRect: withAttributes:], principalmente quando si utilizza l'Helvetica Neue incorporata ma anche con altri tipi di carattere, la crenatura è davvero pessima. Tuttavia, quando la stessa stringa viene renderizzata in Text Edit (che usa NSTextView), la crenatura è ottima. Considerate queste due stringhe:Cattiva crenatura quando si usa - [NSString drawInRect: withAttributes:]

Bad kerning

Good kerning

Per piccoli formati del punto, il primo caso (reso in Cocoa) è quasi illeggibile, mentre il secondo caso (da Text Edit) è molto meglio. Non penso che le informazioni sulla crenatura vengano usate qui. Se applico NSKernAttribute con un valore di 0.0 (che in base alla documentazione disattiva la crenatura) ottengo lo stesso risultato, quello in alto.

Ho anche provato a utilizzare Core Text con CTLineDraw, ma ho ancora ottenuto la cattiva crenatura. Quindi la mia domanda è: c'è qualcosa di speciale che devo fare per abilitare il kerning nel sistema di testo Cocoa? In caso contrario, in che modo NSTextView applica il kerning?

+0

Quale sistema operativo è in esecuzione? Non c'è differenza sul mio 10.7.4. Vedo una differenza di 2 pixel su 10.6.8 per 72pt H.Neue, ma è ancora molto inferiore rispetto allo screenshot. Sei sicuro che gli attributi di digitazione di default nel tuo NSTextView non includano già un certo valore, hai provato a inviarlo 'useStandardKerning:'? – hamstergene

+0

Questo è 10.7.4, con Helvetica Neue standard (versione 7.0d27e1). Il secondo screenshot proviene da Text Edit (l'app), usando un nuovo documento. – Aderstedt

+0

Seleziona tutto, Formato, Carattere, Kern, Usa predefinito/Nessuno - cambia qualcosa? Non ho questa differenza tra TextEdit e la stringa attribuita disegnata dall'utente. Che ne dici di NSTextFieldCell e NSButtonCell, anche loro disegnano male per te? – hamstergene

risposta

1

L'esempio in alto è "più stretto" e quello in basso è "più largo", vedere -[NSTextView tightenKerning], -[NSTextView loosenKerning]. Qui Apple si riferisce in modo confuso a ciò che tutti chiamano 'Tracciamento' come 'Kerning', ad esempio. una quantità costante di spazio aggiuntivo (positivo o negativo) uniformemente applicata tra ciascun glifo, dopo l'avanzamento del carattere specificato nel carattere, per far apparire il testo, bene, più stretto o più libero.

La "chiusura" predefinita o "allentata" è una proprietà del motore di rendering, non del carattere, e potrebbe facilmente essere diversa tra diverse versioni OSX, app o elementi dell'interfaccia utente.

In un carattere, la tabella di crenatura serve per regolare l'avanzamento del carattere richiesto da specifiche coppie di glifi, ad esempio, nel mio font ipotetico: 'AV' è elencato come una coppia di kerning - la 'A' dovrebbe avere un minore anticipo quando il personaggio che lo segue è una "V".

I font OSX Helvetica e HelveticaNeue (e molti altri tipi di carattere) non hanno affatto informazioni di crenatura, quindi hai ragione che nei tuoi esempi non vengono utilizzate informazioni di crenatura.

Se il carattere non contiene informazioni di crenatura, la domanda "Come si abilita il kerning nel sistema di testo Cocoa?" non ha senso o non significa quello che pensi significhi (?).

+0

Guardando la tabella 'kern' nel carattere attuale, Helvetica Neue include una tabella di kern con 98 coppie di kern. Cosa ti fa dire che non è così? – Aderstedt

+0

Hai ragione, ne ha alcuni. Sono sorpreso e sicuro che non ne abbia mai avuti. Tuttavia, non è rilevante per l'esempio dato, giusto? cioè- nessuna coppia contenente i numeri – hooleyhoop

+0

Sì, e la maggior parte delle coppie sono solo regolazioni negative. Quindi, probabilmente hai ragione, è il monitoraggio che è diverso. Mi chiedo perché il tracciamento predefinito sia così diverso tra 10,7 e 10,8. La mia soluzione per questo è di lasciare l'output "ridotto" per 10,7 utenti e istruire quelli che ne sono preoccupati ad effettuare l'aggiornamento a 10.8. – Aderstedt