FontDue es un simple, no_std (no utiliza la biblioteca estándar para portabilidad), óxido puro, trueType ( .ttf/.ttc ) y óptica ( .otf ) font rasterizer y herramienta de diseño. Se esfuerza por hacer interactuar con fuentes lo más rápido posible, y actualmente tiene la latencia de extremo a extremo más baja para un rasterizador de fuentes.
fontdue está diseñado para ser un reemplazo para rusttype (Link), ab_glyph (Link), Parts of glyph_brush (Link) y glyph_brush_layout (Link). Esta es una clase de bibliotecas de fuentes que no abordan la configuración.
Es poco probable que tenga tiempo para integrarse con una biblioteca de modelado. Si necesita un motor de fuentes más completo, debe consultar el maravilloso proyecto de texto cósmico, que es una biblioteca de texto de óxido puro muy completo.
Un no gol de esta biblioteca debe ser sin asignación y tener una carga inicial rápida de "costo cero". Esta biblioteca realiza asignaciones y depende de la caja alloc . Las fuentes se analizan completamente en la creación y la información relevante se almacena en un formato más conveniente para acceder. A diferencia de otras bibliotecas de fuentes, las estructuras de fuentes no tienen dependencias de por vida ya que asigna su propio espacio.
Demostración en vivo. Esta demostración es una compilación de ensamblaje web de fontdue Rasterizing a un lienzo de navegador. Proporciona un lado a lado de los caracteres que se están rasterizando entre fontdue y la API de texto de lienzo del navegador provisto de los mismos parámetros.
Algunos otros ejemplos se pueden encontrar en ./dev/examples.
La API de rasterización no debería ver cambios importantes en el futuro cercano.
// 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 ) ; La API de diseño es inmadura y puede ver cambios de ruptura. El diseño que proporciona fontdue es ingenuo y solo está diseñado para estar a la par con las bibliotecas existentes como 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 ( ) ) ; Estos puntos de referencia miden el tiempo que lleva generar las métricas del glifo y el mapa de bits para el texto "Esfinge del cuarzo negro, juzgar mi voto". en una gama de tamaños. Cuanto más baja sea la línea en el gráfico, mejor.


Este punto de referencia mide el tiempo que lleva diseñar caracteres latinos del texto de muestra con el envoltorio de los límites de las palabras.

Con licencia bajo cualquiera de
a tu opción.
A menos que declare explícitamente lo contrario, cualquier contribución presentada intencionalmente para su inclusión en el trabajo por usted, tal como se define en la licencia Apache-2.0, será multi-licenada como anteriormente, sin ningún término o condiciones adicionales.
Por favor, tengan conmigo en nuevas características o peculiaridades que encuentre. Los errores tendrán prioridad, pero no tengo tanto tiempo como me gustaría trabajar en Fontdue, así que por favor ten paciencia, este es un proyecto en solitario.
FontDue depende de ttf-parser (enlace) para las fuentes de análisis, que admite una amplia gama de características TrueType y OpenType.
Fontdue comenzó como un horquilla de font-rs (enlace) vagamente más de producción debido a lo rápido que se veía la rasterización y cuán simple se veía el análisis de la fuente de la caja rusttype (Link). Desde entonces, he leído muchas especificaciones de fuentes y técnicas de rasterización modernas, reescribiendo fontdue desde cero en el proceso en su propia bestia única.