Use FamilyName instead of FontFamily in @font-face

… to exclude generic families, per spec:
https://drafts.csswg.org/css-fonts/#font-family-desc
This commit is contained in:
Simon Sapin 2017-02-02 19:01:40 +01:00
parent 52aa2431a9
commit 5405fb0d73
3 changed files with 12 additions and 12 deletions

View file

@ -25,7 +25,7 @@ use std::sync::{Arc, Mutex};
use std::thread; use std::thread;
use std::u32; use std::u32;
use style::font_face::{EffectiveSources, Source}; use style::font_face::{EffectiveSources, Source};
use style::properties::longhands::font_family::computed_value::FontFamily; use style::properties::longhands::font_family::computed_value::{FontFamily, FamilyName};
use webrender_traits; use webrender_traits;
/// A list of font templates that make up a given font family. /// A list of font templates that make up a given font family.
@ -269,7 +269,7 @@ impl FontCache {
}); });
} }
Source::Local(ref font) => { Source::Local(ref font) => {
let font_face_name = LowercaseString::new(font.name()); let font_face_name = LowercaseString::new(&font.0);
let templates = &mut self.web_families.get_mut(&family_name).unwrap(); let templates = &mut self.web_families.get_mut(&family_name).unwrap();
let mut found = false; let mut found = false;
for_each_variation(&font_face_name, |path| { for_each_variation(&font_face_name, |path| {
@ -461,8 +461,8 @@ impl FontCacheThread {
} }
} }
pub fn add_web_font(&self, family: FontFamily, sources: EffectiveSources, sender: IpcSender<()>) { pub fn add_web_font(&self, family: FamilyName, sources: EffectiveSources, sender: IpcSender<()>) {
self.chan.send(Command::AddWebFont(LowercaseString::new(family.name()), sources, sender)).unwrap(); self.chan.send(Command::AddWebFont(LowercaseString::new(&family.0), sources, sender)).unwrap();
} }
pub fn exit(&self) { pub fn exit(&self) {

View file

@ -8,7 +8,7 @@
#![deny(missing_docs)] #![deny(missing_docs)]
use computed_values::font_family::FontFamily; use computed_values::font_family::FamilyName;
use cssparser::{AtRuleParser, DeclarationListParser, DeclarationParser, Parser}; use cssparser::{AtRuleParser, DeclarationListParser, DeclarationParser, Parser};
use parser::{ParserContext, log_css_error, Parse}; use parser::{ParserContext, log_css_error, Parse};
use std::fmt; use std::fmt;
@ -23,7 +23,7 @@ pub enum Source {
/// A `url()` source. /// A `url()` source.
Url(UrlSource), Url(UrlSource),
/// A `local()` source. /// A `local()` source.
Local(FontFamily), Local(FamilyName),
} }
impl ToCss for Source { impl ToCss for Source {
@ -150,7 +150,7 @@ impl Parse for Source {
fn parse(context: &ParserContext, input: &mut Parser) -> Result<Source, ()> { fn parse(context: &ParserContext, input: &mut Parser) -> Result<Source, ()> {
if input.try(|input| input.expect_function_matching("local")).is_ok() { if input.try(|input| input.expect_function_matching("local")).is_ok() {
return input.parse_nested_block(|input| { return input.parse_nested_block(|input| {
FontFamily::parse(context, input) FamilyName::parse(context, input)
}).map(Source::Local) }).map(Source::Local)
} }
@ -177,10 +177,10 @@ impl Parse for Source {
macro_rules! font_face_descriptors { macro_rules! font_face_descriptors {
( (
mandatory descriptors = [ mandatory descriptors = [
$( #[$m_doc: meta] $m_name: tt $m_ident: ident : $m_ty: ty = $m_initial: expr, )* $( #[$m_doc: meta] $m_name: tt $m_ident: ident: $m_ty: ty = $m_initial: expr, )*
] ]
optional descriptors = [ optional descriptors = [
$( #[$o_doc: meta] $o_name: tt $o_ident: ident : $o_ty: ty = $o_initial: expr, )* $( #[$o_doc: meta] $o_name: tt $o_ident: ident: $o_ty: ty = $o_initial: expr, )*
] ]
) => { ) => {
/// A `@font-face` rule. /// A `@font-face` rule.
@ -285,7 +285,7 @@ macro_rules! font_face_descriptors {
font_face_descriptors! { font_face_descriptors! {
mandatory descriptors = [ mandatory descriptors = [
/// The specified url. /// The specified url.
"font-family" family: FontFamily = FontFamily::Generic(atom!("")), "font-family" family: FamilyName = FamilyName(atom!("")),
/// The format hints specified with the `format()` function. /// The format hints specified with the `format()` function.
"src" sources: Vec<Source> = Vec::new(), "src" sources: Vec<Source> = Vec::new(),

View file

@ -12,8 +12,8 @@ fn test_local_web_font() {
let (inp_chan, _) = ipc::channel().unwrap(); let (inp_chan, _) = ipc::channel().unwrap();
let (out_chan, out_receiver) = ipc::channel().unwrap(); let (out_chan, out_receiver) = ipc::channel().unwrap();
let font_cache_thread = FontCacheThread::new(inp_chan, None); let font_cache_thread = FontCacheThread::new(inp_chan, None);
let family_name = FontFamily::FamilyName(FamilyName(From::from("test family"))); let family_name = FamilyName(From::from("test family"));
let variant_name = FontFamily::FamilyName(FamilyName(From::from("test font face"))); let variant_name = FamilyName(From::from("test font face"));
let font_face_rule = FontFaceRule { let font_face_rule = FontFaceRule {
family: family_name.clone(), family: family_name.clone(),
sources: vec![Source::Local(variant_name)], sources: vec![Source::Local(variant_name)],