From 9464a8800af63a304470c1cc80991f9c2ab8dc1d Mon Sep 17 00:00:00 2001 From: David Wendt Date: Thu, 11 Feb 2021 17:37:18 -0500 Subject: [PATCH] avm2: Implement `CapsStyle` --- core/src/avm2/globals.rs | 7 ++ core/src/avm2/globals/flash/display.rs | 1 + .../avm2/globals/flash/display/capsstyle.rs | 66 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 core/src/avm2/globals/flash/display/capsstyle.rs diff --git a/core/src/avm2/globals.rs b/core/src/avm2/globals.rs index 7ee61f8d3..4bf5ee9d6 100644 --- a/core/src/avm2/globals.rs +++ b/core/src/avm2/globals.rs @@ -696,6 +696,13 @@ pub fn load_player_globals<'gc>( domain, script, )?; + class( + activation, + flash::display::capsstyle::create_class(mc), + implicit_deriver, + domain, + script, + )?; // package `flash.geom` activation diff --git a/core/src/avm2/globals/flash/display.rs b/core/src/avm2/globals/flash/display.rs index f420ae26e..7ce90c049 100644 --- a/core/src/avm2/globals/flash/display.rs +++ b/core/src/avm2/globals/flash/display.rs @@ -1,5 +1,6 @@ //! `flash.display` namespace +pub mod capsstyle; pub mod displayobject; pub mod displayobjectcontainer; pub mod framelabel; diff --git a/core/src/avm2/globals/flash/display/capsstyle.rs b/core/src/avm2/globals/flash/display/capsstyle.rs new file mode 100644 index 000000000..5e0798db4 --- /dev/null +++ b/core/src/avm2/globals/flash/display/capsstyle.rs @@ -0,0 +1,66 @@ +//! `flash.display.CapsStyle` builtin/prototype + +use crate::avm2::activation::Activation; +use crate::avm2::class::{Class, ClassAttributes}; +use crate::avm2::method::Method; +use crate::avm2::names::{Namespace, QName}; +use crate::avm2::object::Object; +use crate::avm2::traits::Trait; +use crate::avm2::value::Value; +use crate::avm2::Error; +use gc_arena::{GcCell, MutationContext}; + +/// Implements `flash.display.CapsStyle`'s instance constructor. +pub fn instance_init<'gc>( + activation: &mut Activation<'_, 'gc, '_>, + this: Option>, + _args: &[Value<'gc>], +) -> Result, Error> { + if let Some(this) = this { + activation.super_init(this, &[])?; + } + + Ok(Value::Undefined) +} + +/// Implements `flash.display.CapsStyle`'s class constructor. +pub fn class_init<'gc>( + _activation: &mut Activation<'_, 'gc, '_>, + _this: Option>, + _args: &[Value<'gc>], +) -> Result, Error> { + Ok(Value::Undefined) +} + +/// Construct `CapsStyle`'s class. +pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>> { + let class = Class::new( + QName::new(Namespace::package("flash.display"), "CapsStyle"), + Some(QName::new(Namespace::public(), "Object").into()), + Method::from_builtin(instance_init), + Method::from_builtin(class_init), + mc, + ); + + let mut write = class.write(mc); + + write.set_attributes(ClassAttributes::SEALED); + + write.define_class_trait(Trait::from_const( + QName::new(Namespace::public(), "NONE"), + QName::new(Namespace::public(), "String").into(), + Some("none".into()), + )); + write.define_class_trait(Trait::from_const( + QName::new(Namespace::public(), "ROUND"), + QName::new(Namespace::public(), "String").into(), + Some("round".into()), + )); + write.define_class_trait(Trait::from_const( + QName::new(Namespace::public(), "SQUARE"), + QName::new(Namespace::public(), "String").into(), + Some("square".into()), + )); + + class +}