use std::thread::sleep;
use std::time::Duration;
use quicksilver::{
geom::{Rectangle, Vector},
graphics::{Color, Graphics},
run, Input, Result, Settings, Window,
};
fn main() {
run(
Settings {
title: "Square Example",
..Settings::default()
},
app,
)
}
const STEPS: usize = 10;
fn load_something() {
sleep(Duration::from_secs(1));
}
fn draw_loader(window: &Window, gfx: &mut Graphics, progress: usize, total: usize) -> Result<()> {
gfx.clear(Color::BLACK);
gfx.fill_rect(
&Rectangle::new(Vector::new(50.0, 500.0), Vector::new(700.0, 25.0)),
Color::YELLOW,
);
let width = 700.0 * progress as f32 / total as f32;
gfx.fill_rect(
&Rectangle::new(Vector::new(50.0, 500.0), Vector::new(width, 25.0)),
Color::BLUE,
);
gfx.present(&window)?;
Ok(())
}
async fn app(window: Window, mut gfx: Graphics, mut events: Input) -> Result<()> {
for i in 0..STEPS {
draw_loader(&window, &mut gfx, i, STEPS)?;
load_something();
}
gfx.clear(Color::GREEN);
gfx.present(&window)?;
loop {
while let Some(_) = events.next_event().await {}
}
}