mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Auto merge of #6202 - nnethercote:freetype-fixes, r=jack
Because #6198 wasn't quite right. <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6202) <!-- Reviewable:end -->
This commit is contained in:
commit
dddd222d29
2 changed files with 22 additions and 22 deletions
|
@ -13,9 +13,7 @@ use freetype::freetype::struct_FT_MemoryRec_;
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
use libc;
|
use libc::{self, c_void, c_long, size_t};
|
||||||
use libc::{c_void, c_long, size_t, malloc};
|
|
||||||
use std::mem;
|
|
||||||
|
|
||||||
extern fn ft_alloc(_mem: FT_Memory, size: c_long) -> *mut c_void {
|
extern fn ft_alloc(_mem: FT_Memory, size: c_long) -> *mut c_void {
|
||||||
unsafe {
|
unsafe {
|
||||||
|
@ -40,6 +38,17 @@ extern fn ft_realloc(_mem: FT_Memory, _cur_size: c_long, new_size: c_long, block
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct FreeTypeLibraryHandle {
|
pub struct FreeTypeLibraryHandle {
|
||||||
pub ctx: FT_Library,
|
pub ctx: FT_Library,
|
||||||
|
pub mem: FT_Memory,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for FreeTypeLibraryHandle {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
assert!(!self.ctx.is_null());
|
||||||
|
unsafe {
|
||||||
|
FT_Done_Library(self.ctx);
|
||||||
|
Box::from_raw(self.mem);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -47,35 +56,25 @@ pub struct FontContextHandle {
|
||||||
pub ctx: Rc<FreeTypeLibraryHandle>,
|
pub ctx: Rc<FreeTypeLibraryHandle>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for FreeTypeLibraryHandle {
|
|
||||||
fn drop(&mut self) {
|
|
||||||
assert!(!self.ctx.is_null());
|
|
||||||
unsafe { FT_Done_Library(self.ctx) };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FontContextHandle {
|
impl FontContextHandle {
|
||||||
pub fn new() -> FontContextHandle {
|
pub fn new() -> FontContextHandle {
|
||||||
|
let mem = box struct_FT_MemoryRec_ {
|
||||||
|
user: ptr::null_mut(),
|
||||||
|
alloc: ft_alloc,
|
||||||
|
free: ft_free,
|
||||||
|
realloc: ft_realloc,
|
||||||
|
};
|
||||||
unsafe {
|
unsafe {
|
||||||
|
|
||||||
let ptr = libc::malloc(mem::size_of::<struct_FT_MemoryRec_>() as size_t);
|
|
||||||
let allocator: &mut struct_FT_MemoryRec_ = mem::transmute(ptr);
|
|
||||||
ptr::write(allocator, struct_FT_MemoryRec_ {
|
|
||||||
user: ptr::null_mut(),
|
|
||||||
alloc: ft_alloc,
|
|
||||||
free: ft_free,
|
|
||||||
realloc: ft_realloc,
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut ctx: FT_Library = ptr::null_mut();
|
let mut ctx: FT_Library = ptr::null_mut();
|
||||||
|
|
||||||
let result = FT_New_Library(ptr as FT_Memory, &mut ctx);
|
let mem = ::std::boxed::into_raw(mem);
|
||||||
|
let result = FT_New_Library(mem, &mut ctx);
|
||||||
if !result.succeeded() { panic!("Unable to initialize FreeType library"); }
|
if !result.succeeded() { panic!("Unable to initialize FreeType library"); }
|
||||||
|
|
||||||
FT_Add_Default_Modules(ctx);
|
FT_Add_Default_Modules(ctx);
|
||||||
|
|
||||||
FontContextHandle {
|
FontContextHandle {
|
||||||
ctx: Rc::new(FreeTypeLibraryHandle { ctx: ctx }),
|
ctx: Rc::new(FreeTypeLibraryHandle { ctx: ctx, mem: mem }),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
1
components/servo/Cargo.lock
generated
1
components/servo/Cargo.lock
generated
|
@ -479,6 +479,7 @@ dependencies = [
|
||||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
||||||
"libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"msg 0.0.1",
|
"msg 0.0.1",
|
||||||
|
"net 0.0.1",
|
||||||
"script_traits 0.0.1",
|
"script_traits 0.0.1",
|
||||||
"time 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
"time 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"url 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
"url 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue