aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/gfx/Cargo.toml31
-rw-r--r--components/gfx/lib.rs3
-rw-r--r--components/gfx/text/shaping/harfbuzz.rs28
-rw-r--r--components/servo/Cargo.lock1
4 files changed, 35 insertions, 28 deletions
diff --git a/components/gfx/Cargo.toml b/components/gfx/Cargo.toml
index 9ec80d3e091..a776bc2f709 100644
--- a/components/gfx/Cargo.toml
+++ b/components/gfx/Cargo.toml
@@ -8,6 +8,22 @@ authors = ["The Servo Project Developers"]
name = "gfx"
path = "lib.rs"
+[dependencies]
+bitflags = "0.3"
+euclid = "0.1"
+fnv = "1.0"
+harfbuzz = "0.1"
+lazy_static = "0.1"
+libc = "0.1"
+log = "0.3"
+rand = "0.3"
+rustc-serialize = "0.3"
+serde = "0.4"
+serde_macros = "0.4"
+smallvec = "0.1"
+string_cache = "0.1"
+time = "0.1.12"
+
[dependencies.plugins]
path = "../plugins"
@@ -51,21 +67,6 @@ git = "https://github.com/pcwalton/ipc-channel"
version = "0.2"
features = [ "serde_serialization" ]
-[dependencies]
-log = "0.3"
-fnv = "1.0"
-time = "0.1.12"
-bitflags = "0.3"
-rustc-serialize = "0.3"
-libc = "0.1"
-rand = "0.3"
-harfbuzz = "0.1"
-smallvec = "0.1"
-string_cache = "0.1"
-euclid = "0.1"
-serde = "0.4"
-serde_macros = "0.4"
-
[target.x86_64-apple-darwin.dependencies]
core-foundation = "0.1"
core-graphics = "0.1"
diff --git a/components/gfx/lib.rs b/components/gfx/lib.rs
index d13251123ca..6ffbe36fb5b 100644
--- a/components/gfx/lib.rs
+++ b/components/gfx/lib.rs
@@ -12,6 +12,7 @@
#![feature(mpsc_select)]
#![feature(plugin)]
#![feature(str_char)]
+#![feature(unique)]
#![feature(vec_push_all)]
#![plugin(plugins)]
@@ -26,6 +27,8 @@ extern crate azure;
extern crate fnv;
extern crate euclid;
extern crate ipc_channel;
+#[macro_use]
+extern crate lazy_static;
extern crate layers;
extern crate libc;
#[macro_use]
diff --git a/components/gfx/text/shaping/harfbuzz.rs b/components/gfx/text/shaping/harfbuzz.rs
index fbc8e450875..1359c304fee 100644
--- a/components/gfx/text/shaping/harfbuzz.rs
+++ b/components/gfx/text/shaping/harfbuzz.rs
@@ -149,7 +149,6 @@ struct FontAndShapingOptions {
pub struct Shaper {
hb_face: *mut hb_face_t,
hb_font: *mut hb_font_t,
- hb_funcs: *mut hb_font_funcs_t,
font_and_shaping_options: Box<FontAndShapingOptions>,
}
@@ -161,9 +160,6 @@ impl Drop for Shaper {
assert!(!self.hb_font.is_null());
RUST_hb_font_destroy(self.hb_font);
-
- assert!(!self.hb_funcs.is_null());
- RUST_hb_font_funcs_destroy(self.hb_funcs);
}
}
}
@@ -193,18 +189,11 @@ impl Shaper {
Shaper::float_to_fixed(pt_size) as c_int);
// configure static function callbacks.
- // NB. This funcs structure could be reused globally, as it never changes.
- let hb_funcs: *mut hb_font_funcs_t = RUST_hb_font_funcs_create();
- RUST_hb_font_funcs_set_glyph_func(hb_funcs, glyph_func, ptr::null_mut(), None);
- RUST_hb_font_funcs_set_glyph_h_advance_func(hb_funcs, glyph_h_advance_func, ptr::null_mut(), None);
- RUST_hb_font_funcs_set_glyph_h_kerning_func(
- hb_funcs, glyph_h_kerning_func, ptr::null_mut(), ptr::null_mut());
- RUST_hb_font_set_funcs(hb_font, hb_funcs, font as *mut Font as *mut c_void, None);
+ RUST_hb_font_set_funcs(hb_font, **HB_FONT_FUNCS, font as *mut Font as *mut c_void, None);
Shaper {
hb_face: hb_face,
hb_font: hb_font,
- hb_funcs: hb_funcs,
font_and_shaping_options: font_and_shaping_options,
}
}
@@ -536,7 +525,20 @@ impl Shaper {
}
}
-/// Callbacks from Harfbuzz when font map and glyph advance lookup needed.
+// Callbacks from Harfbuzz when font map and glyph advance lookup needed.
+lazy_static! {
+ static ref HB_FONT_FUNCS: ptr::Unique<hb_font_funcs_t> = unsafe {
+ let hb_funcs = RUST_hb_font_funcs_create();
+ RUST_hb_font_funcs_set_glyph_func(hb_funcs, glyph_func, ptr::null_mut(), None);
+ RUST_hb_font_funcs_set_glyph_h_advance_func(
+ hb_funcs, glyph_h_advance_func, ptr::null_mut(), None);
+ RUST_hb_font_funcs_set_glyph_h_kerning_func(
+ hb_funcs, glyph_h_kerning_func, ptr::null_mut(), ptr::null_mut());
+
+ ptr::Unique::new(hb_funcs)
+ };
+}
+
extern fn glyph_func(_: *mut hb_font_t,
font_data: *mut c_void,
unicode: hb_codepoint_t,
diff --git a/components/servo/Cargo.lock b/components/servo/Cargo.lock
index 9c4efbdb167..597c7170e9b 100644
--- a/components/servo/Cargo.lock
+++ b/components/servo/Cargo.lock
@@ -466,6 +466,7 @@ dependencies = [
"harfbuzz 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)",
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
+ "lazy_static 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"msg 0.0.1",