Bagikan melalui


Teks Vertikal

Dimulai dengan Windows 8, DirectWrite memiliki sejumlah API baru yang memungkinkan Anda menggunakan teks vertikal di aplikasi Anda.

Menggambar teks vertikal

Anda dapat menggambar teks vertikal dengan Direct2D dengan menggunakan metodeDrawTextLayout. Untuk menggambar teks secara vertikal, teruskan DWRITE_READING_DIRECTION_TOP_TO_BOTTOM ke metode IDWriteTextFormat::SetReadingDirection dan DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT ke metodeIDWriteTextFormatSetFlowDirection. Kemudian Anda dapat membuat dan menggambar objekIDWriteTextLayout vertikal.

Menganalisis orientasi karakter

Setiap karakter memiliki orientasi karakter yang disukai, atau arah karakter harus berorientasi pada tata letak terarah apa pun. Misalnya, dalam tata letak horizontal tradisional, teks Latin dan teks Tionghoa berorientasi vertikal. Di sisi lain, dalam tata letak vertikal, teks Bahasa Tionghoa tetap tegak, dan teks Latin diputar 90 derajat. Perbedaan orientasi ini terlihat dalam contoh di sini.

gambar teks bahasa Inggris dan Tionghoa dalam tata letak horizontal dan vertikal.

Untuk menentukan orientasi teks yang Anda miliki, Anda perlu mengimplementasikanIDWriteTextAnalysisSink1 dan antarmuka IDWriteTextAnalysisSource 1. Sumber dan sink mengambil eksekusi glyph dan memungkinkan Anda memeriksa apakah berorientasi vertikal atau tidak.

Setelah mengimplementasikan sumber dan sink, Anda memanggil metodeAnalyzeVerticalGlyphOrientation. Dalam contoh gambar, fungsi ini mengembalikan 3 eksekusi: "English", "中国", dan "English."

Dari karakter ke glyph

Sekarang setelah Anda tahu eksekusi berisi glyph vertikal, Anda perlu mendapatkan akses ke glyph tersebut. Dalam contoh sejauh ini, ada 3 eksekusi: satu dengan glyph vertikal dan dua tanpa. Untuk beralih dari karakter ke glyph, Anda memanggil GetGlyphIndices. Metode ini mengembalikan indeks glyph yang sesuai untuk karakter dalam contoh. Karena metodeAnalyzeVerticalGlyphOrientation mengembalikan eksekusi dengan glyph vertikal, Anda perlu memanggil GetVerticalGlyphVariants, yang mengembalikan ID glyph yang berorientasi vertikal sebagai pengganti ID glyph saat ini.

Menggambar teks secara vertikal

Terakhir, Anda perlu menata dan menggambar teks. Karena Anda menggambar teks secara vertikal, Anda perlu mendapatkan info lebih lanjut sehingga teks Latin digambar dengan benar. Jika Anda menggambar semua teks di sepanjang garis besar pusat, teks Latin tampak mengapung di tengah garis. Anda memerlukan akses ke garis besar pusat dan Romawi untuk menyelaraskan teks dengan benar. Gunakan metode IDWriteTextAnalyzer1::GetBaseline untuk mendapatkan nilai numerik dari garis besar yang Anda tentukan. Anda dapat mengurangi garis besar Romawi dari garis besar pusat untuk mendapatkan offset antara keduanya.

Dengan semua info ini, Anda dapat menggambar teks di layar. Pertama, panggil metodeGetGlyphOrientationTransform dengan hasil dariIDWriteTextAnalysisSink1 dan objek IDWriteTextAnalysisSource1.

Jika Anda menggunakan Direct2D Anda juga perlu mengatur transformasi dunia pada target render Direct2D untuk penyajian vertikal.

Terakhir, panggil DrawGlyphRun tiga kali, sekali pada setiap blok teks. Pada dua blok teks yang dalam bahasa Inggris, Anda perlu menerapkan offset yang kami hitung antara garis besar Romawi dan pusat.

Sekarang, teks di aplikasi Anda akan digambar secara vertikal, dengan orientasi glyph yang benar.