ruffle/web/src/lib.rs

45 lines
1.4 KiB
Rust
Raw Normal View History

2019-04-28 06:08:59 +00:00
use fluster_core::backend::render::web_canvas::WebCanvasRenderBackend;
2019-04-28 01:15:43 +00:00
use js_sys::Uint8Array;
2019-04-29 20:24:29 +00:00
use std::error::Error;
2019-04-28 01:15:43 +00:00
use wasm_bindgen::{prelude::*, JsValue};
2019-04-28 06:08:59 +00:00
use web_sys::HtmlCanvasElement;
2019-04-28 01:15:43 +00:00
#[wasm_bindgen]
pub struct Player(fluster_core::Player);
#[wasm_bindgen]
impl Player {
2019-04-28 06:08:59 +00:00
pub fn new(canvas: HtmlCanvasElement, swf_data: Uint8Array) -> Result<Player, JsValue> {
Player::new_internal(canvas, swf_data).map_err(|_| "Error creating player".into())
2019-04-28 01:15:43 +00:00
}
pub fn tick(&mut self, dt: f64) {
self.0.tick(dt);
}
}
2019-04-28 06:08:59 +00:00
impl Player {
2019-04-29 20:24:29 +00:00
fn new_internal(canvas: HtmlCanvasElement, swf_data: Uint8Array) -> Result<Player, Box<Error>> {
2019-04-28 06:08:59 +00:00
let mut data = vec![0; swf_data.length() as usize];
swf_data.copy_to(&mut data[..]);
2019-04-29 20:24:29 +00:00
let renderer = WebCanvasRenderBackend::new(&canvas)?;
2019-04-28 06:08:59 +00:00
let player = fluster_core::Player::new(Box::new(renderer), data)?;
2019-04-29 20:24:29 +00:00
// Update canvas size to match player size.
canvas.set_width(player.movie_width());
canvas.set_height(player.movie_height());
let style = canvas.style();
style
.set_property("width", &format!("{}px", player.movie_width()))
.map_err(|_| "Unable to set style")?;
style
.set_property("height", &format!("{}px", player.movie_height()))
.map_err(|_| "Unable to set style")?;
2019-04-28 06:08:59 +00:00
Ok(Player(player))
}
}