From 1cbe9b9a1aa531897196ed7d8917dfc354017b1b Mon Sep 17 00:00:00 2001 From: Jeremy Chen Date: Tue, 25 Apr 2017 17:09:13 +0800 Subject: [PATCH] Stylo: Make border-spacing animatable Two things are included in this patch: 1. Implement ComputeDistance for border-spacing, so we could get the right distance while doing animations. 2. Implement clone function for gecko glue code of border-spacing, so we could make animations of border-spacing work properly in stylo build. Gecko side patch: Bug 1354437 --- components/style/properties/gecko.mako.rs | 7 +++++++ .../properties/longhand/inherited_table.mako.rs | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/components/style/properties/gecko.mako.rs b/components/style/properties/gecko.mako.rs index 9005fe691a43..108563d71708 100644 --- a/components/style/properties/gecko.mako.rs +++ b/components/style/properties/gecko.mako.rs @@ -3255,6 +3255,13 @@ fn static_assert() { self.gecko.mBorderSpacingCol = other.gecko.mBorderSpacingCol; self.gecko.mBorderSpacingRow = other.gecko.mBorderSpacingRow; } + + pub fn clone_border_spacing(&self) -> longhands::border_spacing::computed_value::T { + longhands::border_spacing::computed_value::T { + horizontal: Au(self.gecko.mBorderSpacingCol), + vertical: Au(self.gecko.mBorderSpacingRow) + } + } diff --git a/components/style/properties/longhand/inherited_table.mako.rs b/components/style/properties/longhand/inherited_table.mako.rs index 3069482976ed..a66de2691db7 100644 --- a/components/style/properties/longhand/inherited_table.mako.rs +++ b/components/style/properties/longhand/inherited_table.mako.rs @@ -20,7 +20,7 @@ ${helpers.single_keyword("caption-side", "top bottom", animation_value_type="none", spec="https://drafts.csswg.org/css-tables/#propdef-caption-side")} -<%helpers:longhand name="border-spacing" animation_value_type="none" boxed="True" +<%helpers:longhand name="border-spacing" animation_value_type="ComputedValue" boxed="True" spec="https://drafts.csswg.org/css-tables/#propdef-border-spacing"> use app_units::Au; use std::fmt; @@ -29,7 +29,7 @@ ${helpers.single_keyword("caption-side", "top bottom", pub mod computed_value { use app_units::Au; - use properties::animated_properties::Interpolate; + use properties::animated_properties::{ComputeDistance, Interpolate}; #[derive(Clone, Copy, Debug, PartialEq)] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] @@ -48,6 +48,19 @@ ${helpers.single_keyword("caption-side", "top bottom", }) } } + + impl ComputeDistance for T { + #[inline] + fn compute_distance(&self, other: &Self) -> Result { + self.compute_squared_distance(other).map(|sd| sd.sqrt()) + } + + #[inline] + fn compute_squared_distance(&self, other: &Self) -> Result { + Ok(try!(self.horizontal.compute_squared_distance(&other.horizontal)) + + try!(self.vertical.compute_squared_distance(&other.vertical))) + } + } } impl HasViewportPercentage for SpecifiedValue {