1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
// This code is dual-licensed under the Apache 2.0 License and the MIT License. //! Hand-written FFI bindings to the Harfbuzz Freetype library. use freetype::freetype::FT_Face; use harfbuzz_sys::{hb_destroy_func_t, hb_face_t, hb_font_t}; use std::os::raw::c_int; #[link(name = "harfbuzz")] extern "C" { /// Official harfbuzz documentation: /// /// This one creates a new hb-face for given ft-face. /// When the returned hb-face is destroyed, the destroy /// callback is called (if not NULL), with the ft-face passed /// to it. /// /// The client is responsible to make sure that ft-face is /// destroyed after hb-face is destroyed. /// /// Most often you don't want this function. You should use either /// hb_ft_face_create_cached(), or hb_ft_face_create_referenced(). /// In particular, if you are going to pass NULL as destroy, you /// probably should use (the more recent) hb_ft_face_create_referenced() /// instead. pub fn hb_ft_face_create(ft_face: FT_Face, destroy: hb_destroy_func_t) -> *mut hb_face_t; /// Official harfbuzz documentation: /// /// This version is like hb_ft_face_create(), except that it caches /// the hb-face using the generic pointer of the ft-face. This means /// that subsequent calls to this function with the same ft-face will /// return the same hb-face (correctly referenced). /// /// Client is still responsible for making sure that ft-face is destroyed /// after hb-face is. pub fn hb_ft_face_create_cached(ft_face: FT_Face) -> *mut hb_face_t; /// Official harfbuzz documentation: /// /// This version is like hb_ft_face_create(), except that it calls /// FT_Reference_Face() on ft-face, as such keeping ft-face alive /// as long as the hb-face is. /// /// This is the most convenient version to use. Use it unless you have /// very good reasons not to. pub fn hb_ft_create_referenced(ft_face: FT_Face) -> *mut hb_face_t; /// Official harfbuzz documentation: /// /// See notes on hb_ft_face_create(). Same issues re lifecycle-management /// apply here. Use hb_ft_font_create_referenced() if you can. pub fn hb_ft_font_create(ft_face: FT_Face, destroy: hb_destroy_func_t) -> *mut hb_font_t; /// Official harfbuzz documentation: /// /// See notes on hb_ft_face_create_referenced() re lifecycle-management /// issues. pub fn hb_ft_font_create_referenced(ft_face: FT_Face) -> *mut hb_font_t; pub fn hb_ft_font_get_face(font: *mut hb_font_t) -> FT_Face; pub fn hb_ft_font_set_load_flags(font: *mut hb_font_t, load_flags: c_int); pub fn hb_ft_font_get_load_flags(font: *mut hb_font_t) -> c_int; /// Official harfbuzz documentation: /// /// Call when size or variations settings on underlying FT_Face change. pub fn hb_ft_font_changed(font: *mut hb_font_t); /// Official harfbuzz documentaion: /// /// Makes an hb_font_t use FreeType internally to implement font functions. /// Note: this internally creates an FT_Face. Use it when you create your /// hb_face_t using hb_face_create(). pub fn hb_ft_font_set_funcs(font: *mut hb_font_t); }