summaryrefslogtreecommitdiffstats
path: root/vendor/plotters/src/evcxr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/plotters/src/evcxr.rs')
-rw-r--r--vendor/plotters/src/evcxr.rs69
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())
+}