use winit::error::EventLoopError;
use xilem::core::lens;
use xilem::view::{MainAxisAlignment, flex_col, flex_row, label, text_button};
use xilem::{EventLoop, WidgetView, WindowOptions, Xilem};
#[derive(Default)]
struct AppState {
modularized_count: i32,
global_count: i32,
}
fn modular_counter(count: &mut i32) -> impl WidgetView<i32> + use<> {
flex_col((
label(format!("modularized count: {count}")),
text_button("+", |count| *count += 1),
text_button("-", |count| *count -= 1),
))
}
fn app_logic(state: &mut AppState) -> impl WidgetView<AppState> + use<> {
flex_row((
lens(modular_counter, |state: &mut AppState| {
&mut state.modularized_count
}),
text_button(
format!("clicked {} times", state.global_count),
|state: &mut AppState| state.global_count += 1,
),
))
.main_axis_alignment(MainAxisAlignment::Center)
}
fn main() -> Result<(), EventLoopError> {
let app = Xilem::new_simple(
AppState::default(),
app_logic,
WindowOptions::new("Components"),
);
app.run_in(EventLoop::with_user_event())?;
Ok(())
}