mirror of
https://github.com/servo/servo.git
synced 2025-06-21 23:59:00 +01:00
style: Use rust types for vertical-align.
The previous commit removed the dependence on the discriminant value, so we don't need to keep discriminants different from text-align anymore. Differential Revision: https://phabricator.services.mozilla.com/D29361
This commit is contained in:
parent
8123007717
commit
c990c9623d
5 changed files with 43 additions and 102 deletions
|
@ -22,7 +22,6 @@ use crate::values::computed::url::ComputedImageUrl;
|
||||||
use crate::values::computed::{Angle, Gradient, Image};
|
use crate::values::computed::{Angle, Gradient, Image};
|
||||||
use crate::values::computed::{Integer, LengthPercentage};
|
use crate::values::computed::{Integer, LengthPercentage};
|
||||||
use crate::values::computed::{Length, Percentage, TextAlign};
|
use crate::values::computed::{Length, Percentage, TextAlign};
|
||||||
use crate::values::generics::box_::VerticalAlign;
|
|
||||||
use crate::values::generics::grid::{TrackListValue, TrackSize};
|
use crate::values::generics::grid::{TrackListValue, TrackSize};
|
||||||
use crate::values::generics::image::{CompatMode, Image as GenericImage};
|
use crate::values::generics::image::{CompatMode, Image as GenericImage};
|
||||||
use crate::values::generics::rect::Rect;
|
use crate::values::generics::rect::Rect;
|
||||||
|
@ -875,26 +874,6 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<L> VerticalAlign<L> {
|
|
||||||
/// Converts an enumerated value coming from Gecko to a `VerticalAlign<L>`.
|
|
||||||
pub fn from_gecko_keyword(value: u32) -> Self {
|
|
||||||
match value {
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_BASELINE => VerticalAlign::Baseline,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_SUB => VerticalAlign::Sub,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_SUPER => VerticalAlign::Super,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_TOP => VerticalAlign::Top,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_TEXT_TOP => VerticalAlign::TextTop,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_MIDDLE => VerticalAlign::Middle,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_BOTTOM => VerticalAlign::Bottom,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_TEXT_BOTTOM => VerticalAlign::TextBottom,
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_MIDDLE_WITH_BASELINE => {
|
|
||||||
VerticalAlign::MozMiddleWithBaseline
|
|
||||||
},
|
|
||||||
_ => panic!("unexpected enumerated value for vertical-align"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl TextAlign {
|
impl TextAlign {
|
||||||
/// Obtain a specified value from a Gecko keyword value
|
/// Obtain a specified value from a Gecko keyword value
|
||||||
///
|
///
|
||||||
|
|
|
@ -38,7 +38,7 @@ use crate::gecko_bindings::bindings::{Gecko_ResetFilters, Gecko_CopyFiltersFrom}
|
||||||
use crate::gecko_bindings::structs;
|
use crate::gecko_bindings::structs;
|
||||||
use crate::gecko_bindings::structs::nsCSSPropertyID;
|
use crate::gecko_bindings::structs::nsCSSPropertyID;
|
||||||
use crate::gecko_bindings::structs::mozilla::PseudoStyleType;
|
use crate::gecko_bindings::structs::mozilla::PseudoStyleType;
|
||||||
use crate::gecko_bindings::sugar::ns_style_coord::{CoordDataValue, CoordData, CoordDataMut};
|
use crate::gecko_bindings::sugar::ns_style_coord::{CoordDataValue, CoordDataMut};
|
||||||
use crate::gecko_bindings::sugar::refptr::RefPtr;
|
use crate::gecko_bindings::sugar::refptr::RefPtr;
|
||||||
use crate::gecko::values::GeckoStyleCoordConvertible;
|
use crate::gecko::values::GeckoStyleCoordConvertible;
|
||||||
use crate::gecko::values::round_border_to_device_pixels;
|
use crate::gecko::values::round_border_to_device_pixels;
|
||||||
|
@ -2505,7 +2505,7 @@ fn static_assert() {
|
||||||
}
|
}
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<% skip_box_longhands= """display vertical-align
|
<% skip_box_longhands= """display
|
||||||
animation-name animation-delay animation-duration
|
animation-name animation-delay animation-duration
|
||||||
animation-direction animation-fill-mode animation-play-state
|
animation-direction animation-fill-mode animation-play-state
|
||||||
animation-iteration-count animation-timing-function
|
animation-iteration-count animation-timing-function
|
||||||
|
@ -2561,47 +2561,6 @@ fn static_assert() {
|
||||||
) %>
|
) %>
|
||||||
${impl_keyword('clear', 'mBreakType', clear_keyword)}
|
${impl_keyword('clear', 'mBreakType', clear_keyword)}
|
||||||
|
|
||||||
pub fn set_vertical_align(&mut self, v: longhands::vertical_align::computed_value::T) {
|
|
||||||
use crate::values::generics::box_::VerticalAlign;
|
|
||||||
let value = match v {
|
|
||||||
VerticalAlign::Baseline => structs::NS_STYLE_VERTICAL_ALIGN_BASELINE,
|
|
||||||
VerticalAlign::Sub => structs::NS_STYLE_VERTICAL_ALIGN_SUB,
|
|
||||||
VerticalAlign::Super => structs::NS_STYLE_VERTICAL_ALIGN_SUPER,
|
|
||||||
VerticalAlign::Top => structs::NS_STYLE_VERTICAL_ALIGN_TOP,
|
|
||||||
VerticalAlign::TextTop => structs::NS_STYLE_VERTICAL_ALIGN_TEXT_TOP,
|
|
||||||
VerticalAlign::Middle => structs::NS_STYLE_VERTICAL_ALIGN_MIDDLE,
|
|
||||||
VerticalAlign::Bottom => structs::NS_STYLE_VERTICAL_ALIGN_BOTTOM,
|
|
||||||
VerticalAlign::TextBottom => structs::NS_STYLE_VERTICAL_ALIGN_TEXT_BOTTOM,
|
|
||||||
VerticalAlign::MozMiddleWithBaseline => {
|
|
||||||
structs::NS_STYLE_VERTICAL_ALIGN_MIDDLE_WITH_BASELINE
|
|
||||||
},
|
|
||||||
VerticalAlign::Length(length) => {
|
|
||||||
self.gecko.mVerticalAlign.set(length);
|
|
||||||
return;
|
|
||||||
},
|
|
||||||
};
|
|
||||||
self.gecko.mVerticalAlign.set_value(CoordDataValue::Enumerated(value));
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn clone_vertical_align(&self) -> longhands::vertical_align::computed_value::T {
|
|
||||||
use crate::values::computed::LengthPercentage;
|
|
||||||
use crate::values::generics::box_::VerticalAlign;
|
|
||||||
|
|
||||||
let gecko = &self.gecko.mVerticalAlign;
|
|
||||||
match gecko.as_value() {
|
|
||||||
CoordDataValue::Enumerated(value) => VerticalAlign::from_gecko_keyword(value),
|
|
||||||
_ => {
|
|
||||||
VerticalAlign::Length(
|
|
||||||
LengthPercentage::from_gecko_style_coord(gecko).expect(
|
|
||||||
"expected <length-percentage> for vertical-align",
|
|
||||||
),
|
|
||||||
)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
<%call expr="impl_coord_copy('vertical_align', 'mVerticalAlign')"></%call>
|
|
||||||
|
|
||||||
${impl_style_coord("scroll_snap_points_x", "mScrollSnapPointsX")}
|
${impl_style_coord("scroll_snap_points_x", "mScrollSnapPointsX")}
|
||||||
${impl_style_coord("scroll_snap_points_y", "mScrollSnapPointsY")}
|
${impl_style_coord("scroll_snap_points_y", "mScrollSnapPointsY")}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,37 @@
|
||||||
|
|
||||||
use crate::values::animated::ToAnimatedZero;
|
use crate::values::animated::ToAnimatedZero;
|
||||||
|
|
||||||
|
#[derive(
|
||||||
|
Animate,
|
||||||
|
Clone,
|
||||||
|
ComputeSquaredDistance,
|
||||||
|
Copy,
|
||||||
|
Debug,
|
||||||
|
FromPrimitive,
|
||||||
|
MallocSizeOf,
|
||||||
|
Parse,
|
||||||
|
PartialEq,
|
||||||
|
SpecifiedValueInfo,
|
||||||
|
ToComputedValue,
|
||||||
|
ToCss,
|
||||||
|
ToResolvedValue,
|
||||||
|
ToShmem,
|
||||||
|
)]
|
||||||
|
#[repr(u8)]
|
||||||
|
#[allow(missing_docs)]
|
||||||
|
pub enum VerticalAlignKeyword {
|
||||||
|
Baseline,
|
||||||
|
Sub,
|
||||||
|
Super,
|
||||||
|
Top,
|
||||||
|
TextTop,
|
||||||
|
Middle,
|
||||||
|
Bottom,
|
||||||
|
TextBottom,
|
||||||
|
#[cfg(feature = "gecko")]
|
||||||
|
MozMiddleWithBaseline,
|
||||||
|
}
|
||||||
|
|
||||||
/// A generic value for the `vertical-align` property.
|
/// A generic value for the `vertical-align` property.
|
||||||
#[derive(
|
#[derive(
|
||||||
Animate,
|
Animate,
|
||||||
|
@ -21,35 +52,21 @@ use crate::values::animated::ToAnimatedZero;
|
||||||
ToResolvedValue,
|
ToResolvedValue,
|
||||||
ToShmem,
|
ToShmem,
|
||||||
)]
|
)]
|
||||||
pub enum VerticalAlign<LengthPercentage> {
|
#[repr(C, u8)]
|
||||||
/// `baseline`
|
pub enum GenericVerticalAlign<LengthPercentage> {
|
||||||
Baseline,
|
/// One of the vertical-align keywords.
|
||||||
/// `sub`
|
Keyword(VerticalAlignKeyword),
|
||||||
Sub,
|
|
||||||
/// `super`
|
|
||||||
Super,
|
|
||||||
/// `top`
|
|
||||||
Top,
|
|
||||||
/// `text-top`
|
|
||||||
TextTop,
|
|
||||||
/// `middle`
|
|
||||||
Middle,
|
|
||||||
/// `bottom`
|
|
||||||
Bottom,
|
|
||||||
/// `text-bottom`
|
|
||||||
TextBottom,
|
|
||||||
/// `-moz-middle-with-baseline`
|
|
||||||
#[cfg(feature = "gecko")]
|
|
||||||
MozMiddleWithBaseline,
|
|
||||||
/// `<length-percentage>`
|
/// `<length-percentage>`
|
||||||
Length(LengthPercentage),
|
Length(LengthPercentage),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub use self::GenericVerticalAlign as VerticalAlign;
|
||||||
|
|
||||||
impl<L> VerticalAlign<L> {
|
impl<L> VerticalAlign<L> {
|
||||||
/// Returns `baseline`.
|
/// Returns `baseline`.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn baseline() -> Self {
|
pub fn baseline() -> Self {
|
||||||
VerticalAlign::Baseline
|
VerticalAlign::Keyword(VerticalAlignKeyword::Baseline)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ use crate::properties::{LonghandId, PropertyDeclarationId, PropertyFlags};
|
||||||
use crate::properties::{PropertyId, ShorthandId};
|
use crate::properties::{PropertyId, ShorthandId};
|
||||||
use crate::values::generics::box_::AnimationIterationCount as GenericAnimationIterationCount;
|
use crate::values::generics::box_::AnimationIterationCount as GenericAnimationIterationCount;
|
||||||
use crate::values::generics::box_::Perspective as GenericPerspective;
|
use crate::values::generics::box_::Perspective as GenericPerspective;
|
||||||
use crate::values::generics::box_::VerticalAlign as GenericVerticalAlign;
|
use crate::values::generics::box_::{GenericVerticalAlign, VerticalAlignKeyword};
|
||||||
use crate::values::specified::length::{LengthPercentage, NonNegativeLength};
|
use crate::values::specified::length::{LengthPercentage, NonNegativeLength};
|
||||||
use crate::values::specified::{AllowQuirks, Number};
|
use crate::values::specified::{AllowQuirks, Number};
|
||||||
use crate::values::{CustomIdent, KeyframesName};
|
use crate::values::{CustomIdent, KeyframesName};
|
||||||
|
@ -280,20 +280,7 @@ impl Parse for VerticalAlign {
|
||||||
return Ok(GenericVerticalAlign::Length(lp));
|
return Ok(GenericVerticalAlign::Length(lp));
|
||||||
}
|
}
|
||||||
|
|
||||||
try_match_ident_ignore_ascii_case! { input,
|
Ok(GenericVerticalAlign::Keyword(VerticalAlignKeyword::parse(input)?))
|
||||||
"baseline" => Ok(GenericVerticalAlign::Baseline),
|
|
||||||
"sub" => Ok(GenericVerticalAlign::Sub),
|
|
||||||
"super" => Ok(GenericVerticalAlign::Super),
|
|
||||||
"top" => Ok(GenericVerticalAlign::Top),
|
|
||||||
"text-top" => Ok(GenericVerticalAlign::TextTop),
|
|
||||||
"middle" => Ok(GenericVerticalAlign::Middle),
|
|
||||||
"bottom" => Ok(GenericVerticalAlign::Bottom),
|
|
||||||
"text-bottom" => Ok(GenericVerticalAlign::TextBottom),
|
|
||||||
#[cfg(feature = "gecko")]
|
|
||||||
"-moz-middle-with-baseline" => {
|
|
||||||
Ok(GenericVerticalAlign::MozMiddleWithBaseline)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -563,8 +563,7 @@ pub enum TextAlignKeyword {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Specified value of text-align property.
|
/// Specified value of text-align property.
|
||||||
#[cfg_attr(feature = "gecko", derive(MallocSizeOf))]
|
#[derive(Clone, Copy, Debug, Eq, Hash, MallocSizeOf, Parse, PartialEq, SpecifiedValueInfo, ToCss, ToShmem)]
|
||||||
#[derive(Clone, Copy, Debug, Eq, Hash, Parse, PartialEq, SpecifiedValueInfo, ToCss, ToShmem)]
|
|
||||||
pub enum TextAlign {
|
pub enum TextAlign {
|
||||||
/// Keyword value of text-align property.
|
/// Keyword value of text-align property.
|
||||||
Keyword(TextAlignKeyword),
|
Keyword(TextAlignKeyword),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue