avm2: Stub DisplayObject.metaData

This commit is contained in:
Tom Schuster 2024-03-31 23:16:42 +02:00
parent df7d95bf43
commit 1552059c9f
3 changed files with 50 additions and 0 deletions

View File

@ -88,6 +88,9 @@ package flash.display {
public native function get visible():Boolean; public native function get visible():Boolean;
public native function set visible(value:Boolean):void; public native function set visible(value:Boolean):void;
public native function get metaData():Object;
public native function set metaData(value:Object):void;
public native function get mouseX():Number; public native function get mouseX():Number;
public native function get mouseY():Number; public native function get mouseY():Number;

View File

@ -621,6 +621,34 @@ pub fn set_visible<'gc>(
Ok(Value::Undefined) Ok(Value::Undefined)
} }
/// Implements `metaData`'s getter.
pub fn get_meta_data<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
avm2_stub_getter!(activation, "flash.display.DisplayObject", "metaData");
if let Some(dobj) = this.as_display_object() {
return Ok(dobj.meta_data().map_or(Value::Null, Value::Object));
}
Ok(Value::Undefined)
}
/// Implements `metaData`'s setter.
pub fn set_meta_data<'gc>(
activation: &mut Activation<'_, 'gc>,
this: Object<'gc>,
args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
if let Some(dobj) = this.as_display_object() {
let obj = args.get_object(activation, 0, "metaData")?;
dobj.set_meta_data(activation.gc(), obj);
}
Ok(Value::Undefined)
}
/// Implements `mouseX`. /// Implements `mouseX`.
pub fn get_mouse_x<'gc>( pub fn get_mouse_x<'gc>(
activation: &mut Activation<'_, 'gc>, activation: &mut Activation<'_, 'gc>,

View File

@ -225,6 +225,8 @@ pub struct DisplayObjectBase<'gc> {
/// The display object we are currently masking. /// The display object we are currently masking.
maskee: Option<DisplayObject<'gc>>, maskee: Option<DisplayObject<'gc>>,
meta_data: Option<Avm2Object<'gc>>,
/// The blend mode used when rendering this display object. /// The blend mode used when rendering this display object.
/// Values other than the default `BlendMode::Normal` implicitly cause cache-as-bitmap behavior. /// Values other than the default `BlendMode::Normal` implicitly cause cache-as-bitmap behavior.
#[collect(require_static)] #[collect(require_static)]
@ -282,6 +284,7 @@ impl<'gc> Default for DisplayObjectBase<'gc> {
next_avm1_clip: None, next_avm1_clip: None,
masker: None, masker: None,
maskee: None, maskee: None,
meta_data: None,
sound_transform: Default::default(), sound_transform: Default::default(),
blend_mode: Default::default(), blend_mode: Default::default(),
blend_shader: None, blend_shader: None,
@ -769,6 +772,14 @@ impl<'gc> DisplayObjectBase<'gc> {
fn set_maskee(&mut self, node: Option<DisplayObject<'gc>>) { fn set_maskee(&mut self, node: Option<DisplayObject<'gc>>) {
self.maskee = node; self.maskee = node;
} }
fn meta_data(&self) -> Option<Avm2Object<'gc>> {
self.meta_data
}
fn set_meta_data(&mut self, value: Avm2Object<'gc>) {
self.meta_data = Some(value);
}
} }
struct DrawCacheInfo { struct DrawCacheInfo {
@ -1707,6 +1718,14 @@ pub trait TDisplayObject<'gc>:
} }
} }
fn meta_data(&self) -> Option<Avm2Object<'gc>> {
self.base().meta_data()
}
fn set_meta_data(&self, gc_context: &Mutation<'gc>, value: Avm2Object<'gc>) {
self.base_mut(gc_context).set_meta_data(value);
}
/// The blend mode used when rendering this display object. /// The blend mode used when rendering this display object.
/// Values other than the default `BlendMode::Normal` implicitly cause cache-as-bitmap behavior. /// Values other than the default `BlendMode::Normal` implicitly cause cache-as-bitmap behavior.
fn blend_mode(&self) -> ExtendedBlendMode { fn blend_mode(&self) -> ExtendedBlendMode {