avm2: Replaced stubs in DisplayObjectContainer with new format

This commit is contained in:
Nathan Adams 2023-01-31 18:55:53 +01:00
parent 0e522fd58b
commit 0abfb79c62
1 changed files with 48 additions and 14 deletions

View File

@ -11,6 +11,7 @@ use crate::avm2::Namespace;
use crate::avm2::QName;
use crate::context::UpdateContext;
use crate::display_object::{DisplayObject, TDisplayObject, TDisplayObjectContainer};
use crate::{avm2_stub_getter, avm2_stub_method, avm2_stub_setter};
use gc_arena::{GcCell, MutationContext};
use std::cmp::min;
@ -558,49 +559,82 @@ pub fn stop_all_movie_clips<'gc>(
Ok(Value::Undefined)
}
/// Stubs `DisplayObjectContainer.getObjectsUnderPoint`
pub fn get_objects_under_point<'gc>(
_activation: &mut Activation<'_, 'gc>,
activation: &mut Activation<'_, 'gc>,
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
Err("DisplayObjectContainer.getObjectsUnderPoint not yet implemented".into())
avm2_stub_method!(
activation,
"flash.display.DisplayObjectContainer",
"getObjectsUnderPoint"
);
Ok(Value::Undefined)
}
/// Stubs `DisplayObjectContainer.areInaccessibleObjectsUnderPoint`
pub fn are_inaccessible_objects_under_point<'gc>(
_activation: &mut Activation<'_, 'gc>,
activation: &mut Activation<'_, 'gc>,
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
Err("DisplayObjectContainer.areInaccessibleObjectsUnderPoint not yet implemented".into())
avm2_stub_method!(
activation,
"flash.display.DisplayObjectContainer",
"areInaccessibleObjectsUnderPoint"
);
Ok(Value::Undefined)
}
pub fn mouse_children<'gc>(
_activation: &mut Activation<'_, 'gc>,
activation: &mut Activation<'_, 'gc>,
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
tracing::warn!("DisplayObjectContainer.mouseChildren getter: not yet implemented");
avm2_stub_setter!(
activation,
"flash.display.DisplayObjectContainer",
"mouseChildren"
);
Ok(Value::Undefined)
}
pub fn set_mouse_children<'gc>(
_activation: &mut Activation<'_, 'gc>,
activation: &mut Activation<'_, 'gc>,
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
tracing::warn!("DisplayObjectContainer.mouseChildren setter: not yet implemented");
avm2_stub_setter!(
activation,
"flash.display.DisplayObjectContainer",
"mouseChildren"
);
Ok(Value::Undefined)
}
/// Stub getter & setter for `tabChildren`.
pub fn tab_children<'gc>(
_activation: &mut Activation<'_, 'gc>,
activation: &mut Activation<'_, 'gc>,
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
tracing::warn!("DisplayObjectContainer.tabChildren is a stub");
avm2_stub_getter!(
activation,
"flash.display.DisplayObjectContainer",
"areInaccessibleObjectsUnderPoint"
);
Ok(true.into())
}
pub fn set_tab_children<'gc>(
activation: &mut Activation<'_, 'gc>,
_this: Option<Object<'gc>>,
_args: &[Value<'gc>],
) -> Result<Value<'gc>, Error<'gc>> {
avm2_stub_setter!(
activation,
"flash.display.DisplayObjectContainer",
"areInaccessibleObjectsUnderPoint"
);
Ok(true.into())
}
@ -644,7 +678,7 @@ pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>
Some(mouse_children),
Some(set_mouse_children),
),
("tabChildren", Some(tab_children), Some(tab_children)),
("tabChildren", Some(tab_children), Some(set_tab_children)),
];
write.define_public_builtin_instance_properties(mc, PUBLIC_INSTANCE_PROPERTIES);