Embedded Graphics Web Simulator
The web simulator is based on embedded-graphics-simulator.
This is a sample project demonstrating using a no_std
rust-embedded library with Webassembly.
The Web Simulator allows you to use a browser to test embedded-graphics code and run graphics. There is no need to install SDL and its development libraries for running the project. You can see the demo here.
For Development
This library is intended to be used in Rust + Webassembly projects. Check the examples which illustrate how to use the library. Look at the examples in the Embedded Graphics Simulator project for inspiration. You can use wasm-pack to create a ready to go project and add this library as a dependency.
Usage example:
use embedded_graphics_web_simulator::{
display::WebSimulatorDisplay, output_settings::OutputSettingsBuilder,
};
use wasm_bindgen::prelude::*;
use web_sys::console;
use embedded_graphics::{
image::Image,
mono_font::{ascii::FONT_6X9, MonoTextStyle},
pixelcolor::Rgb565,
prelude::{Point, Primitive, WebColors},
primitives::{Circle, PrimitiveStyle},
text::Text,
Drawable,
};
use tinybmp::Bmp;
#[cfg(feature = "wee_alloc")]
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
#[wasm_bindgen(start)]
pub fn main_js() -> Result<(), JsValue> {
#[cfg(debug_assertions)]
console_error_panic_hook::set_once();
let document = web_sys::window().unwrap().document().unwrap();
let output_settings = OutputSettingsBuilder::new()
.scale(1)
.pixel_spacing(1)
.build();
let mut text_display = WebSimulatorDisplay::new((128, 64), &output_settings, None);
let mut img_display = WebSimulatorDisplay::new(
(128, 128),
&output_settings,
document.get_element_by_id("custom-container"),
);
let style = MonoTextStyle::new(&FONT_6X9, Rgb565::CSS_WHITE);
if Text::new("Hello, wasm world!", Point::new(10, 30), style)
.draw(&mut text_display)
.is_err()
{
console::log_1(&"Couldn't draw text".into());
}
let bmp = Bmp::from_slice(include_bytes!("./assets/rust-pride.bmp")).unwrap();
let image = Image::new(&bmp, Point::new(32, 32));
if image.draw(&mut img_display).is_err() {
console::log_1(&"Couldn't draw image".into());
}
if Circle::new(Point::new(29, 29), 70)
.into_styled(PrimitiveStyle::with_stroke(Rgb565::CSS_WHITE, 1))
.draw(&mut img_display)
.is_err()
{
console::log_1(&"Couldn't draw circle".into());
}
Ok(())
}
How it works
Embedded Graphics Web Simulator implements DrawTarget
for the HTML <canvas>
element.
Credits
This project is based on the embedded-graphics library by @jamwaffles
Built with wasm-pack