mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
Previously, the LibWeb bindings generator would output multiple per interface files like Prototype/Constructor/Namespace/GlobalMixin depending on the contents of that IDL file. This complicates the build system as it means that it does not know what files will be generated without knowledge of the contents of that IDL file. Instead, for each IDL file only generate a single Bindings/<IDLFile>.h and Bindings/<IDLFile>.cpp.
135 lines
5.3 KiB
C++
135 lines
5.3 KiB
C++
/*
|
|
* Copyright (c) 2024, Luke Wilde <luke@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibWeb/Bindings/PannerNode.h>
|
|
#include <LibWeb/WebAudio/AudioNode.h>
|
|
|
|
namespace Web::WebAudio {
|
|
|
|
// https://webaudio.github.io/web-audio-api/#PannerOptions
|
|
struct PannerOptions : AudioNodeOptions {
|
|
Bindings::PanningModelType panning_model { Bindings::PanningModelType::Equalpower };
|
|
Bindings::DistanceModelType distance_model { Bindings::DistanceModelType::Inverse };
|
|
float position_x { 0.0f };
|
|
float position_y { 0.0f };
|
|
float position_z { 0.0f };
|
|
float orientation_x { 1.0f };
|
|
float orientation_y { 0.0f };
|
|
float orientation_z { 0.0f };
|
|
double ref_distance { 1.0 };
|
|
double max_distance { 10000.0 };
|
|
double rolloff_factor { 1.0 };
|
|
double cone_inner_angle { 360.0 };
|
|
double cone_outer_angle { 360.0 };
|
|
double cone_outer_gain { 0.0 };
|
|
};
|
|
|
|
// https://webaudio.github.io/web-audio-api/#PannerNode
|
|
class PannerNode final : public AudioNode {
|
|
WEB_PLATFORM_OBJECT(PannerNode, AudioNode);
|
|
GC_DECLARE_ALLOCATOR(PannerNode);
|
|
|
|
public:
|
|
virtual ~PannerNode() override;
|
|
|
|
static WebIDL::ExceptionOr<GC::Ref<PannerNode>> create(JS::Realm&, GC::Ref<BaseAudioContext>, PannerOptions const& = {});
|
|
static WebIDL::ExceptionOr<GC::Ref<PannerNode>> construct_impl(JS::Realm&, GC::Ref<BaseAudioContext>, PannerOptions const& = {});
|
|
|
|
WebIDL::UnsignedLong number_of_inputs() override { return 1; }
|
|
WebIDL::UnsignedLong number_of_outputs() override { return 1; }
|
|
|
|
GC::Ref<AudioParam const> position_x() const { return m_position_x; }
|
|
GC::Ref<AudioParam const> position_y() const { return m_position_y; }
|
|
GC::Ref<AudioParam const> position_z() const { return m_position_z; }
|
|
GC::Ref<AudioParam const> orientation_x() const { return m_orientation_x; }
|
|
GC::Ref<AudioParam const> orientation_y() const { return m_orientation_y; }
|
|
GC::Ref<AudioParam const> orientation_z() const { return m_orientation_z; }
|
|
|
|
Bindings::PanningModelType panning_model() const { return m_panning_model; }
|
|
void set_panning_model(Bindings::PanningModelType value) { m_panning_model = value; }
|
|
|
|
Bindings::DistanceModelType distance_model() const { return m_distance_model; }
|
|
void set_distance_model(Bindings::DistanceModelType value) { m_distance_model = value; }
|
|
|
|
double ref_distance() const { return m_ref_distance; }
|
|
WebIDL::ExceptionOr<void> set_ref_distance(double);
|
|
|
|
double max_distance() const { return m_max_distance; }
|
|
WebIDL::ExceptionOr<void> set_max_distance(double);
|
|
|
|
double rolloff_factor() const { return m_rolloff_factor; }
|
|
WebIDL::ExceptionOr<void> set_rolloff_factor(double);
|
|
|
|
double cone_inner_angle() const { return m_cone_inner_angle; }
|
|
void set_cone_inner_angle(double value) { m_cone_inner_angle = value; }
|
|
|
|
double cone_outer_angle() const { return m_cone_outer_angle; }
|
|
void set_cone_outer_angle(double value) { m_cone_outer_angle = value; }
|
|
|
|
double cone_outer_gain() const { return m_cone_outer_gain; }
|
|
WebIDL::ExceptionOr<void> set_cone_outer_gain(double);
|
|
|
|
WebIDL::ExceptionOr<void> set_position(float x, float y, float z);
|
|
WebIDL::ExceptionOr<void> set_orientation(float x, float y, float z);
|
|
|
|
// ^AudioNode
|
|
virtual WebIDL::ExceptionOr<void> set_channel_count(WebIDL::UnsignedLong) override;
|
|
virtual WebIDL::ExceptionOr<void> set_channel_count_mode(Bindings::ChannelCountMode) override;
|
|
|
|
protected:
|
|
PannerNode(JS::Realm&, GC::Ref<BaseAudioContext>, PannerOptions const& = {});
|
|
|
|
virtual void initialize(JS::Realm&) override;
|
|
virtual void visit_edges(Cell::Visitor&) override;
|
|
|
|
private:
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-panningmodel
|
|
Bindings::PanningModelType m_panning_model { Bindings::PanningModelType::Equalpower };
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-positionx
|
|
GC::Ref<AudioParam> m_position_x;
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-positiony
|
|
GC::Ref<AudioParam> m_position_y;
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-positionz
|
|
GC::Ref<AudioParam> m_position_z;
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-orientationx
|
|
GC::Ref<AudioParam> m_orientation_x;
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-orientationy
|
|
GC::Ref<AudioParam> m_orientation_y;
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-orientationz
|
|
GC::Ref<AudioParam> m_orientation_z;
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-distancemodel
|
|
Bindings::DistanceModelType m_distance_model { Bindings::DistanceModelType::Inverse };
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-refdistance
|
|
double m_ref_distance { 1.0 };
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-maxdistance
|
|
double m_max_distance { 10000.0 };
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-rollofffactor
|
|
double m_rolloff_factor { 1.0 };
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-coneinnerangle
|
|
double m_cone_inner_angle { 360.0 };
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-coneouterangle
|
|
double m_cone_outer_angle { 360.0 };
|
|
|
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-coneoutergain
|
|
double m_cone_outer_gain { 0.0 };
|
|
};
|
|
|
|
}
|