mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Make AnimationValue have the same variants as PropertyDeclaration
By making AnimationValue have the same representation as PropertyDeclaration and Void variants for non-animatable properties, we know by constructions that all properties have the same discriminant in both.
This commit is contained in:
parent
6b1a74672d
commit
79775541f2
7 changed files with 58 additions and 35 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1562,6 +1562,7 @@ dependencies = [
|
||||||
"smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"smallvec 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"string_cache 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"string_cache 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"url 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"webrender_api 0.57.0 (git+https://github.com/servo/webrender)",
|
"webrender_api 0.57.0 (git+https://github.com/servo/webrender)",
|
||||||
"xml5ever 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"xml5ever 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
@ -2926,6 +2927,7 @@ dependencies = [
|
||||||
"uluru 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"uluru 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"unicode-bidi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicode-bidi 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicode-segmentation 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"walkdir 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -26,3 +26,4 @@ string_cache = { version = "0.7", optional = true }
|
||||||
url = { version = "1.2", optional = true }
|
url = { version = "1.2", optional = true }
|
||||||
webrender_api = { git = "https://github.com/servo/webrender", features = ["ipc"], optional = true }
|
webrender_api = { git = "https://github.com/servo/webrender", features = ["ipc"], optional = true }
|
||||||
xml5ever = { version = "0.12", optional = true }
|
xml5ever = { version = "0.12", optional = true }
|
||||||
|
void = "1.0.2"
|
||||||
|
|
|
@ -60,6 +60,7 @@ extern crate string_cache;
|
||||||
extern crate url;
|
extern crate url;
|
||||||
#[cfg(feature = "webrender_api")]
|
#[cfg(feature = "webrender_api")]
|
||||||
extern crate webrender_api;
|
extern crate webrender_api;
|
||||||
|
extern crate void;
|
||||||
#[cfg(feature = "servo")]
|
#[cfg(feature = "servo")]
|
||||||
extern crate xml5ever;
|
extern crate xml5ever;
|
||||||
|
|
||||||
|
@ -67,6 +68,7 @@ use std::hash::{BuildHasher, Hash};
|
||||||
use std::mem::size_of;
|
use std::mem::size_of;
|
||||||
use std::ops::Range;
|
use std::ops::Range;
|
||||||
use std::os::raw::c_void;
|
use std::os::raw::c_void;
|
||||||
|
use void::Void;
|
||||||
|
|
||||||
/// A C function that takes a pointer to a heap allocation and returns its size.
|
/// A C function that takes a pointer to a heap allocation and returns its size.
|
||||||
type VoidPtrToSizeFn = unsafe extern "C" fn(ptr: *const c_void) -> usize;
|
type VoidPtrToSizeFn = unsafe extern "C" fn(ptr: *const c_void) -> usize;
|
||||||
|
@ -746,6 +748,13 @@ impl MallocSizeOf for selectors::parser::AncestorHashes {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl MallocSizeOf for Void {
|
||||||
|
#[inline]
|
||||||
|
fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
|
||||||
|
void::unreachable(*self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "servo")]
|
#[cfg(feature = "servo")]
|
||||||
impl<Static: string_cache::StaticAtomSet> MallocSizeOf for string_cache::Atom<Static> {
|
impl<Static: string_cache::StaticAtomSet> MallocSizeOf for string_cache::Atom<Static> {
|
||||||
fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
|
fn size_of(&self, _ops: &mut MallocSizeOfOps) -> usize {
|
||||||
|
|
|
@ -70,6 +70,7 @@ time = "0.1"
|
||||||
uluru = "0.2"
|
uluru = "0.2"
|
||||||
unicode-bidi = "0.3"
|
unicode-bidi = "0.3"
|
||||||
unicode-segmentation = "1.0"
|
unicode-segmentation = "1.0"
|
||||||
|
void = "1.0.2"
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
kernel32-sys = "0.2"
|
kernel32-sys = "0.2"
|
||||||
|
|
|
@ -78,6 +78,7 @@ extern crate uluru;
|
||||||
extern crate unicode_bidi;
|
extern crate unicode_bidi;
|
||||||
#[allow(unused_extern_crates)]
|
#[allow(unused_extern_crates)]
|
||||||
extern crate unicode_segmentation;
|
extern crate unicode_segmentation;
|
||||||
|
extern crate void;
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod macros;
|
mod macros;
|
||||||
|
|
|
@ -58,6 +58,7 @@ use values::generics::position as generic_position;
|
||||||
use values::generics::svg::{SVGLength, SvgLengthOrPercentageOrNumber, SVGPaint};
|
use values::generics::svg::{SVGLength, SvgLengthOrPercentageOrNumber, SVGPaint};
|
||||||
use values::generics::svg::{SVGPaintKind, SVGStrokeDashArray, SVGOpacity};
|
use values::generics::svg::{SVGPaintKind, SVGStrokeDashArray, SVGOpacity};
|
||||||
use values::specified::font::FontTag;
|
use values::specified::font::FontTag;
|
||||||
|
use void::{self, Void};
|
||||||
|
|
||||||
/// <https://drafts.csswg.org/css-transitions/#animtype-repeatable-list>
|
/// <https://drafts.csswg.org/css-transitions/#animtype-repeatable-list>
|
||||||
pub trait RepeatableListAnimatable: Animate {}
|
pub trait RepeatableListAnimatable: Animate {}
|
||||||
|
@ -343,16 +344,20 @@ unsafe impl HasSimpleFFI for AnimationValueMap {}
|
||||||
/// this (is a similar path to that of PropertyDeclaration).
|
/// this (is a similar path to that of PropertyDeclaration).
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
|
#[cfg_attr(feature = "servo", derive(MallocSizeOf))]
|
||||||
|
#[repr(u16)]
|
||||||
pub enum AnimationValue {
|
pub enum AnimationValue {
|
||||||
% for prop in data.longhands:
|
% for prop in data.longhands:
|
||||||
% if prop.animatable:
|
% if prop.animatable:
|
||||||
/// ${prop.name}
|
/// `${prop.name}`
|
||||||
% if prop.is_animatable_with_computed_value:
|
% if prop.is_animatable_with_computed_value:
|
||||||
${prop.camel_case}(longhands::${prop.ident}::computed_value::T),
|
${prop.camel_case}(longhands::${prop.ident}::computed_value::T),
|
||||||
% else:
|
% else:
|
||||||
${prop.camel_case}(<longhands::${prop.ident}::computed_value::T as ToAnimatedValue>::AnimatedValue),
|
${prop.camel_case}(<longhands::${prop.ident}::computed_value::T as ToAnimatedValue>::AnimatedValue),
|
||||||
% endif
|
% endif
|
||||||
% endif
|
% else:
|
||||||
|
/// `${prop.name}` (not animatable)
|
||||||
|
${prop.camel_case}(Void),
|
||||||
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +367,9 @@ impl AnimationValue {
|
||||||
match *self {
|
match *self {
|
||||||
% for prop in data.longhands:
|
% for prop in data.longhands:
|
||||||
% if prop.animatable:
|
% if prop.animatable:
|
||||||
AnimationValue::${prop.camel_case}(..) => LonghandId::${prop.camel_case},
|
AnimationValue::${prop.camel_case}(..) => LonghandId::${prop.camel_case},
|
||||||
|
% else:
|
||||||
|
AnimationValue::${prop.camel_case}(void) => void::unreachable(void),
|
||||||
% endif
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
}
|
}
|
||||||
|
@ -374,24 +381,26 @@ impl AnimationValue {
|
||||||
use properties::longhands;
|
use properties::longhands;
|
||||||
match *self {
|
match *self {
|
||||||
% for prop in data.longhands:
|
% for prop in data.longhands:
|
||||||
% if prop.animatable:
|
% if prop.animatable:
|
||||||
AnimationValue::${prop.camel_case}(ref from) => {
|
AnimationValue::${prop.camel_case}(ref from) => {
|
||||||
PropertyDeclaration::${prop.camel_case}(
|
PropertyDeclaration::${prop.camel_case}(
|
||||||
% if prop.boxed:
|
% if prop.boxed:
|
||||||
Box::new(
|
Box::new(
|
||||||
% endif
|
% endif
|
||||||
longhands::${prop.ident}::SpecifiedValue::from_computed_value(
|
longhands::${prop.ident}::SpecifiedValue::from_computed_value(
|
||||||
% if prop.is_animatable_with_computed_value:
|
% if prop.is_animatable_with_computed_value:
|
||||||
from
|
from
|
||||||
% else:
|
% else:
|
||||||
&ToAnimatedValue::from_animated_value(from.clone())
|
&ToAnimatedValue::from_animated_value(from.clone())
|
||||||
% endif
|
% endif
|
||||||
))
|
))
|
||||||
% if prop.boxed:
|
% if prop.boxed:
|
||||||
)
|
)
|
||||||
% endif
|
% endif
|
||||||
}
|
}
|
||||||
% endif
|
% else:
|
||||||
|
AnimationValue::${prop.camel_case}(void) => void::unreachable(void),
|
||||||
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -195,14 +195,6 @@ pub mod shorthands {
|
||||||
%>
|
%>
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A module with all the code related to animated properties.
|
|
||||||
///
|
|
||||||
/// This needs to be "included" by mako at least after all longhand modules,
|
|
||||||
/// given they populate the global data.
|
|
||||||
pub mod animated_properties {
|
|
||||||
<%include file="/helpers/animated_properties.mako.rs" />
|
|
||||||
}
|
|
||||||
|
|
||||||
<%
|
<%
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
|
|
||||||
|
@ -413,6 +405,14 @@ impl PropertyDeclaration {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A module with all the code related to animated properties.
|
||||||
|
///
|
||||||
|
/// This needs to be "included" by mako at least after all longhand modules,
|
||||||
|
/// given they populate the global data.
|
||||||
|
pub mod animated_properties {
|
||||||
|
<%include file="/helpers/animated_properties.mako.rs" />
|
||||||
|
}
|
||||||
|
|
||||||
/// A longhand or shorthand porperty
|
/// A longhand or shorthand porperty
|
||||||
#[derive(Clone, Copy, Debug)]
|
#[derive(Clone, Copy, Debug)]
|
||||||
pub struct NonCustomPropertyId(usize);
|
pub struct NonCustomPropertyId(usize);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue