use mirui::draw::{Renderer, SwRenderer};
use mirui::ecs::World;
use mirui::layout::*;
use mirui::types::Color;
use mirui::widget::builder::WidgetBuilder;
use mirui::widget::render_system;
use sdl2::event::Event;
use sdl2::keyboard::Keycode;
use sdl2::pixels::PixelFormatEnum;
const W: u32 = 480;
const H: u32 = 320;
fn main() {
let mut world = World::new();
let c1 = WidgetBuilder::new(&mut world)
.bg_color(Color::rgb(88, 166, 255))
.layout(LayoutStyle {
width: Some(120),
height: Some(80),
..Default::default()
})
.id();
let c2 = WidgetBuilder::new(&mut world)
.bg_color(Color::rgb(63, 185, 80))
.layout(LayoutStyle {
width: Some(120),
height: Some(80),
..Default::default()
})
.id();
let c3 = WidgetBuilder::new(&mut world)
.bg_color(Color::rgb(248, 81, 73))
.layout(LayoutStyle {
width: Some(120),
height: Some(80),
..Default::default()
})
.id();
let root = WidgetBuilder::new(&mut world)
.bg_color(Color::rgb(30, 30, 46))
.layout(LayoutStyle {
direction: FlexDirection::Row,
justify: JustifyContent::SpaceEvenly,
align: AlignItems::Center,
width: Some(W as u16),
height: Some(H as u16),
padding: Padding {
top: 20,
right: 20,
bottom: 20,
left: 20,
},
..Default::default()
})
.child(c1)
.child(c2)
.child(c3)
.id();
let mut buf = vec![0u8; (W * H * 4) as usize];
let mut renderer = SwRenderer::new(&mut buf, W, H);
render_system::render(&world, root, W as u16, H as u16, &mut renderer);
renderer.flush();
let sdl = sdl2::init().unwrap();
let video = sdl.video().unwrap();
let window = video
.window("mirui - ECS widget", W, H)
.position_centered()
.build()
.unwrap();
let mut canvas = window.into_canvas().build().unwrap();
let tc = canvas.texture_creator();
let mut texture = tc
.create_texture_streaming(PixelFormatEnum::RGBA32, W, H)
.unwrap();
texture.update(None, &buf, (W * 4) as usize).unwrap();
canvas.copy(&texture, None, None).unwrap();
canvas.present();
let mut event_pump = sdl.event_pump().unwrap();
'running: loop {
for event in event_pump.poll_iter() {
match event {
Event::Quit { .. }
| Event::KeyDown {
keycode: Some(Keycode::Escape),
..
} => break 'running,
_ => {}
}
}
std::thread::sleep(std::time::Duration::from_millis(16));
}
}