Problema com a fonte de espessura depois de alterar BaseSDK de 10.5 a 10.6
-
12-11-2019 - |
Pergunta
Depois de alterar o BaseSDK do meu projeto para 10,6 notei que o meu desenho personalizado, o texto parece diferente (veja as imagens:o mesmo código para o desenho)
Sob 10.5 BaseSDK:image1
Sob 10.6 BaseSDK:image2
Eu estou desenhando com [(NSString *)myString drawInRect:myRect withAttributes:myAttributes].
myAttributes = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
[NSColor myColor], NSForegroundColorAttributeName,
[NSFont systemFontOfSize:18], NSFontAttributeName,
paragraphStyle, NSParagraphStyleAttributeName,
shadow, NSShadowAttributeName, nil];
Qual é a razão de tal diferença, ou apenas reduzir a espessura da fonte?Eu tentei reduzir a espessura do pelo
[NSFontManager convertWeight:NO ofFont:font]
mas não parece muito melhor...
Obrigado antecipadamente.
Solução 2
Agora eu sei a razão por que isso acontece e a correcção para este problema:Parece que com 10,6 foi adicionado fonte LCD opção suavização, que é ativado em Preferências -> Aparência -> "Use LCD suavização de tipo de letra quando disponível" na caixa de seleção que está marcada por padrão.
Por isso, depois de mudar a BaseSDK do projeto para o 10.6, os textos da aplicação tornou-LCD-estilo suavizadas e à procura de todo ruim.
Portanto, a correção do problema no código para alterar as opções de suavização em gráficos de contexto antes de nossos desenhos:
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];
CGContextSetShouldSmoothFonts(context, NO);
A documentação deste método diz-nos que este parâmetro é parte dos gráficos do estado de então, se você não quiser alterar esta opção em outro tipo de letra desenhos, você deve restaurar os gráficos do estado.
Graças a @NSGod para encontrar o motivo do problema.
Outras dicas
Se nós zoom e olhar de perto em ambas as imagens, vamos notar uma diferença imediata (pelo menos eu):
O texto na parte superior da imagem é usando CRT-estilo de suavização de tipo de letra, enquanto o texto na parte inferior da imagem está usando Médio LCD-estilo de suavização de tipo de letra.(Todos os 3 estilos de LCD suavização de tipo de letra vai apresentar cores no anti-alias pixels).
Nós precisamos de mais informações sobre os testes de configuração para ser capaz de dizer por que isso está acontecendo.Em que versão(s) do OS X que você está testando este com?Por exemplo, foi seu aplicativo construído contra o 10.6 SDK com um destino de implantação de 10,5, a parte superior da imagem foi tirada durante o teste em OS X 10.5.x (na mesma máquina), e a menor imagem foi tirada durante o teste sob 10.6.x?Ou, tudo isso foi o teste feito no Mac OS X 10.6.x, e a construção de contra 10,5 SDK resultou na parte superior da imagem, e o edifício contra o 10.6 SDK resultou na parte inferior da imagem?O modelo de Mac você está usando?Que tipo de externo LCD ou de ecrãs CRT fazer você ter ligado, se for o caso?
Apenas um par de idéias, sem ter a informação que pediu para acima.O padrão de suavização de tipo de letra estilo é CRT em 10,5, eu acredito, e 10.6 padrões para "automático".Então, se você tem um sistema com um visor LCD e estavam testando sob 10.5, mas nunca tiver alterado o tipo de letra de suavização estilo do padrão CRT-estilo, então você gostaria de obter uma imagem como a superior.Se você, em seguida, mudar para o 10.6, no mesmo sistema, é possível que o 10.6 fonte automática de suavização automaticamente detectados em seu display LCD, e usado Médio LCD-estilo de suavização de tipo de letra, o que resultaria no "aspecto mais pesado" de texto na parte inferior da imagem.
Outra coisa a ter em mente é que a suavização de fonte de valor é armazenado em uma base host.Por exemplo, na minha máquina, o AppleFontSmoothing
valor é armazenado em ~/Library/Preferences/ByHost/.GlobalPreferences.##########.plist, onde o ########## é o seu hardware UUID.Eu suponho que é possível que não poderia ser de 2 diferentes valores armazenados para diferentes configurações de host.
Você está recebendo o que você pedir
[NSFont systemFontOfSize:18]
Eles são mais prováveis sutilmente diferentes fontes entre os 10.5 e 10.6.Um designer gráfico tem loucos por qualquer motivo.
O que você ganha se você registrar a saída de [NSFont systemFontOfSize:18]
.É que é diferente entre os 10.5 e 10.6?