From a25014ef0de43c490f3a3ec4a7fdffb9c57a6e77 Mon Sep 17 00:00:00 2001 From: Rob Watson Date: Thu, 10 Sep 2020 22:07:08 +0200 Subject: [PATCH] Add sample setInterval call --- Cargo.toml | 1 + src/canvas.rs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/Cargo.toml b/Cargo.toml index 8fbc6f5..39d7f93 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,7 @@ features = [ "AudioBuffer", "HtmlCanvasElement", "CanvasRenderingContext2d", + "Window", ] [profile.release] diff --git a/src/canvas.rs b/src/canvas.rs index 7ac2cf2..02e5618 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -1,6 +1,7 @@ use crate::agents::audio_agent::{AudioAgent, AudioData}; use crate::utils; use std::sync::Arc; +use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; use web_sys::HtmlCanvasElement; use yew::agent::Bridged; @@ -12,6 +13,7 @@ pub struct Canvas { _audio_agent: Box>, canvas_node: NodeRef, audio_data: Option>, + cb: Option>, } #[derive(Debug)] @@ -29,6 +31,26 @@ impl Component for Canvas { _audio_agent: AudioAgent::bridge(link.callback(Msg::AudioAgentMessage)), canvas_node: NodeRef::default(), audio_data: None, + cb: None, + } + } + + fn rendered(&mut self, first_render: bool) { + if first_render { + let cb = Closure::wrap(Box::new(|| { + ConsoleService::log(&format!("In the callback")); + }) as Box); + + // TODO: request_animation_frame() ? + let window = web_sys::window().unwrap(); + window + .set_interval_with_callback_and_timeout_and_arguments_0( + cb.as_ref().unchecked_ref(), + 1000, + ) + .unwrap(); + + self.cb = Some(cb); } }