O Fontdue é uma simples, no_std usa a biblioteca padrão para portabilidade), ferrugem pura, trueType ( .ttf/.ttc ) e openType ( .otf ) Rasterizador e ferramenta de layout. Ele se esforça para tornar a interação com as fontes o mais rápido possível e atualmente possui a baixa latência final a ponta para um rasterizador de fontes.
fontdue foi projetado para substituir rusttype (link), ab_glyph (link), partes de glyph_brush (link) e glyph_brush_layout (link). Esta é uma classe de bibliotecas de fontes que não abordam a modelagem.
É improvável que eu tenha tempo para integrar com uma biblioteca de modelagem. Se você precisar de um mecanismo de fonte mais completo, confira o maravilhoso projeto de texto cósmico, que é uma biblioteca de texto de ferrugem muito completa.
Um não gol da biblioteca deve ser livre de alocação e ter um rápido "custo zero". Esta biblioteca faz alocações e depende da caixa alloc . As fontes são totalmente analisadas na criação e as informações relevantes são armazenadas em um formato mais conveniente para acessar. Ao contrário de outras bibliotecas de fontes, as estruturas de fontes não têm dependências ao longo da vida, pois aloca seu próprio espaço.
Demoção ao vivo. Esta demonstração é uma construção de montagem na Web da fontdue Rasterizing para uma tela de navegador. Ele fornece um lado a lado dos caracteres sendo rasterizado entre fontdue e a API de texto de tela do navegador, fornecida com os mesmos parâmetros.
Alguns outros exemplos podem ser encontrados em ./dev/examples.
A API de rasterização não deve ver grandes mudanças no futuro próximo.
// 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 ) ; A API de layout é imaturamente e pode ver mudanças de quebra. O layout fontdue fornece é ingênuo e é projetado apenas para ser parecido com 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 ( ) ) ; Esses benchmarks medem o tempo necessário para gerar as métricas de glifos e o bitmap para o texto "Esfinge do quartzo preto, julgue meu voto". em uma variedade de tamanhos. Quanto menor a linha no gráfico, melhor.


Este benchmark mede o tempo necessário para fazer o layout de caracteres latinos do texto da amostra com embrulho nos limites das palavras.

Licenciado sob qualquer um de
por sua opção.
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão no trabalho por você, conforme definida na licença Apache-2.0, será multi-licenciado como acima, sem termos ou condições adicionais.
Por favor, tenha paciência comigo em novos recursos ou peculiaridades que você encontra. Os bugs terão prioridade, mas não tenho tanto tempo quanto gostaria de trabalhar em Fontdue, por favor, seja paciente, este é um projeto solo.
O Fontdue depende do ttf-parser (Link) para a análise de fontes, que suporta uma ampla gama de recursos TrueType e OpenType.
Fontdue começou como um garfo de font-rs (Link), que faz com que a rapterização parecia e quão simples o rusttype (Link) fez a aparência de fontes. Desde então, li muitas especificações de fontes e técnicas modernas de rasterização, reescrevendo fontdue desde o início no processo em sua própria besta única.