mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
Auto merge of #16381 - BorisChiou:stylo/transition/use_computed_values, r=manishearth
stylo: Bug 1343753 - Use ComputedValues while updating transitions in Gecko These are interdependent patches of Bug 1343753. We want to use ComputedValues and AnimationValues to start/update/stop the transitions. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix Bug 1343753. - [X] These changes do not require tests because we have tests in Gecko already. <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/16381) <!-- Reviewable:end -->
This commit is contained in:
commit
e817666859
4 changed files with 77 additions and 0 deletions
|
@ -678,6 +678,7 @@ impl<'le> TElement for GeckoElement<'le> {
|
||||||
let atom_ptr = PseudoElement::ns_atom_or_null_from_opt(pseudo);
|
let atom_ptr = PseudoElement::ns_atom_or_null_from_opt(pseudo);
|
||||||
unsafe {
|
unsafe {
|
||||||
Gecko_UpdateAnimations(self.0, atom_ptr,
|
Gecko_UpdateAnimations(self.0, atom_ptr,
|
||||||
|
None,
|
||||||
computed_values_opt,
|
computed_values_opt,
|
||||||
parent_values_opt,
|
parent_values_opt,
|
||||||
tasks.bits());
|
tasks.bits());
|
||||||
|
|
|
@ -630,6 +630,8 @@ extern "C" {
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Gecko_UpdateAnimations(aElement: RawGeckoElementBorrowed,
|
pub fn Gecko_UpdateAnimations(aElement: RawGeckoElementBorrowed,
|
||||||
aPseudoTagOrNull: *mut nsIAtom,
|
aPseudoTagOrNull: *mut nsIAtom,
|
||||||
|
aOldComputedValues:
|
||||||
|
ServoComputedValuesBorrowedOrNull,
|
||||||
aComputedValues:
|
aComputedValues:
|
||||||
ServoComputedValuesBorrowedOrNull,
|
ServoComputedValuesBorrowedOrNull,
|
||||||
aParentComputedValues:
|
aParentComputedValues:
|
||||||
|
@ -1684,6 +1686,13 @@ extern "C" {
|
||||||
nsCSSPropertyID)
|
nsCSSPropertyID)
|
||||||
-> RawServoAnimationValueStrong;
|
-> RawServoAnimationValueStrong;
|
||||||
}
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Servo_Property_IsAnimatable(property: nsCSSPropertyID) -> bool;
|
||||||
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Servo_Property_IsDiscreteAnimatable(property: nsCSSPropertyID)
|
||||||
|
-> bool;
|
||||||
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_AnimationValues_Interpolate(from:
|
pub fn Servo_AnimationValues_Interpolate(from:
|
||||||
RawServoAnimationValueBorrowed,
|
RawServoAnimationValueBorrowed,
|
||||||
|
@ -1692,6 +1701,13 @@ extern "C" {
|
||||||
progress: f64)
|
progress: f64)
|
||||||
-> RawServoAnimationValueStrong;
|
-> RawServoAnimationValueStrong;
|
||||||
}
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Servo_AnimationValues_IsInterpolable(from:
|
||||||
|
RawServoAnimationValueBorrowed,
|
||||||
|
to:
|
||||||
|
RawServoAnimationValueBorrowed)
|
||||||
|
-> bool;
|
||||||
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_AnimationValue_Serialize(value:
|
pub fn Servo_AnimationValue_Serialize(value:
|
||||||
RawServoAnimationValueBorrowed,
|
RawServoAnimationValueBorrowed,
|
||||||
|
@ -1716,6 +1732,11 @@ extern "C" {
|
||||||
RawServoAnimationValueBorrowed)
|
RawServoAnimationValueBorrowed)
|
||||||
-> bool;
|
-> bool;
|
||||||
}
|
}
|
||||||
|
extern "C" {
|
||||||
|
pub fn Servo_AnimationValue_Uncompute(value:
|
||||||
|
RawServoAnimationValueBorrowed)
|
||||||
|
-> RawServoDeclarationBlockStrong;
|
||||||
|
}
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub fn Servo_ParseStyleAttribute(data: *const nsACString,
|
pub fn Servo_ParseStyleAttribute(data: *const nsACString,
|
||||||
extra_data: *mut RawGeckoURLExtraData)
|
extra_data: *mut RawGeckoURLExtraData)
|
||||||
|
|
|
@ -104,6 +104,31 @@ impl TransitionProperty {
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns true if this TransitionProperty is one of the discrete animatable properties.
|
||||||
|
pub fn is_discrete(&self) -> bool {
|
||||||
|
match *self {
|
||||||
|
% for prop in data.longhands:
|
||||||
|
% if prop.animation_type == "discrete":
|
||||||
|
TransitionProperty::${prop.camel_case} => true,
|
||||||
|
% endif
|
||||||
|
% endfor
|
||||||
|
_ => false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns true if this nsCSSPropertyID is one of the animatable properties.
|
||||||
|
#[cfg(feature = "gecko")]
|
||||||
|
pub fn nscsspropertyid_is_animatable(property: nsCSSPropertyID) -> bool {
|
||||||
|
match property {
|
||||||
|
% for prop in data.longhands:
|
||||||
|
% if prop.animatable:
|
||||||
|
${helpers.to_nscsspropertyid(prop.ident)} => true,
|
||||||
|
% endif
|
||||||
|
% endfor
|
||||||
|
_ => false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToCss for TransitionProperty {
|
impl ToCss for TransitionProperty {
|
||||||
|
|
|
@ -256,6 +256,15 @@ pub extern "C" fn Servo_AnimationValues_Interpolate(from: RawServoAnimationValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn Servo_AnimationValues_IsInterpolable(from: RawServoAnimationValueBorrowed,
|
||||||
|
to: RawServoAnimationValueBorrowed)
|
||||||
|
-> bool {
|
||||||
|
let from_value = AnimationValue::as_arc(&from);
|
||||||
|
let to_value = AnimationValue::as_arc(&to);
|
||||||
|
from_value.interpolate(to_value, 0.5).is_ok()
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_AnimationValueMap_Push(value_map: RawServoAnimationValueMapBorrowed,
|
pub extern "C" fn Servo_AnimationValueMap_Push(value_map: RawServoAnimationValueMapBorrowed,
|
||||||
property: nsCSSPropertyID,
|
property: nsCSSPropertyID,
|
||||||
|
@ -401,6 +410,15 @@ pub extern "C" fn Servo_AnimationValue_DeepEqual(this: RawServoAnimationValueBor
|
||||||
this_value == other_value
|
this_value == other_value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn Servo_AnimationValue_Uncompute(value: RawServoAnimationValueBorrowed)
|
||||||
|
-> RawServoDeclarationBlockStrong {
|
||||||
|
let value = AnimationValue::as_arc(&value);
|
||||||
|
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||||
|
Arc::new(global_style_data.shared_lock.wrap(
|
||||||
|
PropertyDeclarationBlock::with_one(value.uncompute(), Importance::Normal))).into_strong()
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_StyleSet_GetBaseComputedValuesForElement(raw_data: RawServoStyleSetBorrowed,
|
pub extern "C" fn Servo_StyleSet_GetBaseComputedValuesForElement(raw_data: RawServoStyleSetBorrowed,
|
||||||
element: RawGeckoElementBorrowed,
|
element: RawGeckoElementBorrowed,
|
||||||
|
@ -443,6 +461,18 @@ pub extern "C" fn Servo_ComputedValues_ExtractAnimationValue(computed_values: Se
|
||||||
Arc::new(AnimationValue::from_computed_values(&property_id.into(), computed_values)).into_strong()
|
Arc::new(AnimationValue::from_computed_values(&property_id.into(), computed_values)).into_strong()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn Servo_Property_IsAnimatable(property: nsCSSPropertyID) -> bool {
|
||||||
|
use style::properties::animated_properties;
|
||||||
|
animated_properties::nscsspropertyid_is_animatable(property)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn Servo_Property_IsDiscreteAnimatable(property: nsCSSPropertyID) -> bool {
|
||||||
|
let property: TransitionProperty = property.into();
|
||||||
|
property.is_discrete()
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn Servo_StyleWorkerThreadCount() -> u32 {
|
pub extern "C" fn Servo_StyleWorkerThreadCount() -> u32 {
|
||||||
GLOBAL_STYLE_DATA.num_threads as u32
|
GLOBAL_STYLE_DATA.num_threads as u32
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue