@@ -14,7 +14,7 @@ use crate::backend::audio::{AudioManager, SoundInstanceHandle};
1414use crate :: backend:: navigator:: Request ;
1515use crate :: backend:: ui:: MouseCursor ;
1616use crate :: binary_data:: BinaryData ;
17- use crate :: character:: { Character , CompressedBitmap } ;
17+ use crate :: character:: { BitmapCharacter , Character , CompressedBitmap } ;
1818use crate :: context:: { ActionType , RenderContext , UpdateContext } ;
1919use crate :: display_object:: container:: { dispatch_removed_event, ChildContainer } ;
2020use crate :: display_object:: interactive:: {
@@ -41,7 +41,7 @@ use bitflags::bitflags;
4141use core:: fmt;
4242use gc_arena:: barrier:: unlock;
4343use gc_arena:: lock:: { Lock , RefLock } ;
44- use gc_arena:: { Collect , Gc , GcCell , GcWeak , Mutation } ;
44+ use gc_arena:: { Collect , Gc , GcWeak , Mutation } ;
4545use ruffle_macros:: istr;
4646use ruffle_render:: perspective_projection:: PerspectiveProjection ;
4747use smallvec:: SmallVec ;
@@ -3167,20 +3167,19 @@ impl<'gc, 'a> MovieClipShared<'gc> {
31673167 version : u8 ,
31683168 ) -> Result < ( ) , Error > {
31693169 let define_bits_lossless = reader. read_define_bits_lossless ( version) ?;
3170- let bitmap = Character :: Bitmap {
3171- compressed : CompressedBitmap :: Lossless ( DefineBitsLossless {
3170+ let bitmap = Gc :: new (
3171+ context. gc ( ) ,
3172+ BitmapCharacter :: new ( CompressedBitmap :: Lossless ( DefineBitsLossless {
31723173 id : define_bits_lossless. id ,
31733174 format : define_bits_lossless. format ,
31743175 width : define_bits_lossless. width ,
31753176 height : define_bits_lossless. height ,
31763177 version : define_bits_lossless. version ,
31773178 data : Cow :: Owned ( define_bits_lossless. data . into_owned ( ) ) ,
3178- } ) ,
3179- handle : Default :: default ( ) ,
3180- avm2_bitmapdata_class : GcCell :: new ( context. gc ( ) , BitmapClass :: NoSubclass ) ,
3181- } ;
3179+ } ) ) ,
3180+ ) ;
31823181 self . library_mut ( context)
3183- . register_character ( define_bits_lossless. id , bitmap) ;
3182+ . register_character ( define_bits_lossless. id , Character :: Bitmap ( bitmap) ) ;
31843183 Ok ( ( ) )
31853184 }
31863185
@@ -3298,19 +3297,16 @@ impl<'gc, 'a> MovieClipShared<'gc> {
32983297 let jpeg_data =
32993298 ruffle_render:: utils:: glue_tables_to_jpeg ( jpeg_data, jpeg_tables) . into_owned ( ) ;
33003299 let ( width, height) = ruffle_render:: utils:: decode_define_bits_jpeg_dimensions ( & jpeg_data) ?;
3301- library. register_character (
3302- id,
3303- Character :: Bitmap {
3304- compressed : CompressedBitmap :: Jpeg {
3305- data : jpeg_data,
3306- alpha : None ,
3307- width,
3308- height,
3309- } ,
3310- handle : Default :: default ( ) ,
3311- avm2_bitmapdata_class : GcCell :: new ( mc, BitmapClass :: NoSubclass ) ,
3312- } ,
3313- ) ;
3300+ let bitmap = Character :: Bitmap ( Gc :: new (
3301+ mc,
3302+ BitmapCharacter :: new ( CompressedBitmap :: Jpeg {
3303+ data : jpeg_data,
3304+ alpha : None ,
3305+ width,
3306+ height,
3307+ } ) ,
3308+ ) ) ;
3309+ library. register_character ( id, bitmap) ;
33143310 Ok ( ( ) )
33153311 }
33163312
@@ -3322,16 +3318,15 @@ impl<'gc, 'a> MovieClipShared<'gc> {
33223318 ) -> Result < ( ) , Error > {
33233319 let ( id, jpeg_data) = reader. read_define_bits_jpeg_2 ( ) ?;
33243320 let ( width, height) = ruffle_render:: utils:: decode_define_bits_jpeg_dimensions ( jpeg_data) ?;
3325- let bitmap = Character :: Bitmap {
3326- compressed : CompressedBitmap :: Jpeg {
3321+ let bitmap = Character :: Bitmap ( Gc :: new (
3322+ context. gc ( ) ,
3323+ BitmapCharacter :: new ( CompressedBitmap :: Jpeg {
33273324 data : jpeg_data. to_owned ( ) ,
33283325 alpha : None ,
33293326 width,
33303327 height,
3331- } ,
3332- handle : Default :: default ( ) ,
3333- avm2_bitmapdata_class : GcCell :: new ( context. gc ( ) , BitmapClass :: NoSubclass ) ,
3334- } ;
3328+ } ) ,
3329+ ) ) ;
33353330 self . library_mut ( context) . register_character ( id, bitmap) ;
33363331 Ok ( ( ) )
33373332 }
@@ -3345,16 +3340,16 @@ impl<'gc, 'a> MovieClipShared<'gc> {
33453340 ) -> Result < ( ) , Error > {
33463341 let jpeg = reader. read_define_bits_jpeg_3 ( version) ?;
33473342 let ( width, height) = ruffle_render:: utils:: decode_define_bits_jpeg_dimensions ( jpeg. data ) ?;
3348- let bitmap = Character :: Bitmap {
3349- compressed : CompressedBitmap :: Jpeg {
3343+
3344+ let bitmap = Character :: Bitmap ( Gc :: new (
3345+ context. gc ( ) ,
3346+ BitmapCharacter :: new ( CompressedBitmap :: Jpeg {
33503347 data : jpeg. data . to_owned ( ) ,
33513348 alpha : Some ( jpeg. alpha_data . to_owned ( ) ) ,
33523349 width,
33533350 height,
3354- } ,
3355- handle : Default :: default ( ) ,
3356- avm2_bitmapdata_class : GcCell :: new ( context. gc ( ) , BitmapClass :: NoSubclass ) ,
3357- } ;
3351+ } ) ,
3352+ ) ) ;
33583353 self . library_mut ( context)
33593354 . register_character ( jpeg. id , bitmap) ;
33603355 Ok ( ( ) )
@@ -4136,15 +4131,16 @@ impl<'gc, 'a> MovieClip<'gc> {
41364131 . library
41374132 . library_for_movie_mut ( movie. clone ( ) ) ;
41384133
4139- let Some ( Character :: Bitmap {
4140- avm2_bitmapdata_class,
4141- ..
4142- } ) = library. character_by_id ( id)
4134+ let Some ( & Character :: Bitmap ( bitmap) ) =
4135+ library. character_by_id ( id)
41434136 else {
41444137 unreachable ! ( ) ;
41454138 } ;
4146- * avm2_bitmapdata_class. write ( activation. context . gc_context ) =
4147- bitmap_class;
4139+ BitmapCharacter :: set_avm2_class (
4140+ bitmap,
4141+ bitmap_class,
4142+ activation. gc ( ) ,
4143+ ) ;
41484144 } else {
41494145 tracing:: error!( "Associated class {:?} for symbol {} must extend flash.display.Bitmap or BitmapData, does neither" , class_object. inner_class_definition( ) . name( ) , id) ;
41504146 }
0 commit comments