diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp index 89de76fa6bb..e72b2358e32 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp @@ -34,6 +34,7 @@ static bool is_platform_object(Type const& type) "AnimationTimeline"sv, "Attr"sv, "AudioTrack"sv, + "BaseAudioContext"sv, "Blob"sv, "CanvasGradient"sv, "CanvasPattern"sv, @@ -63,6 +64,7 @@ static bool is_platform_object(Type const& type) "Path2D"sv, "PerformanceEntry"sv, "PerformanceMark"sv, + "PeriodicWave"sv, "PointerEvent"sv, "ReadableStreamBYOBReader"sv, "ReadableStreamDefaultReader"sv, diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index f60cf73f2af..950c03a42e0 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -661,6 +661,7 @@ set(SOURCES WebAudio/AudioContext.cpp WebAudio/BaseAudioContext.cpp WebAudio/OfflineAudioContext.cpp + WebAudio/PeriodicWave.cpp WebDriver/Capabilities.cpp WebDriver/Client.cpp WebDriver/Contexts.cpp diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 111da541feb..5bf7d5db404 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -682,6 +682,8 @@ class Table; namespace Web::WebAudio { class AudioContext; class BaseAudioContext; +class OfflineAudioContext; +class PeriodicWave; enum class AudioContextState; diff --git a/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.cpp b/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.cpp new file mode 100644 index 00000000000..bce667e9793 --- /dev/null +++ b/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2024, Shannon Booth + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +namespace Web::WebAudio { + +JS_DEFINE_ALLOCATOR(PeriodicWave); + +// https://webaudio.github.io/web-audio-api/#dom-periodicwave-periodicwave +WebIDL::ExceptionOr> PeriodicWave::construct_impl(JS::Realm& realm, JS::NonnullGCPtr, PeriodicWaveOptions const&) +{ + return WebIDL::NotSupportedError::create(realm, "FIXME: Implement PeriodicWave::construct_impl"_fly_string); +} + +PeriodicWave::~PeriodicWave() = default; + +void PeriodicWave::initialize(JS::Realm& realm) +{ + Base::initialize(realm); + WEB_SET_PROTOTYPE_FOR_INTERFACE(PeriodicWave); +} + +void PeriodicWave::visit_edges(Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); +} + +} diff --git a/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.h b/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.h new file mode 100644 index 00000000000..100e66ab0c8 --- /dev/null +++ b/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2024, Shannon Booth + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +namespace Web::WebAudio { + +// https://webaudio.github.io/web-audio-api/#PeriodicWaveConstraints +struct PeriodicWaveConstraints { + bool disable_normalization { false }; +}; + +// https://webaudio.github.io/web-audio-api/#PeriodicWaveOptions +struct PeriodicWaveOptions : PeriodicWaveConstraints { + Optional> real; + Optional> imag; +}; + +// https://webaudio.github.io/web-audio-api/#PeriodicWave +class PeriodicWave : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(PeriodicWave, Bindings::PlatformObject); + JS_DECLARE_ALLOCATOR(PeriodicWave); + +public: + static WebIDL::ExceptionOr> construct_impl(JS::Realm&, JS::NonnullGCPtr, PeriodicWaveOptions const&); + + virtual ~PeriodicWave() override; + +protected: + virtual void initialize(JS::Realm&) override; + virtual void visit_edges(Cell::Visitor&) override; +}; + +} diff --git a/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.idl b/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.idl new file mode 100644 index 00000000000..c7bed1ac3d7 --- /dev/null +++ b/Userland/Libraries/LibWeb/WebAudio/PeriodicWave.idl @@ -0,0 +1,18 @@ +#import + +// https://webaudio.github.io/web-audio-api/#PeriodicWaveConstraints +dictionary PeriodicWaveConstraints { + boolean disableNormalization = false; +}; + +// https://webaudio.github.io/web-audio-api/#PeriodicWaveOptions +dictionary PeriodicWaveOptions : PeriodicWaveConstraints { + sequence real; + sequence imag; +}; + +// https://webaudio.github.io/web-audio-api/#PeriodicWave +[Exposed=Window] +interface PeriodicWave { + constructor(BaseAudioContext context, optional PeriodicWaveOptions options = {}); +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index 799dc0b0eed..23afcda1f49 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -297,6 +297,7 @@ libweb_js_bindings(WebAudio/AudioBuffer) libweb_js_bindings(WebAudio/AudioContext) libweb_js_bindings(WebAudio/BaseAudioContext) libweb_js_bindings(WebAudio/OfflineAudioContext) +libweb_js_bindings(WebAudio/PeriodicWave) libweb_js_bindings(WebGL/WebGLContextEvent) libweb_js_bindings(WebGL/WebGLRenderingContext) libweb_js_bindings(WebIDL/DOMException)