Compartilhar via


Justificativa, kerning e espaçamento

Começando com Windows 8, DirectWrite fornece uma série de recursos que permitem controlar recursos básicos de digitação, layout e espaçamento, como espaçamento de caracteres, kerning de par e justificativa.

Espaçamento de caracteres

O espaçamento de caracteres, também conhecido como "acompanhamento", é o espaçamento entre caracteres em uma execução de texto.

Aqui está um exemplo de acompanhamento. A primeira linha não aplica nenhum acompanhamento ao texto. A segunda linha aumenta o espaçamento de caracteres e a terceira linha diminui o espaçamento de caracteres.

três exemplos do mesmo texto sem acompanhamento, mais espaçamento e menos espaçamento.

Começando com Windows 8, DirectWrite adiciona esses métodos aqui para controlar o espaçamento de caracteres em seu texto.

Se você estiver usando o layout DirectWrite, poderá usar os métodos IDWriteTextLayout1::GetCharacterSpacing e IDWriteTextLayout1::SetCharacterSpacing para essa finalidade.

Use o método GetCharacterSpacing para determinar o espaçamento do caractere atual e ele retorna o caractere atual, o espaçamento antes e depois do caractere, a largura de avanço mínima e uma estrutura DWRITE_TEXT_RANGE que contém informações sobre a posição inicial e o comprimento do texto restante.

Use SetCharacterSpacing em uma interface DWriteTextLayout1 para aplicar seu próprio espaçamento de caracteres ao texto no layout. O método SetCharacterSpacing ocupa a quantidade de espaço que você deseja antes e depois do caractere, o avanço mínimo permitido e um DWRITE_TEXT_RANGE que define o intervalo para aplicar o espaçamento.

Se você estiver usando um layout personalizado, DirectWrite terá suporte para definir o espaçamento de caracteres com IDWriteTextAnalyzer1::ApplyCharacterSpacing. Use esse método se você precisar de um layout de texto personalizado para ter controle avançado sobre o layout. Esse método permite que você forneça ApplyCharacterSpacing com o espaçamento à esquerda e à direita, largura de avanço mínima, comprimento do mapa do cluster, número de glifos, mapeamento de intervalos de caracteres para glifos e largura avançada de cada glifo se você usar um layout personalizado. O método retorna os avanços do glifo modificado e uma enumeração DWRITE_GLYPH_OFFSET com os novos deslocamentos para a origem de cada glifo.

Kerning

Kerning é o ajuste de espaçamento contextual entre pares ou trigêmeos de letras. O espaçamento específico entre conjuntos de caracteres pode aumentar a legibilidade e fazer com que o texto pareça melhor. A diferença importante entre o kerning e o espaçamento de caracteres é o fato de que o espaçamento entre letras é independente do texto que ele usa, enquanto o kerning é usado em determinadas situações entre determinados pares de caracteres, conforme definido na fonte.

A imagem dela é um exemplo de kerning. A palavra AVATAR na linha superior é kerned para tornar a palavra mais natural. Como você pode ver nas caixas vermelhas ao redor dos caracteres, há mais espaçamento aplicado entre as quatro primeiras letras, enquanto o R no final tem mais espaço antes dele. O texto original sem kerning está na segunda linha. O kerning neste exemplo torna a palavra mais legível e mais natural.

um exemplo da mesma palavra com e sem kerning aplicado.

O caractere avança entre pares de caracteres que os kerns de fonte são armazenados na tabela kern e DirectWrite analisa essa tabela e retorna as informações para você por meio das APIs de kerning.

Se você quiser saber se uma fonte dá suporte ou não ao kerning de par, você pode usar o método IDWriteFontFace1::HasKerningPairs . Esse método retornará um valor bool de 1 se a fonte der suporte a pares de kerning.

O IDWriteFontFace1 também tem um método que permite que você obtenha acesso aos ajustes de par de kerning para índices de glifo. GetKerningPairAdjustments permite inserir uma matriz de índices de glifo e DirectWrite retorna uma matriz de ajustes de avanço de glifo. Se uma fonte não der suporte à tabela kern, o método retornará zeros para os ajustes de avanço do glifo.

Se você estiver usando o layout DirectWrite, há dois métodos na interface IDWriteTextLayout1 que permitem definir o kerning de pares e saber mais sobre o kerning de par no layout. O método SetPairKerning usa uma representação booliana de se você deseja ou não habilitar o kerning de par e um DWRITE_TEXT_RANGE que define o intervalo de texto ao qual aplicá-lo. Se você quiser saber se o kerning de par está ou não habilitado em um intervalo de texto, você pode usar o método GetPairKerning , que assume a posição atual e retorna um bool correspondente a se o kerning de par está habilitado ou não, e o intervalo de texto ao qual a configuração de kerning se aplica.

Justificativa

Justificativa é o processo de alinhar o texto para que ele preencha todo o espaço dentro de uma coluna aumentando os avanços entre caracteres ou clusters de glifo ou adicionando caracteres de justificativa para obter o mesmo efeito. Em geral, isso é feito determinando onde o espaço precisa ser adicionado a uma linha de texto e inserindo caracteres de espaçamento nessas oportunidades de quebra. Esses elementos de espaçamento também podem ser diferentes, em scripts latinos, o texto é justificado aumentando as larguras avançadas entre elementos, enquanto em árabe, o texto é justificado com uma kashida. Aqui está um exemplo de script árabe e latino justificado e não justificado.

um exemplo de script árabe e latino justificado e não justificado.

Começando com Windows 8, DirectWrite tem vários métodos que permitem justificar o texto em seus aplicativos.

Há um valor adicional na enumeração DWRITE_TEXT_ALIGNMENT . Você pode usar o método SetTextAlignment e passar a constante DWRITE_TEXT_ALIGNMENT_JUSTIFIED e DirectWrite justifica o texto e insere o caractere de justificativa apropriado para o script.

Se você estiver usando um layout personalizado, tenha vários métodos disponíveis para que você possa aproveitar a justificativa. DirectWrite tem três métodos na interface IDWriteTextAnalyzer1 que você pode usar para adicionar justificativa a um layout personalizado.

O primeiro método é GetJustificationOpportunities, que usa o texto que você deseja justificar e retorna uma estrutura DWRITE_JUSTIFICATION_OPPORTUNITY que descreve onde caracteres de justificativa podem ser adicionados para justificar o texto.

A segunda função é JustifyGlyphAdvances, que justifica uma matriz de avanços de glifo para que se ajustem à largura da linha. Esse método usa a estrutura DWRITE_JUSTIFICATION_OPPORTUNITY gerada por GetJustificationOpportunities , os avanços do glifo e os deslocamentos de glifo. Em seguida, ele gera os avanços de glifo justificados e uma enumeração DWRITE_GLYPH_OFFSET que contém os deslocamentos de glifo justificados.

A terceira função é GetJustifiedGlyphs, que preenche os novos glifos para scripts complexos em que a justificativa aumentou os avanços para glifos. GetJustifiedGlyphs só precisará ser chamado se o script tiver um caractere de justificativa específico, conforme retornado por GetScriptProperties. Esse método recebe informações sobre a fonte, o comprimento do texto, o tamanho dos glifos, o script do texto, o número de glifos, o mapa do cluster, os avanços/deslocamentos do glifo original, os avanços/deslocamentos justificados do glifo e as propriedades do glifo. O método retorna a contagem real de glifos, o mapa de cluster atualizado, os índices de glifo atualizados com glifos de justificativa inseridos, deslocamentos de glifo atualizados e avanços de glifo atualizados.