FontDue adalah sederhana, no_std (tidak menggunakan pustaka standar untuk portabilitas), rust murni, truetype ( .ttf/.ttc ) & OpENTYPE ( .otf ) font rastory dan alat tata letak. Ini berusaha untuk membuat berinteraksi dengan font secepat mungkin, dan saat ini memiliki latensi ujung ke ujung terendah untuk rasterizer font.
fontdue dirancang untuk menjadi pengganti rusttype (tautan), ab_glyph (tautan), bagian dari glyph_brush (tautan), dan glyph_brush_layout (tautan). Ini adalah kelas perpustakaan font yang tidak menangani pembentukan.
Tidak mungkin saya punya waktu untuk berintegrasi dengan perpustakaan membentuk. Jika Anda memerlukan mesin font yang lebih lengkap, Anda harus memeriksa proyek teks kosmik yang indah, yang merupakan perpustakaan teks karat murni yang sangat lengkap.
Non-gol perpustakaan ini harus bebas alokasi dan memiliki beban awal "nol biaya" yang cepat. Perpustakaan ini memang membuat alokasi dan tergantung pada peti alloc . Font sepenuhnya diuraikan pada pembuatan dan informasi yang relevan disimpan dalam format yang lebih nyaman untuk mengakses. Tidak seperti perpustakaan font lainnya, struktur font tidak memiliki ketergantungan seumur hidup karena ia mengalokasikan ruangnya sendiri.
Demo langsung. Demo ini adalah pembuatan rassembly web fontdue rasterisasi ke kanvas browser. Ini memberikan karakter berdampingan yang dirasterisasi antara fontdue dan API teks kanvas browser yang disediakan dengan parameter yang sama.
Beberapa contoh lain dapat ditemukan di bawah ./dev/examples.
API rasterisasi seharusnya tidak melihat perubahan besar dalam waktu dekat.
// Read the font data.
let font = include_bytes ! ( "../resources/Roboto-Regular.ttf" ) as & [ u8 ] ;
// Parse it into the font type.
let font = fontdue :: Font :: from_bytes ( font , fontdue :: FontSettings :: default ( ) ) . unwrap ( ) ;
// Rasterize and get the layout metrics for the letter 'g' at 17px.
let ( metrics , bitmap ) = font . rasterize ( 'g' , 17.0 ) ; API tata letak belum matang dan mungkin melihat perubahan perubahan. Tata letak yang disediakan fontdue naif dan hanya dirancang untuk setara dengan perpustakaan yang ada seperti glyph_brush .
// Read the font data.
let font = include_bytes ! ( "../resources/fonts/Roboto-Regular.ttf" ) as & [ u8 ] ;
// Parse it into the font type.
let roboto_regular = Font :: from_bytes ( font , fontdue :: FontSettings :: default ( ) ) . unwrap ( ) ;
// The list of fonts that will be used during layout.
let fonts = & [ roboto_regular ] ;
// Create a layout context. Laying out text needs some heap allocations; reusing this context
// reduces the need to reallocate space. We inform layout of which way the Y axis points here.
let mut layout = Layout :: new ( CoordinateSystem :: PositiveYUp ) ;
// By default, layout is initialized with the default layout settings. This call is redundant, but
// demonstrates setting the value with your custom settings.
layout . reset ( & LayoutSettings {
.. LayoutSettings :: default ( )
} ) ;
// The text that will be laid out, its size, and the index of the font in the font list to use for
// that section of text.
layout . append ( fonts , & TextStyle :: new ( "Hello " , 35.0 , 0 ) ) ;
layout . append ( fonts , & TextStyle :: new ( "world!" , 40.0 , 0 ) ) ;
// Prints the layout for "Hello world!"
println ! ( "{:?}" , layout . glyphs ( ) ) ;
// If you wanted to attached metadata based on the TextStyle to the glyphs returned in the
// glyphs() function, you can use the TextStyle::with_metadata function. In this example, the
// Layout type is now parameterized with u8 (Layout<u8>). All styles need to share the same
// metadata type.
let mut layout = Layout :: new ( CoordinateSystem :: PositiveYUp ) ;
layout . append ( fonts , & TextStyle :: with_user_data ( "Hello " , 35.0 , 0 , 10u8 ) ) ;
layout . append ( fonts , & TextStyle :: with_user_data ( "world!" , 40.0 , 0 , 20u8 ) ) ;
println ! ( "{:?}" , layout . glyphs ( ) ) ; Tolok ukur ini mengukur waktu yang diperlukan untuk menghasilkan metrik mesin terbang dan bitmap untuk teks "Sphinx of Black Quartz, menilai sumpah saya." lebih dari berbagai ukuran. Semakin rendah garis dalam grafik semakin baik.


Benchmark ini mengukur waktu yang diperlukan untuk tata letak karakter Latin dari teks sampel dengan membungkus batas kata.

Berlisensi di bawah salah satu dari
di pilihan Anda.
Kecuali jika Anda secara eksplisit menyatakan sebaliknya, kontribusi apa pun secara sengaja diserahkan untuk dimasukkan dalam pekerjaan oleh Anda, sebagaimana didefinisikan dalam lisensi APACHE-2.0, harus multi-lisensi seperti di atas, tanpa syarat atau ketentuan tambahan.
Harap bersabar dengan saya pada fitur atau keanehan baru yang Anda temukan. Bug akan diprioritaskan, tetapi saya tidak punya waktu sebanyak saya ingin bekerja di fontdue jadi harap bersabar, ini adalah proyek solo.
FontDue tergantung pada ttf-parser (tautan) untuk parsing font, yang mendukung berbagai fitur truetype dan openType.
Fontdue dimulai sebagai garpu siap produksi yang lebih samar dari font-rs (tautan) karena seberapa cepat itu membuat rasterisasi terlihat, dan seberapa sederhana peti rusttype (tautan) membuat penampilan parsing font. Sejak itu, saya telah membaca banyak spesifikasi font dan teknik rasterisasi modern, penulisan ulang fontdue dari bawah ke atas dalam proses menjadi binatang buasnya sendiri.