gfx: Refactor the Mac platform goop into platform/

This commit is contained in:
Patrick Walton 2013-04-05 15:49:11 -07:00
parent e66c9fb7f4
commit f372c9c5c3
7 changed files with 69 additions and 64 deletions

View file

@ -1,20 +1,21 @@
//! Fonts.
use color::Color; use color::Color;
use font_context::FontContext; use font_context::FontContext;
use geometry::Au; use geometry::Au;
use platform;
use render_context::RenderContext; use render_context::RenderContext;
use util::range::Range;
use text::glyph::{GlyphStore, GlyphIndex}; use text::glyph::{GlyphStore, GlyphIndex};
use text::shaper::ShaperMethods; use text::shaper::ShaperMethods;
use text::{Shaper, TextRun};
use text::shaper::ShaperMethods; use text::shaper::ShaperMethods;
use text::{Shaper, TextRun};
use util::range::Range;
use azure::{AzFloat, AzScaledFontRef}; use azure::{AzFloat, AzScaledFontRef};
use azure::scaled_font::ScaledFont; use azure::scaled_font::ScaledFont;
use azure::azure_hl::{BackendType, ColorPattern}; use azure::azure_hl::{BackendType, ColorPattern};
use geom::{Point2D, Rect, Size2D}; use geom::{Point2D, Rect, Size2D};
#[cfg(target_os = "macos")]
use quartz;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
use freetype_impl; use freetype_impl;
use native; use native;
@ -25,7 +26,7 @@ use native;
// resources needed by the graphics layer to draw glyphs. // resources needed by the graphics layer to draw glyphs.
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub type FontHandle = quartz::font::QuartzFontHandle; pub type FontHandle = platform::font::QuartzFontHandle;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub type FontHandle = freetype_impl::font::FreeTypeFontHandle; pub type FontHandle = freetype_impl::font::FreeTypeFontHandle;
@ -56,7 +57,7 @@ pub impl FontHandle {
buf: ~[u8], buf: ~[u8],
style: &SpecifiedFontStyle) style: &SpecifiedFontStyle)
-> Result<FontHandle, ()> { -> Result<FontHandle, ()> {
quartz::font::QuartzFontHandle::new_from_buffer(fctx, buf, style) platform::font::QuartzFontHandle::new_from_buffer(fctx, buf, style)
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
@ -90,7 +91,7 @@ impl FontTableTagConversions for FontTableTag {
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub type FontTable = quartz::font::QuartzFontTable; pub type FontTable = platform::font::QuartzFontTable;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub type FontTable = freetype_impl::font::FreeTypeFontTable; pub type FontTable = freetype_impl::font::FreeTypeFontTable;

View file

@ -2,14 +2,13 @@ use font::{Font, FontDescriptor, FontGroup, FontStyle, SelectorPlatformIdentifie
use font::{SelectorStubDummy, SpecifiedFontStyle, UsedFontStyle}; use font::{SelectorStubDummy, SpecifiedFontStyle, UsedFontStyle};
use font_list::FontList; use font_list::FontList;
use native::FontHandle; use native::FontHandle;
use platform;
use util::cache::Cache; use util::cache::Cache;
use util::cache::MonoCache; use util::cache::MonoCache;
use azure::azure_hl::BackendType; use azure::azure_hl::BackendType;
use core::hashmap::HashMap; use core::hashmap::HashMap;
#[cfg(target_os = "macos")]
use quartz;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
use freetype_impl; use freetype_impl;
use font_context; use font_context;
@ -35,7 +34,7 @@ pub fn dummy_style() -> FontStyle {
} }
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
type FontContextHandle = quartz::font_context::QuartzFontContextHandle; type FontContextHandle = platform::font_context::QuartzFontContextHandle;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
type FontContextHandle = freetype_impl::font_context::FreeTypeFontContextHandle; type FontContextHandle = freetype_impl::font_context::FreeTypeFontContextHandle;
@ -50,7 +49,7 @@ pub trait FontContextHandleMethods {
pub impl FontContextHandle { pub impl FontContextHandle {
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub fn new() -> FontContextHandle { pub fn new() -> FontContextHandle {
quartz::font_context::QuartzFontContextHandle::new() platform::font_context::QuartzFontContextHandle::new()
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]

View file

@ -1,19 +1,20 @@
//! Implementation of the list of fonts.
use font::{CSSFontWeight, SpecifiedFontStyle}; use font::{CSSFontWeight, SpecifiedFontStyle};
use gfx_font::FontHandleMethods; use gfx_font::FontHandleMethods;
use native::FontHandle;
use gfx_font::FontHandleMethods; use gfx_font::FontHandleMethods;
use native::FontHandle;
use platform;
use util::time::time;
use core::hashmap::HashMap; use core::hashmap::HashMap;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
use fontconfig; use fontconfig;
#[cfg(target_os = "macos")]
use quartz;
use native; use native;
use util::time::time;
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
type FontListHandle = quartz::font_list::QuartzFontListHandle; type FontListHandle = platform::font_list::QuartzFontListHandle;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
type FontListHandle = fontconfig::font_list::FontconfigFontListHandle; type FontListHandle = fontconfig::font_list::FontconfigFontListHandle;
@ -21,7 +22,7 @@ type FontListHandle = fontconfig::font_list::FontconfigFontListHandle;
pub impl FontListHandle { pub impl FontListHandle {
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
pub fn new(fctx: &native::FontContextHandle) -> Result<FontListHandle, ()> { pub fn new(fctx: &native::FontContextHandle) -> Result<FontListHandle, ()> {
Ok(quartz::font_list::QuartzFontListHandle::new(fctx)) Ok(platform::font_list::QuartzFontListHandle::new(fctx))
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]

View file

@ -1,4 +1,4 @@
/// Implementation of Quartz (CoreGraphics) fonts. //! Implementation of Quartz (CoreGraphics) fonts.
extern mod core_foundation; extern mod core_foundation;
extern mod core_graphics; extern mod core_graphics;
@ -9,17 +9,18 @@ use gfx_font::{CSSFontWeight, FontHandleMethods, FontMetrics, FontTable, FontTab
use gfx_font::{FontTableTag, FontWeight100, FontWeight200, FontWeight300, FontWeight400}; use gfx_font::{FontTableTag, FontWeight100, FontWeight200, FontWeight300, FontWeight400};
use gfx_font::{FontWeight500, FontWeight600, FontWeight700, FontWeight800, FontWeight900}; use gfx_font::{FontWeight500, FontWeight600, FontWeight700, FontWeight800, FontWeight900};
use gfx_font::{FractionalPixel, SpecifiedFontStyle}; use gfx_font::{FractionalPixel, SpecifiedFontStyle};
use quartz::font::core_foundation::base::{CFIndex, CFWrapper}; use platform::macos::font::core_foundation::base::{CFIndex, CFWrapper};
use quartz::font::core_foundation::data::CFData; use platform::macos::font::core_foundation::data::CFData;
use quartz::font::core_foundation::string::UniChar; use platform::macos::font::core_foundation::string::UniChar;
use quartz::font::core_graphics::data_provider::CGDataProvider; use platform::macos::font::core_graphics::data_provider::CGDataProvider;
use quartz::font::core_graphics::font::{CGFont, CGGlyph}; use platform::macos::font::core_graphics::font::{CGFont, CGGlyph};
use quartz::font::core_graphics::geometry::CGRect; use platform::macos::font::core_graphics::geometry::CGRect;
use quartz::font::core_text::font::{CTFont, CTFontMethods, CTFontMethodsPrivate}; use platform::macos::font::core_text::font::{CTFont, CTFontMethods, CTFontMethodsPrivate};
use quartz::font::core_text::font_descriptor::{SymbolicTraitAccessors, TraitAccessors}; use platform::macos::font::core_text::font_descriptor::{SymbolicTraitAccessors};
use quartz::font::core_text::font_descriptor::kCTFontDefaultOrientation; use platform::macos::font::core_text::font_descriptor::{TraitAccessors};
use quartz::font_context::QuartzFontContextHandle; use platform::macos::font::core_text::font_descriptor::{kCTFontDefaultOrientation};
use quartz; use platform::macos::font_context::QuartzFontContextHandle;
use platform;
use text::glyph::GlyphIndex; use text::glyph::GlyphIndex;
struct QuartzFontTable { struct QuartzFontTable {
@ -51,11 +52,13 @@ pub impl QuartzFontHandle {
fn new_from_buffer(_fctx: &QuartzFontContextHandle, buf: ~[u8], fn new_from_buffer(_fctx: &QuartzFontContextHandle, buf: ~[u8],
style: &SpecifiedFontStyle) -> Result<QuartzFontHandle, ()> { style: &SpecifiedFontStyle) -> Result<QuartzFontHandle, ()> {
let fontprov : CGDataProvider = vec::as_imm_buf(buf, |cbuf, len| { let fontprov : CGDataProvider = vec::as_imm_buf(buf, |cbuf, len| {
quartz::font::core_graphics::data_provider::new_from_buffer(cbuf, len) platform::macos::font::core_graphics::data_provider::new_from_buffer(cbuf, len)
}); });
let cgfont = quartz::font::core_graphics::font::create_with_data_provider(&fontprov); let cgfont = platform::macos::font::core_graphics::font::create_with_data_provider(
let ctfont = quartz::font::core_text::font::new_from_CGFont(&cgfont, style.pt_size); &fontprov);
let ctfont = platform::macos::font::core_text::font::new_from_CGFont(&cgfont,
style.pt_size);
let result = Ok(QuartzFontHandle { let result = Ok(QuartzFontHandle {
cgfont: Some(cgfont), cgfont: Some(cgfont),
@ -65,13 +68,13 @@ pub impl QuartzFontHandle {
return result; return result;
} }
fn new_from_CTFont(_fctx: &QuartzFontContextHandle, ctfont: CTFont) -> Result<QuartzFontHandle, ()> { fn new_from_CTFont(_: &QuartzFontContextHandle,
let result = Ok(QuartzFontHandle { ctfont: CTFont)
-> Result<QuartzFontHandle, ()> {
Ok(QuartzFontHandle {
mut cgfont: None, mut cgfont: None,
ctfont: ctfont, ctfont: ctfont,
}); })
return result;
} }
fn get_CGFont(&mut self) -> CGFont { fn get_CGFont(&mut self) -> CGFont {
@ -177,7 +180,7 @@ impl FontHandleMethods for QuartzFontHandle {
} }
fn get_table_for_tag(&self, tag: FontTableTag) -> Option<FontTable> { fn get_table_for_tag(&self, tag: FontTableTag) -> Option<FontTable> {
let result : Option<CFData> = self.ctfont.get_font_table(tag); let result: Option<CFData> = self.ctfont.get_font_table(tag);
result.chain(|data| { result.chain(|data| {
Some(QuartzFontTable::wrap(data)) Some(QuartzFontTable::wrap(data))
}) })

View file

@ -2,12 +2,12 @@ extern mod core_foundation;
extern mod core_graphics; extern mod core_graphics;
extern mod core_text; extern mod core_text;
use quartz;
use quartz::font::QuartzFontHandle;
use gfx_font::{FontHandle, UsedFontStyle}; use gfx_font::{FontHandle, UsedFontStyle};
use gfx_font_context::FontContextHandleMethods; use gfx_font_context::FontContextHandleMethods;
use platform::macos::font::QuartzFontHandle;
use platform;
pub struct QuartzFontContextHandle { pub struct QuartzFontContextHandle {
ctx: () ctx: ()
} }
@ -24,9 +24,13 @@ impl FontContextHandleMethods for QuartzFontContextHandle {
QuartzFontContextHandle { ctx: self.ctx } QuartzFontContextHandle { ctx: self.ctx }
} }
fn create_font_from_identifier(&self, name: ~str, style: UsedFontStyle) -> Result<FontHandle, ()> { fn create_font_from_identifier(&self,
let ctfont_result = quartz::font_context::core_text::font::new_from_name(name, name: ~str,
style.pt_size); style: UsedFontStyle)
-> Result<FontHandle, ()> {
let ctfont_result = platform::macos::font_context::core_text::font::new_from_name(
name,
style.pt_size);
do result::chain(ctfont_result) |ctfont| { do result::chain(ctfont_result) |ctfont| {
QuartzFontHandle::new_from_CTFont(self, ctfont) QuartzFontHandle::new_from_CTFont(self, ctfont)
} }

View file

@ -1,21 +1,20 @@
extern mod core_foundation; extern mod core_foundation;
extern mod core_text; extern mod core_text;
use native;
use quartz;
use quartz::font_list::core_foundation::array::CFArray;
use quartz::font_list::core_foundation::base::CFWrapper;
use quartz::font_list::core_foundation::string::{CFString, CFStringRef};
use quartz::font_list::core_text::font_descriptor::CTFontDescriptorRef;
use quartz::font_list::core_text::font_collection::CTFontCollectionMethods;
use quartz::font::QuartzFontHandle;
use quartz::font_context::QuartzFontContextHandle;
use gfx_font::FontHandleMethods; use gfx_font::FontHandleMethods;
use gfx_font_context::FontContextHandleMethods; use gfx_font_context::FontContextHandleMethods;
use gfx_font_list::{FontEntry, FontFamily, FontFamilyMap}; use gfx_font_list::{FontEntry, FontFamily, FontFamilyMap};
use native;
use platform::macos::font::QuartzFontHandle;
use platform::macos::font_context::QuartzFontContextHandle;
use platform::macos::font_list::core_foundation::array::CFArray;
use platform::macos::font_list::core_foundation::base::CFWrapper;
use platform::macos::font_list::core_foundation::string::{CFString, CFStringRef};
use platform::macos::font_list::core_text::font_collection::CTFontCollectionMethods;
use platform::macos::font_list::core_text::font_descriptor::CTFontDescriptorRef;
use platform;
use core::hashmap::HashMap; use core::hashmap::HashMap;
pub struct QuartzFontListHandle { pub struct QuartzFontListHandle {
@ -29,7 +28,7 @@ pub impl QuartzFontListHandle {
fn get_available_families(&self) -> FontFamilyMap { fn get_available_families(&self) -> FontFamilyMap {
let family_names: CFArray<CFStringRef> = let family_names: CFArray<CFStringRef> =
quartz::font_list::core_text::font_collection::get_family_names(); platform::macos::font_list::core_text::font_collection::get_family_names();
let mut family_map : FontFamilyMap = HashMap::new(); let mut family_map : FontFamilyMap = HashMap::new();
for family_names.each |&strref: &CFStringRef| { for family_names.each |&strref: &CFStringRef| {
let family_name = CFString::wrap_extern(strref).to_str(); let family_name = CFString::wrap_extern(strref).to_str();
@ -47,10 +46,12 @@ pub impl QuartzFontListHandle {
debug!("Looking for faces of family: %s", *family_name); debug!("Looking for faces of family: %s", *family_name);
let family_collection = let family_collection =
quartz::font_list::core_text::font_collection::create_for_family(*family_name); platform::macos::font_list::core_text::font_collection::create_for_family(
*family_name);
for family_collection.get_descriptors().each |descref: &CTFontDescriptorRef| { for family_collection.get_descriptors().each |descref: &CTFontDescriptorRef| {
let desc = CFWrapper::wrap_shared(*descref); let desc = CFWrapper::wrap_shared(*descref);
let font = quartz::font_list::core_text::font::new_from_descriptor(&desc, 0.0); let font = platform::macos::font_list::core_text::font::new_from_descriptor(&desc,
0.0);
let handle = result::unwrap(QuartzFontHandle::new_from_CTFont(&self.fctx, font)); let handle = result::unwrap(QuartzFontHandle::new_from_CTFont(&self.fctx, font));
debug!("Creating new FontEntry for face: %s", handle.face_name()); debug!("Creating new FontEntry for face: %s", handle.face_name());

View file

@ -41,12 +41,8 @@ pub mod opts;
// font.rs, font_list.rs, font_context.rs // font.rs, font_list.rs, font_context.rs
pub mod native; pub mod native;
#[cfg(target_os = "macos")] #[path="platform/mod.rs"]
pub mod quartz { pub mod platform;
pub mod font;
pub mod font_context;
pub mod font_list;
}
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub mod freetype_impl { pub mod freetype_impl {