diff options
Diffstat (limited to 'vendor/plotters/src/evcxr.rs')
-rw-r--r-- | vendor/plotters/src/evcxr.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/vendor/plotters/src/evcxr.rs b/vendor/plotters/src/evcxr.rs new file mode 100644 index 000000000..8117d35f1 --- /dev/null +++ b/vendor/plotters/src/evcxr.rs @@ -0,0 +1,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()) +} |