Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
style: Implement -webkit-line-clamp.
  • Loading branch information
heycam authored and emilio committed May 10, 2019
1 parent 81e7064 commit ca756a8
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 2 deletions.
1 change: 1 addition & 0 deletions components/style/properties/data.py
Expand Up @@ -337,6 +337,7 @@ def specified_is_copy(self):
"OverflowWrap",
"OverscrollBehavior",
"Percentage",
"PositiveIntegerOrNone",
"Resize",
"SVGOpacity",
"SVGPaintOrder",
Expand Down
23 changes: 22 additions & 1 deletion components/style/properties/gecko.mako.rs
Expand Up @@ -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) {
Expand Down Expand Up @@ -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())
}
}
}

</%self:impl_trait>

<%def name="simple_image_array_property(name, shorthand, field_name)">
Expand Down
12 changes: 12 additions & 0 deletions components/style/properties/longhands/box.mako.rs
Expand Up @@ -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",
)}
3 changes: 3 additions & 0 deletions components/style/values/computed/mod.rs
Expand Up @@ -640,6 +640,9 @@ impl From<CSSInteger> for PositiveInteger {
}
}

/// A computed positive `<integer>` value or `none`.
pub type PositiveIntegerOrNone = Either<PositiveInteger, None_>;

/// rect(...)
pub type ClipRect = generics::ClipRect<LengthOrAuto>;

Expand Down
5 changes: 4 additions & 1 deletion components/style/values/specified/mod.rs
Expand Up @@ -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;
Expand Down Expand Up @@ -593,6 +593,9 @@ impl Parse for PositiveInteger {
}
}

/// A specified positive `<integer>` value or `none`.
pub type PositiveIntegerOrNone = Either<PositiveInteger, None_>;

/// The specified value of a grid `<track-breadth>`
pub type TrackBreadth = GenericTrackBreadth<LengthPercentage>;

Expand Down

0 comments on commit ca756a8

Please sign in to comment.