diff --git a/components/style/properties/data.py b/components/style/properties/data.py index 7a96402c4a1..ae307077690 100644 --- a/components/style/properties/data.py +++ b/components/style/properties/data.py @@ -337,6 +337,7 @@ class Longhand(object): "OverflowWrap", "OverscrollBehavior", "Percentage", + "PositiveIntegerOrNone", "Resize", "SVGOpacity", "SVGPaintOrder", diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index b73bb073fa6..537dbb661f4 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -2515,7 +2515,7 @@ fn static_assert() { rotate scroll-snap-points-x scroll-snap-points-y scroll-snap-coordinate -moz-binding will-change offset-path shape-outside - translate scale""" %> + translate scale -webkit-line-clamp""" %> <%self:impl_trait style_struct_name="Box" skip_longhands="${skip_box_longhands}"> #[inline] pub fn generate_combined_transform(&mut self) { @@ -2924,6 +2924,27 @@ fn static_assert() { self.copy_offset_path_from(other); } + #[allow(non_snake_case)] + pub fn set__webkit_line_clamp(&mut self, v: longhands::_webkit_line_clamp::computed_value::T) { + self.gecko.mLineClamp = match v { + Either::First(n) => n.0 as u32, + Either::Second(None_) => 0, + }; + } + + ${impl_simple_copy('_webkit_line_clamp', 'mLineClamp')} + + #[allow(non_snake_case)] + pub fn clone__webkit_line_clamp(&self) -> longhands::_webkit_line_clamp::computed_value::T { + match self.gecko.mLineClamp { + 0 => Either::Second(None_), + n => { + debug_assert!(n <= std::i32::MAX as u32); + Either::First((n as i32).into()) + } + } + } + <%def name="simple_image_array_property(name, shorthand, field_name)"> diff --git a/components/style/properties/longhands/box.mako.rs b/components/style/properties/longhands/box.mako.rs index a7a2cb9e348..64239eeb83a 100644 --- a/components/style/properties/longhands/box.mako.rs +++ b/components/style/properties/longhands/box.mako.rs @@ -670,3 +670,15 @@ ${helpers.predefined_type( animation_value_type="discrete", spec="https://compat.spec.whatwg.org/#touch-action", )} + +// Note that we only implement -webkit-line-clamp as a single, longhand +// property for now, but the spec defines line-clamp as a shorthand for separate +// max-lines, block-ellipsis, and continue properties. +${helpers.predefined_type( + "-webkit-line-clamp", + "PositiveIntegerOrNone", + "Either::Second(None_)", + gecko_pref="layout.css.webkit-line-clamp.enabled", + animation_value_type="Integer", + spec="https://drafts.csswg.org/css-overflow-3/#line-clamp", +)} diff --git a/components/style/values/computed/mod.rs b/components/style/values/computed/mod.rs index 3eb0c16836c..f7f14c79d9c 100644 --- a/components/style/values/computed/mod.rs +++ b/components/style/values/computed/mod.rs @@ -640,6 +640,9 @@ impl From for PositiveInteger { } } +/// A computed positive `` value or `none`. +pub type PositiveIntegerOrNone = Either; + /// rect(...) pub type ClipRect = generics::ClipRect; diff --git a/components/style/values/specified/mod.rs b/components/style/values/specified/mod.rs index 7dbb93f6319..83fc71444bb 100644 --- a/components/style/values/specified/mod.rs +++ b/components/style/values/specified/mod.rs @@ -12,7 +12,7 @@ use super::generics::grid::{GridLine as GenericGridLine, TrackBreadth as Generic use super::generics::grid::{TrackList as GenericTrackList, TrackSize as GenericTrackSize}; use super::generics::transform::IsParallelTo; use super::generics::{self, GreaterThanOrEqualToOne, NonNegative}; -use super::{Auto, CSSFloat, CSSInteger, Either}; +use super::{Auto, CSSFloat, CSSInteger, Either, None_}; use crate::context::QuirksMode; use crate::parser::{Parse, ParserContext}; use crate::values::serialize_atom_identifier; @@ -593,6 +593,9 @@ impl Parse for PositiveInteger { } } +/// A specified positive `` value or `none`. +pub type PositiveIntegerOrNone = Either; + /// The specified value of a grid `` pub type TrackBreadth = GenericTrackBreadth;