2012-08-29 14 views
5

Podczas używania - [NSString drawInRect: withAttributes:], głównie podczas korzystania z wbudowanej czcionki Helvetica Neue, ale także z innymi czcionkami, kerning jest naprawdę zły. Jednak gdy ten sam ciąg jest renderowany w edytorze tekstu (który używa NSTextView) kerning jest świetny. Rozważmy te dwa ciągi:Nieprawidłowe kerning podczas używania - [NSString drawInRect: withAttributes:]

Bad kerning

Good kerning

Dla małych rozmiarach punktowych, pierwszy przypadek (wydanego w kakao) jest prawie nieczytelny, natomiast drugi przypadek (z Text Edit) jest znacznie lepsza. Nie sądzę, że tutaj używa się informacji o kerningu. Jeśli zastosuję NSKernAttribute z wartością 0.0 (co zgodnie z dokumentacją wyłącza kerning) otrzymuję ten sam wynik, ten na górze.

Próbowałem również używać Core Text z CTLineDraw, ale nadal mam złe kerning. Moje pytanie brzmi: czy jest coś specjalnego, co muszę zrobić, aby włączyć kerning w systemie tekstowym Cocoa? Jeśli nie, w jaki sposób NSTextView stosuje kerning?

+0

Z jakiego systemu operacyjnego korzystasz? Nie ma różnicy na moim 10.7.4. Widzę różnicę 2-piksele na 10.6.8 dla 72pt H.Neue, ale to wciąż jest dużo niższe niż na zrzucie ekranu. Czy jesteś pewien, że domyślne atrybuty pisania w twoim NSTextView nie zawierają już pewnej wartości, czy próbowałeś wysłać to 'useStandardKerning:'? – hamstergene

+0

To jest 10.7.4, ze standardową Helvetica Neue (wersja 7.0d27e1). Drugi zrzut ekranu pochodzi z edycji tekstu (aplikacja) przy użyciu świeżego dokumentu. – Aderstedt

+0

Wybierz wszystko, format, czcionkę, kern, użyj domyślnego/brak - czy coś zmienia? Nie ma różnicy między tekstem TextEdit i ciągiem przypisanym niestandardowo. A co z NSTextFieldCell i NSButtonCell, czy one też są dla ciebie złe? – hamstergene

Odpowiedz

1

Górny przykład jest "mocniejszy", a dolny "luźniejszy", patrz -[NSTextView tightenKerning], -[NSTextView loosenKerning]. Tutaj Apple mylnie odnosi się do tego, co wszyscy inni nazywają "Śledzeniem" jako "Kerning", czyli. stałą ilość dodatkowej przestrzeni (dodatniej lub ujemnej) równomiernie naniesioną pomiędzy każdym glifem po "przesuwie znaku" określonej w czcionce, aby tekst wyglądał, dobrze, mocniej lub luźniej.

Domyślna "szczelność" lub "luźność" jest właściwością silnika renderującego, a nie czcionką, i może być łatwo różna dla różnych wersji OSX, aplikacji lub elementów interfejsu użytkownika.

W czcionce, tabela kerningu służy do korekty przesunięcia znaków wymaganego przez określone pary glifów, np. W mojej hipotetycznej czcionce: "AV" jest wymienione jako para kerningu - "A" powinno mieć mniejsze z góry, gdy postać podążająca za nią jest literą "V".

Czcionki OSX Helvetica i HelveticaNeue (oraz wiele innych czcionek) w ogóle nie mają informacji o kerningu, więc masz rację, że w przykładach nie są używane informacje o kerningu.

Jeśli czcionka nie ma informacji Kerning, pytanie "Jak włączyć kerning w systemie tekstowym kakao?" nie ma sensu lub nie oznacza tego, co twoim zdaniem oznacza (?).

+0

Patrząc na tabelę "kern" w rzeczywistej czcionce, Helvetica Neue zawiera tabelę kerningu z 98 kerningami. Co sprawia, że ​​mówisz, że tak nie jest? – Aderstedt

+0

Masz rację, ma trochę. Jestem zaskoczony i pewny, że nie miał żadnych. Nadal nie ma to znaczenia dla podanego przykładu, prawda? to znaczy- brak par zawierających cyfry – hooleyhoop

+0

Tak, a większość par to tylko korekty ujemne. Prawdopodobnie masz rację, to śledzenie jest inne. Zastanawiam się, dlaczego domyślne śledzenie różni się od 10,7 do 10,8. Moim rozwiązaniem jest pozostawienie wyniku w postaci "ciasnej" dla 10,7 użytkowników i poinformowanie przeszkadzających, aby uaktualnili się do wersji 10.8. – Aderstedt

Powiązane problemy