From 65d1301072a7f9223ce2ffe420b6f2784b8bbe04 Mon Sep 17 00:00:00 2001 From: brian cully Date: Mon, 29 Dec 2025 14:32:30 -0500 Subject: wasm: hook up dot count to html input --- src/lib.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 8e650e5..71f0afd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -66,6 +66,17 @@ fn results() -> JSResult { Ok(x.dyn_into()?) } +fn dots() -> JSResult { + let x = document() + .query_selector("#dots")? + .ok_or("no dots element")?; + Ok(x.dyn_into()?) +} + +fn dots_val() -> JSResult { + Ok(dots()?.value().parse().map_err(|_| "dots isn't int")?) +} + #[wasm_bindgen(start)] pub fn init() -> JSResult<()> { console_log::init_with_level(Level::Debug) @@ -76,10 +87,12 @@ pub fn init() -> JSResult<()> { let p1 = paused.clone(); let mut s = State::new(canvas()?, fps()?)?; + s.set_dot_count(dots_val()?); s.render_frame(0.0)?; let shared_s = Rc::new(RefCell::new(s)); let s1 = shared_s.clone(); + let s2 = shared_s.clone(); let render_loop = RenderLoop::new(move |t| { let mut s = shared_s.borrow_mut(); @@ -88,6 +101,18 @@ pub fn init() -> JSResult<()> { Ok(!*paused.lock().unwrap()) }); + let dot_count_handler: HandlerClosure = Closure::new(move |e| { + debug!("dot count changed {:?} - {}", e, dots_val()?); + let mut s = s2.borrow_mut(); + s.set_dot_count(dots_val()?); + s.render_frame(0.0)?; + Ok(()) + }); + dots()?.set_onchange(Some(dot_count_handler.as_ref().unchecked_ref())); + // otherwise it gets dropped after we're done, invalidating the + // handler. + dot_count_handler.forget(); + let go_handler: HandlerClosure = Closure::new(move |e| { debug!("go clicked: {:?}", e); let mut p = p1.lock().unwrap(); @@ -102,8 +127,7 @@ pub fn init() -> JSResult<()> { Ok(()) }); go()?.set_onclick(Some(go_handler.as_ref().unchecked_ref())); - // otherwise it gets dropped after we're done, invalidating the - // handler. + // ibid. go_handler.forget(); let bench_handler: HandlerClosure = Closure::new(move |e| { -- cgit v1.3