mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
Add some checks in PannerNode accessors
This commit is contained in:
parent
18960b6c94
commit
58176c4148
2 changed files with 19 additions and 7 deletions
|
@ -10,7 +10,7 @@ use dom::bindings::codegen::Bindings::AudioNodeBinding::AudioNodeOptions;
|
||||||
use dom::bindings::codegen::Bindings::AudioParamBinding::{AudioParamMethods, AutomationRate};
|
use dom::bindings::codegen::Bindings::AudioParamBinding::{AudioParamMethods, AutomationRate};
|
||||||
use dom::bindings::codegen::Bindings::PannerNodeBinding::{self, PannerNodeMethods, PannerOptions};
|
use dom::bindings::codegen::Bindings::PannerNodeBinding::{self, PannerNodeMethods, PannerOptions};
|
||||||
use dom::bindings::codegen::Bindings::PannerNodeBinding::{DistanceModelType, PanningModelType};
|
use dom::bindings::codegen::Bindings::PannerNodeBinding::{DistanceModelType, PanningModelType};
|
||||||
use dom::bindings::error::Fallible;
|
use dom::bindings::error::{Error, Fallible};
|
||||||
use dom::bindings::inheritance::Castable;
|
use dom::bindings::inheritance::Castable;
|
||||||
use dom::bindings::num::Finite;
|
use dom::bindings::num::Finite;
|
||||||
use dom::bindings::reflector::reflect_dom_object;
|
use dom::bindings::reflector::reflect_dom_object;
|
||||||
|
@ -232,20 +232,28 @@ impl PannerNodeMethods for PannerNode {
|
||||||
Finite::wrap(self.max_distance.get())
|
Finite::wrap(self.max_distance.get())
|
||||||
}
|
}
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-pannernode-maxdistance
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-maxdistance
|
||||||
fn SetMaxDistance(&self, val: Finite<f64>) {
|
fn SetMaxDistance(&self, val: Finite<f64>) -> Fallible<()> {
|
||||||
|
if *val < 0. {
|
||||||
|
return Err(Error::NotSupported)
|
||||||
|
}
|
||||||
self.max_distance.set(*val);
|
self.max_distance.set(*val);
|
||||||
let msg = PannerNodeMessage::SetMaxDistance(self.max_distance.get());
|
let msg = PannerNodeMessage::SetMaxDistance(self.max_distance.get());
|
||||||
self.upcast::<AudioNode>().message(AudioNodeMessage::PannerNode(msg));
|
self.upcast::<AudioNode>().message(AudioNodeMessage::PannerNode(msg));
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-pannernode-rollofffactor
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-rollofffactor
|
||||||
fn RolloffFactor(&self) -> Finite<f64> {
|
fn RolloffFactor(&self) -> Finite<f64> {
|
||||||
Finite::wrap(self.rolloff_factor.get())
|
Finite::wrap(self.rolloff_factor.get())
|
||||||
}
|
}
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-pannernode-rollofffactor
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-rollofffactor
|
||||||
fn SetRolloffFactor(&self, val: Finite<f64>) {
|
fn SetRolloffFactor(&self, val: Finite<f64>) -> Fallible<()> {
|
||||||
|
if *val < 0. {
|
||||||
|
return Err(Error::Range("value should be positive".into()))
|
||||||
|
}
|
||||||
self.rolloff_factor.set(*val);
|
self.rolloff_factor.set(*val);
|
||||||
let msg = PannerNodeMessage::SetRolloff(self.rolloff_factor.get());
|
let msg = PannerNodeMessage::SetRolloff(self.rolloff_factor.get());
|
||||||
self.upcast::<AudioNode>().message(AudioNodeMessage::PannerNode(msg));
|
self.upcast::<AudioNode>().message(AudioNodeMessage::PannerNode(msg));
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-pannernode-coneinnerangle
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-coneinnerangle
|
||||||
fn ConeInnerAngle(&self) -> Finite<f64> {
|
fn ConeInnerAngle(&self) -> Finite<f64> {
|
||||||
|
@ -272,10 +280,14 @@ impl PannerNodeMethods for PannerNode {
|
||||||
Finite::wrap(self.cone_outer_gain.get())
|
Finite::wrap(self.cone_outer_gain.get())
|
||||||
}
|
}
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-pannernode-coneoutergain
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-coneoutergain
|
||||||
fn SetConeOuterGain(&self, val: Finite<f64>) {
|
fn SetConeOuterGain(&self, val: Finite<f64>) -> Fallible<()> {
|
||||||
|
if *val < 0. || *val > 360. {
|
||||||
|
return Err(Error::InvalidState)
|
||||||
|
}
|
||||||
self.cone_outer_gain.set(*val);
|
self.cone_outer_gain.set(*val);
|
||||||
let msg = PannerNodeMessage::SetConeGain(self.cone_outer_gain.get());
|
let msg = PannerNodeMessage::SetConeGain(self.cone_outer_gain.get());
|
||||||
self.upcast::<AudioNode>().message(AudioNodeMessage::PannerNode(msg));
|
self.upcast::<AudioNode>().message(AudioNodeMessage::PannerNode(msg));
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://webaudio.github.io/web-audio-api/#dom-pannernode-setposition
|
// https://webaudio.github.io/web-audio-api/#dom-pannernode-setposition
|
||||||
|
|
|
@ -46,11 +46,11 @@ interface PannerNode : AudioNode {
|
||||||
readonly attribute AudioParam orientationZ;
|
readonly attribute AudioParam orientationZ;
|
||||||
attribute DistanceModelType distanceModel;
|
attribute DistanceModelType distanceModel;
|
||||||
attribute double refDistance;
|
attribute double refDistance;
|
||||||
attribute double maxDistance;
|
[SetterThrows] attribute double maxDistance;
|
||||||
attribute double rolloffFactor;
|
[SetterThrows] attribute double rolloffFactor;
|
||||||
attribute double coneInnerAngle;
|
attribute double coneInnerAngle;
|
||||||
attribute double coneOuterAngle;
|
attribute double coneOuterAngle;
|
||||||
attribute double coneOuterGain;
|
[SetterThrows] attribute double coneOuterGain;
|
||||||
void setPosition (float x, float y, float z);
|
void setPosition (float x, float y, float z);
|
||||||
void setOrientation (float x, float y, float z);
|
void setOrientation (float x, float y, float z);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue