From 0214b3e447ca7fa6e29bfa8731c6c48633c3d649 Mon Sep 17 00:00:00 2001 From: Mike Welsh Date: Thu, 22 Aug 2019 18:40:47 -0700 Subject: [PATCH] core: Use matrix in DefineText (fix #34) Text was not rendered in the correct position because it did not use the matrix specified in the DefineText tag. I think this is an extra Matrix used to adjust text alignment. Fixes #34. --- core/src/text.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/src/text.rs b/core/src/text.rs index d0aca33a1..00bd02d07 100644 --- a/core/src/text.rs +++ b/core/src/text.rs @@ -1,10 +1,12 @@ use crate::display_object::{DisplayObject, DisplayObjectBase}; use crate::player::{RenderContext, UpdateContext}; +use crate::prelude::*; use crate::transform::Transform; #[derive(Clone)] pub struct Text<'gc> { base: DisplayObjectBase<'gc>, + text_transform: Matrix, text_blocks: Vec, } @@ -12,6 +14,7 @@ impl<'gc> Text<'gc> { pub fn from_swf_tag(tag: &swf::Text) -> Self { Self { base: Default::default(), + text_transform: tag.matrix.clone().into(), text_blocks: tag.records.clone(), } } @@ -26,6 +29,10 @@ impl<'gc> DisplayObject<'gc> for Text<'gc> { fn render(&self, context: &mut RenderContext) { context.transform_stack.push(self.transform()); + context.transform_stack.push(&Transform { + matrix: self.text_transform, + ..Default::default() + }); let mut x = Default::default(); let mut y = Default::default(); @@ -67,6 +74,7 @@ impl<'gc> DisplayObject<'gc> for Text<'gc> { } } context.transform_stack.pop(); + context.transform_stack.pop(); } }