Skip to content

Commit 0f2c533

Browse files
committed
Add support for drawing a given canvas object instead of an id
1 parent 8d032a9 commit 0f2c533

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

examples/wasm-demo/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ crate-type=['cdylib']
1111
plotters = {path = "../.."}
1212
wasm-bindgen = "0.2.43"
1313
wee_alloc = "*"
14+
web-sys = { version = "0.3.4", features = ['HtmlCanvasElement'] }
1415

1516
[profile.release]
1617
lto = true

examples/wasm-demo/src/mandelbrot.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use plotters::prelude::*;
22
use std::ops::Range;
33
use wasm_bindgen::prelude::*;
4+
use web_sys::HtmlCanvasElement;
45

56
fn mandelbrot_set(
67
real: Range<f64>,
@@ -28,9 +29,9 @@ fn mandelbrot_set(
2829
}
2930

3031
fn draw_mandelbrot_impl(
31-
element: &str,
32+
element: HtmlCanvasElement,
3233
) -> Result<Box<dyn Fn((i32, i32)) -> Option<(f64, f64)>>, Box<dyn std::error::Error>> {
33-
let backend = CanvasBackend::new(element).unwrap();
34+
let backend = CanvasBackend::with_canvas_object(element).unwrap();
3435

3536
let root = backend.into_drawing_area();
3637
root.fill(&WHITE)?;
@@ -66,6 +67,6 @@ fn draw_mandelbrot_impl(
6667
}
6768

6869
#[wasm_bindgen]
69-
pub fn draw_mandelbrot(element: &str) -> JsValue {
70+
pub fn draw_mandelbrot(element: HtmlCanvasElement) -> JsValue {
7071
crate::make_coord_mapping_closure(draw_mandelbrot_impl(element).ok())
7172
}

examples/wasm-demo/www/index.html

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,14 @@ <h1 class="centered">Plotters WebAssembly Demo</h1>
6060
var pow = Number(sel.selectedOptions[0].value);
6161
map_coord = wasm.draw_func("canvas", pow);
6262
} else {
63-
map_coord = wasm.draw_mandelbrot("canvas");
63+
// Actually, you can directly use the #canvas element,
64+
// This is just a illustration for how we can do double buffering
65+
// with plotters
66+
var buffer = document.createElement("canvas");
67+
buffer.height = 400;
68+
buffer.width = 600;
69+
map_coord = wasm.draw_mandelbrot(buffer);
70+
document.getElementById("canvas").getContext("2d").drawImage(buffer, 0, 0);
6471
}
6572
var end = performance.now();
6673
stat.innerText = "Rendered " + sel.selectedOptions[0].innerText + " in " + (end - start) + "ms";

0 commit comments

Comments
 (0)