Usando fallback de fonte

Observação

Neste tópico, todas as observações sobre ScriptShape se aplicam igualmente a ScriptShapeOpenType.

 

Seu aplicativo deve usar fallback de fonte durante a exibição de texto se alguns caracteres em uma cadeia de caracteres não tiverem suporte na fonte ou se o aplicativo usar um script complexo sem suporte na fonte. O requisito de fallback de fonte é detectado durante o processo de layout do texto, quando o aplicativo chama a função ScriptShape . Para obter informações sobre a exibição de texto, consulte Exibindo texto com Uniscribe.

Determinar a necessidade de fallback de fonte para caracteres sem suporte

Se alguns dos caracteres em uma cadeia de caracteres não tiverem suporte em uma fonte solicitada, uma chamada de aplicativo para ScriptShape será bem-sucedida. No entanto, o aplicativo deve verificar o buffer de saída de glifo para a presença de glifos ausentes. O índice de glifo 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á fazer fallback para 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 fallback de fonte para scripts complexos sem suporte

A fonte que um aplicativo prefere para exibição pode não dar suporte a um script complexo 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 o fallback de fonte é necessário, o aplicativo deve atribuir uma fonte de fallback. O aplicativo pode experimentar as seguintes técnicas:

  • Chame ScriptShape para cada fonte em uma lista de fontes até que uma chamada 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 terá suporte nas 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 membro eScript 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 dos caracteres estão mapeando para glifos ausentes, divida a cadeia de caracteres em intervalos menores. Fontes diferentes podem ser atribuídas a subranges para que mais caracteres possam ser renderizados.

Gerar informações de glifo

Depois que o aplicativo tiver atribuído uma fonte que tenha êxito em chamadas para ScriptShape, ele poderá fazer chamadas para ScriptPlace para gerar a largura avançada do glifo e informações de deslocamento bidimensional da saída de ScriptShape. A fonte deve ter êxito nessas chamadas. Uma falha de fonte em uma chamada para ScriptPlace após êxito em uma chamada ScriptShape indica uma fonte quebrada.

Usando Uniscribe