diff options
author | Glenn Watson <gw@intuitionlibrary.com> | 2015-06-02 09:43:38 +1000 |
---|---|---|
committer | Glenn Watson <gw@intuitionlibrary.com> | 2015-06-04 13:30:52 +1000 |
commit | 958adc0f2b03159b4af8aa0b53a3d148014dba12 (patch) | |
tree | dc0c68002b1362fe84f61b24b7e137ad26d9c112 | |
parent | d08995e1a94fa093b7fc1e5d918d9dca79f260d6 (diff) | |
download | servo-958adc0f2b03159b4af8aa0b53a3d148014dba12.tar.gz servo-958adc0f2b03159b4af8aa0b53a3d148014dba12.zip |
Only count outline width in overflow calculation if outline style is active.
This fixes layers being created with a 3x3 border that's not needed.
This exposes https://github.com/servo/servo/issues/6250, so update the affected reftest to use ahem font until it is fixed.
-rw-r--r-- | components/style/properties.mako.rs | 54 | ||||
-rw-r--r-- | components/style/values.rs | 3 | ||||
-rw-r--r-- | tests/ref/inline_block_stacking_context_a.html | 1 | ||||
-rw-r--r-- | tests/ref/inline_block_stacking_context_ref.html | 1 |
4 files changed, 48 insertions, 11 deletions
diff --git a/components/style/properties.mako.rs b/components/style/properties.mako.rs index 69d14fad990..b14167d5a1a 100644 --- a/components/style/properties.mako.rs +++ b/components/style/properties.mako.rs @@ -294,13 +294,38 @@ pub mod longhands { </%self:longhand> <%self:longhand name="outline-width"> - pub use super::border_top_width::get_initial_value; - pub type SpecifiedValue = specified::Length; - pub mod computed_value { - pub use util::geometry::Au as T; + use values::computed::{ToComputedValue, Context}; + use util::geometry::Au; + use cssparser::ToCss; + use std::fmt; + + impl ToCss for SpecifiedValue { + fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { + self.0.to_css(dest) + } } + pub fn parse(_context: &ParserContext, input: &mut Parser) -> Result<SpecifiedValue, ()> { - specified::parse_border_width(input) + specified::parse_border_width(input).map(SpecifiedValue) + } + #[derive(Clone, PartialEq)] + pub struct SpecifiedValue(pub specified::Length); + pub mod computed_value { + use util::geometry::Au; + pub type T = Au; + } + pub use super::border_top_width::get_initial_value; + impl ToComputedValue for SpecifiedValue { + type ComputedValue = computed_value::T; + + #[inline] + fn to_computed_value(&self, context: &Context) -> computed_value::T { + if !context.outline_style_present { + Au(0) + } else { + self.0.to_computed_value(context) + } + } } </%self:longhand> @@ -4475,6 +4500,7 @@ pub mod shorthands { <%self:shorthand name="outline" sub_properties="outline-color outline-style outline-width"> use values::specified; + use properties::longhands::outline_width; let _unused = context; let mut color = None; @@ -4497,7 +4523,7 @@ pub mod shorthands { } } if width.is_none() { - if let Ok(value) = input.try(specified::parse_border_width) { + if let Ok(value) = input.try(|input| outline_width::parse(context, input)) { width = Some(value); any = true; continue @@ -5499,6 +5525,7 @@ pub fn cascade(viewport_size: Size2D<Au>, border_right_present: false, border_bottom_present: false, border_left_present: false, + outline_style_present: false, } }; @@ -5569,13 +5596,20 @@ pub fn cascade(viewport_size: Size2D<Au>, PropertyDeclaration::TextDecoration(ref value) => { context.text_decoration = get_specified!(get_text, text_decoration, value); } + PropertyDeclaration::OutlineStyle(ref value) => { + context.outline_style_present = + match get_specified!(get_outline, outline_style, value) { + BorderStyle::none => false, + _ => true, + }; + } % for side in ["top", "right", "bottom", "left"]: PropertyDeclaration::Border${side.capitalize()}Style(ref value) => { context.border_${side}_present = - match get_specified!(get_border, border_${side}_style, value) { - BorderStyle::none | BorderStyle::hidden => false, - _ => true, - }; + match get_specified!(get_border, border_${side}_style, value) { + BorderStyle::none | BorderStyle::hidden => false, + _ => true, + }; } % endfor _ => {} diff --git a/components/style/values.rs b/components/style/values.rs index 5c2c29f7aef..2b806a51d1d 100644 --- a/components/style/values.rs +++ b/components/style/values.rs @@ -920,7 +920,8 @@ pub mod computed { pub border_bottom_present: bool, pub border_left_present: bool, pub is_root_element: bool, - pub viewport_size: Size2D<Au> + pub viewport_size: Size2D<Au>, + pub outline_style_present: bool, // TODO, as needed: viewport size, etc. } diff --git a/tests/ref/inline_block_stacking_context_a.html b/tests/ref/inline_block_stacking_context_a.html index 7580f853735..7f203821786 100644 --- a/tests/ref/inline_block_stacking_context_a.html +++ b/tests/ref/inline_block_stacking_context_a.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> + <link rel="stylesheet" type="text/css" href="css/ahem.css"> <style type="text/css"> * { margin: 0; diff --git a/tests/ref/inline_block_stacking_context_ref.html b/tests/ref/inline_block_stacking_context_ref.html index 6f8c959212d..5387a3488bc 100644 --- a/tests/ref/inline_block_stacking_context_ref.html +++ b/tests/ref/inline_block_stacking_context_ref.html @@ -1,6 +1,7 @@ <!DOCTYPE html> <html> <head> + <link rel="stylesheet" type="text/css" href="css/ahem.css"> <style type="text/css"> * { margin: 0; |