2019-04-26 21:11:29 +00:00
|
|
|
use crate::color_transform::ColorTransform;
|
2019-04-25 17:52:22 +00:00
|
|
|
use crate::display_object::DisplayObject;
|
|
|
|
use crate::library::Library;
|
|
|
|
use crate::Matrix;
|
2019-04-26 03:27:44 +00:00
|
|
|
use crate::{RenderContext, UpdateContext};
|
2019-04-25 17:52:22 +00:00
|
|
|
use bacon_rajan_cc::{Trace, Tracer};
|
2019-04-26 03:27:44 +00:00
|
|
|
use log::{info, trace, warn};
|
2019-04-25 17:52:22 +00:00
|
|
|
use web_sys::HtmlImageElement;
|
|
|
|
|
|
|
|
pub struct Graphic {
|
|
|
|
matrix: Matrix,
|
2019-04-26 21:11:29 +00:00
|
|
|
color_transform: ColorTransform,
|
2019-04-26 03:27:44 +00:00
|
|
|
x_min: f32,
|
|
|
|
y_min: f32,
|
2019-04-25 17:52:22 +00:00
|
|
|
image: HtmlImageElement,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Graphic {
|
2019-04-26 03:27:44 +00:00
|
|
|
pub fn new(image: HtmlImageElement, x_min: f32, y_min: f32) -> Graphic {
|
2019-04-25 17:52:22 +00:00
|
|
|
Graphic {
|
|
|
|
image,
|
2019-04-26 21:11:29 +00:00
|
|
|
color_transform: Default::default(),
|
2019-04-26 03:27:44 +00:00
|
|
|
x_min,
|
|
|
|
y_min,
|
2019-04-25 17:52:22 +00:00
|
|
|
matrix: std::default::Default::default(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl DisplayObject for Graphic {
|
2019-04-26 03:27:44 +00:00
|
|
|
fn run_frame(&mut self, _context: &mut UpdateContext) {
|
2019-04-25 17:52:22 +00:00
|
|
|
// Noop
|
|
|
|
}
|
|
|
|
|
|
|
|
fn render(&self, context: &mut RenderContext) {
|
|
|
|
context.matrix_stack.push(&self.matrix);
|
2019-04-26 21:11:29 +00:00
|
|
|
context.color_transform_stack.push(&self.color_transform);
|
|
|
|
|
2019-04-25 17:52:22 +00:00
|
|
|
let world_matrix = context.matrix_stack.matrix();
|
2019-04-26 21:11:29 +00:00
|
|
|
let color_transform = context.color_transform_stack.color_transform();
|
|
|
|
|
|
|
|
if !color_transform.is_identity() {
|
|
|
|
context
|
|
|
|
.context_2d
|
|
|
|
.set_global_alpha(color_transform.a_mult.into());
|
|
|
|
}
|
|
|
|
|
2019-04-25 17:52:22 +00:00
|
|
|
context
|
|
|
|
.context_2d
|
2019-04-26 03:27:44 +00:00
|
|
|
.set_transform(
|
2019-04-25 17:52:22 +00:00
|
|
|
world_matrix.a.into(),
|
|
|
|
world_matrix.b.into(),
|
|
|
|
world_matrix.c.into(),
|
|
|
|
world_matrix.d.into(),
|
|
|
|
world_matrix.tx.into(),
|
|
|
|
world_matrix.ty.into(),
|
|
|
|
)
|
|
|
|
.unwrap();
|
2019-04-26 21:11:29 +00:00
|
|
|
|
|
|
|
if !color_transform.is_identity() {
|
|
|
|
context.context_2d.set_global_alpha(1.0);
|
|
|
|
}
|
|
|
|
|
2019-04-25 17:52:22 +00:00
|
|
|
context
|
|
|
|
.context_2d
|
2019-04-26 03:27:44 +00:00
|
|
|
.draw_image_with_html_image_element(&self.image, self.x_min.into(), self.y_min.into())
|
|
|
|
.expect("Couldn't render image");
|
2019-04-26 21:11:29 +00:00
|
|
|
|
2019-04-25 17:52:22 +00:00
|
|
|
context.matrix_stack.pop();
|
2019-04-26 21:11:29 +00:00
|
|
|
context.color_transform_stack.push(&self.color_transform);
|
2019-04-25 17:52:22 +00:00
|
|
|
}
|
2019-04-26 03:27:44 +00:00
|
|
|
|
|
|
|
fn set_matrix(&mut self, matrix: Matrix) {
|
|
|
|
self.matrix = matrix;
|
|
|
|
}
|
2019-04-26 21:11:29 +00:00
|
|
|
|
|
|
|
fn set_color_transform(&mut self, color_transform: ColorTransform) {
|
|
|
|
self.color_transform = color_transform;
|
|
|
|
}
|
2019-04-25 17:52:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Trace for Graphic {
|
|
|
|
fn trace(&mut self, _tracer: &mut Tracer) {
|
|
|
|
// Noop
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|