| 
									
										
										
										
											2020-08-01 03:04:26 +01:00
										 |  |  | /*
 | 
					
						
							| 
									
										
										
										
											2021-04-28 22:46:44 +02:00
										 |  |  |  * Copyright (c) 2020, the SerenityOS developers. | 
					
						
							| 
									
										
										
										
											2020-08-01 03:04:26 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2021-04-22 01:24:48 -07:00
										 |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							| 
									
										
										
										
											2020-08-01 03:04:26 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-12 13:55:43 -04:00
										 |  |  | #include <LibWeb/HTML/AudioTrack.h>
 | 
					
						
							|  |  |  | #include <LibWeb/HTML/AudioTrackList.h>
 | 
					
						
							| 
									
										
										
										
											2020-08-01 03:04:26 +01:00
										 |  |  | #include <LibWeb/HTML/HTMLAudioElement.h>
 | 
					
						
							| 
									
										
										
										
											2022-08-28 13:42:07 +02:00
										 |  |  | #include <LibWeb/HTML/Window.h>
 | 
					
						
							| 
									
										
										
										
											2023-06-12 13:55:43 -04:00
										 |  |  | #include <LibWeb/Layout/AudioBox.h>
 | 
					
						
							| 
									
										
										
										
											2020-08-01 03:04:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | namespace Web::HTML { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-18 21:00:52 +01:00
										 |  |  | HTMLAudioElement::HTMLAudioElement(DOM::Document& document, DOM::QualifiedName qualified_name) | 
					
						
							| 
									
										
										
										
											2021-02-07 11:20:15 +01:00
										 |  |  |     : HTMLMediaElement(document, move(qualified_name)) | 
					
						
							| 
									
										
										
										
											2020-08-01 03:04:26 +01:00
										 |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-14 13:21:51 -06:00
										 |  |  | HTMLAudioElement::~HTMLAudioElement() = default; | 
					
						
							| 
									
										
										
										
											2023-01-10 06:28:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-07 08:41:28 +02:00
										 |  |  | void HTMLAudioElement::initialize(JS::Realm& realm) | 
					
						
							| 
									
										
										
										
											2023-01-10 06:28:20 -05:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2023-08-07 08:41:28 +02:00
										 |  |  |     Base::initialize(realm); | 
					
						
							| 
									
										
										
										
											2023-01-10 06:28:20 -05:00
										 |  |  |     set_prototype(&Bindings::ensure_web_prototype<Bindings::HTMLAudioElementPrototype>(realm, "HTMLAudioElement")); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-12 13:55:43 -04:00
										 |  |  | JS::GCPtr<Layout::Node> HTMLAudioElement::create_layout_node(NonnullRefPtr<CSS::StyleProperties> style) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return heap().allocate_without_realm<Layout::AudioBox>(document(), *this, move(style)); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Layout::AudioBox* HTMLAudioElement::layout_node() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return static_cast<Layout::AudioBox*>(Node::layout_node()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Layout::AudioBox const* HTMLAudioElement::layout_node() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return static_cast<Layout::AudioBox const*>(Node::layout_node()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void HTMLAudioElement::on_playing() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     audio_tracks()->for_each_enabled_track([](auto& audio_track) { | 
					
						
							|  |  |  |         audio_track.play({}); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void HTMLAudioElement::on_paused() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     audio_tracks()->for_each_enabled_track([](auto& audio_track) { | 
					
						
							|  |  |  |         audio_track.pause({}); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 10:12:46 -04:00
										 |  |  | void HTMLAudioElement::on_seek(double position, MediaSeekMode seek_mode) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     audio_tracks()->for_each_enabled_track([&](auto& audio_track) { | 
					
						
							|  |  |  |         audio_track.seek(position, seek_mode); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-14 13:07:09 -04:00
										 |  |  | void HTMLAudioElement::on_volume_change() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     audio_tracks()->for_each_enabled_track([&](auto& audio_track) { | 
					
						
							|  |  |  |         audio_track.update_volume(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-01 03:04:26 +01:00
										 |  |  | } |