Port gfx crate to new CF bindings.

This commit is contained in:
Jack Moffitt 2013-11-19 14:03:22 -07:00
parent a6e0157401
commit 4e1afca6bd
3 changed files with 15 additions and 16 deletions

View file

@ -23,13 +23,13 @@ use core_foundation::string::UniChar;
use core_graphics::data_provider::CGDataProvider; use core_graphics::data_provider::CGDataProvider;
use core_graphics::font::{CGFont, CGGlyph}; use core_graphics::font::{CGFont, CGGlyph};
use core_graphics::geometry::CGRect; use core_graphics::geometry::CGRect;
use core_graphics; use core_text::font::CTFont;
use core_text::font::{CTFont, CTFontMethods, CTFontMethodsPrivate};
use core_text::font_descriptor::{SymbolicTraitAccessors, TraitAccessors}; use core_text::font_descriptor::{SymbolicTraitAccessors, TraitAccessors};
use core_text::font_descriptor::{kCTFontDefaultOrientation}; use core_text::font_descriptor::{kCTFontDefaultOrientation};
use core_text; use core_text;
use std::ptr; use std::ptr;
use std::vec;
pub struct FontTable { pub struct FontTable {
data: CFData, data: CFData,
@ -48,7 +48,7 @@ impl FontTable {
impl FontTableMethods for FontTable { impl FontTableMethods for FontTable {
fn with_buffer(&self, blk: &fn(*u8, uint)) { fn with_buffer(&self, blk: &fn(*u8, uint)) {
blk(self.data.bytes(), self.data.len()); blk(vec::raw::to_ptr(self.data.bytes()), self.data.len() as uint);
} }
} }
@ -80,11 +80,8 @@ impl FontHandle {
impl FontHandleMethods for FontHandle { impl FontHandleMethods for FontHandle {
fn new_from_buffer(_: &FontContextHandle, buf: ~[u8], style: &SpecifiedFontStyle) fn new_from_buffer(_: &FontContextHandle, buf: ~[u8], style: &SpecifiedFontStyle)
-> Result<FontHandle, ()> { -> Result<FontHandle, ()> {
let fontprov : CGDataProvider = do buf.as_imm_buf |cbuf, len| { let fontprov = CGDataProvider::from_buffer(buf);
core_graphics::data_provider::new_from_buffer(cbuf, len) let cgfont = CGFont::from_data_provider(fontprov);
};
let cgfont = core_graphics::font::create_with_data_provider(&fontprov);
let ctfont = core_text::font::new_from_CGFont(&cgfont, style.pt_size); let ctfont = core_text::font::new_from_CGFont(&cgfont, style.pt_size);
let result = Ok(FontHandle { let result = Ok(FontHandle {

View file

@ -8,12 +8,12 @@ use font_list::{FontEntry, FontFamily, FontFamilyMap};
use platform::macos::font::FontHandle; use platform::macos::font::FontHandle;
use platform::macos::font_context::FontContextHandle; use platform::macos::font_context::FontContextHandle;
use core_foundation::array::CFArray; use core_foundation::base::TCFType;
use core_foundation::base::CFWrapper;
use core_foundation::string::{CFString, CFStringRef}; use core_foundation::string::{CFString, CFStringRef};
use core_text::font_collection::CTFontCollectionMethods;
use core_text; use core_text;
use core_text::font_descriptor::{CTFontDescriptor, CTFontDescriptorRef};
use std::cast;
use std::hashmap::HashMap; use std::hashmap::HashMap;
pub struct FontListHandle { pub struct FontListHandle {
@ -28,10 +28,12 @@ impl FontListHandle {
} }
pub fn get_available_families(&self) -> FontFamilyMap { pub fn get_available_families(&self) -> FontFamilyMap {
let family_names: CFArray<CFStringRef> = core_text::font_collection::get_family_names(); let family_names = core_text::font_collection::get_family_names();
let mut family_map: FontFamilyMap = HashMap::new(); let mut family_map: FontFamilyMap = HashMap::new();
for strref in family_names.iter() { for strref in family_names.iter() {
let family_name = CFString::wrap_shared(strref).to_str(); let family_name_ref: CFStringRef = unsafe { cast::transmute(strref) };
let family_name_cf: CFString = unsafe { TCFType::wrap_under_get_rule(family_name_ref) };
let family_name = family_name_cf.to_str();
debug!("Creating new FontFamily for family: {:s}", family_name); debug!("Creating new FontFamily for family: {:s}", family_name);
let new_family = @mut FontFamily::new(family_name); let new_family = @mut FontFamily::new(family_name);
@ -46,7 +48,8 @@ impl FontListHandle {
let family_collection = core_text::font_collection::create_for_family(family.family_name); let family_collection = core_text::font_collection::create_for_family(family.family_name);
let family_descriptors = family_collection.get_descriptors(); let family_descriptors = family_collection.get_descriptors();
for descref in family_descriptors.iter() { for descref in family_descriptors.iter() {
let desc = CFWrapper::wrap_shared(descref); let descref: CTFontDescriptorRef = unsafe { cast::transmute(descref) };
let desc: CTFontDescriptor = unsafe { TCFType::wrap_under_get_rule(descref) };
let font = core_text::font::new_from_descriptor(&desc, 0.0); let font = core_text::font::new_from_descriptor(&desc, 0.0);
let handle = FontHandle::new_from_CTFont(&self.fctx, font).unwrap(); let handle = FontHandle::new_from_CTFont(&self.fctx, font).unwrap();

View file

@ -8,7 +8,6 @@
use platform::surface::NativeSurfaceAzureMethods; use platform::surface::NativeSurfaceAzureMethods;
use azure::AzSkiaGrGLSharedSurfaceRef; use azure::AzSkiaGrGLSharedSurfaceRef;
use core_foundation::base::CFWrapper;
use io_surface::IOSurface; use io_surface::IOSurface;
use layers::platform::surface::NativeSurface; use layers::platform::surface::NativeSurface;
use std::cast; use std::cast;
@ -17,7 +16,7 @@ impl NativeSurfaceAzureMethods for NativeSurface {
fn from_azure_surface(surface: AzSkiaGrGLSharedSurfaceRef) -> NativeSurface { fn from_azure_surface(surface: AzSkiaGrGLSharedSurfaceRef) -> NativeSurface {
unsafe { unsafe {
let io_surface = IOSurface { let io_surface = IOSurface {
contents: CFWrapper::wrap_owned(cast::transmute(surface)), obj: cast::transmute(surface),
}; };
NativeSurface::from_io_surface(io_surface) NativeSurface::from_io_surface(io_surface)
} }