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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
use crate::coord::Shift;
use crate::drawing::{DrawingArea, IntoDrawingArea};
use plotters_backend::DrawingBackend;
use plotters_svg::SVGBackend;
#[cfg(feature = "evcxr_bitmap")]
use plotters_bitmap::BitMapBackend;
/// The wrapper for the generated SVG
pub struct SVGWrapper(String, String);
impl SVGWrapper {
/// Displays the contents of the `SVGWrapper` struct.
pub fn evcxr_display(&self) {
println!("{:?}", self);
}
/// Sets the style of the `SVGWrapper` struct.
pub fn style<S: Into<String>>(mut self, style: S) -> Self {
self.1 = style.into();
self
}
}
impl std::fmt::Debug for SVGWrapper {
fn fmt(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
let svg = self.0.as_str();
write!(
formatter,
"EVCXR_BEGIN_CONTENT text/html\n<div style=\"{}\">{}</div>\nEVCXR_END_CONTENT",
self.1, svg
)
}
}
/// Start drawing an evcxr figure
pub fn evcxr_figure<
Draw: FnOnce(DrawingArea<SVGBackend, Shift>) -> Result<(), Box<dyn std::error::Error>>,
>(
size: (u32, u32),
draw: Draw,
) -> SVGWrapper {
let mut buffer = "".to_string();
let root = SVGBackend::with_string(&mut buffer, size).into_drawing_area();
draw(root).expect("Drawing failure");
SVGWrapper(buffer, "".to_string())
}
/// Start drawing an evcxr figure
#[cfg(feature = "evcxr_bitmap")]
pub fn evcxr_bitmap_figure<
Draw: FnOnce(DrawingArea<BitMapBackend, Shift>) -> Result<(), Box<dyn std::error::Error>>,
>(
size: (u32, u32),
draw: Draw,
) -> SVGWrapper {
const PIXEL_SIZE : usize = 3;
let mut buf = Vec::new();
buf.resize((size.0 as usize) * (size.1 as usize) * PIXEL_SIZE, 0);
let root = BitMapBackend::with_buffer(&mut buf, size).into_drawing_area();
draw(root).expect("Drawing failure");
let mut buffer = "".to_string();
{
let mut svg_root = SVGBackend::with_string(&mut buffer, size);
svg_root
.blit_bitmap((0, 0), size, &buf)
.expect("Failure converting to SVG");
}
SVGWrapper(buffer, "".to_string())
}
|