style: Fixups for css-fonts-4 font-weight.

This commit is contained in:
Emilio Cobos Álvarez 2018-04-21 20:05:37 +02:00
parent 0f19c25706
commit 48de556f8c
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
10 changed files with 51 additions and 64 deletions

View file

@ -154,19 +154,12 @@ impl FontHandleMethods for FontHandle {
}
fn boldness(&self) -> FontWeight {
if let Some(os2) = self.os2_table() {
let weight = os2.us_weight_class as i32;
if weight < 10 {
FontWeight::from_int(weight * 100).unwrap()
} else if weight >= 100 && weight < 1000 {
FontWeight::from_int(weight / 100 * 100).unwrap()
} else {
FontWeight::normal()
}
} else {
FontWeight::normal()
}
let os2 = match self.os2_table() {
None => return FontWeight::normal(),
Some(os2) => os2,
};
let weight = os2.us_weight_class as f32;
FontWeight(weight.max(1.).min(1000.))
}
fn stretchiness(&self) -> FontStretch {

View file

@ -210,12 +210,14 @@ impl FontHandleMethods for FontHandle {
fn boldness(&self) -> FontWeight {
let normalized = self.ctfont.all_traits().normalized_weight(); // [-1.0, 1.0]
// TODO(emilio): It may make sense to make this range [.01, 10.0], to
// align with css-fonts-4's range of [1, 1000].
let normalized = if normalized <= 0.0 {
4.0 + normalized * 3.0 // [1.0, 4.0]
} else {
4.0 + normalized * 5.0 // [4.0, 9.0]
}; // [1.0, 9.0], centered on 4.0
FontWeight::from_int(normalized.round() as i32 * 100).unwrap()
FontWeight(normalized as f32 * 100.)
}
fn stretchiness(&self) -> FontStretch {

View file

@ -157,10 +157,7 @@ impl FontInfo {
},
};
let weight =
StyleFontWeight::from_int(
min(9, max(1, weight_val as i32 / 100)) * 100
).unwrap();
let weight = StyleFontWeight(weight_val as f32);
let stretch = match min(9, max(1, width_val)) {
1 => StyleFontStretch::UltraCondensed,
@ -184,28 +181,28 @@ impl FontInfo {
Ok(FontInfo {
family_name: family,
face_name: face,
weight: weight,
stretch: stretch,
style: style,
weight,
stretch,
style,
})
}
fn new_from_font(font: &Font) -> Result<FontInfo, ()> {
let style = font.style();
let weight = StyleFontWeight(match font.weight() {
FontWeight::Thin => 100,
FontWeight::ExtraLight => 200,
FontWeight::Light => 300,
FontWeight::Thin => 100.,
FontWeight::ExtraLight => 200.,
FontWeight::Light => 300.,
// slightly grayer gray
FontWeight::SemiLight => 300,
FontWeight::Regular => 400,
FontWeight::Medium => 500,
FontWeight::SemiBold => 600,
FontWeight::Bold => 700,
FontWeight::ExtraBold => 800,
FontWeight::Black => 900,
FontWeight::SemiLight => 300.,
FontWeight::Regular => 400.,
FontWeight::Medium => 500.,
FontWeight::SemiBold => 600.,
FontWeight::Bold => 700.,
FontWeight::ExtraBold => 800.,
FontWeight::Black => 900.,
// slightly blacker black
FontWeight::ExtraBlack => 900,
FontWeight::ExtraBlack => 1000.,
});
let stretch = match font.stretch() {
FontStretch::Undefined => StyleFontStretch::Normal,
@ -223,9 +220,9 @@ impl FontInfo {
Ok(FontInfo {
family_name: font.family_name(),
face_name: font.face_name(),
style: style,
weight: weight,
stretch: stretch,
style,
weight,
stretch,
})
}
}