harfbuzz_rs ist eine hochrangige Schnittstelle zu Hurfbuzz, die ihre wichtigste Funktionalität auf sichere Weise mit Rost aufdeckt.
Harfbuzz ist eine Bibliothek für das komplexe Textlayout. Es führt keine Zeichnung durch. Dies ist eine ziemlich niedrige Operation. Wenn Sie einfach einen Text auf dem Bildschirm zeichnen möchten, sollten Sie möglicherweise eine weitere weitere Bibliothek auf hoher Ebene auswählen. Wenn Sie jedoch eine Bibliothek zum Zeichnen von Text auf einigen Leinwand erstellen möchten oder viel Kontrolle über erweitertes Textlayout benötigen, ist dies die richtige Bibliothek.
Um eine einfache Textfolge zu formen, erstellen Sie einfach eine Font aus einer Schriftart Datei, füllen Sie einen Buffer mit etwas Text aus und rufen Sie die shape auf.
use harfbuzz_rs :: * ;
let path = "path/to/some/font_file.otf" ;
let index = 0 ; //< face index in the font file
let face = Face :: from_file ( path , index ) ? ;
let mut font = Font :: new ( face ) ;
let buffer = UnicodeBuffer :: new ( ) . add_str ( "Hello World!" ) ;
let output = shape ( & font , buffer , & [ ] ) ;
// The results of the shaping operation are stored in the `output` buffer.
let positions = output . get_glyph_positions ( ) ;
let infos = output . get_glyph_infos ( ) ;
// iterate over the shaped glyphs
for ( position , info ) in positions . iter ( ) . zip ( infos ) {
let gid = info . codepoint ;
let cluster = info . cluster ;
let x_advance = position . x_advance ;
let x_offset = position . x_offset ;
let y_offset = position . y_offset ;
// Here you would usually draw the glyphs.
println ! ( "gid{:?}={:?}@{:?},{:?}+{:?}" , gid , cluster , x_advance , x_offset , y_offset ) ;
}Dies sollte etwas Ähnliches wie folgt ausdrucken:
gid41=0@741,0+0
gid70=1@421,0+0
gid77=2@258,0+0
gid77=3@253,0+0
gid80=4@510,0+0
gid1=5@227,0+0
gid56=6@874,0+0
gid80=7@498,0+0
gid83=8@367,0+0
gid77=9@253,0+0
gid69=10@528,0+0
gid2=11@276,0+0
Die Werte von x_advance , x_offset , y_advance und y_offset sind standardmäßig in sogenannten Schrifteinheiten angegeben. Wenn Sie face.upem() anrufen, erhalten Sie die Anzahl der Schriftarten pro sie für ein bestimmtes face . Dieser upem Wert kann verwendet werden, um die Fortschritte und Offsets zu einer bestimmten Schriftgröße zu skalieren. Wenn Sie beispielsweise eine Schriftart bei 16 Punkte (PT) -Ree anzeigen möchten, bedeutet dies, dass 1 em = 16 pt . In diesem Beispiel, um einen Wert zu konvertieren, z. B. x_advance , von Schriftarten zu Punkten zu Punkten, berechnen wir ((x_advance * font_size) as f64) / (upem as f64) , wobei font_size = 16 eine variable Angabe der Schriftgröße in Punkten ist.
Beachten Sie, dass Harfbuzz intern auch die Skalierung von Schriftarten selbst unterstützt (mit font.set_scale(...) usw.). Meiner Meinung nach ist es jedoch einfacher, die Ergebnisse selbst zu skalieren, wie im obigen Absatz beschrieben.
Diese Kiste wird getestet, um mit Harbbuzz -Versionen 2.0 und höher zu arbeiten. Ältere Versionen können ebenfalls funktionieren. Ich empfehle, die Harbuzz-Bibliothek statisch zu verknüpfen, die von der harfbuzz-sys Kiste bereitgestellt wird, die immer auf dem neuesten Stand ist.
Wenn Sie RustType als Schriftfunktion verwenden möchten, aktivieren Sie die rusttype -Funktion.