mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 19:38:12 +00:00
LibWeb: Keep track of associated AnimationEffects in Animatable
This commit is contained in:
parent
2ade834655
commit
5eea53f27a
4 changed files with 33 additions and 1 deletions
|
@ -61,4 +61,14 @@ Vector<JS::NonnullGCPtr<Animation>> Animatable::get_animations(Web::Animations::
|
|||
return {};
|
||||
}
|
||||
|
||||
void Animatable::associate_with_effect(JS::NonnullGCPtr<AnimationEffect> effect)
|
||||
{
|
||||
m_associated_effects.append(effect);
|
||||
}
|
||||
|
||||
void Animatable::disassociate_with_effect(JS::NonnullGCPtr<AnimationEffect> effect)
|
||||
{
|
||||
m_associated_effects.remove_first_matching([&](auto element) { return effect == element; });
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -29,6 +29,12 @@ public:
|
|||
|
||||
WebIDL::ExceptionOr<JS::NonnullGCPtr<Animation>> animate(Optional<JS::Handle<JS::Object>> keyframes, Variant<Empty, double, KeyframeAnimationOptions> options = {});
|
||||
Vector<JS::NonnullGCPtr<Animation>> get_animations(GetAnimationsOptions options = {});
|
||||
|
||||
void associate_with_effect(JS::NonnullGCPtr<AnimationEffect> effect);
|
||||
void disassociate_with_effect(JS::NonnullGCPtr<AnimationEffect> effect);
|
||||
|
||||
private:
|
||||
Vector<JS::NonnullGCPtr<AnimationEffect>> m_associated_effects;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -732,6 +732,15 @@ WebIDL::ExceptionOr<JS::NonnullGCPtr<KeyframeEffect>> KeyframeEffect::construct_
|
|||
return effect;
|
||||
}
|
||||
|
||||
void KeyframeEffect::set_target(DOM::Element* target)
|
||||
{
|
||||
if (m_target_element)
|
||||
m_target_element->disassociate_with_effect(*this);
|
||||
m_target_element = target;
|
||||
if (m_target_element)
|
||||
m_target_element->associate_with_effect(*this);
|
||||
}
|
||||
|
||||
void KeyframeEffect::set_pseudo_element(Optional<String> pseudo_element)
|
||||
{
|
||||
// On setting, sets the target pseudo-selector of the animation effect to the provided value after applying the
|
||||
|
@ -834,6 +843,12 @@ KeyframeEffect::KeyframeEffect(JS::Realm& realm)
|
|||
{
|
||||
}
|
||||
|
||||
KeyframeEffect::~KeyframeEffect()
|
||||
{
|
||||
if (m_target_element)
|
||||
m_target_element->disassociate_with_effect(*this);
|
||||
}
|
||||
|
||||
void KeyframeEffect::initialize(JS::Realm& realm)
|
||||
{
|
||||
Base::initialize(realm);
|
||||
|
|
|
@ -82,7 +82,7 @@ public:
|
|||
static WebIDL::ExceptionOr<JS::NonnullGCPtr<KeyframeEffect>> construct_impl(JS::Realm&, JS::NonnullGCPtr<KeyframeEffect> source);
|
||||
|
||||
DOM::Element* target() const override { return m_target_element; }
|
||||
void set_target(DOM::Element* target) { m_target_element = target; }
|
||||
void set_target(DOM::Element* target);
|
||||
|
||||
Optional<String> pseudo_element() const { return m_target_pseudo_selector; }
|
||||
void set_pseudo_element(Optional<String>);
|
||||
|
@ -98,6 +98,7 @@ public:
|
|||
|
||||
private:
|
||||
KeyframeEffect(JS::Realm&);
|
||||
virtual ~KeyframeEffect() override;
|
||||
|
||||
virtual void initialize(JS::Realm&) override;
|
||||
virtual void visit_edges(Cell::Visitor&) override;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue