1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use druid::{AppLauncher, Widget, WindowDesc};
use plotters::prelude::*;
use plotters_druid::Plot;

fn build_plot_widget() -> impl Widget<()> {
    Plot::new(|_size, _data, root| {
        // Code taken from the plotters example: https://github.com/38/plotters#quick-start
        root.fill(&WHITE).unwrap();
        let mut chart = ChartBuilder::on(&root)
            .caption("y=x^2", ("sans-serif", 50).into_font())
            .margin(5)
            .margin_right(15)
            .x_label_area_size(30)
            .y_label_area_size(30)
            .build_cartesian_2d(-1f32..1f32, -0.1f32..1f32)
            .unwrap();

        chart.configure_mesh().draw().unwrap();

        chart
            .draw_series(LineSeries::new(
                (-50..=50).map(|x| x as f32 / 50.0).map(|x| (x, x * x)),
                &RED,
            ))
            .unwrap()
            .label("y = x^2")
            .legend(|(x, y)| PathElement::new(vec![(x, y), (x + 20, y)], &RED));

        chart
            .configure_series_labels()
            .background_style(&WHITE.mix(0.8))
            .border_style(&BLACK)
            .draw()
            .unwrap();
    })
}

fn main() {
    let main_window = WindowDesc::new(build_plot_widget())
        .title("Hello Plot!")
        .window_size((400.0, 400.0));

    AppLauncher::with_window(main_window)
        .launch(())
        .expect("Failed to launch application");
}