Clean up DisplayObject traits

This commit is contained in:
Mike Welsh 2019-05-07 03:34:17 -07:00
parent 7983d9eb96
commit e6e8536672
7 changed files with 19 additions and 31 deletions

View File

@ -1,4 +1,4 @@
use crate::display_object::{DisplayObject, DisplayObjectUpdate}; use crate::display_object::{DisplayObject, DisplayObjectImpl};
use crate::movie_clip::MovieClip; use crate::movie_clip::MovieClip;
use bacon_rajan_cc::Cc; use bacon_rajan_cc::Cc;
use rand::{rngs::SmallRng, Rng, SeedableRng}; use rand::{rngs::SmallRng, Rng, SeedableRng};
@ -162,7 +162,6 @@ impl Avm1 {
&self, &self,
context: &'a ActionContext, context: &'a ActionContext,
) -> std::cell::Ref<'a, crate::movie_clip::MovieClip> { ) -> std::cell::Ref<'a, crate::movie_clip::MovieClip> {
use crate::display_object::DisplayObjectUpdate;
Ref::map(context.active_clip.borrow(), |c| c.as_movie_clip().unwrap()) Ref::map(context.active_clip.borrow(), |c| c.as_movie_clip().unwrap())
} }
@ -170,7 +169,6 @@ impl Avm1 {
&self, &self,
context: &'a ActionContext, context: &'a ActionContext,
) -> std::cell::RefMut<'a, crate::movie_clip::MovieClip> { ) -> std::cell::RefMut<'a, crate::movie_clip::MovieClip> {
use crate::display_object::DisplayObjectUpdate;
RefMut::map(context.active_clip.borrow_mut(), |c| { RefMut::map(context.active_clip.borrow_mut(), |c| {
c.as_movie_clip_mut().unwrap() c.as_movie_clip_mut().unwrap()
}) })

View File

@ -1,6 +1,4 @@
use crate::display_object::{ use crate::display_object::{DisplayObject, DisplayObjectBase, DisplayObjectImpl};
DisplayObject, DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate,
};
use crate::matrix::Matrix; use crate::matrix::Matrix;
use crate::player::{RenderContext, UpdateContext}; use crate::player::{RenderContext, UpdateContext};
use crate::prelude::*; use crate::prelude::*;
@ -84,9 +82,9 @@ impl Button {
} }
} }
impl_display_object!(Button, base); impl DisplayObjectImpl for Button {
impl_display_object!(base);
impl DisplayObjectUpdate for Button {
fn run_frame(&mut self, context: &mut UpdateContext) { fn run_frame(&mut self, context: &mut UpdateContext) {
if self.state == ButtonState::Down { if self.state == ButtonState::Down {
// let mut action_context = crate::avm1::ActionContext { // let mut action_context = crate::avm1::ActionContext {

View File

@ -45,13 +45,11 @@ impl DisplayObjectImpl for DisplayObjectBase {
} }
} }
impl DisplayObjectUpdate for DisplayObjectBase {}
impl Trace for DisplayObjectBase { impl Trace for DisplayObjectBase {
fn trace(&mut self, _tracer: &mut Tracer) {} fn trace(&mut self, _tracer: &mut Tracer) {}
} }
pub trait DisplayObjectImpl: DisplayObjectUpdate { pub trait DisplayObjectImpl: Trace {
fn transform(&self) -> &Transform; fn transform(&self) -> &Transform;
fn get_matrix(&self) -> &Matrix; fn get_matrix(&self) -> &Matrix;
fn set_matrix(&mut self, matrix: &Matrix); fn set_matrix(&mut self, matrix: &Matrix);
@ -59,9 +57,7 @@ pub trait DisplayObjectImpl: DisplayObjectUpdate {
fn set_color_transform(&mut self, color_transform: &ColorTransform); fn set_color_transform(&mut self, color_transform: &ColorTransform);
fn name(&self) -> &str; fn name(&self) -> &str;
fn set_name(&mut self, name: &str); fn set_name(&mut self, name: &str);
}
pub trait DisplayObjectUpdate: Trace {
fn preload(&self, _context: &mut UpdateContext) {} fn preload(&self, _context: &mut UpdateContext) {}
fn run_frame(&mut self, _context: &mut UpdateContext) {} fn run_frame(&mut self, _context: &mut UpdateContext) {}
fn run_post_frame(&mut self, _context: &mut UpdateContext) {} fn run_post_frame(&mut self, _context: &mut UpdateContext) {}
@ -78,8 +74,7 @@ pub trait DisplayObjectUpdate: Trace {
} }
macro_rules! impl_display_object { macro_rules! impl_display_object {
($name:ident, $field:ident) => { ($field:ident) => {
impl crate::display_object::DisplayObjectImpl for $name {
fn transform(&self) -> &crate::transform::Transform { fn transform(&self) -> &crate::transform::Transform {
self.$field.transform() self.$field.transform()
} }
@ -101,7 +96,6 @@ macro_rules! impl_display_object {
fn set_name(&mut self, name: &str) { fn set_name(&mut self, name: &str) {
self.$field.set_name(name) self.$field.set_name(name)
} }
}
}; };
} }
@ -121,9 +115,9 @@ impl DisplayObject {
} }
} }
impl_display_object!(DisplayObject, inner); impl DisplayObjectImpl for DisplayObject {
impl_display_object!(inner);
impl DisplayObjectUpdate for DisplayObject {
fn preload(&self, context: &mut UpdateContext) { fn preload(&self, context: &mut UpdateContext) {
self.inner.preload(context); self.inner.preload(context);
} }

View File

@ -1,6 +1,6 @@
use crate::backend::render::ShapeHandle; use crate::backend::render::ShapeHandle;
use crate::color_transform::ColorTransform; use crate::color_transform::ColorTransform;
use crate::display_object::{DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate}; use crate::display_object::{DisplayObjectBase, DisplayObjectImpl};
use crate::matrix::Matrix; use crate::matrix::Matrix;
use crate::player::{RenderContext, UpdateContext}; use crate::player::{RenderContext, UpdateContext};
use bacon_rajan_cc::{Trace, Tracer}; use bacon_rajan_cc::{Trace, Tracer};
@ -25,9 +25,9 @@ impl Graphic {
} }
} }
impl_display_object!(Graphic, base); impl DisplayObjectImpl for Graphic {
impl_display_object!(base);
impl DisplayObjectUpdate for Graphic {
fn run_frame(&mut self, _context: &mut UpdateContext) { fn run_frame(&mut self, _context: &mut UpdateContext) {
// Noop // Noop
} }

View File

@ -1,9 +1,7 @@
use crate::audio::AudioStreamHandle; use crate::audio::AudioStreamHandle;
use crate::character::Character; use crate::character::Character;
use crate::color_transform::ColorTransform; use crate::color_transform::ColorTransform;
use crate::display_object::{ use crate::display_object::{DisplayObject, DisplayObjectBase, DisplayObjectImpl};
DisplayObject, DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate,
};
use crate::font::Font; use crate::font::Font;
use crate::graphic::Graphic; use crate::graphic::Graphic;
use crate::matrix::Matrix; use crate::matrix::Matrix;
@ -32,8 +30,6 @@ pub struct MovieClip {
children: BTreeMap<Depth, Cc<RefCell<DisplayObject>>>, children: BTreeMap<Depth, Cc<RefCell<DisplayObject>>>,
} }
impl_display_object!(MovieClip, base);
impl MovieClip { impl MovieClip {
pub fn new() -> MovieClip { pub fn new() -> MovieClip {
MovieClip { MovieClip {
@ -353,7 +349,9 @@ impl MovieClip {
} }
} }
impl DisplayObjectUpdate for MovieClip { impl DisplayObjectImpl for MovieClip {
impl_display_object!(base);
fn preload(&self, context: &mut UpdateContext) { fn preload(&self, context: &mut UpdateContext) {
context context
.tag_stream .tag_stream

View File

@ -1,7 +1,7 @@
use crate::audio::Audio; use crate::audio::Audio;
use crate::avm1::Avm1; use crate::avm1::Avm1;
use crate::backend::{audio::AudioBackend, render::RenderBackend}; use crate::backend::{audio::AudioBackend, render::RenderBackend};
use crate::display_object::{DisplayObject, DisplayObjectUpdate}; use crate::display_object::{DisplayObject, DisplayObjectImpl};
use crate::library::Library; use crate::library::Library;
use crate::movie_clip::MovieClip; use crate::movie_clip::MovieClip;
use crate::prelude::*; use crate::prelude::*;

View File

@ -1,6 +1,6 @@
use crate::backend::render::ShapeHandle; use crate::backend::render::ShapeHandle;
use crate::color_transform::ColorTransform; use crate::color_transform::ColorTransform;
use crate::display_object::{DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate}; use crate::display_object::{DisplayObjectBase, DisplayObjectImpl};
use crate::matrix::Matrix; use crate::matrix::Matrix;
use crate::player::{RenderContext, UpdateContext}; use crate::player::{RenderContext, UpdateContext};
use bacon_rajan_cc::{Trace, Tracer}; use bacon_rajan_cc::{Trace, Tracer};
@ -20,9 +20,9 @@ impl Text {
} }
} }
impl_display_object!(Text, base); impl DisplayObjectImpl for Text {
impl_display_object!(base);
impl DisplayObjectUpdate for Text {
fn run_frame(&mut self, _context: &mut UpdateContext) { fn run_frame(&mut self, _context: &mut UpdateContext) {
// Noop // Noop
} }