mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Auto merge of #6981 - pcwalton:github-font-fallback, r=metajack
gfx: Fix Core Text font instantiation for Web fonts on Mac. r? @metajack <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6981) <!-- Reviewable:end -->
This commit is contained in:
commit
11acfbc29f
7 changed files with 52 additions and 19 deletions
|
@ -57,9 +57,9 @@ pub struct FontHandle {
|
||||||
|
|
||||||
impl FontHandleMethods for FontHandle {
|
impl FontHandleMethods for FontHandle {
|
||||||
fn new_from_template(_fctx: &FontContextHandle,
|
fn new_from_template(_fctx: &FontContextHandle,
|
||||||
template: Arc<FontTemplateData>,
|
template: Arc<FontTemplateData>,
|
||||||
pt_size: Option<Au>)
|
pt_size: Option<Au>)
|
||||||
-> Result<FontHandle, ()> {
|
-> Result<FontHandle, ()> {
|
||||||
let size = match pt_size {
|
let size = match pt_size {
|
||||||
Some(s) => s.to_f64_px(),
|
Some(s) => s.to_f64_px(),
|
||||||
None => 0.0
|
None => 0.0
|
||||||
|
|
|
@ -38,22 +38,8 @@ unsafe impl Sync for FontTemplateData {}
|
||||||
|
|
||||||
impl FontTemplateData {
|
impl FontTemplateData {
|
||||||
pub fn new(identifier: Atom, font_data: Option<Vec<u8>>) -> FontTemplateData {
|
pub fn new(identifier: Atom, font_data: Option<Vec<u8>>) -> FontTemplateData {
|
||||||
let ctfont = match font_data {
|
|
||||||
Some(ref bytes) => {
|
|
||||||
let fontprov = CGDataProvider::from_buffer(bytes);
|
|
||||||
let cgfont_result = CGFont::from_data_provider(fontprov);
|
|
||||||
match cgfont_result {
|
|
||||||
Ok(cgfont) => Some(core_text::font::new_from_CGFont(&cgfont, 0.0)),
|
|
||||||
Err(_) => None
|
|
||||||
}
|
|
||||||
},
|
|
||||||
None => {
|
|
||||||
Some(core_text::font::new_from_name(identifier.as_slice(), 0.0).unwrap())
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
FontTemplateData {
|
FontTemplateData {
|
||||||
ctfont: CachedCTFont(Mutex::new(ctfont)),
|
ctfont: CachedCTFont(Mutex::new(None)),
|
||||||
identifier: identifier.to_owned(),
|
identifier: identifier.to_owned(),
|
||||||
font_data: font_data
|
font_data: font_data
|
||||||
}
|
}
|
||||||
|
@ -63,7 +49,17 @@ impl FontTemplateData {
|
||||||
pub fn ctfont(&self) -> Option<CTFont> {
|
pub fn ctfont(&self) -> Option<CTFont> {
|
||||||
let mut ctfont = self.ctfont.lock().unwrap();
|
let mut ctfont = self.ctfont.lock().unwrap();
|
||||||
if ctfont.is_none() {
|
if ctfont.is_none() {
|
||||||
*ctfont = core_text::font::new_from_name(self.identifier.as_slice(), 0.0).ok()
|
*ctfont = match self.font_data {
|
||||||
|
Some(ref bytes) => {
|
||||||
|
let fontprov = CGDataProvider::from_buffer(bytes);
|
||||||
|
let cgfont_result = CGFont::from_data_provider(fontprov);
|
||||||
|
match cgfont_result {
|
||||||
|
Ok(cgfont) => Some(core_text::font::new_from_CGFont(&cgfont, 0.0)),
|
||||||
|
Err(_) => None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => core_text::font::new_from_name(self.identifier.as_slice(), 0.0).ok(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ctfont.as_ref().map(|ctfont| (*ctfont).clone())
|
ctfont.as_ref().map(|ctfont| (*ctfont).clone())
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,6 +219,7 @@ flaky_cpu == linebreak_simple_a.html linebreak_simple_b.html
|
||||||
== nth_last_of_type_pseudo_a.html nth_last_of_type_pseudo_b.html
|
== nth_last_of_type_pseudo_a.html nth_last_of_type_pseudo_b.html
|
||||||
== nth_of_type_pseudo_a.html nth_of_type_pseudo_b.html
|
== nth_of_type_pseudo_a.html nth_of_type_pseudo_b.html
|
||||||
== object_element_a.html object_element_b.html
|
== object_element_a.html object_element_b.html
|
||||||
|
!= octicons_a.html octicons_ref.html
|
||||||
== ol_japanese_iroha_a.html ol_japanese_iroha_ref.html
|
== ol_japanese_iroha_a.html ol_japanese_iroha_ref.html
|
||||||
!= ol_japanese_iroha_bullet_styles.html ol_japanese_iroha_ref.html
|
!= ol_japanese_iroha_bullet_styles.html ol_japanese_iroha_ref.html
|
||||||
== ol_simple_a.html ol_simple_ref.html
|
== ol_simple_a.html ol_simple_ref.html
|
||||||
|
|
9
tests/ref/fonts/octicons/LICENSE.txt
Normal file
9
tests/ref/fonts/octicons/LICENSE.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
(c) 2012-2015 GitHub
|
||||||
|
|
||||||
|
When using the GitHub logos, be sure to follow the GitHub logo guidelines (https://github.com/logos)
|
||||||
|
|
||||||
|
Font License: SIL OFL 1.1 (http://scripts.sil.org/OFL)
|
||||||
|
Applies to all font files
|
||||||
|
|
||||||
|
Code License: MIT (http://choosealicense.com/licenses/mit/)
|
||||||
|
Applies to all other files
|
BIN
tests/ref/fonts/octicons/octicons.ttf
Normal file
BIN
tests/ref/fonts/octicons/octicons.ttf
Normal file
Binary file not shown.
15
tests/ref/octicons_a.html
Normal file
15
tests/ref/octicons_a.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<style>
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Octicons';
|
||||||
|
src: url(fonts/octicons/octicons.ttf);
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-family: Octicons;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<h1></h1>
|
||||||
|
|
12
tests/ref/octicons_ref.html
Normal file
12
tests/ref/octicons_ref.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<style>
|
||||||
|
h1 {
|
||||||
|
font-family: Octiconz;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<h1></h1>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue