From 0fbce0480f66a7a63a479b283c92c2d16b6bbe09 Mon Sep 17 00:00:00 2001 From: Vicent Gong Date: Sat, 7 May 2022 14:11:10 +0800 Subject: [PATCH 1/2] Export freetype funciton when build-native-freetype feature in --- harfbuzz-sys/Cargo.toml | 7 ++++++- harfbuzz-sys/src/lib.rs | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/harfbuzz-sys/Cargo.toml b/harfbuzz-sys/Cargo.toml index c2d473dd..16622e69 100644 --- a/harfbuzz-sys/Cargo.toml +++ b/harfbuzz-sys/Cargo.toml @@ -34,7 +34,12 @@ foreign-types = "0.3" [target.'cfg(any(target_os = "android", all(unix, not(target_vendor = "apple"))))'.dependencies] freetype = { version = "0.7", default-features = false } +[dependencies.freetype] +version = "0.7" +default-features = false +optional = true + [features] default = ["build-native-harfbuzz", "build-native-freetype"] build-native-harfbuzz = ["cc", "pkg-config"] -build-native-freetype = ["freetype/freetype-sys"] +build-native-freetype = ["freetype", "freetype/freetype-sys"] diff --git a/harfbuzz-sys/src/lib.rs b/harfbuzz-sys/src/lib.rs index fd5f1c93..e98331eb 100644 --- a/harfbuzz-sys/src/lib.rs +++ b/harfbuzz-sys/src/lib.rs @@ -1,10 +1,10 @@ -#[cfg(any(target_os = "android", all(unix, not(target_vendor = "apple"))))] +#[cfg(any(target_os = "android", all(unix, not(target_vendor = "apple")), feature="build-native-freetype"))] extern crate freetype; #[cfg(target_vendor = "apple")] pub mod coretext; -#[cfg(any(target_os = "android", all(unix, not(target_vendor = "apple"))))] +#[cfg(any(target_os = "android", all(unix, not(target_vendor = "apple")), feature="build-native-freetype"))] extern "C" { pub fn hb_ft_font_create_referenced(face: freetype::freetype::FT_Face) -> *mut hb_font_t; } From f602d913e3a3eb31823436220a7268606ba1b7e1 Mon Sep 17 00:00:00 2001 From: Vicent Gong Date: Sat, 7 May 2022 14:16:51 +0800 Subject: [PATCH 2/2] Export directwrite function on windows --- harfbuzz-sys/Cargo.toml | 4 ++++ harfbuzz-sys/build.rs | 4 ++++ harfbuzz-sys/src/directwrite.rs | 9 +++++++++ harfbuzz-sys/src/lib.rs | 3 +++ 4 files changed, 20 insertions(+) create mode 100644 harfbuzz-sys/src/directwrite.rs diff --git a/harfbuzz-sys/Cargo.toml b/harfbuzz-sys/Cargo.toml index 16622e69..ea9d674e 100644 --- a/harfbuzz-sys/Cargo.toml +++ b/harfbuzz-sys/Cargo.toml @@ -31,6 +31,10 @@ core-graphics = "0.22" core-text = "19" foreign-types = "0.3" +[target.'cfg(target_family = "windows")'.dependencies.winapi] +version = "0.3" +features = ["dwrite"] + [target.'cfg(any(target_os = "android", all(unix, not(target_vendor = "apple"))))'.dependencies] freetype = { version = "0.7", default-features = false } diff --git a/harfbuzz-sys/build.rs b/harfbuzz-sys/build.rs index 352e703b..23b552a7 100644 --- a/harfbuzz-sys/build.rs +++ b/harfbuzz-sys/build.rs @@ -31,6 +31,10 @@ fn main() { cfg.define("HAVE_CORETEXT", "1"); } + if target.contains("windows") { + cfg.define("HAVE_DIRECTWRITE", "1"); + } + if target.contains("windows-gnu") { cfg.flag("-Wa,-mbig-obj"); } diff --git a/harfbuzz-sys/src/directwrite.rs b/harfbuzz-sys/src/directwrite.rs new file mode 100644 index 00000000..af379be7 --- /dev/null +++ b/harfbuzz-sys/src/directwrite.rs @@ -0,0 +1,9 @@ +extern crate winapi; + +use hb_face_t; + +use self::winapi::um::dwrite::IDWriteFontFace; + +extern "C" { + pub fn hb_directwrite_face_create(font_face: *mut IDWriteFontFace) -> *mut hb_face_t; +} diff --git a/harfbuzz-sys/src/lib.rs b/harfbuzz-sys/src/lib.rs index e98331eb..63715131 100644 --- a/harfbuzz-sys/src/lib.rs +++ b/harfbuzz-sys/src/lib.rs @@ -4,6 +4,9 @@ extern crate freetype; #[cfg(target_vendor = "apple")] pub mod coretext; +#[cfg(target_family = "windows")] +pub mod directwrite; + #[cfg(any(target_os = "android", all(unix, not(target_vendor = "apple")), feature="build-native-freetype"))] extern "C" { pub fn hb_ft_font_create_referenced(face: freetype::freetype::FT_Face) -> *mut hb_font_t;