harfbuzz_rs 는 Harfbuzz의 높은 수준의 인터페이스로 녹을 사용하여 가장 중요한 기능을 안전하게 노출시킵니다.
Harfbuzz는 복잡한 텍스트 레이아웃을 수행하기위한 라이브러리입니다. 도면을 수행하지 않습니다. 이것은 상당히 낮은 수준의 작동입니다. 화면에 텍스트를 그만 두려면 다른 고급 라이브러리를 선택해야 할 수도 있습니다. 그러나 일부 캔버스에 텍스트를 그리기위한 라이브러리를 만들거나 고급 텍스트 레이아웃에 대한 많은 제어가 필요하다면 이것은 사용하기에 적합한 라이브러리입니다.
간단한 텍스트 문자열을 만들려면 글꼴 파일에서 Font 만들고 텍스트로 Buffer 채우고 shape 기능을 호출하십시오.
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 ) ;
}이것은 다음과 비슷한 것을 인쇄해야합니다.
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
x_advance , x_offset , y_advance 및 y_offset 의 값은 모두 기본적으로 소위 글꼴 장치 로 제공됩니다. face.upem() 호출하면 특정 face 에 대해 EM 당 글꼴 장치 수를 얻습니다. 이 upem 값은 고급 및 오프셋을 주어진 글꼴 크기로 확장하는 데 사용될 수 있습니다. 예를 들어, 16 포인트 (PT) 크기로 글꼴을 표시하려면 1 EM = 16 PT 를 의미합니다. 이 예에서는 x_advance 글꼴에서 포인트로 변환하기 위해 ((x_advance * font_size) as f64) / (upem as f64) 계산합니다. 여기서 font_size = 16 포인트의 글꼴 크기를 지정하는 가변입니다.
Harfbuzz는 내부적으로 스케일링 글꼴 자체를 지원하지만 ( font.set_scale(...) ) 등을 사용하지만 위의 단락에 설명 된대로 스스로를 스케일링하는 것이 더 쉽습니다.
이 상자는 Harfbuzz 버전 2.0 이상으로 작동하도록 테스트되었습니다. 이전 버전도 작동 할 수 있습니다. 나는 항상 최신 인 harfbuzz-sys Crate에서 제공하는 Harfbuzz 라이브러리를 정적으로 연결하는 것이 좋습니다.
FONT 기능으로 RustType를 사용하려면 rusttype 기능을 활성화하십시오.