diff options
-rw-r--r-- | src/components/style/properties.rs.mako | 50 | ||||
-rw-r--r-- | src/test/ref/basic.list | 1 | ||||
-rw-r--r-- | src/test/ref/text_decoration_cached.html | 14 | ||||
-rw-r--r-- | src/test/ref/text_decoration_cached_ref.html | 14 |
4 files changed, 56 insertions, 23 deletions
diff --git a/src/components/style/properties.rs.mako b/src/components/style/properties.rs.mako index fdd98a5ef08..bbd4d53a887 100644 --- a/src/components/style/properties.rs.mako +++ b/src/components/style/properties.rs.mako @@ -1653,10 +1653,10 @@ fn cascade_with_cached_declarations(applicable_declarations: &[MatchedProperty], for declaration in sub_list.declarations.iter() { match *declaration { % for style_struct in STYLE_STRUCTS: - % if style_struct.inherited: - % for property in style_struct.longhands: - % if property.derived_from is None: - ${property.camel_case}Declaration(ref declared_value) => { + % for property in style_struct.longhands: + % if property.derived_from is None: + ${property.camel_case}Declaration(ref declared_value) => { + % if style_struct.inherited: if seen.get_${property.ident}() { continue } @@ -1681,28 +1681,32 @@ fn cascade_with_cached_declarations(applicable_declarations: &[MatchedProperty], }; style_${style_struct.ident}.make_unique_experimental() .${property.ident} = computed_value; + % endif - % if property.name in DERIVED_LONGHANDS: - % for derived in DERIVED_LONGHANDS[property.name]: - style_${derived.style_struct.ident} - .make_unique_experimental() - .${derived.ident} = - longhands::${derived.ident} - ::derive_from_${property.ident}( - computed_value, - context); - % endfor + % if property.name in DERIVED_LONGHANDS: + % if not style_struct.inherited: + // Use the cached value. + let computed_value = style_${style_struct.ident} + .${property.ident}.clone(); % endif - } - % else: - ${property.camel_case}Declaration(_) => { - // Do not allow stylesheets to set derived properties. - } - % endif - % endfor - % endif + % for derived in DERIVED_LONGHANDS[property.name]: + style_${derived.style_struct.ident} + .make_unique_experimental() + .${derived.ident} = + longhands::${derived.ident} + ::derive_from_${property.ident}( + computed_value, + context); + % endfor + % endif + } + % else: + ${property.camel_case}Declaration(_) => { + // Do not allow stylesheets to set derived properties. + } + % endif + % endfor % endfor - _ => {} } } } diff --git a/src/test/ref/basic.list b/src/test/ref/basic.list index 408ef854596..fe430010bd1 100644 --- a/src/test/ref/basic.list +++ b/src/test/ref/basic.list @@ -18,6 +18,7 @@ == border_style_none_a.html border_style_none_b.html == borders_a.html borders_b.html == acid1_a.html acid1_b.html +== text_decoration_cached.html text_decoration_cached_ref.html # text_decoration_propagation_a.html text_decoration_propagation_b.html # inline_text_align_a.html inline_text_align_b.html == font_size_em.html font_size_em_ref.html diff --git a/src/test/ref/text_decoration_cached.html b/src/test/ref/text_decoration_cached.html new file mode 100644 index 00000000000..effd1359fe0 --- /dev/null +++ b/src/test/ref/text_decoration_cached.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <title>text-decoration cache test</title> + <style> + span { text-decoration: underline; } + </style> + </head> +<body> + <u>test</u> + <u>test</u> +<body> +</html> diff --git a/src/test/ref/text_decoration_cached_ref.html b/src/test/ref/text_decoration_cached_ref.html new file mode 100644 index 00000000000..04a222264c3 --- /dev/null +++ b/src/test/ref/text_decoration_cached_ref.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <title>text-decoration cache reference</title> + <style> + span { text-decoration: underline; } + </style> + </head> +<body> + <u>test</u> + <span>test</span> +<body> +</html> |