Add Servo_StyleSet_GetComputedValuesByAddingAnimation FFI.

Add an FFI to create a temporary ServoStyleContext with the animation value.
We need this because we calculate the Cumulative change hints to check
if we can ignore this animation segment.
This commit is contained in:
Boris Chiou 2017-10-19 10:49:10 +08:00
parent 4c538b642e
commit aa72970f0a
3 changed files with 117 additions and 27 deletions

View file

@ -3004,6 +3004,19 @@ extern "C" {
CSSPseudoElementType)
-> ServoStyleContextStrong;
}
extern "C" {
pub fn Servo_StyleSet_GetComputedValuesByAddingAnimation(set:
RawServoStyleSetBorrowed,
element:
RawGeckoElementBorrowed,
existing_style:
ServoStyleContextBorrowed,
snapshots:
*const ServoElementSnapshotTable,
animation:
RawServoAnimationValueBorrowed)
-> ServoStyleContextStrong;
}
extern "C" {
pub fn Servo_SerializeFontValueForCanvas(declarations:
RawServoDeclarationBlockBorrowed,

View file

@ -446,6 +446,25 @@ impl RuleTree {
let rule = self.insert_ordered_rules_from(last.parent().unwrap().clone(), children.drain().rev());
rule
}
/// Returns new rule node by adding animation rules at transition level.
/// The additional rules must be appropriate for the transition
/// level of the cascade, which is the highest level of the cascade.
/// (This is the case for one current caller, the cover rule used
/// for CSS transitions.)
pub fn add_animation_rules_at_transition_level(
&self,
path: &StrongRuleNode,
pdb: Arc<Locked<PropertyDeclarationBlock>>,
guards: &StylesheetGuards,
) -> StrongRuleNode {
let mut dummy = false;
self.update_rule_at_level(CascadeLevel::Transitions,
Some(pdb.borrow_arc()),
path,
guards,
&mut dummy).expect("Should return a valid rule node")
}
}
/// The number of RuleNodes added to the free list before we will consider