Bagikan melalui


Justifikasi, Kerning, dan Penspasian

Dimulai dengan Windows 8, DirectWrite menyediakan sejumlah fitur yang memungkinkan Anda mengontrol fitur tipografi, tata letak, dan penspasian dasar, seperti penspasian karakter, kerning pasangan, dan pembenaran.

Penspasian karakter

Penspasian karakter, juga dikenal sebagai "pengaturan", adalah jarak antara karakter dalam serangkaian teks.

Berikut adalah contoh pelacakan. Baris pertama tidak menerapkan pelacakan ke teks. Baris kedua meningkatkan penspasian karakter, dan baris ketiga mengurangi penspasian karakter.

tiga contoh teks yang sama tanpa pelacakan, lebih banyak penspasian, dan penspasian lebih sedikit.

Dimulai dengan Windows 8, DirectWrite menambahkan metode ini di sini untuk mengontrol penspasian karakter dalam teks Anda.

Jika Anda menggunakan tata letak DirectWrite, Anda dapat menggunakan IDWriteTextLayout1::GetCharacterSpacing dan IDWriteTextLayout1::SetCharacterSpacing metode untuk tujuan ini.

Gunakan metode GetCharacterSpacing untuk menentukan penspasian karakter saat ini dan ini mengembalikan karakter saat ini, penspasian sebelum dan sesudah karakter, lebar kemajuan minimum, dan struktur DWRITE_TEXT_RANGE yang berisi informasi tentang posisi awal dan panjang teks yang tersisa.

GunakanSetCharacterSpacingpada antarmukaDWriteTextLayout1 untuk menerapkan penspasian karakter Anda sendiri ke teks dalam tata letak. Metode SetCharacterSpacing membutuhkan jumlah ruang yang Anda inginkan sebelum dan sesudah karakter, jarak minimum yang diizinkan, dan DWRITE_TEXT_RANGE yang berfungsi menentukan rentang penerapan penspasian.

Jika Anda menggunakan tata letak kustom, DirectWrite memiliki dukungan untuk mengatur penspasian karakter dengan IDWriteTextAnalyzer1::ApplyCharacterSpacing. Gunakan metode ini jika Anda memerlukan tata letak teks kustom untuk memiliki kontrol tingkat lanjut atas tata letak Anda. Metode ini memungkinkan Anda untuk menyediakan ApplyCharacterSpacing dengan jarak depan dan belakang, lebar maju minimum, panjang peta kluster, jumlah glyph, pemetaan dari rentang karakter ke glyph, dan lebar maju setiap glyph jika Anda menggunakan tata letak kustom. Metode ini mengembalikan pergerakan glif yang dimodifikasi dan enumerasi DWRITE_GLYPH_OFFSET dengan offset baru untuk asal-usul tiap glif.

Kerning

Kerning adalah penyesuaian spasi kontekstual antara pasangan atau trio huruf. Penspasian khusus antara set karakter dapat meningkatkan keterbacaan dan membuat teks terlihat lebih baik. Perbedaan penting antara kerning dan penspasian karakter adalah bahwa penspasian huruf tidak mempedulikan teks, sementara kerning digunakan dalam situasi tertentu untuk pasangan karakter tertentu yang didefinisikan dalam font.

Gambar di sini adalah contoh kerning. Kata AVATAR di garis atas di-kerning untuk membuat kata terlihat lebih alami. Seperti yang Anda lihat dari kotak merah di sekitar karakter, ada lebih banyak spasi yang diterapkan antara empat huruf pertama, sementara R di akhir memiliki lebih banyak ruang sebelumnya. Teks asli tanpa kerning ada di baris kedua. Kerning dalam contoh ini membuat kata lebih mudah dibaca dan lebih alami.

contoh dari kata yang sama dengan dan tanpa penerapan kerning.

Karakter bergerak di antara pasangan karakter yang kerning font-nya disimpan dalam tabel kern, dan DirectWrite mengurai tabel tersebut serta mengembalikan informasi kepada Anda melalui API kerning.

Jika Anda ingin tahu apakah sebuah font mendukung kerning pasangan, Anda dapat menggunakan metode IDWriteFontFace1::HasKerningPairs. Metode ini mengembalikan nilai bool 1 jika font mendukung pasangan kerning.

