1use std::f32::consts::FRAC_PI_2;
2
3use sge::prelude::*;
4
5#[main("Screenshot")]
6async fn main() -> anyhow::Result<()> {
7 start_coroutine(draw_pattern());
8
9 let mut textures = vec![];
10
11 loop {
12 if key_pressed(KeyCode::Space) {
13 let screenshot = take_screenshot();
14 textures.push(screenshot);
15 info!("Screenshot taken");
16 }
17
18 draw_screenshots(&textures);
19
20 if should_quit() {
21 break;
22 }
23
24 next_frame().await;
25 }
26
27 Ok(())
28}
29
30fn draw_screenshots(screenshots: &[TextureRef]) {
33 use ui::*;
34
35 let gap = min_window_dimension() / 50.0;
36 let ui = Padding::all(
37 gap,
38 Grid::with_gap(
39 4,
40 4,
41 gap,
42 screenshots
43 .iter()
44 .map(|t| {
45 AspectRatio::new(
46 t.normalized_dimensions.x / t.normalized_dimensions.y,
47 ImageNode::from_texture(*t),
48 )
49 })
50 .collect::<Vec<_>>(),
51 ),
52 );
53
54 draw_ui_in_area(ui, window_area());
55}
56
57async fn draw_pattern() {
58 let mut hue = 0.0;
59 let mut offset = vec2(0.0, 0.0);
60
61 loop {
62 hue += 20.0 * delta_time();
63 hue %= 360.0;
64 let color = Color::from_oklch(0.727, 0.1219, hue);
65 let alt_color = color.darken_oklch(0.05);
66
67 offset -= vec2(0.5, 0.25) * delta_time();
68
69 draw_sdf(
70 Sdf::rect_tl(vec2(0.0, 0.0), window_size())
71 .with_fill(color, alt_color, FRAC_PI_2, 5.0, SdfFill::Truchet)
72 .with_fill_offset(offset),
73 );
74
75 let r = min_window_dimension() / 5.0;
76
77 draw_circle(window_center(), r, Color::BLACK);
78 push_scissor(Area::new(vec2(window_center().x, 0.0), window_size()).to_rect());
79 draw_circle(window_center(), r, Color::WHITE);
80 pop_scissor();
81
82 next_frame().await;
83 }
84}