Add some checks in PannerNode accessors

This commit is contained in:
Manish Goregaokar 2018-08-24 12:17:26 -07:00
parent 18960b6c94
commit 58176c4148
2 changed files with 19 additions and 7 deletions

View file

@ -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

View file

@ -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);
}; };