FontDue est un simple, no_std (n'utilise pas la bibliothèque standard pour la portabilité), la rouille pure, le trueType ( .ttf/.ttc ) et le rasterizer et l'outil de mise en page OpenType ( .otf ). Il s'efforce d'interagir avec les polices le plus rapidement possible, et a actuellement la latence de bout à bout la plus basse pour un rasterizer de police.
fontdue est conçu pour remplacer rusttype (lien), ab_glyph (lien), parties de glyph_brush (lien) et glyph_brush_layout (lien). Il s'agit d'une classe de bibliothèques de polices qui ne s'attaquent pas à la mise en forme.
Il est peu probable que j'aurai le temps de m'intégrer à une bibliothèque de mise en forme. Si vous avez besoin d'un moteur de police plus complet, vous devez consulter le merveilleux projet de texte cosmique, qui est une bibliothèque de texte de rouille pure très complète.
Un non-objectif de cette bibliothèque doit être sans allocation et avoir une charge initiale rapide «Zero Cost». Cette bibliothèque fait des allocations et dépend de la caisse alloc . Les polices sont entièrement analysées sur la création et les informations pertinentes sont stockées dans un format plus pratique pour accéder. Contrairement à d'autres bibliothèques de polices, les structures de police n'ont pas de dépendances à vie car elle alloue son propre espace.
Démo en direct. Cette démo est une version de fontdue en assemblage Web rasterisant à un canevas de navigateur. Il fournit un côté à côté des caractères rastérisés entre fontdue et l'API texte en toile du navigateur fourni avec les mêmes paramètres.
Certains autres exemples peuvent être trouvés sous ./dev/examples.
L'API rasterisée ne devrait pas voir des changements majeurs dans un avenir proche.
// 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 ) ; L'API de mise en page est immature et peut voir des changements de rupture. La disposition fontdue est naïve et n'est conçue que pour être à égalité avec les bibliothèques existantes comme 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 ( ) ) ; Ces repères mesurent le temps nécessaire pour générer les métriques de glyphes et le bitmap pour le texte "Sphinx de quartz noir, juge mon vœu". sur une gamme de tailles. Plus la ligne dans le graphique est bas, mieux c'est.


Cette référence mesure le temps nécessaire pour disposer des caractères latins de l'échantillon de texte avec l'enveloppe sur les limites des mots.

Sous licence sous l'un des
à votre option.
À moins que vous ne soyez explicitement indiqué autrement, toute contribution intentionnellement soumise pour inclusion dans l'œuvre par vous, telle que définie dans la licence Apache-2.0, doit être multi-licence comme ci-dessus, sans aucune condition supplémentaire.
Veuillez supporter avec moi de nouvelles fonctionnalités ou bizarreries que vous trouvez. Les bogues seront prioritaires, mais je n'ai pas autant de temps que je voudrais travailler sur Fontdue, alors soyez patient, c'est un projet solo.
FontDue dépend de ttf-parser (lien) pour les polices d'analyse, qui prend en charge une large gamme de fonctionnalités TrueType et OpenType.
Fontdue a commencé comme une fourchette de font-rs (lien) vaguement plus de production en raison de la vitesse à laquelle il a fait l'apparence des rasterisations et à quel point la caisse rusttype (lien) a fait l'apparence d'analyse de police. Depuis lors, j'ai lu beaucoup de spécifications de police et de techniques de rasterisation moderne, réécrivant fontdue à partir de zéro dans le processus dans sa propre bête unique.