diff --git a/components/style/properties/longhands/box.mako.rs b/components/style/properties/longhands/box.mako.rs index 40075a650843..3dd1e419b526 100644 --- a/components/style/properties/longhands/box.mako.rs +++ b/components/style/properties/longhands/box.mako.rs @@ -421,6 +421,19 @@ ${helpers.predefined_type( servo_restyle_damage="reflow_out_of_flow" )} +// Motion Path Module Level 1 +${helpers.predefined_type( + "offset-anchor", + "PositionOrAuto", + "computed::PositionOrAuto::auto()", + engines="gecko", + animation_value_type="none", + gecko_pref="layout.css.motion-path.enabled", + spec="https://drafts.fxtf.org/motion-1/#offset-anchor-property", + servo_restyle_damage="reflow_out_of_flow", + boxed=True +)} + // CSSOM View Module // https://www.w3.org/TR/cssom-view-1/ ${helpers.single_keyword( diff --git a/components/style/values/computed/mod.rs b/components/style/values/computed/mod.rs index 7cfe0de6d8d4..1947b83164eb 100644 --- a/components/style/values/computed/mod.rs +++ b/components/style/values/computed/mod.rs @@ -68,7 +68,7 @@ pub use self::list::Quotes; pub use self::motion::{OffsetPath, OffsetRotate}; pub use self::outline::OutlineStyle; pub use self::percentage::{NonNegativePercentage, Percentage}; -pub use self::position::{GridAutoFlow, GridTemplateAreas, Position, ZIndex}; +pub use self::position::{GridAutoFlow, GridTemplateAreas, Position, PositionOrAuto, ZIndex}; pub use self::rect::NonNegativeLengthOrNumberRect; pub use self::resolution::Resolution; pub use self::svg::MozContextProperties; diff --git a/components/style/values/computed/position.rs b/components/style/values/computed/position.rs index f0f8fe198a64..7b22c37f73f2 100644 --- a/components/style/values/computed/position.rs +++ b/components/style/values/computed/position.rs @@ -9,6 +9,7 @@ use crate::values::computed::{Integer, LengthPercentage, Percentage}; use crate::values::generics::position::Position as GenericPosition; +use crate::values::generics::position::PositionOrAuto as GenericPositionOrAuto; use crate::values::generics::position::ZIndex as GenericZIndex; pub use crate::values::specified::position::{GridAutoFlow, GridTemplateAreas}; use crate::Zero; @@ -18,6 +19,9 @@ use style_traits::{CssWriter, ToCss}; /// The computed value of a CSS `` pub type Position = GenericPosition; +/// The computed value of an `auto | ` +pub type PositionOrAuto = GenericPositionOrAuto; + /// The computed value of a CSS horizontal position. pub type HorizontalPosition = LengthPercentage; diff --git a/components/style/values/generics/position.rs b/components/style/values/generics/position.rs index 7e43f439793d..41ccf8a59531 100644 --- a/components/style/values/generics/position.rs +++ b/components/style/values/generics/position.rs @@ -41,6 +41,40 @@ impl Position { } } +/// A generic type for representing an `Auto | `. +/// This is used by for now. +/// https://drafts.fxtf.org/motion-1/#offset-anchor-property +#[derive( + Clone, + Copy, + Debug, + MallocSizeOf, + Parse, + PartialEq, + SpecifiedValueInfo, + ToComputedValue, + ToCss, + ToResolvedValue, + ToShmem, +)] +#[repr(C, u8)] +pub enum GenericPositionOrAuto { + /// The value. + Position(Pos), + /// The keyword `auto`. + Auto, +} + +pub use self::GenericPositionOrAuto as PositionOrAuto; + +impl PositionOrAuto { + /// Return `auto`. + #[inline] + pub fn auto() -> Self { + PositionOrAuto::Auto + } +} + /// A generic value for the `z-index` property. #[derive( Animate, diff --git a/components/style/values/specified/mod.rs b/components/style/values/specified/mod.rs index f33a191c2773..98f8116d5c00 100644 --- a/components/style/values/specified/mod.rs +++ b/components/style/values/specified/mod.rs @@ -69,7 +69,7 @@ pub use self::list::Quotes; pub use self::motion::{OffsetPath, OffsetRotate}; pub use self::outline::OutlineStyle; pub use self::percentage::Percentage; -pub use self::position::{GridAutoFlow, GridTemplateAreas, Position}; +pub use self::position::{GridAutoFlow, GridTemplateAreas, Position, PositionOrAuto}; pub use self::position::{PositionComponent, ZIndex}; pub use self::rect::NonNegativeLengthOrNumberRect; pub use self::resolution::Resolution; diff --git a/components/style/values/specified/position.rs b/components/style/values/specified/position.rs index 4e6a71ec2cad..ce3bab1047be 100644 --- a/components/style/values/specified/position.rs +++ b/components/style/values/specified/position.rs @@ -13,6 +13,7 @@ use crate::str::HTML_SPACE_CHARACTERS; use crate::values::computed::LengthPercentage as ComputedLengthPercentage; use crate::values::computed::{Context, Percentage, ToComputedValue}; use crate::values::generics::position::Position as GenericPosition; +use crate::values::generics::position::PositionOrAuto as GenericPositionOrAuto; use crate::values::generics::position::ZIndex as GenericZIndex; use crate::values::specified::{AllowQuirks, Integer, LengthPercentage}; use crate::Atom; @@ -26,6 +27,9 @@ use style_traits::{CssWriter, ParseError, StyleParseErrorKind, ToCss}; /// The specified value of a CSS `` pub type Position = GenericPosition; +/// The specified value of an `auto | `. +pub type PositionOrAuto = GenericPositionOrAuto; + /// The specified value of a horizontal position. pub type HorizontalPosition = PositionComponent;