#[path = "util/setup_context.rs"]
mod util;
use piet::kurbo::{Affine, Circle, Rect};
use piet::{Color, RenderContext as _};
use piet_wgpu::RenderContext;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let draw = move |rc: &mut RenderContext<'_, '_, '_>, _width, _height| {
const RED: Color = Color::rgb8(255, 0, 0);
const BLUE: Color = Color::rgb8(0, 0, 255);
const SEMI_TRANSPARENT_GREEN: Color = Color::rgba8(0, 255, 0, 125);
const SEMI_TRANSPARENT_WHITE: Color = Color::rgba8(255, 255, 255, 125);
rc.clear(None, Color::BLACK);
let circle = Circle::new((100., 100.), 90.);
let rect = Rect::new(20., 20., 180., 180.);
let degrees = 45.0;
let radians = degrees * std::f64::consts::PI / 180.;
let rotate = Affine::translate((100., 100.))
* Affine::rotate(radians)
* Affine::translate((-100., -100.0));
rc.save().unwrap();
rc.clip(circle);
rc.transform(rotate);
rc.clear(None, SEMI_TRANSPARENT_WHITE);
rc.clear(rect, BLUE);
rc.fill(rect, &RED);
rc.restore().unwrap();
let left_circ = Circle::new((10., 100.), 10.);
rc.fill(left_circ, &SEMI_TRANSPARENT_GREEN);
rc.clip(circle);
let right_circ = Circle::new((190., 100.), 10.);
rc.fill(right_circ, &SEMI_TRANSPARENT_GREEN);
let bottom_right_rect = Rect::from_origin_size((150., 150.), (50., 50.));
rc.clip(bottom_right_rect);
let bottom_left_rect = Rect::from_origin_size((0., 150.), (50., 50.));
rc.clear(bottom_left_rect, SEMI_TRANSPARENT_GREEN);
rc.fill(Rect::new(0., 0., 200., 200.), &SEMI_TRANSPARENT_GREEN);
};
util::run(draw)
}