Skip to content

Instantly share code, notes, and snippets.

@MartinKavik
Last active January 13, 2023 00:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MartinKavik/1580ce77adcb293c94717aed1c23b85c to your computer and use it in GitHub Desktop.
Save MartinKavik/1580ce77adcb293c94717aed1c23b85c to your computer and use it in GitHub Desktop.
"Calculator" written in MoonZoon
use zoon::{println, *};
fn root() -> impl Element {
let addend_a = Mutable::new(1);
let addend_b = Mutable::new(1);
let sum = map_ref! {
let addend_a = addend_a.signal(),
let addend_b = addend_b.signal() => {
println!("A: {addend_a}, B: {addend_b}");
addend_a + addend_b
}
};
Row::new()
.s(Align::center())
.s(Gap::new().x(5))
.item(addend_input(addend_a))
.item("+")
.item(addend_input(addend_b))
.item("=")
.item(El::new().s(Font::new().weight(FontWeight::Bold)).child_signal(sum))
}
fn addend_input(addend: Mutable<i32>) -> impl Element {
TextInput::new()
.s(Width::zeros(6))
.s(Padding::new().x(5).y(3))
.s(RoundedCorners::all(10))
.label_hidden("addend")
.text_signal(addend.signal())
.on_change(move |new_addend| {
if let Ok(new_addend) = new_addend.parse() {
addend.set_neq(new_addend)
}
})
}
fn main() {
start_app("app", root);
}
@MartinKavik
Copy link
Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment