diff options
author | Boris Chiou <boris.chiou@gmail.com> | 2019-09-10 21:51:54 +0000 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2019-09-12 22:34:16 +0200 |
commit | eb8195dfa4c700a62d9dec62282841e06c0edb02 (patch) | |
tree | e1fead1ca983c542cfae1ed44643008f27091910 | |
parent | 3c2e4d1e98dca2e7be4bf52252326911d11b5d81 (diff) | |
download | servo-eb8195dfa4c700a62d9dec62282841e06c0edb02.tar.gz servo-eb8195dfa4c700a62d9dec62282841e06c0edb02.zip |
style: Tweak the serialization of text-decoration.
We are trying to not serialize `text-decoration-line: none` if there are other
non-default values for the longhands.
Differential Revision: https://phabricator.services.mozilla.com/D44908
-rw-r--r-- | components/style/properties/shorthands/text.mako.rs | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/components/style/properties/shorthands/text.mako.rs b/components/style/properties/shorthands/text.mako.rs index 33b4a074892..77b15d9a722 100644 --- a/components/style/properties/shorthands/text.mako.rs +++ b/components/style/properties/shorthands/text.mako.rs @@ -74,25 +74,49 @@ impl<'a> ToCss for LonghandsToSerialize<'a> { fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result where W: fmt::Write { - self.text_decoration_line.to_css(dest)?; + use crate::values::specified::TextDecorationLine; + let (is_solid_style, is_current_color, is_auto_thickness) = + ( % if engine == "gecko": - if *self.text_decoration_style != text_decoration_style::SpecifiedValue::Solid { + *self.text_decoration_style == text_decoration_style::SpecifiedValue::Solid, + *self.text_decoration_color == specified::Color::CurrentColor, + self.text_decoration_thickness.map_or(true, |t| t.is_auto()) + % else: + true, true, true + % endif + ); + + let mut has_value = false; + let is_none = *self.text_decoration_line == TextDecorationLine::none(); + if (is_solid_style && is_current_color && is_auto_thickness) || !is_none { + self.text_decoration_line.to_css(dest)?; + has_value = true; + } + + % if engine == "gecko": + if !is_solid_style { + if has_value { dest.write_str(" ")?; - self.text_decoration_style.to_css(dest)?; } + self.text_decoration_style.to_css(dest)?; + has_value = true; + } - if *self.text_decoration_color != specified::Color::CurrentColor { + if !is_current_color { + if has_value { dest.write_str(" ")?; - self.text_decoration_color.to_css(dest)?; } + self.text_decoration_color.to_css(dest)?; + has_value = true; + } - if let Some(text_decoration_thickness) = self.text_decoration_thickness { - if !text_decoration_thickness.is_auto() { - dest.write_str(" ")?; - self.text_decoration_thickness.to_css(dest)?; - } + if !is_auto_thickness { + if has_value { + dest.write_str(" ")?; } + self.text_decoration_thickness.to_css(dest)?; + } % endif Ok(()) |