aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/macros.rs
diff options
context:
space:
mode:
authorFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-06-29 09:11:11 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-07-30 14:21:41 +0200
commit7380f69f77608372e16659fc74b45ad8c5a72b0a (patch)
tree91d657afbd84a068d0e207b122e36b8a219e24cd /components/script/dom/macros.rs
parent885addfaaeb6002c0f77e0b0d6ea640a1a69053c (diff)
downloadservo-7380f69f77608372e16659fc74b45ad8c5a72b0a.tar.gz
servo-7380f69f77608372e16659fc74b45ad8c5a72b0a.zip
Initial AudioParam bindings
Diffstat (limited to 'components/script/dom/macros.rs')
-rw-r--r--components/script/dom/macros.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs
index b2963305aa6..1d8ea2f371d 100644
--- a/components/script/dom/macros.rs
+++ b/components/script/dom/macros.rs
@@ -629,3 +629,56 @@ macro_rules! handle_potential_webgl_error {
handle_potential_webgl_error!($context, $call, ());
};
}
+
+macro_rules! audio_param_impl(
+ ($struct:ident, $node_type:ident, $message_type:ident, $setter:ident) => (
+ #[derive(JSTraceable, MallocSizeOf)]
+ struct $struct {
+ #[ignore_malloc_size_of = "Rc"]
+ context: Rc<AudioContext>,
+ #[ignore_malloc_size_of = "servo_media"]
+ node: NodeId,
+ }
+
+ impl $struct {
+ pub fn new(context: Rc<AudioContext>,
+ node: NodeId) -> Self {
+ Self {
+ context,
+ node,
+ }
+ }
+ }
+
+ impl AudioParamImpl for $struct {
+ fn set_value(&self, _value: f32) {}
+
+ fn set_value_at_time(&self, value: f32, start_time: f64) {
+ self.context.message_node(
+ self.node,
+ AudioNodeMessage::$node_type($message_type::$setter(
+ UserAutomationEvent::SetValueAtTime(value, start_time),
+ )),
+ );
+ }
+
+ fn ramp_to_value_at_time(&self, ramp_kind: RampKind, value: f32, end_time: f64) {
+ self.context.message_node(
+ self.node,
+ AudioNodeMessage::$node_type($message_type::$setter(
+ UserAutomationEvent::RampToValueAtTime(ramp_kind, value, end_time),
+ )),
+ );
+ }
+
+ fn set_target_at_time(&self, target: f32, start_time: f64, time_constant: f32) {
+ self.context.message_node(
+ self.node,
+ AudioNodeMessage::$node_type($message_type::$setter(
+ UserAutomationEvent::SetTargetAtTime(target, start_time, time_constant.into()),
+ )),
+ );
+ }
+ }
+ );
+);