diff --git a/core/src/avm2/globals/flash/display/display_object.rs b/core/src/avm2/globals/flash/display/display_object.rs index c348d38bd..7cd3d44b4 100644 --- a/core/src/avm2/globals/flash/display/display_object.rs +++ b/core/src/avm2/globals/flash/display/display_object.rs @@ -1005,28 +1005,34 @@ pub fn set_cache_as_bitmap<'gc>( /// `opaqueBackground`'s getter. pub fn get_opaque_background<'gc>( - activation: &mut Activation<'_, 'gc>, - _this: Option>, + _activation: &mut Activation<'_, 'gc>, + this: Option>, _args: &[Value<'gc>], ) -> Result, Error<'gc>> { - avm2_stub_getter!( - activation, - "flash.display.DisplayObject", - "opaqueBackground" - ); + if let Some(color) = this + .and_then(|this| this.as_display_object()) + .and_then(|this| this.opaque_background()) + { + return Ok(color.to_rgb().into()); + } + Ok(Value::Null) } /// `opaqueBackground`'s setter. pub fn set_opaque_background<'gc>( activation: &mut Activation<'_, 'gc>, - _this: Option>, - _args: &[Value<'gc>], + this: Option>, + args: &[Value<'gc>], ) -> Result, Error<'gc>> { - avm2_stub_setter!( - activation, - "flash.display.DisplayObject", - "opaqueBackground" - ); + if let Some(dobj) = this.and_then(|this| this.as_display_object()) { + let value = args.get(0).unwrap_or(&Value::Undefined); + let color = match value { + Value::Null | Value::Undefined => None, + value => Some(Color::from_rgb(value.coerce_to_u32(activation)?, 255)), + }; + dobj.set_opaque_background(activation.context.gc_context, color); + } + Ok(Value::Undefined) } diff --git a/tests/tests/swfs/avm2/displayobject_opaque_background/output.txt b/tests/tests/swfs/avm2/displayobject_opaque_background/output.txt new file mode 100644 index 000000000..825bde08c --- /dev/null +++ b/tests/tests/swfs/avm2/displayobject_opaque_background/output.txt @@ -0,0 +1,6 @@ +null +255 +null +255 +null +255 diff --git a/tests/tests/swfs/avm2/displayobject_opaque_background/test.fla b/tests/tests/swfs/avm2/displayobject_opaque_background/test.fla new file mode 100644 index 000000000..fcb7718ab Binary files /dev/null and b/tests/tests/swfs/avm2/displayobject_opaque_background/test.fla differ diff --git a/tests/tests/swfs/avm2/displayobject_opaque_background/test.swf b/tests/tests/swfs/avm2/displayobject_opaque_background/test.swf new file mode 100644 index 000000000..503efdc28 Binary files /dev/null and b/tests/tests/swfs/avm2/displayobject_opaque_background/test.swf differ diff --git a/tests/tests/swfs/avm2/displayobject_opaque_background/test.toml b/tests/tests/swfs/avm2/displayobject_opaque_background/test.toml new file mode 100644 index 000000000..68684a2e3 --- /dev/null +++ b/tests/tests/swfs/avm2/displayobject_opaque_background/test.toml @@ -0,0 +1,9 @@ +num_frames = 1 +# FIXME - does not rendered correctly +ignore = true + +[image_comparison] +tolerance = 1 + +[player_options] +with_renderer = { optional = true, sample_count = 1 }