diff --git a/components/style/cbindgen.toml b/components/style/cbindgen.toml index ae73adeda8c..0d2af9f21e7 100644 --- a/components/style/cbindgen.toml +++ b/components/style/cbindgen.toml @@ -105,6 +105,7 @@ include = [ "WordBreak", "Contain", "RestyleHint", + "TouchAction", "TextDecorationLine", ] item_types = ["enums", "structs", "typedefs"] diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index dbeedb9c7db..82c8e96ec2d 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -2582,7 +2582,7 @@ fn static_assert() { transform-style rotate scroll-snap-points-x scroll-snap-points-y scroll-snap-coordinate -moz-binding will-change - offset-path shape-outside touch-action + offset-path shape-outside translate scale""" %> <%self:impl_trait style_struct_name="Box" skip_longhands="${skip_box_longhands}"> #[inline] @@ -3002,8 +3002,6 @@ fn static_assert() { <% impl_shape_source("shape_outside", "mShapeOutside") %> - ${impl_simple_type_with_conversion("touch_action")} - pub fn set_offset_path(&mut self, v: longhands::offset_path::computed_value::T) { use crate::gecko_bindings::bindings::{Gecko_NewStyleMotion, Gecko_SetStyleMotion}; use crate::gecko_bindings::structs::StyleShapeSourceType; diff --git a/components/style/values/specified/box.rs b/components/style/values/specified/box.rs index 39917659cc9..dddf3f9b4af 100644 --- a/components/style/values/specified/box.rs +++ b/components/style/values/specified/box.rs @@ -650,21 +650,22 @@ impl Parse for WillChange { } bitflags! { + /// Values for the `touch-action` property. #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(SpecifiedValueInfo, ToComputedValue)] - /// These constants match Gecko's `NS_STYLE_TOUCH_ACTION_*` constants. #[value_info(other_values = "auto,none,manipulation,pan-x,pan-y")] + #[repr(C)] pub struct TouchAction: u8 { /// `none` variant - const TOUCH_ACTION_NONE = 1 << 0; + const NONE = 1 << 0; /// `auto` variant - const TOUCH_ACTION_AUTO = 1 << 1; + const AUTO = 1 << 1; /// `pan-x` variant - const TOUCH_ACTION_PAN_X = 1 << 2; + const PAN_X = 1 << 2; /// `pan-y` variant - const TOUCH_ACTION_PAN_Y = 1 << 3; + const PAN_Y = 1 << 3; /// `manipulation` variant - const TOUCH_ACTION_MANIPULATION = 1 << 4; + const MANIPULATION = 1 << 4; } } @@ -672,7 +673,7 @@ impl TouchAction { #[inline] /// Get default `touch-action` as `auto` pub fn auto() -> TouchAction { - TouchAction::TOUCH_ACTION_AUTO + TouchAction::AUTO } } @@ -682,16 +683,14 @@ impl ToCss for TouchAction { W: Write, { match *self { - TouchAction::TOUCH_ACTION_NONE => dest.write_str("none"), - TouchAction::TOUCH_ACTION_AUTO => dest.write_str("auto"), - TouchAction::TOUCH_ACTION_MANIPULATION => dest.write_str("manipulation"), - _ if self - .contains(TouchAction::TOUCH_ACTION_PAN_X | TouchAction::TOUCH_ACTION_PAN_Y) => - { + TouchAction::NONE => dest.write_str("none"), + TouchAction::AUTO => dest.write_str("auto"), + TouchAction::MANIPULATION => dest.write_str("manipulation"), + _ if self.contains(TouchAction::PAN_X | TouchAction::PAN_Y) => { dest.write_str("pan-x pan-y") }, - _ if self.contains(TouchAction::TOUCH_ACTION_PAN_X) => dest.write_str("pan-x"), - _ if self.contains(TouchAction::TOUCH_ACTION_PAN_Y) => dest.write_str("pan-y"), + _ if self.contains(TouchAction::PAN_X) => dest.write_str("pan-x"), + _ if self.contains(TouchAction::PAN_Y) => dest.write_str("pan-y"), _ => panic!("invalid touch-action value"), } } @@ -703,53 +702,27 @@ impl Parse for TouchAction { input: &mut Parser<'i, 't>, ) -> Result> { try_match_ident_ignore_ascii_case! { input, - "auto" => Ok(TouchAction::TOUCH_ACTION_AUTO), - "none" => Ok(TouchAction::TOUCH_ACTION_NONE), - "manipulation" => Ok(TouchAction::TOUCH_ACTION_MANIPULATION), + "auto" => Ok(TouchAction::AUTO), + "none" => Ok(TouchAction::NONE), + "manipulation" => Ok(TouchAction::MANIPULATION), "pan-x" => { if input.try(|i| i.expect_ident_matching("pan-y")).is_ok() { - Ok(TouchAction::TOUCH_ACTION_PAN_X | TouchAction::TOUCH_ACTION_PAN_Y) + Ok(TouchAction::PAN_X | TouchAction::PAN_Y) } else { - Ok(TouchAction::TOUCH_ACTION_PAN_X) + Ok(TouchAction::PAN_X) } }, "pan-y" => { if input.try(|i| i.expect_ident_matching("pan-x")).is_ok() { - Ok(TouchAction::TOUCH_ACTION_PAN_X | TouchAction::TOUCH_ACTION_PAN_Y) + Ok(TouchAction::PAN_X | TouchAction::PAN_Y) } else { - Ok(TouchAction::TOUCH_ACTION_PAN_Y) + Ok(TouchAction::PAN_Y) } }, } } } -#[cfg(feature = "gecko")] -impl_bitflags_conversions!(TouchAction); - -/// Asserts that all touch-action matches its NS_STYLE_TOUCH_ACTION_* value. -#[cfg(feature = "gecko")] -#[inline] -pub fn assert_touch_action_matches() { - use crate::gecko_bindings::structs; - - macro_rules! check_touch_action { - ( $( $a:ident => $b:path),*, ) => { - $( - debug_assert_eq!(structs::$a as u8, $b.bits()); - )* - } - } - - check_touch_action! { - NS_STYLE_TOUCH_ACTION_NONE => TouchAction::TOUCH_ACTION_NONE, - NS_STYLE_TOUCH_ACTION_AUTO => TouchAction::TOUCH_ACTION_AUTO, - NS_STYLE_TOUCH_ACTION_PAN_X => TouchAction::TOUCH_ACTION_PAN_X, - NS_STYLE_TOUCH_ACTION_PAN_Y => TouchAction::TOUCH_ACTION_PAN_Y, - NS_STYLE_TOUCH_ACTION_MANIPULATION => TouchAction::TOUCH_ACTION_MANIPULATION, - } -} - bitflags! { #[derive(MallocSizeOf, SpecifiedValueInfo, ToComputedValue)] #[value_info(other_values = "none,strict,content,size,layout,paint")]