세로 텍스트
Windows 8 DirectWrite 앱에서 세로 텍스트를 사용할 수 있는 여러 가지 새로운 API가 있습니다.
세로 텍스트 그리기
DrawTextLayout 메서드를 사용하여 Direct2D로 세로 텍스트를 그릴 수 있습니다. 텍스트를 세로로 그리려면 idWriteTextFormat::SetReadingDirection 메서드에 DWRITE_READING_DIRECTION_TOP_TO_BOTTOM 전달하고 IDWriteTextFormatSetFlowDirection 메서드에 DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT. 그런 다음 세로 IDWriteTextLayout 개체를 만들고 그릴 수 있습니다.
문자 방향 분석
모든 문자에는 원하는 문자 방향 또는 문자가 방향 레이아웃에서 방향을 지정해야 하는 방향이 있습니다. 예를 들어 기존 가로 레이아웃에서 라틴어 텍스트와 중국어 텍스트는 모두 세로 방향으로 지정됩니다. 반면에 세로 레이아웃에서 중국어 텍스트는 똑바로 유지되고 라틴어 텍스트는 90도 회전됩니다. 방향의 이러한 차이는 여기 예제에서 볼 수 있습니다.
텍스트의 방향을 확인하려면 IDWriteTextAnalysisSink1 및 IDWriteTextAnalysisSource1 인터페이스를 구현해야 합니다. 원본 및 싱크는 문자 모양 실행을 사용하고 세로 방향인지 아닌지 검사 수 있습니다.
원본 및 싱크를 구현한 후 AnalyzeVerticalGlyphOrientation 메서드를 호출합니다 . 예제 이미지에서 이 함수는 "English", "中国" 및 "English"의 3개의 실행을 반환합니다.
문자에서 문자 모양으로
이제 실행에 세로 문자 모양이 포함되어 있다는 것을 알게 되었으므로 해당 문자 모양에 대한 액세스 권한을 얻어야 합니다. 지금까지 예제에는 세로 문자 모양이 있는 실행 1개와 없는 2개 등 3개의 실행이 있습니다. 문자에서 문자 모양으로 전환하려면 GetGlyphIndices를 호출합니다. 이 메서드는 예제의 문자에 해당하는 문자 모양 인덱스를 반환합니다. AnalyzeVerticalGlyphOrientation 메서드는 세로 문자 모양이 있는 실행을 반환하므로 GetVerticalGlyphVariants를 호출해야 합니다. 이 값은 현재 문자 모양 ID 대신 세로 방향 문자 모양 ID를 반환합니다.
텍스트를 세로로 그리기
마지막으로 텍스트를 배치하고 그려야 합니다. 텍스트를 세로로 그리기 때문에 라틴어 텍스트가 올바르게 그려지도록 몇 가지 추가 정보를 가져와야 합니다. 중앙 기준선을 따라 모든 텍스트를 그리면 라틴어 텍스트가 선 가운데에 떠 있는 것처럼 보입니다. 텍스트를 올바르게 맞추려면 중앙 기준선과 로마 기준선 모두에 액세스해야 합니다. IDWriteTextAnalyzer1::GetBaseline 메서드를 사용하여 지정한 기준선의 숫자 값을 가져옵니다. 중앙 기준에서 로마 기준을 빼서 둘 사이의 오프셋을 가져올 수 있습니다.
이 모든 정보를 사용하여 화면에 텍스트를 그릴 수 있습니다. 먼저 IDWriteTextAnalysisSink1 및 IDWriteTextAnalysisSource1 개체의 결과를 사용하여 GetGlyphOrientationTransform 메서드를 호출합니다.
Direct2D를 사용하는 경우 세로 렌더링을 위해 Direct2D 렌더링 대상에서 월드 변환을 설정해야 합니다.
마지막으로 각 텍스트 블록에서 한 번씩 DrawGlyphRun 을 세 번 호출합니다. 영어로 된 텍스트의 두 블록에서 로마 기준선과 중앙 기준선 간에 계산한 오프셋을 적용해야 합니다.
이제 앱의 텍스트가 올바른 문자 모양 방향으로 세로로 그려집니다.