Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug 1349885: stylo: Simplify computation of float and position. #16094

Merged
merged 1 commit into from Mar 23, 2017
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Bug 1349885: stylo: Simplify computation of float and position. r=hey…

…cam,xidorn

MozReview-Commit-ID: Hh6391DXV5o
Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
  • Loading branch information
emilio committed Mar 23, 2017
commit c8e05420594a6b02137ca070cee410ceb8bb05a2
@@ -103,48 +103,13 @@ ${helpers.single_keyword("-moz-top-layer", "none top",
products="gecko", animatable=False, internal=True,
spec="Internal (not web-exposed)")}

<%helpers:single_keyword_computed name="position"
values="static absolute relative fixed"
need_clone="True"
extra_gecko_values="sticky"
animatable="False"
creates_stacking_context="True"
abspos_cb="True"
spec="https://drafts.csswg.org/css-position/#position-property">
impl SpecifiedValue {
pub fn is_absolutely_positioned_style(&self) -> bool {
matches!(*self, SpecifiedValue::absolute | SpecifiedValue::fixed)
}
}

use values::HasViewportPercentage;
no_viewport_percentage!(SpecifiedValue);
impl ToComputedValue for SpecifiedValue {
type ComputedValue = computed_value::T;

#[inline]
fn to_computed_value(&self, _context: &Context) -> computed_value::T {
% if product == "gecko":
// https://fullscreen.spec.whatwg.org/#new-stacking-layer
// Any position value other than 'absolute' and 'fixed' are
// computed to 'absolute' if the element is in a top layer.
if !self.is_absolutely_positioned_style() &&
matches!(_context.style().get_box().clone__moz_top_layer(),
longhands::_moz_top_layer::SpecifiedValue::top) {
SpecifiedValue::absolute
} else {
*self
}
% else:
*self
% endif
}
#[inline]
fn from_computed_value(computed: &computed_value::T) -> SpecifiedValue {
*computed
}
}
</%helpers:single_keyword_computed>
${helpers.single_keyword("position", "static absolute relative fixed",
need_clone="True",
extra_gecko_values="sticky",
animatable="False",
creates_stacking_context="True",
abspos_cb="True",
spec="https://drafts.csswg.org/css-position/#position-property")}

<%helpers:single_keyword_computed name="float"
values="none left right"
@@ -164,20 +129,16 @@ ${helpers.single_keyword("-moz-top-layer", "none top",

#[inline]
fn to_computed_value(&self, context: &Context) -> computed_value::T {
if context.style().get_box().clone_position().is_absolutely_positioned_style() {
computed_value::T::none
} else {
let ltr = context.style().writing_mode.is_bidi_ltr();
// https://drafts.csswg.org/css-logical-props/#float-clear
match *self {
SpecifiedValue::inline_start if ltr => computed_value::T::left,
SpecifiedValue::inline_start => computed_value::T::right,
SpecifiedValue::inline_end if ltr => computed_value::T::right,
SpecifiedValue::inline_end => computed_value::T::left,
% for value in "none left right".split():
SpecifiedValue::${value} => computed_value::T::${value},
% endfor
}
let ltr = context.style().writing_mode.is_bidi_ltr();
// https://drafts.csswg.org/css-logical-props/#float-clear
match *self {
SpecifiedValue::inline_start if ltr => computed_value::T::left,
SpecifiedValue::inline_start => computed_value::T::right,
SpecifiedValue::inline_end if ltr => computed_value::T::right,
SpecifiedValue::inline_end => computed_value::T::left,
% for value in "none left right".split():
SpecifiedValue::${value} => computed_value::T::${value},
% endfor
}
}
#[inline]
@@ -1950,6 +1950,7 @@ pub fn cascade(device: &Device,

/// NOTE: This function expects the declaration with more priority to appear
/// 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,
@@ -2050,8 +2051,6 @@ pub fn apply_declarations<'a, F, I>(device: &Device,
LonghandId::FontSize |
LonghandId::FontFamily |
LonghandId::Color |
LonghandId::Position |
LonghandId::Float |
LonghandId::TextDecorationLine |
LonghandId::WritingMode |
LonghandId::Direction
@@ -2094,9 +2093,24 @@ pub fn apply_declarations<'a, F, I>(device: &Device,

let mut style = context.style;

let positioned = matches!(style.get_box().clone_position(),
let mut positioned = matches!(style.get_box().clone_position(),
longhands::position::SpecifiedValue::absolute |
longhands::position::SpecifiedValue::fixed);

// https://fullscreen.spec.whatwg.org/#new-stacking-layer
// Any position value other than 'absolute' and 'fixed' are
// computed to 'absolute' if the element is in a top layer.
% if product == "gecko":
if !positioned &&
matches!(style.get_box().clone__moz_top_layer(),
longhands::_moz_top_layer::SpecifiedValue::top) {
positioned = true;
style.mutate_box().set_position(longhands::position::computed_value::T::absolute);
}
% endif

let positioned = positioned; // To ensure it's not mutated further.

let floated = style.get_box().clone_float() != longhands::float::computed_value::T::none;
let is_item = matches!(context.layout_parent_style.get_box().clone_display(),
% if product == "gecko":
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.