aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/gfx/font_cache_task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/gfx/font_cache_task.rs')
-rw-r--r--src/components/gfx/font_cache_task.rs45
1 files changed, 28 insertions, 17 deletions
diff --git a/src/components/gfx/font_cache_task.rs b/src/components/gfx/font_cache_task.rs
index dd1771881a6..bb071f38f82 100644
--- a/src/components/gfx/font_cache_task.rs
+++ b/src/components/gfx/font_cache_task.rs
@@ -42,6 +42,16 @@ impl FontFamily {
}
}
+ // If a request is made for a font family that exists,
+ // pick the first valid font in the family if we failed
+ // to find an exact match for the descriptor.
+ for template in self.templates.mut_iter() {
+ let maybe_template = template.get();
+ if maybe_template.is_some() {
+ return maybe_template;
+ }
+ }
+
None
}
@@ -60,7 +70,7 @@ impl FontFamily {
/// Commands that the FontContext sends to the font cache task.
pub enum Command {
GetFontTemplate(String, FontTemplateDescriptor, Sender<Reply>),
- AddWebFont(Url, String, Sender<()>),
+ AddWebFont(Vec<Url>, String, Sender<()>),
Exit(Sender<()>),
}
@@ -88,7 +98,6 @@ impl FontCache {
match msg {
GetFontTemplate(family, descriptor, result) => {
let maybe_font_template = self.get_font_template(&family, &descriptor);
-
let font_template = match maybe_font_template {
Some(font_template) => font_template,
None => self.get_last_resort_template(&descriptor),
@@ -96,19 +105,21 @@ impl FontCache {
result.send(GetFontTemplateReply(font_template));
}
- AddWebFont(url, family_name, result) => {
- let maybe_resource = load_whole_resource(&self.resource_task, url.clone());
- match maybe_resource {
- Ok((_, bytes)) => {
- if !self.web_families.contains_key(&family_name) {
- let family = FontFamily::new();
- self.web_families.insert(family_name.clone(), family);
+ AddWebFont(urls, family_name, result) => {
+ for url in urls.iter() {
+ let maybe_resource = load_whole_resource(&self.resource_task, url.clone());
+ match maybe_resource {
+ Ok((_, bytes)) => {
+ if !self.web_families.contains_key(&family_name) {
+ let family = FontFamily::new();
+ self.web_families.insert(family_name.clone(), family);
+ }
+ let family = self.web_families.get_mut(&family_name);
+ family.add_template(format!("{}", url).as_slice(), Some(bytes));
+ },
+ Err(msg) => {
+ fail!(msg);
}
- let family = self.web_families.get_mut(&family_name);
- family.add_template(format!("{}", url).as_slice(), Some(bytes));
- },
- Err(msg) => {
- fail!(msg);
}
}
result.send(());
@@ -166,7 +177,7 @@ impl FontCache {
}
}
- fn find_font_in_web_family<'a>(&'a mut self, family_name: &String, desc: &FontTemplateDescriptor)
+ fn find_font_in_web_family<'a>(&'a mut self, family_name: &String, desc: &FontTemplateDescriptor)
-> Option<Arc<FontTemplateData>> {
if self.web_families.contains_key(family_name) {
let family = self.web_families.get_mut(family_name);
@@ -253,9 +264,9 @@ impl FontCacheTask {
}
}
- pub fn add_web_font(&mut self, url: Url, family: &str) {
+ pub fn add_web_font(&mut self, urls: Vec<Url>, family: &str) {
let (response_chan, response_port) = channel();
- self.chan.send(AddWebFont(url, family.to_string(), response_chan));
+ self.chan.send(AddWebFont(urls, family.to_string(), response_chan));
response_port.recv();
}