From 7c87f35d8d43aaa3bc053db64759a0dbacebd808 Mon Sep 17 00:00:00 2001 From: Varun Ramesh Date: Sat, 27 Nov 2021 21:31:39 -0800 Subject: [PATCH] avm2: Implement `flash.display.PixelSnapping` (#5718) * Add flash.display.PixelSnapping enum class * Run 'cargo format --all' * Add 'final' class attribute --- core/src/avm2/globals.rs | 5 ++ core/src/avm2/globals/flash/display.rs | 1 + .../globals/flash/display/pixelsnapping.rs | 53 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 core/src/avm2/globals/flash/display/pixelsnapping.rs diff --git a/core/src/avm2/globals.rs b/core/src/avm2/globals.rs index c5679ff5a..39c28b5a6 100644 --- a/core/src/avm2/globals.rs +++ b/core/src/avm2/globals.rs @@ -816,6 +816,11 @@ pub fn load_player_globals<'gc>( flash::display::bitmapdata::create_class(mc), script ); + class( + activation, + flash::display::pixelsnapping::create_class(mc), + script, + )?; // package `flash.geom` avm2_system_class!( diff --git a/core/src/avm2/globals/flash/display.rs b/core/src/avm2/globals/flash/display.rs index 2bad624eb..d7c23e888 100644 --- a/core/src/avm2/globals/flash/display.rs +++ b/core/src/avm2/globals/flash/display.rs @@ -14,6 +14,7 @@ pub mod jointstyle; pub mod linescalemode; pub mod loaderinfo; pub mod movieclip; +pub mod pixelsnapping; pub mod scene; pub mod shape; pub mod simplebutton; diff --git a/core/src/avm2/globals/flash/display/pixelsnapping.rs b/core/src/avm2/globals/flash/display/pixelsnapping.rs new file mode 100644 index 000000000..9a103a8dc --- /dev/null +++ b/core/src/avm2/globals/flash/display/pixelsnapping.rs @@ -0,0 +1,53 @@ +//! `flash.display.PixelSnapping` 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::value::Value; +use crate::avm2::Error; +use gc_arena::{GcCell, MutationContext}; + +/// Implements `flash.display.PixelSnapping`'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.PixelSnapping`'s class constructor. +pub fn class_init<'gc>( + _activation: &mut Activation<'_, 'gc, '_>, + _this: Option>, + _args: &[Value<'gc>], +) -> Result, Error> { + Ok(Value::Undefined) +} + +/// Construct `PixelSnapping`'s class. +pub fn create_class<'gc>(mc: MutationContext<'gc, '_>) -> GcCell<'gc, Class<'gc>> { + let class = Class::new( + QName::new(Namespace::package("flash.display"), "PixelSnapping"), + Some(QName::new(Namespace::public(), "Object").into()), + Method::from_builtin(instance_init, "", mc), + Method::from_builtin(class_init, "", mc), + mc, + ); + + let mut write = class.write(mc); + + write.set_attributes(ClassAttributes::SEALED | ClassAttributes::FINAL); + + const CONSTANTS: &[(&str, &str)] = + &[("ALWAYS", "always"), ("AUTO", "auto"), ("NEVER", "never")]; + write.define_public_constant_string_class_traits(CONSTANTS); + + class +}