From 77f43421b787b0b06d46bbfb82cb54ebb0c28394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Thu, 8 May 2025 11:52:34 +0000 Subject: [PATCH] Bug 1964952 - Move writing-mode out of mako. r=layout-reviewers,jfkthame This makes this call work as expected: https://searchfox.org/mozilla-central/rev/4c065f1df299065c305fb48b36cdae571a43d97c/dom/view-transitions/ViewTransition.cpp#569 Right now the Gecko and Servo values don't really match. Nobody uses the sideways flag on this value. Differential Revision: https://phabricator.services.mozilla.com/D248229 --- layout/style/ServoBindings.toml | 1 + layout/style/nsStyleConsts.h | 9 ---- servo/components/style/logical_geometry.rs | 45 ++++++++++++++++--- servo/components/style/properties/data.py | 1 + .../longhands/inherited_box.mako.rs | 12 ++--- servo/components/style/values/computed/box.rs | 1 + servo/components/style/values/computed/mod.rs | 2 +- .../components/style/values/specified/box.rs | 1 + .../components/style/values/specified/mod.rs | 3 +- servo/ports/geckolib/cbindgen.toml | 1 + .../writing-mode-container-resize.html.ini | 2 - 11 files changed, 50 insertions(+), 28 deletions(-) delete mode 100644 testing/web-platform/meta/css/css-view-transitions/writing-mode-container-resize.html.ini diff --git a/layout/style/ServoBindings.toml b/layout/style/ServoBindings.toml index aa1b5d4620b6..714aacc6416f 100644 --- a/layout/style/ServoBindings.toml +++ b/layout/style/ServoBindings.toml @@ -636,6 +636,7 @@ cbindgen-types = [ { gecko = "StyleGenericAnchorFunction", servo = "crate::values::generics::position::GenericAnchorFunction" }, { gecko = "StylePositionProperty", servo = "crate::values::computed::PositionProperty" }, { gecko = "StyleQueryFontMetricsFlags", servo = "crate::values::specified::font::QueryFontMetricsFlags" }, + { gecko = "StyleWritingModeProperty", servo = "crate::values::computed::box_::WritingModeProperty" }, ] mapped-generic-types = [ diff --git a/layout/style/nsStyleConsts.h b/layout/style/nsStyleConsts.h index 2aa76bc73a47..444f7148a7dd 100644 --- a/layout/style/nsStyleConsts.h +++ b/layout/style/nsStyleConsts.h @@ -192,15 +192,6 @@ enum class StyleDirection : uint8_t { Ltr, Rtl }; // values here accidentally use it in their binary representation.) static constexpr uint8_t kWritingModeSidewaysMask = 4; -enum class StyleWritingModeProperty : uint8_t { - HorizontalTb = 0, - VerticalRl = 1, - // HorizontalBT = 2, // hypothetical - VerticalLr = 3, - SidewaysRl = VerticalRl | kWritingModeSidewaysMask, - SidewaysLr = VerticalLr | kWritingModeSidewaysMask, -}; - // See nsStylePosition enum class StyleFlexDirection : uint8_t { Row, diff --git a/servo/components/style/logical_geometry.rs b/servo/components/style/logical_geometry.rs index f11633b9df0c..4b10d31e9cac 100644 --- a/servo/components/style/logical_geometry.rs +++ b/servo/components/style/logical_geometry.rs @@ -23,6 +23,38 @@ pub enum InlineBaseDirection { RightToLeft, } +/// The writing-mode property (different from the WritingMode enum). +/// https://drafts.csswg.org/css-writing-modes/#block-flow +/// Aliases come from https://drafts.csswg.org/css-writing-modes-4/#svg-writing-mode +#[allow(missing_docs)] +#[derive( + Clone, + Copy, + Debug, + Eq, + FromPrimitive, + MallocSizeOf, + Parse, + PartialEq, + SpecifiedValueInfo, + ToComputedValue, + ToCss, + ToResolvedValue, + ToShmem, +)] +#[repr(u8)] +pub enum WritingModeProperty { + #[parse(aliases = "lr,lr-tb,rl,rl-tb")] + HorizontalTb, + #[parse(aliases = "tb,tb-rl")] + VerticalRl, + VerticalLr, + #[cfg(feature = "gecko")] + SidewaysRl, + #[cfg(feature = "gecko")] + SidewaysLr, +} + // TODO: improve the readability of the WritingMode serialization, refer to the Debug:fmt() #[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, Serialize)] #[repr(C)] @@ -82,7 +114,6 @@ impl WritingMode { /// Return a WritingMode bitflags from the relevant CSS properties. pub fn new(inheritedbox_style: &style_structs::InheritedBox) -> Self { use crate::properties::longhands::direction::computed_value::T as Direction; - use crate::properties::longhands::writing_mode::computed_value::T as SpecifiedWritingMode; let mut flags = WritingMode::empty(); @@ -97,18 +128,18 @@ impl WritingMode { } match writing_mode { - SpecifiedWritingMode::HorizontalTb => { + WritingModeProperty::HorizontalTb => { if direction == Direction::Rtl { flags.insert(WritingMode::INLINE_REVERSED); } }, - SpecifiedWritingMode::VerticalRl => { + WritingModeProperty::VerticalRl => { flags.insert(WritingMode::VERTICAL); if direction == Direction::Rtl { flags.insert(WritingMode::INLINE_REVERSED); } }, - SpecifiedWritingMode::VerticalLr => { + WritingModeProperty::VerticalLr => { flags.insert(WritingMode::VERTICAL); flags.insert(WritingMode::VERTICAL_LR); flags.insert(WritingMode::LINE_INVERTED); @@ -117,7 +148,7 @@ impl WritingMode { } }, #[cfg(feature = "gecko")] - SpecifiedWritingMode::SidewaysRl => { + WritingModeProperty::SidewaysRl => { flags.insert(WritingMode::VERTICAL); flags.insert(WritingMode::VERTICAL_SIDEWAYS); if direction == Direction::Rtl { @@ -125,7 +156,7 @@ impl WritingMode { } }, #[cfg(feature = "gecko")] - SpecifiedWritingMode::SidewaysLr => { + WritingModeProperty::SidewaysLr => { flags.insert(WritingMode::VERTICAL); flags.insert(WritingMode::VERTICAL_LR); flags.insert(WritingMode::VERTICAL_SIDEWAYS); @@ -142,7 +173,7 @@ impl WritingMode { // text-orientation only has an effect for vertical-rl and // vertical-lr values of writing-mode. match writing_mode { - SpecifiedWritingMode::VerticalRl | SpecifiedWritingMode::VerticalLr => { + WritingModeProperty::VerticalRl | WritingModeProperty::VerticalLr => { match inheritedbox_style.clone_text_orientation() { TextOrientation::Mixed => {}, TextOrientation::Upright => { diff --git a/servo/components/style/properties/data.py b/servo/components/style/properties/data.py index 47711a0c1e0f..d84359b74ca9 100644 --- a/servo/components/style/properties/data.py +++ b/servo/components/style/properties/data.py @@ -622,6 +622,7 @@ class Longhand(Property): "UserSelect", "VectorEffect", "WordBreak", + "WritingModeProperty", "XSpan", "XTextScale", "ZIndex", diff --git a/servo/components/style/properties/longhands/inherited_box.mako.rs b/servo/components/style/properties/longhands/inherited_box.mako.rs index cce6d6649faf..b1961ade291b 100644 --- a/servo/components/style/properties/longhands/inherited_box.mako.rs +++ b/servo/components/style/properties/longhands/inherited_box.mako.rs @@ -17,18 +17,14 @@ ${helpers.single_keyword( // CSS Writing Modes Level 3 // https://drafts.csswg.org/css-writing-modes-3 -${helpers.single_keyword( +${helpers.predefined_type( "writing-mode", - "horizontal-tb vertical-rl vertical-lr", + "WritingModeProperty", + "computed::WritingModeProperty::HorizontalTb", engines="gecko servo", - extra_gecko_values="sideways-rl sideways-lr", - gecko_aliases="lr=horizontal-tb lr-tb=horizontal-tb \ - rl=horizontal-tb rl-tb=horizontal-tb \ - tb=vertical-rl tb-rl=vertical-rl", + spec="https://drafts.csswg.org/css-writing-modes/#propdef-writing-mode", servo_pref="layout.writing-mode.enabled", animation_type="none", - spec="https://drafts.csswg.org/css-writing-modes/#propdef-writing-mode", - gecko_enum_prefix="StyleWritingModeProperty", servo_restyle_damage="rebuild_and_reflow", affects="layout", )} diff --git a/servo/components/style/values/computed/box.rs b/servo/components/style/values/computed/box.rs index 493fa07d5369..daa32e7680a6 100644 --- a/servo/components/style/values/computed/box.rs +++ b/servo/components/style/values/computed/box.rs @@ -20,6 +20,7 @@ pub use crate::values::specified::box_::{ ContainerType, ContentVisibility, Display, Float, Overflow, OverflowAnchor, OverflowClipBox, OverscrollBehavior, PositionProperty, ScrollSnapAlign, ScrollSnapAxis, ScrollSnapStop, ScrollSnapStrictness, ScrollSnapType, ScrollbarGutter, TouchAction, WillChange, + WritingModeProperty, }; /// A computed value for the `vertical-align` property. diff --git a/servo/components/style/values/computed/mod.rs b/servo/components/style/values/computed/mod.rs index b89191a0ba48..d21eb65e3bcf 100644 --- a/servo/components/style/values/computed/mod.rs +++ b/servo/components/style/values/computed/mod.rs @@ -56,7 +56,7 @@ pub use self::box_::{ ContainerName, ContainerType, ContentVisibility, Display, Float, LineClamp, Overflow, OverflowAnchor, OverflowClipBox, OverscrollBehavior, Perspective, PositionProperty, Resize, ScrollSnapAlign, ScrollSnapAxis, ScrollSnapStop, ScrollSnapStrictness, ScrollSnapType, - ScrollbarGutter, TouchAction, VerticalAlign, WillChange, Zoom, + ScrollbarGutter, TouchAction, VerticalAlign, WillChange, WritingModeProperty, Zoom, }; pub use self::color::{ Color, ColorOrAuto, ColorPropertyValue, ColorScheme, ForcedColorAdjust, PrintColorAdjust, diff --git a/servo/components/style/values/specified/box.rs b/servo/components/style/values/specified/box.rs index bd852b871b2f..046b462d09f5 100644 --- a/servo/components/style/values/specified/box.rs +++ b/servo/components/style/values/specified/box.rs @@ -13,6 +13,7 @@ use crate::values::generics::box_::{ use crate::values::specified::length::{LengthPercentage, NonNegativeLength}; use crate::values::specified::{AllowQuirks, Integer, NonNegativeNumberOrPercentage}; use crate::values::CustomIdent; +pub use crate::logical_geometry::WritingModeProperty; use cssparser::Parser; use num_traits::FromPrimitive; use std::fmt::{self, Write}; diff --git a/servo/components/style/values/specified/mod.rs b/servo/components/style/values/specified/mod.rs index 8bb6feb2c54a..bb12c0fd6fa1 100644 --- a/servo/components/style/values/specified/mod.rs +++ b/servo/components/style/values/specified/mod.rs @@ -44,7 +44,8 @@ pub use self::box_::{ ContainerName, ContainerType, ContentVisibility, Display, Float, LineClamp, Overflow, OverflowAnchor, OverflowClipBox, OverscrollBehavior, Perspective, PositionProperty, Resize, ScrollSnapAlign, ScrollSnapAxis, ScrollSnapStop, ScrollSnapStrictness, ScrollSnapType, - ScrollbarGutter, TouchAction, VerticalAlign, WillChange, WillChangeBits, Zoom, + ScrollbarGutter, TouchAction, VerticalAlign, WillChange, WillChangeBits, WritingModeProperty, + Zoom, }; pub use self::color::{ Color, ColorOrAuto, ColorPropertyValue, ColorScheme, ForcedColorAdjust, PrintColorAdjust, diff --git a/servo/ports/geckolib/cbindgen.toml b/servo/ports/geckolib/cbindgen.toml index fa3ae8aa2ea0..1ae9173cd232 100644 --- a/servo/ports/geckolib/cbindgen.toml +++ b/servo/ports/geckolib/cbindgen.toml @@ -280,6 +280,7 @@ include = [ "CounterSet", "CounterIncrement", "WritingMode", + "WritingModeProperty", "Content", "ContentItem", "AlignSelf", diff --git a/testing/web-platform/meta/css/css-view-transitions/writing-mode-container-resize.html.ini b/testing/web-platform/meta/css/css-view-transitions/writing-mode-container-resize.html.ini deleted file mode 100644 index bf986476406b..000000000000 --- a/testing/web-platform/meta/css/css-view-transitions/writing-mode-container-resize.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[writing-mode-container-resize.html] - expected: FAIL