IDWriteFontFace1 juga memiliki metode yang memungkinkan Anda mengakses penyesuaian pasangan kerning untuk indeks glif. GetKerningPairAdjustments memungkinkan Anda memasukkan array indeks glyph dan DirectWrite mengembalikan array penyesuaian kemajuan glyph. Jika font tidak mendukung tabel kern, metode mengembalikan nol untuk penyesuaian lanjutan glyph.

Jika Anda menggunakan tata letak DirectWrite, ada dua metode pada antarmuka IDWriteTextLayout1 yang memungkinkan Anda mengatur kerning pasangan dan mempelajari lebih lanjut tentang kerning pasangan dalam tata letak tersebut. Metode SetPairKerningmenerima representasi Boolean yang menunjukkan apakah Anda ingin mengaktifkan atau menonaktifkan pasangan kerning, serta DWRITE_TEXT_RANGE yang menentukan rentang teks tempat menerapkan kerning tersebut. Jika Anda ingin mempelajari apakah kerning pasangan diaktifkan atau tidak pada rentang teks, Anda dapat menggunakan metode GetPairKerning, yang mengambil posisi saat ini dan mengembalikan bool, menunjukkan apakah kerning pasangan diaktifkan atau tidak, serta rentang teks yang dikenai pengaturan kerning tersebut.

Pembenaran

Pembenaran adalah proses penyelarasan teks sehingga mengisi semua ruang dalam kolom dengan meningkatkan kemajuan antara karakter atau kluster glyph atau menambahkan karakter pembenaran untuk mencapai efek yang sama. Secara umum, ini dicapai dengan menentukan di mana ruang perlu ditambahkan ke baris teks, dan menyisipkan karakter spasi pada kesempatan pemisahan tersebut. Elemen spasi ini juga dapat berbeda, dalam skrip Latin, teks diratakan dengan meningkatkan jarak antar elemen, sementara dalam bahasa Arab, teks diratakan dengan kashida. Berikut adalah contoh skrip Arab dan Latin yang dibenarkan dan tidak dibenarkan.

contoh skrip arab dan latin yang dibenarkan dan tidak dibenarkan.

Dimulai dengan Windows 8, DirectWrite memiliki sejumlah metode yang memungkinkan Anda membenarkan teks di aplikasi Anda.

Ada nilai tambahan dalam enumerasi DWRITE_TEXT_ALIGNMENT. Anda dapat menggunakan metode SetTextAlignment dan mengoper konstanta DWRITE_TEXT_ALIGNMENT_JUSTIFIED, dan DirectWrite membenarkan teks serta menyisipkan karakter justifikasi yang sesuai untuk skrip.

Jika Anda menggunakan tata letak kustom memiliki sejumlah metode yang tersedia sehingga Anda dapat memanfaatkan pembenaran. DirectWrite memiliki tiga metode pada antarmukaIDWriteTextAnalyzer1 yang dapat Anda gunakan untuk menambahkan pembenaran ke tata letak kustom.

Metode pertama adalah GetJustificationOpportunities, yang mengambil teks yang ingin Anda ratakan dan mengembalikan struktur DWRITE_JUSTIFICATION_OPPORTUNITY yang menguraikan di mana karakter pembenaran dapat ditambahkan untuk membenarkan teks.

Fungsi kedua adalah JustifyGlyphAdvances, yang menyesuaikan deretan kemajuan glyph sehingga cocok dengan lebar garis. Metode ini mengambil struktur DWRITE_JUSTIFICATION_OPPORTUNITY yang dihasilkan oleh GetJustificationOpportunities, pergeseran glyph, dan offset glyph. Kemudian menghasilkan kemajuan glyph yang dibenarkan dan enumerasi DWRITE_GLYPH_OFFSET yang berisi offset glyph yang dibenarkan.

Fungsi ketiga adalah GetJustifiedGlyphs, yang mengisi glyph baru untuk skrip kompleks di mana pembenaran telah meningkatkan kemajuan untuk glyph. GetJustifiedGlyphs hanya perlu dipanggil jika skrip memiliki karakter pembenaran tertentu seperti yang dikembalikan oleh GetScriptProperties. Metode ini mengambil informasi tentang font, panjang teks, ukuran em dari glyph, skrip teks, jumlah glyph, peta kluster, kemajuan/offset glyph asli, kemajuan/offset glyph yang sudah dibenarkan, dan atribut glyph. Metode ini mengembalikan jumlah glyph aktual, peta kluster yang diperbarui, indeks glyph yang diperbarui dengan glyph justifikasi yang disisipkan, offset glyph yang diperbarui, dan kemajuan glyph yang diperbarui.