diff --git a/src/engine/input.rs b/src/engine/input.rs index 7466b82..a1d96ac 100644 --- a/src/engine/input.rs +++ b/src/engine/input.rs @@ -302,4 +302,10 @@ impl Inputs { let mut inner = self.0.borrow_mut(); inner.events.pop_front() } + + /// Deletes all the events and resets all the values. + pub fn clear(&mut self) { + let mut inner = self.0.borrow_mut(); + inner.events.clear(); + } } diff --git a/src/engine/mod.rs b/src/engine/mod.rs index a39068a..f1c773f 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -219,6 +219,9 @@ impl Engine { self.scene = scene; } + } else { + // Clear the events received while document was out of focus + self.inputs.clear(); } Ok(()) @@ -239,6 +242,8 @@ impl Engine { self.canvas.set_height(window_height_u32); } + let window_size = Vector::new(window_width, window_height); + let view = self.scene.view().unwrap(); // TODO remove this unwrap // Clear render @@ -258,7 +263,7 @@ impl Engine { for j in 0..cols { let tile = map.at(i, j); if tile.graphic.is_visible() { - self.draw(&tile, view)?; + self.draw(&tile, view, window_size)?; } } } @@ -266,7 +271,7 @@ impl Engine { // Draw characters for c in self.scene.characters() { if true { - self.draw(c, view)?; + self.draw(c, view, window_size)?; } } @@ -274,19 +279,16 @@ impl Engine { } /// Draw a drawable. - pub fn draw(&self, drawable: &D, view: Bbox) -> Result<()> { - let window_width = unwrap!(self.window.inner_width()?.as_f64()); - let window_height = unwrap!(self.window.inner_height()?.as_f64()); - + pub fn draw(&self, drawable: &D, view: Bbox, window: Vector) -> Result<()> { let image = self.textures.get(drawable.texture()); let source = drawable.texture_rect(self.after_loop); let mut dest = source.clone(); dest.position = drawable.position() - view.position; - dest.position.x *= window_width / view.size.x; - dest.position.y *= window_height / view.size.y; - dest.size.x *= window_width / view.size.x; - dest.size.y *= window_height / view.size.y; + dest.position.x *= window.x / view.size.x; + dest.position.y *= window.y / view.size.y; + dest.size.x *= window.x / view.size.x; + dest.size.y *= window.y / view.size.y; image.render(source, dest, &self.context)?; Ok(())