mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-12-26 12:41:59 +03:00
LibWeb: Keep track of associated AnimationEffects in Animatable
This commit is contained in:
parent
2ade834655
commit
5eea53f27a
Notes:
sideshowbarker
2024-07-16 23:38:54 +09:00
Author: https://github.com/mattco98 Commit: https://github.com/SerenityOS/serenity/commit/5eea53f27a Pull-request: https://github.com/SerenityOS/serenity/pull/23257
@ -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…
Reference in New Issue
Block a user