use winit::window::WindowBuilder;
use pixel_widgets::prelude::*;
#[derive(Default)]
struct Counter {
initial_value: i32,
}
#[derive(Clone)]
enum Message {
UpPressed,
DownPressed,
}
impl Component for Counter {
type State = i32;
type Message = Message;
type Output = ();
fn mount(&self) -> Self::State {
self.initial_value
}
fn view(&self, state: &i32) -> Node<Message> {
view! {
Column => {
Button { text: "Up", on_clicked: Message::UpPressed },
Text { val: format!("Count: {}", *state) },
Button { text: "Down", on_clicked: Message::DownPressed },
}
}
}
fn update(&self, message: Message, mut state: State<i32>, _context: Context<Message, ()>) {
match message {
Message::UpPressed => *state += 1,
Message::DownPressed => *state -= 1,
}
}
}
#[tokio::main]
async fn main() {
Sandbox::new(
Counter { initial_value: 15 },
StyleBuilder::default(),
WindowBuilder::new()
.with_title("Counter")
.with_inner_size(winit::dpi::LogicalSize::new(240, 240)),
)
.await
.unwrap()
.run()
.await;
}