aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2020-06-18 19:23:59 +0200
committerEmilio Cobos Álvarez <emilio@crisal.io>2020-06-18 23:51:17 +0200
commite5484250db28c8ff5bfd5b71d5bac24be49e67f0 (patch)
tree33de844b42b77ac0d4884ba056667976be57f5a1
parent7a696cbffe781f0d8be339e4f9bfe63ee7da772c (diff)
downloadservo-e5484250db28c8ff5bfd5b71d5bac24be49e67f0.tar.gz
servo-e5484250db28c8ff5bfd5b71d5bac24be49e67f0.zip
style: Remove the dependency on font-kit from style.
No good reason to have this IMO, and helps remove some #[cfg] blocks.
-rw-r--r--Cargo.lock2
-rw-r--r--components/canvas/Cargo.toml1
-rw-r--r--components/canvas/canvas_data.rs39
-rw-r--r--components/style/Cargo.toml1
-rw-r--r--components/style/lib.rs2
-rw-r--r--components/style/values/computed/font.rs51
6 files changed, 35 insertions, 61 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a0ff6a51af2..ea421cb5697 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -519,6 +519,7 @@ dependencies = [
"servo_config",
"sparkle",
"style",
+ "style_traits",
"surfman",
"surfman-chains",
"surfman-chains-api",
@@ -5466,7 +5467,6 @@ dependencies = [
"encoding_rs",
"euclid",
"fallible",
- "font-kit",
"fxhash",
"hashglobe",
"html5ever",
diff --git a/components/canvas/Cargo.toml b/components/canvas/Cargo.toml
index f0374c3df90..782e9fba4f0 100644
--- a/components/canvas/Cargo.toml
+++ b/components/canvas/Cargo.toml
@@ -37,6 +37,7 @@ servo_arc = { path = "../servo_arc" }
servo_config = { path = "../config" }
sparkle = "0.1.25"
style = { path = "../style" }
+style_traits = { path = "../style_traits" }
# NOTE: the sm-angle feature only enables ANGLE on Windows, not other platforms!
surfman = { version = "0.2", features = ["sm-angle", "sm-angle-default"] }
surfman-chains = "0.3"
diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs
index 402c2690257..027c6a3155c 100644
--- a/components/canvas/canvas_data.rs
+++ b/components/canvas/canvas_data.rs
@@ -11,7 +11,7 @@ use euclid::{point2, vec2};
use font_kit::family_name::FamilyName;
use font_kit::font::Font;
use font_kit::metrics::Metrics;
-use font_kit::properties::Properties;
+use font_kit::properties::{Properties, Weight, Stretch, Style};
use font_kit::source::SystemSource;
use gfx::font::FontHandleMethods;
use gfx::font_cache_thread::FontCacheThread;
@@ -25,6 +25,8 @@ use std::marker::PhantomData;
use std::mem;
use std::sync::{Arc, Mutex};
use style::properties::style_structs::Font as FontStyleStruct;
+use style::values::computed::font;
+use style_traits::values::ToCss;
use webrender_api::units::RectExt as RectExt_;
/// The canvas data stores a state machine for the current status of
@@ -1372,6 +1374,24 @@ impl RectExt for Rect<u32> {
}
}
+fn to_font_kit_family(font_family: &font::SingleFontFamily) -> FamilyName {
+ match font_family {
+ font::SingleFontFamily::FamilyName(family_name) => {
+ FamilyName::Title(family_name.to_css_string())
+ },
+ font::SingleFontFamily::Generic(generic) => match generic {
+ font::GenericFontFamily::Serif => FamilyName::Serif,
+ font::GenericFontFamily::SansSerif => FamilyName::SansSerif,
+ font::GenericFontFamily::Monospace => FamilyName::Monospace,
+ font::GenericFontFamily::Fantasy => FamilyName::Fantasy,
+ font::GenericFontFamily::Cursive => FamilyName::Cursive,
+ font::GenericFontFamily::None => {
+ unreachable!("Shouldn't appear in computed values")
+ },
+ },
+ }
+}
+
fn load_system_font_from_style(font_style: Option<&FontStyleStruct>) -> Font {
let mut properties = Properties::new();
let style = match font_style {
@@ -1382,12 +1402,19 @@ fn load_system_font_from_style(font_style: Option<&FontStyleStruct>) -> Font {
.font_family
.families
.iter()
- .map(|family_name| family_name.into())
- .collect::<Vec<FamilyName>>();
+ .map(to_font_kit_family)
+ .collect::<Vec<_>>();
let properties = properties
- .style(style.font_style.into())
- .weight(style.font_weight.into())
- .stretch(style.font_stretch.into());
+ .style(match style.font_style {
+ font::FontStyle::Normal => Style::Normal,
+ font::FontStyle::Italic => Style::Italic,
+ font::FontStyle::Oblique(..) => {
+ // TODO: support oblique angle.
+ Style::Oblique
+ }
+ })
+ .weight(Weight(style.font_weight.0))
+ .stretch(Stretch(style.font_stretch.value()));
let font_handle = match SystemSource::new().select_best_match(&family_names, &properties) {
Ok(handle) => handle,
Err(e) => {
diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml
index 4baf6d381ef..91e26f7c06e 100644
--- a/components/style/Cargo.toml
+++ b/components/style/Cargo.toml
@@ -40,7 +40,6 @@ derive_more = "0.99"
encoding_rs = { version = "0.8", optional = true }
euclid = "0.20"
fallible = { path = "../fallible" }
-font-kit = "0.7"
fxhash = "0.2"
hashglobe = { path = "../hashglobe" }
html5ever = { version = "0.25", optional = true }
diff --git a/components/style/lib.rs b/components/style/lib.rs
index 7ff69ed3c7b..52b77a7507e 100644
--- a/components/style/lib.rs
+++ b/components/style/lib.rs
@@ -40,8 +40,6 @@ extern crate debug_unreachable;
extern crate derive_more;
extern crate euclid;
extern crate fallible;
-#[cfg(feature = "servo")]
-extern crate font_kit;
extern crate fxhash;
#[cfg(feature = "gecko")]
#[macro_use]
diff --git a/components/style/values/computed/font.rs b/components/style/values/computed/font.rs
index 336408fb87a..b8d2cb4c680 100644
--- a/components/style/values/computed/font.rs
+++ b/components/style/values/computed/font.rs
@@ -22,12 +22,6 @@ use crate::values::specified::length::{FontBaseSize, NoCalcLength};
use crate::values::CSSFloat;
use crate::Atom;
use cssparser::{serialize_identifier, CssStringWriter, Parser};
-#[cfg(feature = "servo")]
-use font_kit::family_name::FamilyName as FontKitFamilyName;
-#[cfg(feature = "servo")]
-use font_kit::properties::{
- Stretch as FontKitFontStretch, Style as FontKitFontStyle, Weight as FontKitFontWeight,
-};
#[cfg(feature = "gecko")]
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
use std::fmt::{self, Write};
@@ -75,13 +69,6 @@ impl ToAnimatedValue for FontWeight {
}
}
-#[cfg(feature = "servo")]
-impl From<FontWeight> for FontKitFontWeight {
- fn from(font_weight: FontWeight) -> Self {
- FontKitFontWeight(font_weight.0)
- }
-}
-
#[derive(
Animate,
Clone,
@@ -458,26 +445,6 @@ impl SingleFontFamily {
}
#[cfg(feature = "servo")]
-impl From<&SingleFontFamily> for FontKitFamilyName {
- fn from(font_family: &SingleFontFamily) -> Self {
- match font_family {
- SingleFontFamily::FamilyName(family_name) => {
- FontKitFamilyName::Title(family_name.to_css_string())
- },
- SingleFontFamily::Generic(GenericFontFamily::Serif) => FontKitFamilyName::Serif,
- SingleFontFamily::Generic(GenericFontFamily::SansSerif) => FontKitFamilyName::SansSerif,
- SingleFontFamily::Generic(GenericFontFamily::Monospace) => FontKitFamilyName::Monospace,
- SingleFontFamily::Generic(GenericFontFamily::Fantasy) => FontKitFamilyName::Fantasy,
- SingleFontFamily::Generic(GenericFontFamily::Cursive) => FontKitFamilyName::Cursive,
- SingleFontFamily::Generic(family_name) => {
- warn!("unsupported font family name: {:?}", family_name);
- FontKitFamilyName::SansSerif
- },
- }
- }
-}
-
-#[cfg(feature = "servo")]
#[derive(
Clone,
Debug,
@@ -975,17 +942,6 @@ impl ToCss for FontStyle {
}
}
-#[cfg(feature = "servo")]
-impl From<FontStyle> for FontKitFontStyle {
- fn from(font_style: FontStyle) -> Self {
- match font_style {
- FontStyle::Normal => FontKitFontStyle::Normal,
- FontStyle::Italic => FontKitFontStyle::Italic,
- FontStyle::Oblique(_) => FontKitFontStyle::Oblique,
- }
- }
-}
-
/// A value for the font-stretch property per:
///
/// https://drafts.csswg.org/css-fonts-4/#propdef-font-stretch
@@ -1008,13 +964,6 @@ impl FontStretch {
}
}
-#[cfg(feature = "servo")]
-impl From<FontStretch> for FontKitFontStretch {
- fn from(stretch: FontStretch) -> Self {
- FontKitFontStretch(stretch.value())
- }
-}
-
impl ToAnimatedValue for FontStretch {
type AnimatedValue = Percentage;