From cbb26e64fbf22eeab43ca6868c2faa59a70ef370 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 16 Jun 2012 18:18:15 -0700 Subject: [PATCH] Print text on mac --- src/rust-cocoa | 2 +- src/servo/text/font.rs | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/rust-cocoa b/src/rust-cocoa index 478f61bb68f..a326b982dfd 160000 --- a/src/rust-cocoa +++ b/src/rust-cocoa @@ -1 +1 @@ -Subproject commit 478f61bb68feea43c22c9b88f52393ea15908dae +Subproject commit a326b982dfde133ea558a1025deb9c14d88265d2 diff --git a/src/servo/text/font.rs b/src/servo/text/font.rs index b15d38642ea..ae755a9ca33 100644 --- a/src/servo/text/font.rs +++ b/src/servo/text/font.rs @@ -172,9 +172,46 @@ fn get_cairo_face(buf: &[u8]) -> (*cairo_font_face_t, fn@()) { (cface, dtor) } +#[cfg(target_os = "macos")] +mod cocoa { + use cocoa; + export cocoa; +} + #[cfg(target_os = "macos")] fn get_cairo_face(buf: &[u8]) -> (*cairo_font_face_t, fn@()) { - fail + import unsafe::reinterpret_cast; + import libc::size_t; + import cocoa::cocoa; + import cocoa::cg::cg::{ + CGDataProviderCreateWithData, + CGDataProviderRelease, + CGFontCreateWithDataProvider, + CGFontRelease + }; + import azure::cairo_quartz::bindgen::cairo_quartz_font_face_create_for_cgfont; + + let mut dtor = fn@() { }; + + let fontprov = vec::as_buf(*buf) { |cbuf| + CGDataProviderCreateWithData( + null(), + unsafe { reinterpret_cast(cbuf) }, + (*buf).len() as size_t, + null() + ) + }; + dtor = fn@(move dtor) { CGDataProviderRelease(fontprov); dtor() }; + + let cgfont = CGFontCreateWithDataProvider(fontprov); + if cgfont.is_null() { fail "could not create quartz font" } + dtor = fn@(move dtor) { CGFontRelease(cgfont); dtor() }; + + let cface = cairo_quartz_font_face_create_for_cgfont(cgfont); + assert cface.is_not_null(); // FIXME: error handling + dtor = fn@(move dtor) { cairo_font_face_destroy(cface); dtor() }; + + (cface, dtor) } fn create_test_font() -> font {