Texto vertical

A partir de la Windows 8, DirectWrite tiene varias API nuevas que permiten usar texto vertical en las aplicaciones.

Dibujo de texto vertical

Puedes dibujar texto vertical con Direct2D mediante los métodos DrawTextLayout . Para dibujar el texto verticalmente, pase DWRITE_READING_DIRECTION_TOP_TO_BOTTOM al método IDWriteTextFormat::SetReadingDirection y DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT al método IDWriteTextFormatSetFlowDirection . A continuación, puede crear y dibujar un objeto IDWriteTextLayout vertical.

Análisis de la orientación de caracteres

Cada carácter tiene una orientación de carácter preferida o la dirección que el carácter debe orientarse en cualquier diseño direccional. Por ejemplo, en el diseño horizontal tradicional, tanto el texto latino como el texto chino están orientados verticalmente. Por otro lado, en un diseño vertical, el texto chino permanece vertical y el texto latino se gira 90 grados. Esta diferencia en la orientación se muestra en el ejemplo aquí.

una imagen de texto en inglés y chino en diseños horizontales y verticales.

Para determinar la orientación del texto que tiene, debe implementar las interfaces IDWriteTextAnalysisSink1 e IDWriteTextAnalysisSource1 . El origen y el receptor toman el glifo se ejecuta y permiten comprobar si están orientados verticalmente o no.

Después de implementar el origen y el receptor, llame al método AnalyzeVerticalGlyphOrientation . En la imagen de ejemplo, esta función devuelve 3 ejecuciones: "Inglés", "中国" y "Inglés".

Pasar de caracteres a glifos

Ahora que sabe que la ejecución contiene glifos verticales, debe obtener acceso a esos glifos. En el ejemplo hasta ahora, hay tres ejecuciones: una con glifos verticales y dos sin. Para pasar de caracteres a glifos, llama a GetGlyphIndices. Este método devuelve los índices de glifo correspondientes para los caracteres del ejemplo. Dado que el método AnalyzeVerticalGlyphOrientation devuelve una ejecución con glifos verticales, debe llamar a GetVerticalGlyphVariants, que devuelve los identificadores de glifo orientado verticalmente en lugar de los identificadores de glifo actuales.

Dibujar texto verticalmente

Por último, debe diseñar y dibujar el texto. Dado que está dibujando el texto verticalmente, debe obtener más información para que el texto latino se dibuje correctamente. Si dibuja todo el texto a lo largo de la línea base central, el texto latino aparece flotando en el centro de la línea. Necesita acceso a la línea de base central y romana para alinear correctamente el texto. Use el método IDWriteTextAnalyzer1::GetBaseline para obtener los valores numéricos de las líneas base que especifique. Puede restar la línea base romana de la línea base central para obtener el desplazamiento entre los dos.

Con toda esta información, puede dibujar el texto en la pantalla. En primer lugar, llame al método GetGlyphOrientationTransform con los resultados de los objetos IDWriteTextAnalysisSink1 e IDWriteTextAnalysisSource1 .

Si usas Direct2D también debes establecer la transformación del mundo en el destino de representación de Direct2D para la representación vertical.

Por último, llame a DrawGlyphRun tres veces, una vez en cada bloque de texto. En los dos bloques de texto que están en inglés, debe aplicar el desplazamiento que calculamos entre las líneas base romana y central.

Ahora, el texto de la aplicación se dibujará verticalmente, con la orientación correcta del glifo.