Compartir a través de


Justificación, interlineado y espaciado

A partir de Windows 8, DirectWrite proporciona una serie de características que permiten controlar las características tipográficas, de diseño y espaciado básicas, como el espaciado de caracteres, el interlete de pares y la justificación.

espaciado entre caracteres

El espaciado de caracteres, también conocido como "seguimiento", es el espaciado entre caracteres de una serie de texto.

Este es un ejemplo de seguimiento. La primera línea no aplica ningún seguimiento al texto. La segunda línea aumenta el espaciado de caracteres y la tercera línea reduce el espaciado de caracteres.

tres ejemplos del mismo texto sin seguimiento, más espaciado y menos espaciado.

A partir de Windows 8, DirectWrite agrega estos métodos aquí para controlar el espaciado de caracteres en el texto.

Si usa el diseño de DirectWrite, puede usar los métodos IDWriteTextLayout1::GetCharacterSpacing e IDWriteTextLayout1::SetCharacterSpacing para este fin.

Use el método GetCharacterSpacing para determinar el espaciado de caracteres actual y devuelve el carácter actual, el espaciado antes y después del carácter, el ancho de avance mínimo y una estructura DWRITE_TEXT_RANGE que contiene información sobre la posición inicial y la longitud del texto restante.

Use setCharacterSpacing en una interfaz DWriteTextLayout1 para aplicar su propio espaciado de caracteres al texto del diseño. El método SetCharacterSpacing toma la cantidad de espacio que desea antes y después del carácter, el avance mínimo permitido y un DWRITE_TEXT_RANGE que define el intervalo para aplicar el espaciado.

Si usa un diseño personalizado, DirectWrite admite la configuración del espaciado de caracteres con IDWriteTextAnalyzer1::ApplyCharacterSpacing. Use este método si necesita un diseño de texto personalizado para tener un control avanzado sobre el diseño. Este método permite proporcionar ApplyCharacterSpacing con el espaciado inicial y final, el ancho de avance mínimo, la longitud del mapa del clúster, el número de glifos, la asignación de intervalos de caracteres a glifos y el ancho avanzado de cada glifo si usa un diseño personalizado. El método devuelve el glifo modificado avanza y una enumeración DWRITE_GLYPH_OFFSET con los nuevos desplazamientos al origen de cada glifo.

Kerning

Kerning es el ajuste de espaciado contextual entre pares o triples de letras. El espaciado específico entre conjuntos de caracteres puede aumentar la legibilidad y mejorar la apariencia del texto. La diferencia importante entre el inter kerning y el espaciado de caracteres es el hecho de que el espaciado de letras es independiente del texto que espacios, mientras que el interlineado se usa en determinadas situaciones entre determinados pares de caracteres tal y como se define en la fuente.

La imagen es un ejemplo de inter kerning. La palabra AVATAR de la línea superior está en kerned para que la palabra parezca más natural. Como puede ver en los cuadros rojos alrededor de los caracteres, hay más espaciado aplicado entre las cuatro primeras letras, mientras que el R al final tiene más espacio antes. El texto original sin interlineado está en la segunda línea. El inter kerning de este ejemplo hace que la palabra sea más legible y más natural.

ejemplo de la misma palabra con y sin interleleción aplicada.

El carácter avanza entre pares de caracteres que las kerns de fuente se almacenan en la tabla kern y DirectWrite analiza esa tabla y devuelve la información a través de las API de inter kerning.

Si desea saber si una fuente admite o no el inter kerning de pares, puede usar el método IDWriteFontFace1::HasKerningPairs . Este método devuelve un valor bool de 1 si la fuente admite pares de inter kerning.

El IDWriteFontFace1 también tiene un método que permite obtener acceso a los ajustes del par kerning para los índices de glifo. GetKerningPairAdjustments permite introducir una matriz de índices de glifo y DirectWrite devuelve una matriz de ajustes de avance del glifo. Si una fuente no admite la tabla kern, el método devuelve ceros para los ajustes de avance del glifo.

Si usa el diseño de DirectWrite, hay dos métodos en la interfaz IDWriteTextLayout1 que le permiten establecer el inter kerning de pares y obtener más información sobre el inter kerning de pares en el diseño. El método SetPairKerning toma una representación booleana de si quiere habilitar o no el interleano y un DWRITE_TEXT_RANGE que define el intervalo de texto al que se va a aplicar. Si quiere saber si el interpaquete de pares está habilitado o no en un intervalo de texto, puede usar el método GetPairKerning , que toma la posición actual y devuelve un bool correspondiente a si está habilitado o no el inter kerning de pares y el intervalo de texto al que se aplica la configuración de inter kerning.

Justificación

La justificación es el proceso de alinear texto para que rellene todo el espacio dentro de una columna aumentando los avances entre caracteres o clústeres de glifos o agregando caracteres de justificación para lograr el mismo efecto. En general, esto se logra mediante la determinación de dónde se debe agregar espacio a una línea de texto e insertar caracteres de espaciado en esas oportunidades de interrupción. Estos elementos de espaciado también pueden diferir, en alfabetos latinos, el texto está justificado aumentando los anchos de avance entre los elementos, mientras que en árabe, el texto está justificado con un kashida. Este es un ejemplo de alfabeto árabe y latino justificado y no justificado.

un ejemplo de alfabeto árabe y latino justificado y no justificado.

A partir de Windows 8, DirectWrite tiene varios métodos que permiten justificar el texto en las aplicaciones.

Hay un valor adicional en la enumeración DWRITE_TEXT_ALIGNMENT . Puede usar el método SetTextAlignment y pasar la constante DWRITE_TEXT_ALIGNMENT_JUSTIFIED y DirectWrite justifica el texto e inserta el carácter de justificación adecuado para el script.

Si usa un diseño personalizado tiene una serie de métodos disponibles para que pueda aprovechar las ventajas de la justificación. DirectWrite tiene tres métodos en la interfaz IDWriteTextAnalyzer1 que puede usar para agregar justificación a un diseño personalizado.

El primer método es GetJustificationOpportunities, que toma el texto que desea justificar y devuelve una estructura DWRITE_JUSTIFICATION_OPPORTUNITY que describe dónde se pueden agregar caracteres de justificación para justificar el texto.

La segunda función es JustifyGlyphAdvances, que justifica una matriz de glifos avanza para que se ajusten al ancho de línea. Este método toma la estructura DWRITE_JUSTIFICATION_OPPORTUNITY que genera GetJustificationOpportunities , el glifo avanza y los desplazamientos del glifo. A continuación, genera los avances del glifo justificado y una enumeración DWRITE_GLYPH_OFFSET que contiene los desplazamientos del glifo justificado.

La tercera función es GetJustifiedGlyphs, que rellena los nuevos glifos para scripts complejos donde la justificación ha aumentado los avances de glifos. Solo es necesario llamar a GetJustifiedGlyphs si el script tiene un carácter de justificación específico tal como lo devuelve GetScriptProperties. Este método toma información sobre la fuente, la longitud del texto, el tamaño em de los glifos, el script del texto, el número de glifos, el mapa del clúster, los desplazamientos o desplazamientos originales del glifo, los desplazamientos o los desplazamientos justificados del glifo y las propiedades del glifo. El método devuelve el recuento real de glifos, el mapa de clúster actualizado, los índices de glifo actualizados con glifos de justificación insertados, desplazamientos de glifos actualizados y avances de glifo actualizados.