aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/style/animation.rs1
-rw-r--r--components/style/matching.rs8
-rw-r--r--components/style/properties/properties.mako.rs34
-rw-r--r--components/style/style_adjuster.rs10
-rw-r--r--ports/geckolib/glue.rs2
5 files changed, 26 insertions, 29 deletions
diff --git a/components/style/animation.rs b/components/style/animation.rs
index f8fde047bf1..50735801c2a 100644
--- a/components/style/animation.rs
+++ b/components/style/animation.rs
@@ -502,7 +502,6 @@ fn compute_style_for_animation_step(context: &SharedStyleContext,
// as existing browsers don't appear to animate visited styles.
let computed =
properties::apply_declarations(context.stylist.device(),
- /* is_root = */ false,
iter,
previous_style,
previous_style,
diff --git a/components/style/matching.rs b/components/style/matching.rs
index f65f183e64b..44b02daba48 100644
--- a/components/style/matching.rs
+++ b/components/style/matching.rs
@@ -17,8 +17,8 @@ use invalidation::element::restyle_hints::{RESTYLE_CSS_ANIMATIONS, RESTYLE_CSS_T
use invalidation::element::restyle_hints::{RESTYLE_SMIL, RESTYLE_STYLE_ATTRIBUTE};
use invalidation::element::restyle_hints::RestyleHint;
use log::LogLevel::Trace;
-use properties::{ALLOW_SET_ROOT_FONT_SIZE, PROHIBIT_DISPLAY_CONTENTS, SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP};
use properties::{AnimationRules, CascadeFlags, ComputedValues};
+use properties::{IS_ROOT_ELEMENT, PROHIBIT_DISPLAY_CONTENTS, SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP};
use properties::{VISITED_DEPENDENT_ONLY, cascade};
use properties::longhands::display::computed_value as display;
use rule_tree::{CascadeLevel, StrongRuleNode};
@@ -33,7 +33,7 @@ use stylist::RuleInclusion;
///
/// Controls where we inherit styles from, and whether display:contents is
/// prohibited.
-#[derive(PartialEq, Copy, Clone)]
+#[derive(PartialEq, Copy, Clone, Debug)]
enum CascadeTarget {
/// Inherit from the parent element, as normal CSS dictates, _or_ from the
/// closest non-Native Anonymous element in case this is Native Anonymous
@@ -273,8 +273,8 @@ trait PrivateMatchMethods: TElement {
}
if self.is_native_anonymous() || cascade_target == CascadeTarget::EagerPseudo {
cascade_flags.insert(PROHIBIT_DISPLAY_CONTENTS);
- } else {
- cascade_flags.insert(ALLOW_SET_ROOT_FONT_SIZE);
+ } else if self.is_root() {
+ cascade_flags.insert(IS_ROOT_ELEMENT);
}
// Grab the inherited values.
diff --git a/components/style/properties/properties.mako.rs b/components/style/properties/properties.mako.rs
index 9fcb87a03b1..1df4615722a 100644
--- a/components/style/properties/properties.mako.rs
+++ b/components/style/properties/properties.mako.rs
@@ -2472,20 +2472,24 @@ bitflags! {
/// Whether to inherit all styles from the parent. If this flag is not
/// present, non-inherited styles are reset to their initial values.
const INHERIT_ALL = 0x01,
+
/// Whether to skip any root element and flex/grid item display style
/// fixup.
const SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP = 0x02,
+
/// Whether to only cascade properties that are visited dependent.
const VISITED_DEPENDENT_ONLY = 0x04,
- /// Should we modify the device's root font size
- /// when computing the root?
+
+ /// Whether the given element we're styling is the document element,
+ /// that is, matches :root.
///
- /// Not set for native anonymous content since some NAC
- /// form their own root, but share the device.
+ /// Not set for native anonymous content since some NAC form their own
+ /// root, but share the device.
///
- /// ::backdrop and all NAC will resolve rem units against
- /// the toplevel root element now.
- const ALLOW_SET_ROOT_FONT_SIZE = 0x08,
+ /// This affects some style adjustments, like blockification, and means
+ /// that it may affect global state, like the Device's root font-size.
+ const IS_ROOT_ELEMENT = 0x08,
+
/// Whether to convert display:contents into display:inline. This
/// is used by Gecko to prevent display:contents on generated
/// content.
@@ -2520,15 +2524,13 @@ pub fn cascade(device: &Device,
quirks_mode: QuirksMode)
-> ComputedValues {
debug_assert_eq!(parent_style.is_some(), layout_parent_style.is_some());
- let (is_root_element, inherited_style, layout_parent_style) = match parent_style {
+ let (inherited_style, layout_parent_style) = match parent_style {
Some(parent_style) => {
- (false,
- parent_style,
+ (parent_style,
layout_parent_style.unwrap())
},
None => {
- (true,
- device.default_computed_values(),
+ (device.default_computed_values(),
device.default_computed_values())
}
};
@@ -2558,7 +2560,6 @@ pub fn cascade(device: &Device,
})
};
apply_declarations(device,
- is_root_element,
iter_declarations,
inherited_style,
layout_parent_style,
@@ -2574,7 +2575,6 @@ pub fn cascade(device: &Device,
/// first.
#[allow(unused_mut)] // conditionally compiled code for "position"
pub fn apply_declarations<'a, F, I>(device: &Device,
- is_root_element: bool,
iter_declarations: F,
inherited_style: &ComputedValues,
layout_parent_style: &ComputedValues,
@@ -2629,7 +2629,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
};
let mut context = computed::Context {
- is_root_element: is_root_element,
+ is_root_element: flags.contains(IS_ROOT_ELEMENT),
device: device,
inherited_style: inherited_style,
layout_parent_style: layout_parent_style,
@@ -2853,7 +2853,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
% endif
}
- if is_root_element && flags.contains(ALLOW_SET_ROOT_FONT_SIZE) {
+ if context.is_root_element {
let s = context.style.get_font().clone_font_size();
context.device.set_root_font_size(s);
}
@@ -2863,7 +2863,7 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
let mut style = context.style;
{
- StyleAdjuster::new(&mut style, is_root_element)
+ StyleAdjuster::new(&mut style)
.adjust(context.layout_parent_style, flags);
}
diff --git a/components/style/style_adjuster.rs b/components/style/style_adjuster.rs
index 4c4a4518748..6d0d84c34f4 100644
--- a/components/style/style_adjuster.rs
+++ b/components/style/style_adjuster.rs
@@ -7,7 +7,7 @@
use app_units::Au;
use properties::{self, CascadeFlags, ComputedValues};
-use properties::{SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP, StyleBuilder};
+use properties::{IS_ROOT_ELEMENT, SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP, StyleBuilder};
use properties::longhands::display::computed_value::T as display;
use properties::longhands::float::computed_value::T as float;
use properties::longhands::overflow_x::computed_value::T as overflow;
@@ -17,15 +17,13 @@ use properties::longhands::position::computed_value::T as position;
/// An unsized struct that implements all the adjustment methods.
pub struct StyleAdjuster<'a, 'b: 'a> {
style: &'a mut StyleBuilder<'b>,
- is_root_element: bool,
}
impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
/// Trivially constructs a new StyleAdjuster.
- pub fn new(style: &'a mut StyleBuilder<'b>, is_root_element: bool) -> Self {
+ pub fn new(style: &'a mut StyleBuilder<'b>) -> Self {
StyleAdjuster {
style: style,
- is_root_element: is_root_element,
}
}
@@ -66,7 +64,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
}
if !flags.contains(SKIP_ROOT_AND_ITEM_BASED_DISPLAY_FIXUP) {
- blockify_if!(self.is_root_element);
+ blockify_if!(flags.contains(IS_ROOT_ELEMENT));
blockify_if!(layout_parent_style.get_box().clone_display().is_item_container());
}
@@ -81,7 +79,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
let display = self.style.get_box().clone_display();
let blockified_display =
- display.equivalent_block_display(self.is_root_element);
+ display.equivalent_block_display(flags.contains(IS_ROOT_ELEMENT));
if display != blockified_display {
self.style.mutate_box().set_adjusted_display(blockified_display,
is_item_or_root);
diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs
index 2ae1ea05f92..dbc1624527b 100644
--- a/ports/geckolib/glue.rs
+++ b/ports/geckolib/glue.rs
@@ -1535,7 +1535,7 @@ pub extern "C" fn Servo_ComputedValues_Inherit(
StyleBuilder::for_inheritance(reference,
&data.default_computed_values());
if for_text {
- StyleAdjuster::new(&mut style, /* is_root = */ false)
+ StyleAdjuster::new(&mut style)
.adjust_for_text();
}