aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib.rs
diff options
context:
space:
mode:
authorbrian cully <bjc@spork.org>2025-12-29 14:32:30 -0500
committerbrian cully <bjc@spork.org>2025-12-29 14:32:30 -0500
commit65d1301072a7f9223ce2ffe420b6f2784b8bbe04 (patch)
treec20667f8241a0211a23d6676213ea44843bbfb44 /src/lib.rs
parent316286b8b65ac5a7abf5117dc942a70b94e1be53 (diff)
downloadpolyring-65d1301072a7f9223ce2ffe420b6f2784b8bbe04.tar.gz
polyring-65d1301072a7f9223ce2ffe420b6f2784b8bbe04.zip
wasm: hook up dot count to html input
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs28
1 files changed, 26 insertions, 2 deletions
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<web_sys::HtmlElement> {
Ok(x.dyn_into()?)
}
+fn dots() -> JSResult<web_sys::HtmlInputElement> {
+ let x = document()
+ .query_selector("#dots")?
+ .ok_or("no dots element")?;
+ Ok(x.dyn_into()?)
+}
+
+fn dots_val() -> JSResult<usize> {
+ 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| {