mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
Remove the inherited_style getter from StyleBuilder.
The concept of inherited style is about to get a bit more complicated, and this will prevent consumers from doing it wrong. Part 1 of Gecko bug1382806. r=emilio
This commit is contained in:
parent
799988578e
commit
648c0a3d0b
8 changed files with 53 additions and 33 deletions
|
@ -605,8 +605,8 @@ impl AnimationValue {
|
||||||
CSSWideKeyword::Unset |
|
CSSWideKeyword::Unset |
|
||||||
% endif
|
% endif
|
||||||
CSSWideKeyword::Inherit => {
|
CSSWideKeyword::Inherit => {
|
||||||
let inherit_struct = context.inherited_style()
|
let inherit_struct = context.builder
|
||||||
.get_${prop.style_struct.name_lower}();
|
.get_parent_${prop.style_struct.name_lower}();
|
||||||
inherit_struct.clone_${prop.ident}()
|
inherit_struct.clone_${prop.ident}()
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#[inline]
|
#[inline]
|
||||||
fn to_computed_value(&self, context: &Context) -> computed_value::T {
|
fn to_computed_value(&self, context: &Context) -> computed_value::T {
|
||||||
self.0.to_computed_value(context)
|
self.0.to_computed_value(context)
|
||||||
.to_rgba(context.inherited_style().get_color().clone_color())
|
.to_rgba(context.builder.get_parent_color().clone_color())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
|
|
|
@ -548,9 +548,9 @@ ${helpers.single_keyword_system("font-variant-caps",
|
||||||
SpecifiedValue::Normal => computed_value::T::normal(),
|
SpecifiedValue::Normal => computed_value::T::normal(),
|
||||||
SpecifiedValue::Bold => computed_value::T::bold(),
|
SpecifiedValue::Bold => computed_value::T::bold(),
|
||||||
SpecifiedValue::Bolder =>
|
SpecifiedValue::Bolder =>
|
||||||
context.inherited_style().get_font().clone_font_weight().bolder(),
|
context.builder.get_parent_font().clone_font_weight().bolder(),
|
||||||
SpecifiedValue::Lighter =>
|
SpecifiedValue::Lighter =>
|
||||||
context.inherited_style().get_font().clone_font_weight().lighter(),
|
context.builder.get_parent_font().clone_font_weight().lighter(),
|
||||||
SpecifiedValue::System(_) => {
|
SpecifiedValue::System(_) => {
|
||||||
<%self:nongecko_unreachable>
|
<%self:nongecko_unreachable>
|
||||||
context.cached_system_font.as_ref().unwrap().font_weight.clone()
|
context.cached_system_font.as_ref().unwrap().font_weight.clone()
|
||||||
|
@ -940,7 +940,7 @@ ${helpers.single_keyword_system("font-variant-caps",
|
||||||
// recomputed from the base size for the keyword and the relative size.
|
// recomputed from the base size for the keyword and the relative size.
|
||||||
//
|
//
|
||||||
// See bug 1355707
|
// See bug 1355707
|
||||||
if let Some((kw, fraction)) = context.builder.inherited_style().font_computation_data.font_size_keyword {
|
if let Some((kw, fraction)) = context.builder.inherited_font_computation_data().font_size_keyword {
|
||||||
context.builder.font_size_keyword = Some((kw, fraction * ratio));
|
context.builder.font_size_keyword = Some((kw, fraction * ratio));
|
||||||
} else {
|
} else {
|
||||||
context.builder.font_size_keyword = None;
|
context.builder.font_size_keyword = None;
|
||||||
|
@ -956,9 +956,9 @@ ${helpers.single_keyword_system("font-variant-caps",
|
||||||
// if the language or generic changed, we need to recalculate
|
// if the language or generic changed, we need to recalculate
|
||||||
// the font size from the stored font-size origin information.
|
// the font size from the stored font-size origin information.
|
||||||
if context.builder.get_font().gecko().mLanguage.raw::<nsIAtom>() !=
|
if context.builder.get_font().gecko().mLanguage.raw::<nsIAtom>() !=
|
||||||
context.builder.inherited_style().get_font().gecko().mLanguage.raw::<nsIAtom>() ||
|
context.builder.get_parent_font().gecko().mLanguage.raw::<nsIAtom>() ||
|
||||||
context.builder.get_font().gecko().mGenericID !=
|
context.builder.get_font().gecko().mGenericID !=
|
||||||
context.builder.inherited_style().get_font().gecko().mGenericID {
|
context.builder.get_parent_font().gecko().mGenericID {
|
||||||
if let Some((kw, ratio)) = context.builder.font_size_keyword {
|
if let Some((kw, ratio)) = context.builder.font_size_keyword {
|
||||||
computed = kw.to_computed_value(context).scale_by(ratio);
|
computed = kw.to_computed_value(context).scale_by(ratio);
|
||||||
}
|
}
|
||||||
|
@ -968,8 +968,7 @@ ${helpers.single_keyword_system("font-variant-caps",
|
||||||
let device = context.builder.device;
|
let device = context.builder.device;
|
||||||
let mut font = context.builder.take_font();
|
let mut font = context.builder.take_font();
|
||||||
let parent_unconstrained = {
|
let parent_unconstrained = {
|
||||||
let parent_style = context.builder.inherited_style();
|
let parent_font = context.builder.get_parent_font();
|
||||||
let parent_font = parent_style.get_font();
|
|
||||||
font.apply_font_size(computed, parent_font, device)
|
font.apply_font_size(computed, parent_font, device)
|
||||||
};
|
};
|
||||||
context.builder.put_font(font);
|
context.builder.put_font(font);
|
||||||
|
@ -997,9 +996,8 @@ ${helpers.single_keyword_system("font-variant-caps",
|
||||||
let device = context.builder.device;
|
let device = context.builder.device;
|
||||||
let mut font = context.builder.take_font();
|
let mut font = context.builder.take_font();
|
||||||
let used_kw = {
|
let used_kw = {
|
||||||
let parent_style = context.builder.inherited_style();
|
let parent_font = context.builder.get_parent_font();
|
||||||
let parent_font = parent_style.get_font();
|
parent_kw = context.builder.inherited_font_computation_data().font_size_keyword;
|
||||||
parent_kw = parent_style.font_computation_data.font_size_keyword;
|
|
||||||
|
|
||||||
font.inherit_font_size_from(parent_font, kw_inherited_size, device)
|
font.inherit_font_size_from(parent_font, kw_inherited_size, device)
|
||||||
};
|
};
|
||||||
|
@ -2279,8 +2277,8 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control-
|
||||||
|
|
||||||
let int = match *self {
|
let int = match *self {
|
||||||
SpecifiedValue::Auto => {
|
SpecifiedValue::Auto => {
|
||||||
let parent = cx.inherited_style().get_font().clone__moz_script_level() as i32;
|
let parent = cx.builder.get_parent_font().clone__moz_script_level() as i32;
|
||||||
let display = cx.inherited_style().get_font().clone__moz_math_display();
|
let display = cx.builder.get_parent_font().clone__moz_math_display();
|
||||||
if display == DisplayValue::inline {
|
if display == DisplayValue::inline {
|
||||||
parent + 1
|
parent + 1
|
||||||
} else {
|
} else {
|
||||||
|
@ -2288,7 +2286,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control-
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SpecifiedValue::Relative(rel) => {
|
SpecifiedValue::Relative(rel) => {
|
||||||
let parent = cx.inherited_style().get_font().clone__moz_script_level();
|
let parent = cx.builder.get_parent_font().clone__moz_script_level();
|
||||||
parent as i32 + rel
|
parent as i32 + rel
|
||||||
}
|
}
|
||||||
SpecifiedValue::Absolute(abs) => abs,
|
SpecifiedValue::Absolute(abs) => abs,
|
||||||
|
|
|
@ -230,8 +230,8 @@ ${helpers.single_keyword("text-align-last",
|
||||||
if context.is_root_element {
|
if context.is_root_element {
|
||||||
return get_initial_value();
|
return get_initial_value();
|
||||||
}
|
}
|
||||||
let parent = context.inherited_style().get_inheritedtext().clone_text_align();
|
let parent = context.builder.get_parent_inheritedtext().clone_text_align();
|
||||||
let ltr = context.inherited_style().writing_mode.is_bidi_ltr();
|
let ltr = context.builder.inherited_writing_mode().is_bidi_ltr();
|
||||||
match (parent, ltr) {
|
match (parent, ltr) {
|
||||||
(computed_value::T::start, true) => computed_value::T::left,
|
(computed_value::T::start, true) => computed_value::T::left,
|
||||||
(computed_value::T::start, false) => computed_value::T::right,
|
(computed_value::T::start, false) => computed_value::T::right,
|
||||||
|
@ -241,7 +241,7 @@ ${helpers.single_keyword("text-align-last",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SpecifiedValue::MozCenterOrInherit => {
|
SpecifiedValue::MozCenterOrInherit => {
|
||||||
let parent = context.inherited_style().get_inheritedtext().clone_text_align();
|
let parent = context.builder.get_parent_inheritedtext().clone_text_align();
|
||||||
if parent == computed_value::T::start {
|
if parent == computed_value::T::start {
|
||||||
computed_value::T::center
|
computed_value::T::center
|
||||||
} else {
|
} else {
|
||||||
|
@ -340,7 +340,7 @@ ${helpers.predefined_type("word-spacing",
|
||||||
overline: None,
|
overline: None,
|
||||||
line_through: None,
|
line_through: None,
|
||||||
},
|
},
|
||||||
_ => context.inherited_style().get_inheritedtext().clone__servo_text_decorations_in_effect()
|
_ => context.builder.get_parent_inheritedtext().clone__servo_text_decorations_in_effect()
|
||||||
};
|
};
|
||||||
|
|
||||||
result.underline = maybe(context.style().get_text().has_underline()
|
result.underline = maybe(context.style().get_text().has_underline()
|
||||||
|
|
|
@ -2655,11 +2655,6 @@ impl<'a> StyleBuilder<'a> {
|
||||||
self.visited_style.is_some()
|
self.visited_style.is_some()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the style we're inheriting from.
|
|
||||||
pub fn inherited_style(&self) -> &'a ComputedValues {
|
|
||||||
self.inherited_style
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the style we're getting reset properties from.
|
/// Returns the style we're getting reset properties from.
|
||||||
pub fn default_style(&self) -> &'a ComputedValues {
|
pub fn default_style(&self) -> &'a ComputedValues {
|
||||||
self.reset_style
|
self.reset_style
|
||||||
|
@ -2752,6 +2747,38 @@ impl<'a> StyleBuilder<'a> {
|
||||||
fn custom_properties(&self) -> Option<Arc<::custom_properties::CustomPropertiesMap>> {
|
fn custom_properties(&self) -> Option<Arc<::custom_properties::CustomPropertiesMap>> {
|
||||||
self.custom_properties.clone()
|
self.custom_properties.clone()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Access to various information about our inherited styles. We don't
|
||||||
|
/// expose an inherited ComputedValues directly, because in the
|
||||||
|
/// ::first-line case some of the inherited information needs to come from
|
||||||
|
/// one ComputedValues instance and some from a different one.
|
||||||
|
|
||||||
|
/// Inherited font bits.
|
||||||
|
pub fn inherited_font_computation_data(&self) -> &FontComputationData {
|
||||||
|
&self.inherited_style.font_computation_data
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Inherited writing-mode.
|
||||||
|
pub fn inherited_writing_mode(&self) -> &WritingMode {
|
||||||
|
&self.inherited_style.writing_mode
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Inherited style flags.
|
||||||
|
pub fn inherited_flags(&self) -> &ComputedValueFlags {
|
||||||
|
&self.inherited_style.flags
|
||||||
|
}
|
||||||
|
|
||||||
|
/// And access to inherited style structs.
|
||||||
|
% for style_struct in data.active_style_structs():
|
||||||
|
/// Gets our inherited `${style_struct.name}`. We don't name these
|
||||||
|
/// accessors `inherited_${style_struct.name_lower}` because we already
|
||||||
|
/// have things like "box" vs "inherited_box" as struct names. Do the
|
||||||
|
/// next-best thing and call them `parent_${style_struct.name_lower}`
|
||||||
|
/// instead.
|
||||||
|
pub fn get_parent_${style_struct.name_lower}(&self) -> &style_structs::${style_struct.name} {
|
||||||
|
self.inherited_style.get_${style_struct.name_lower}()
|
||||||
|
}
|
||||||
|
% endfor
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "servo")]
|
#[cfg(feature = "servo")]
|
||||||
|
|
|
@ -446,7 +446,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
|
||||||
let relevant_link_visited = if flags.contains(IS_LINK) {
|
let relevant_link_visited = if flags.contains(IS_LINK) {
|
||||||
flags.contains(IS_VISITED_LINK)
|
flags.contains(IS_VISITED_LINK)
|
||||||
} else {
|
} else {
|
||||||
self.style.inherited_style().flags.contains(IS_RELEVANT_LINK_VISITED)
|
self.style.inherited_flags().contains(IS_RELEVANT_LINK_VISITED)
|
||||||
};
|
};
|
||||||
|
|
||||||
if relevant_link_visited {
|
if relevant_link_visited {
|
||||||
|
|
|
@ -119,11 +119,6 @@ impl<'a> Context<'a> {
|
||||||
self.builder.device.au_viewport_size()
|
self.builder.device.au_viewport_size()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The style we're inheriting from.
|
|
||||||
pub fn inherited_style(&self) -> &ComputedValues {
|
|
||||||
self.builder.inherited_style()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The default computed style we're getting our reset style from.
|
/// The default computed style we're getting our reset style from.
|
||||||
pub fn default_style(&self) -> &ComputedValues {
|
pub fn default_style(&self) -> &ComputedValues {
|
||||||
self.builder.default_style()
|
self.builder.default_style()
|
||||||
|
@ -411,7 +406,7 @@ impl ToComputedValue for specified::JustifyItems {
|
||||||
// If the inherited value of `justify-items` includes the `legacy` keyword, `auto` computes
|
// If the inherited value of `justify-items` includes the `legacy` keyword, `auto` computes
|
||||||
// to the inherited value.
|
// to the inherited value.
|
||||||
if self.0 == align::ALIGN_AUTO {
|
if self.0 == align::ALIGN_AUTO {
|
||||||
let inherited = context.inherited_style().get_position().clone_justify_items();
|
let inherited = context.builder.get_parent_position().clone_justify_items();
|
||||||
if inherited.0.contains(align::ALIGN_LEGACY) {
|
if inherited.0.contains(align::ALIGN_LEGACY) {
|
||||||
return inherited
|
return inherited
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,7 +93,7 @@ impl FontBaseSize {
|
||||||
match *self {
|
match *self {
|
||||||
FontBaseSize::Custom(size) => size,
|
FontBaseSize::Custom(size) => size,
|
||||||
FontBaseSize::CurrentStyle => context.style().get_font().clone_font_size(),
|
FontBaseSize::CurrentStyle => context.style().get_font().clone_font_size(),
|
||||||
FontBaseSize::InheritedStyle => context.inherited_style().get_font().clone_font_size(),
|
FontBaseSize::InheritedStyle => context.style().get_parent_font().clone_font_size(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue