@@ -255,7 +255,7 @@ pub struct DisplayObjectBase<'gc> {
255255
256256#[ derive( Clone ) ]
257257struct DisplayObjectBaseMut {
258- filters : Vec < Filter > ,
258+ filters : Box < [ Filter ] > ,
259259
260260 blend_shader : Option < PixelBenderShaderHandle > ,
261261
@@ -550,11 +550,11 @@ impl<'gc> DisplayObjectBase<'gc> {
550550 unlock ! ( this, Self , name) . set ( Some ( name) ) ;
551551 }
552552
553- fn filters ( & self ) -> Vec < Filter > {
554- self . cell . borrow ( ) . filters . clone ( )
553+ fn filters ( & self ) -> Ref < ' _ , [ Filter ] > {
554+ Ref :: map ( self . cell . borrow ( ) , |c| & * c . filters )
555555 }
556556
557- fn set_filters ( & self , filters : Vec < Filter > ) -> bool {
557+ fn set_filters ( & self , filters : Box < [ Filter ] > ) -> bool {
558558 let mut write = self . cell . borrow_mut ( ) ;
559559 let changed = filters != write. filters ;
560560 write. filters = filters;
@@ -849,7 +849,7 @@ pub fn render_base<'gc>(this: DisplayObject<'gc>, context: &mut RenderContext<'_
849849 & context. stage . view_matrix ( ) ,
850850 ) ;
851851 let name = this. name ( ) ;
852- let mut filters: Vec < Filter > = this. filters ( ) ;
852+ let mut filters: Vec < Filter > = this. filters ( ) . to_owned ( ) ;
853853 let swf_version = this. swf_version ( ) ;
854854 filters. retain ( |f| !f. impotent ( ) ) ;
855855
@@ -1237,8 +1237,7 @@ pub trait TDisplayObject<'gc>:
12371237 }
12381238
12391239 if include_own_filters {
1240- let filters = self . filters ( ) ;
1241- for mut filter in filters {
1240+ for mut filter in self . filters ( ) . iter ( ) . cloned ( ) {
12421241 filter. scale ( view_matrix. a , view_matrix. d ) ;
12431242 bounds = filter. calculate_dest_rect ( bounds) ;
12441243 }
@@ -1582,11 +1581,11 @@ pub trait TDisplayObject<'gc>:
15821581 DisplayObjectBase :: set_name ( Gc :: write ( mc, self . base ( ) ) , name)
15831582 }
15841583
1585- fn filters ( self ) -> Vec < Filter > {
1586- self . base ( ) . filters ( )
1584+ fn filters ( self ) -> Ref < ' gc , [ Filter ] > {
1585+ Gc :: as_ref ( self . base ( ) ) . filters ( )
15871586 }
15881587
1589- fn set_filters ( self , filters : Vec < Filter > ) {
1588+ fn set_filters ( self , filters : Box < [ Filter ] > ) {
15901589 if self . base ( ) . set_filters ( filters) {
15911590 self . invalidate_cached_bitmap ( ) ;
15921591 }
0 commit comments