mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
gfx: Refactor the Mac platform goop into platform/
This commit is contained in:
parent
e66c9fb7f4
commit
f372c9c5c3
7 changed files with 69 additions and 64 deletions
|
@ -1,20 +1,21 @@
|
|||
//! Fonts.
|
||||
|
||||
use color::Color;
|
||||
use font_context::FontContext;
|
||||
use geometry::Au;
|
||||
use platform;
|
||||
use render_context::RenderContext;
|
||||
use util::range::Range;
|
||||
use text::glyph::{GlyphStore, GlyphIndex};
|
||||
use text::shaper::ShaperMethods;
|
||||
use text::{Shaper, TextRun};
|
||||
use text::shaper::ShaperMethods;
|
||||
use text::{Shaper, TextRun};
|
||||
use util::range::Range;
|
||||
|
||||
use azure::{AzFloat, AzScaledFontRef};
|
||||
use azure::scaled_font::ScaledFont;
|
||||
use azure::azure_hl::{BackendType, ColorPattern};
|
||||
use geom::{Point2D, Rect, Size2D};
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
use quartz;
|
||||
#[cfg(target_os = "linux")]
|
||||
use freetype_impl;
|
||||
use native;
|
||||
|
@ -25,7 +26,7 @@ use native;
|
|||
// resources needed by the graphics layer to draw glyphs.
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
pub type FontHandle = quartz::font::QuartzFontHandle;
|
||||
pub type FontHandle = platform::font::QuartzFontHandle;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
pub type FontHandle = freetype_impl::font::FreeTypeFontHandle;
|
||||
|
@ -56,7 +57,7 @@ pub impl FontHandle {
|
|||
buf: ~[u8],
|
||||
style: &SpecifiedFontStyle)
|
||||
-> Result<FontHandle, ()> {
|
||||
quartz::font::QuartzFontHandle::new_from_buffer(fctx, buf, style)
|
||||
platform::font::QuartzFontHandle::new_from_buffer(fctx, buf, style)
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
|
@ -90,7 +91,7 @@ impl FontTableTagConversions for FontTableTag {
|
|||
}
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
pub type FontTable = quartz::font::QuartzFontTable;
|
||||
pub type FontTable = platform::font::QuartzFontTable;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
pub type FontTable = freetype_impl::font::FreeTypeFontTable;
|
||||
|
|
|
@ -2,14 +2,13 @@ use font::{Font, FontDescriptor, FontGroup, FontStyle, SelectorPlatformIdentifie
|
|||
use font::{SelectorStubDummy, SpecifiedFontStyle, UsedFontStyle};
|
||||
use font_list::FontList;
|
||||
use native::FontHandle;
|
||||
use platform;
|
||||
use util::cache::Cache;
|
||||
use util::cache::MonoCache;
|
||||
|
||||
use azure::azure_hl::BackendType;
|
||||
use core::hashmap::HashMap;
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
use quartz;
|
||||
#[cfg(target_os = "linux")]
|
||||
use freetype_impl;
|
||||
use font_context;
|
||||
|
@ -35,7 +34,7 @@ pub fn dummy_style() -> FontStyle {
|
|||
}
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
type FontContextHandle = quartz::font_context::QuartzFontContextHandle;
|
||||
type FontContextHandle = platform::font_context::QuartzFontContextHandle;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
type FontContextHandle = freetype_impl::font_context::FreeTypeFontContextHandle;
|
||||
|
@ -50,7 +49,7 @@ pub trait FontContextHandleMethods {
|
|||
pub impl FontContextHandle {
|
||||
#[cfg(target_os = "macos")]
|
||||
pub fn new() -> FontContextHandle {
|
||||
quartz::font_context::QuartzFontContextHandle::new()
|
||||
platform::font_context::QuartzFontContextHandle::new()
|
||||
}
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
|
|
|
@ -1,19 +1,20 @@
|
|||
//! Implementation of the list of fonts.
|
||||
|
||||
use font::{CSSFontWeight, SpecifiedFontStyle};
|
||||
use gfx_font::FontHandleMethods;
|
||||
use native::FontHandle;
|
||||
use gfx_font::FontHandleMethods;
|
||||
use native::FontHandle;
|
||||
use platform;
|
||||
use util::time::time;
|
||||
|
||||
use core::hashmap::HashMap;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
use fontconfig;
|
||||
#[cfg(target_os = "macos")]
|
||||
use quartz;
|
||||
use native;
|
||||
use util::time::time;
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
type FontListHandle = quartz::font_list::QuartzFontListHandle;
|
||||
type FontListHandle = platform::font_list::QuartzFontListHandle;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
type FontListHandle = fontconfig::font_list::FontconfigFontListHandle;
|
||||
|
@ -21,7 +22,7 @@ type FontListHandle = fontconfig::font_list::FontconfigFontListHandle;
|
|||
pub impl FontListHandle {
|
||||
#[cfg(target_os = "macos")]
|
||||
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")]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/// Implementation of Quartz (CoreGraphics) fonts.
|
||||
//! Implementation of Quartz (CoreGraphics) fonts.
|
||||
|
||||
extern mod core_foundation;
|
||||
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::{FontWeight500, FontWeight600, FontWeight700, FontWeight800, FontWeight900};
|
||||
use gfx_font::{FractionalPixel, SpecifiedFontStyle};
|
||||
use quartz::font::core_foundation::base::{CFIndex, CFWrapper};
|
||||
use quartz::font::core_foundation::data::CFData;
|
||||
use quartz::font::core_foundation::string::UniChar;
|
||||
use quartz::font::core_graphics::data_provider::CGDataProvider;
|
||||
use quartz::font::core_graphics::font::{CGFont, CGGlyph};
|
||||
use quartz::font::core_graphics::geometry::CGRect;
|
||||
use quartz::font::core_text::font::{CTFont, CTFontMethods, CTFontMethodsPrivate};
|
||||
use quartz::font::core_text::font_descriptor::{SymbolicTraitAccessors, TraitAccessors};
|
||||
use quartz::font::core_text::font_descriptor::kCTFontDefaultOrientation;
|
||||
use quartz::font_context::QuartzFontContextHandle;
|
||||
use quartz;
|
||||
use platform::macos::font::core_foundation::base::{CFIndex, CFWrapper};
|
||||
use platform::macos::font::core_foundation::data::CFData;
|
||||
use platform::macos::font::core_foundation::string::UniChar;
|
||||
use platform::macos::font::core_graphics::data_provider::CGDataProvider;
|
||||
use platform::macos::font::core_graphics::font::{CGFont, CGGlyph};
|
||||
use platform::macos::font::core_graphics::geometry::CGRect;
|
||||
use platform::macos::font::core_text::font::{CTFont, CTFontMethods, CTFontMethodsPrivate};
|
||||
use platform::macos::font::core_text::font_descriptor::{SymbolicTraitAccessors};
|
||||
use platform::macos::font::core_text::font_descriptor::{TraitAccessors};
|
||||
use platform::macos::font::core_text::font_descriptor::{kCTFontDefaultOrientation};
|
||||
use platform::macos::font_context::QuartzFontContextHandle;
|
||||
use platform;
|
||||
use text::glyph::GlyphIndex;
|
||||
|
||||
struct QuartzFontTable {
|
||||
|
@ -51,11 +52,13 @@ pub impl QuartzFontHandle {
|
|||
fn new_from_buffer(_fctx: &QuartzFontContextHandle, buf: ~[u8],
|
||||
style: &SpecifiedFontStyle) -> Result<QuartzFontHandle, ()> {
|
||||
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 ctfont = quartz::font::core_text::font::new_from_CGFont(&cgfont, style.pt_size);
|
||||
let cgfont = platform::macos::font::core_graphics::font::create_with_data_provider(
|
||||
&fontprov);
|
||||
let ctfont = platform::macos::font::core_text::font::new_from_CGFont(&cgfont,
|
||||
style.pt_size);
|
||||
|
||||
let result = Ok(QuartzFontHandle {
|
||||
cgfont: Some(cgfont),
|
||||
|
@ -65,13 +68,13 @@ pub impl QuartzFontHandle {
|
|||
return result;
|
||||
}
|
||||
|
||||
fn new_from_CTFont(_fctx: &QuartzFontContextHandle, ctfont: CTFont) -> Result<QuartzFontHandle, ()> {
|
||||
let result = Ok(QuartzFontHandle {
|
||||
fn new_from_CTFont(_: &QuartzFontContextHandle,
|
||||
ctfont: CTFont)
|
||||
-> Result<QuartzFontHandle, ()> {
|
||||
Ok(QuartzFontHandle {
|
||||
mut cgfont: None,
|
||||
ctfont: ctfont,
|
||||
});
|
||||
|
||||
return result;
|
||||
})
|
||||
}
|
||||
|
||||
fn get_CGFont(&mut self) -> CGFont {
|
||||
|
@ -177,7 +180,7 @@ impl FontHandleMethods for QuartzFontHandle {
|
|||
}
|
||||
|
||||
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| {
|
||||
Some(QuartzFontTable::wrap(data))
|
||||
})
|
|
@ -2,12 +2,12 @@ extern mod core_foundation;
|
|||
extern mod core_graphics;
|
||||
extern mod core_text;
|
||||
|
||||
use quartz;
|
||||
use quartz::font::QuartzFontHandle;
|
||||
|
||||
use gfx_font::{FontHandle, UsedFontStyle};
|
||||
use gfx_font_context::FontContextHandleMethods;
|
||||
|
||||
use platform::macos::font::QuartzFontHandle;
|
||||
use platform;
|
||||
|
||||
pub struct QuartzFontContextHandle {
|
||||
ctx: ()
|
||||
}
|
||||
|
@ -24,9 +24,13 @@ impl FontContextHandleMethods for QuartzFontContextHandle {
|
|||
QuartzFontContextHandle { ctx: self.ctx }
|
||||
}
|
||||
|
||||
fn create_font_from_identifier(&self, name: ~str, style: UsedFontStyle) -> Result<FontHandle, ()> {
|
||||
let ctfont_result = quartz::font_context::core_text::font::new_from_name(name,
|
||||
style.pt_size);
|
||||
fn create_font_from_identifier(&self,
|
||||
name: ~str,
|
||||
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| {
|
||||
QuartzFontHandle::new_from_CTFont(self, ctfont)
|
||||
}
|
|
@ -1,21 +1,20 @@
|
|||
extern mod core_foundation;
|
||||
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_context::FontContextHandleMethods;
|
||||
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;
|
||||
|
||||
pub struct QuartzFontListHandle {
|
||||
|
@ -29,7 +28,7 @@ pub impl QuartzFontListHandle {
|
|||
|
||||
fn get_available_families(&self) -> FontFamilyMap {
|
||||
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();
|
||||
for family_names.each |&strref: &CFStringRef| {
|
||||
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);
|
||||
|
||||
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| {
|
||||
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));
|
||||
|
||||
debug!("Creating new FontEntry for face: %s", handle.face_name());
|
|
@ -41,12 +41,8 @@ pub mod opts;
|
|||
// font.rs, font_list.rs, font_context.rs
|
||||
pub mod native;
|
||||
|
||||
#[cfg(target_os = "macos")]
|
||||
pub mod quartz {
|
||||
pub mod font;
|
||||
pub mod font_context;
|
||||
pub mod font_list;
|
||||
}
|
||||
#[path="platform/mod.rs"]
|
||||
pub mod platform;
|
||||
|
||||
#[cfg(target_os = "linux")]
|
||||
pub mod freetype_impl {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue