Usando fallback de fonte
Observação
Neste tópico, todos os comentários sobre ScriptShape se aplicam igualmente a ScriptShapeOpenType.
O seu aplicativo deve usar substituição de fonte durante a exibição de texto se alguns caracteres numa sequência de caracteres não forem suportados pela fonte, ou se o aplicativo usar um script complexo que não é suportado pela fonte. O requisito de fallback de fonte é detetado durante o processo de layout para texto, quando a aplicação chama a função ScriptShape. Para obter informações sobre exibição de texto, consulte Exibindo texto com Uniscribe.
Determinar a necessidade de substituição de fonte para caracteres não suportados
Se alguns dos caracteres em uma cadeia de caracteres não forem suportados em uma fonte solicitada, uma chamada de aplicativo para ScriptShape terá êxito. No entanto, o aplicativo deve verificar o buffer de saída do glifo para a presença de glifos ausentes. O índice do glifo ausente pode ser determinado para uma fonte específica chamando ScriptGetFontProperties. Se um glifo específico não estiver disponível, o aplicativo deverá retornar a uma fonte diferente para um glifo ou renderizar um símbolo gráfico que indique que nenhum glifo está disponível.
Determinar a necessidade de substituição de fonte para scripts complexos sem suporte
A fonte que um aplicativo prefere para exibição pode não suportar um script complexo que é exigido pelo texto. Nesse caso, a chamada do aplicativo para ScriptShape falha com o código de erro E_SCRIPT_NOT_IN_FONT.
Atribuir uma fonte de fallback
Depois de determinar que a reserva de fonte é necessária, a aplicação deve atribuir uma fonte de reserva. O aplicativo pode tentar as seguintes técnicas:
- Chame ScriptShape para cada tipo de letra numa lista de tipos de letra até que uma invocação tenha um retorno aceitável.
- Chame ScriptShape com cada fonte em uma lista até que possa ser determinado que nenhuma fonte terá êxito. Se o código de erro estiver sempre E_SCRIPT_NOT_IN_FONT, um script complexo não é suportado pelas fontes. Renderize um símbolo gráfico que indique que nenhum glifo está disponível ou especifique novamente o script como indefinido (sem processamento de script) e comece novamente. Para definir o script como indefinido, defina o eScript membro da estrutura SCRIPT_ANALYSIS como SCRIPT_UNDEFINED.
- Chame ScriptShape com cada fonte em uma lista até que possa ser determinado que nenhuma fonte terá êxito. Se o código de erro indicar que alguns caracteres estão a ser mapeados para glifos ausentes, parta a cadeia de caracteres em intervalos menores. Diferentes fontes podem ser atribuídas a subintervalos para que mais caracteres possam ser renderizados.
Gerar informações sobre glifos
Depois que o aplicativo tiver atribuído uma fonte que teve sucesso em chamadas para ScriptShape, ele poderá fazer chamadas para ScriptPlace para gerar a largura de avanço dos glifos e informações de deslocamento em duas dimensões a partir da saída de ScriptShape. A fonte deve ter êxito nessas chamadas. Uma falha de fonte numa chamada a ScriptPlace após o sucesso numa chamada a ScriptShape indica uma fonte quebrada.
Tópicos relacionados