mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:22:43 +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
	
	 Matthew Olsson
						Matthew Olsson