use miniquad::*;
use nona::{Align, Color, Gradient, Paint, Point};
mod lib;
use lib::nvgimpl;
use nvgimpl::Renderer;
struct Stage {
renderer: nvgimpl::Renderer,
nona: nona::Context,
}
impl EventHandler for Stage {
fn update(&mut self, _ctx: &mut Context) {}
fn draw(&mut self, ctx: &mut Context) {
self.nona
.attach_renderer(&mut self.renderer.with_context(ctx), |canvas| {
canvas
.begin_frame(Some(Color::rgb_i(128, 128, 255)))
.unwrap();
canvas.begin_path();
canvas.rect((100.0, 100.0, 300.0, 300.0));
canvas.fill_paint(nona::Gradient::Linear {
start: (100, 100).into(),
end: (400, 400).into(),
start_color: nona::Color::rgb_i(0xAA, 0x6C, 0x39),
end_color: nona::Color::rgb_i(0x88, 0x2D, 0x60),
});
canvas.fill().unwrap();
let origin = (150.0, 140.0);
canvas.begin_path();
canvas.circle(origin, 64.0);
canvas.move_to(origin);
canvas.line_to((origin.0 + 300.0, origin.1 - 50.0));
canvas.stroke_paint(nona::Color::rgba(1.0, 1.0, 0.0, 1.0));
canvas.stroke_width(3.0);
canvas.stroke().unwrap();
canvas.end_frame().unwrap();
});
ctx.commit_frame();
}
}
impl Stage {
fn new(ctx: &mut Context) -> Self {
let mut renderer = nvgimpl::Renderer::create(ctx).unwrap();
let mut nona = nona::Context::create(&mut renderer.with_context(ctx)).unwrap();
Stage {
renderer, nona
}
}
}
fn main() {
miniquad::start(
conf::Conf {
window_title: "Miniquad".to_string(),
window_width: 500,
window_height: 500,
fullscreen: false,
high_dpi: true,
..Default::default()
},
|mut ctx| Box::new(Stage::new(&mut ctx)),
);
}