core: Add stubs for context menu

This commit is contained in:
CUB3D 2020-06-25 17:33:55 +01:00 committed by Mike Welsh
parent c353d1f079
commit c8fefc56b5
2 changed files with 105 additions and 0 deletions

View File

@ -39,6 +39,7 @@ pub(crate) mod system_security;
pub(crate) mod text_field; pub(crate) mod text_field;
mod text_format; mod text_format;
mod xml; mod xml;
pub(crate) mod context_menu;
#[allow(non_snake_case, unused_must_use)] //can't use errors yet #[allow(non_snake_case, unused_must_use)] //can't use errors yet
pub fn getURL<'a, 'gc>( pub fn getURL<'a, 'gc>(
@ -314,6 +315,8 @@ pub fn create_globals<'gc>(
//TODO: These need to be constructors and should also set `.prototype` on each one //TODO: These need to be constructors and should also set `.prototype` on each one
let object = object::create_object_object(gc_context, object_proto, function_proto); let object = object::create_object_object(gc_context, object_proto, function_proto);
let context_menu_proto = context_menu::create_proto(gc_context, object_proto, function_proto);
let button = FunctionObject::function( let button = FunctionObject::function(
gc_context, gc_context,
Executable::Native(button::constructor), Executable::Native(button::constructor),
@ -456,6 +459,14 @@ pub fn create_globals<'gc>(
EnumSet::empty(), EnumSet::empty(),
); );
let context_menu = context_menu::create_context_menu_object(gc_context, Some(context_menu_proto), Some(function_proto));
globals.define_value(
gc_context,
"ContextMenu",
context_menu.into(),
EnumSet::empty()
);
let system_security = let system_security =
system_security::create(gc_context, Some(object_proto), Some(function_proto)); system_security::create(gc_context, Some(object_proto), Some(function_proto));
let system_capabilities = system_capabilities::create(gc_context, Some(object_proto)); let system_capabilities = system_capabilities::create(gc_context, Some(object_proto));

View File

@ -0,0 +1,94 @@
use gc_arena::MutationContext;
use crate::avm1::{Value, ScriptObject, Avm1};
use crate::avm1::function::{FunctionObject, Executable};
use crate::avm1::Object;
use crate::context::UpdateContext;
use crate::avm1::return_value::ReturnValue;
use crate::avm1::error::Error;
use enumset::EnumSet;
pub fn constructor<'gc>(
_avm: &mut Avm1<'gc>,
_context: &mut UpdateContext<'_, 'gc, '_>,
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<ReturnValue<'gc>, Error> {
Ok(Value::Undefined.into())
}
pub fn create_context_menu_object<'gc>(
gc_context: MutationContext<'gc, '_>,
context_menu_proto: Option<Object<'gc>>,
fn_proto: Option<Object<'gc>>,
) -> Object<'gc> {
FunctionObject::function(
gc_context,
Executable::Native(constructor),
fn_proto,
context_menu_proto,
)
}
pub fn copy<'gc>(
_avm: &mut Avm1<'gc>,
_context: &mut UpdateContext<'_, 'gc, '_>,
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<ReturnValue<'gc>, Error> {
log::warn!("ContextMenu.copy() not implemented");
Ok(Value::Undefined.into())
}
pub fn hide_builtin_items<'gc>(
_avm: &mut Avm1<'gc>,
_context: &mut UpdateContext<'_, 'gc, '_>,
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<ReturnValue<'gc>, Error> {
log::warn!("ContextMenu.hideBuiltInItems() not implemented");
Ok(Value::Undefined.into())
}
pub fn on_select<'gc>(
_avm: &mut Avm1<'gc>,
_context: &mut UpdateContext<'_, 'gc, '_>,
_this: Object<'gc>,
_args: &[Value<'gc>],
) -> Result<ReturnValue<'gc>, Error> {
log::warn!("ContextMenu.onSelect() not implemented");
Ok(Value::Undefined.into())
}
pub fn create_proto<'gc>(
gc_context: MutationContext<'gc, '_>,
proto: Object<'gc>,
fn_proto: Object<'gc>,
) -> Object<'gc> {
let mut object = ScriptObject::object(gc_context, Some(proto));
object.force_set_function(
"copy",
copy,
gc_context,
EnumSet::empty(),
Some(fn_proto)
);
object.force_set_function(
"hideBuiltInItems",
hide_builtin_items,
gc_context,
EnumSet::empty(),
Some(fn_proto)
);
object.force_set_function(
"onSelect",
on_select,
gc_context,
EnumSet::empty(),
Some(fn_proto)
);
object.into()
}