diff --git a/core/src/avm1/color_transform_object.rs b/core/src/avm1/color_transform_object.rs index 61c5f3887..ef1749442 100644 --- a/core/src/avm1/color_transform_object.rs +++ b/core/src/avm1/color_transform_object.rs @@ -67,7 +67,6 @@ impl<'gc> ColorTransformObject<'gc> { gc_context: MutationContext<'gc, '_>, proto: Option>, ) -> Self { - println!("Create new ct o"); ColorTransformObject(GcCell::allocate( gc_context, ColorTransformData { diff --git a/core/src/avm1/globals/color_transform.rs b/core/src/avm1/globals/color_transform.rs index 7c5a0a708..68c76dd68 100644 --- a/core/src/avm1/globals/color_transform.rs +++ b/core/src/avm1/globals/color_transform.rs @@ -140,8 +140,6 @@ pub fn set_rgb<'gc>( this: Object<'gc>, args: &[Value<'gc>], ) -> Result, Error<'gc>> { - log::warn!("ColorTransform.set_rgb"); - let new_rgb = args .get(0) .unwrap_or(&Value::Undefined) @@ -173,7 +171,6 @@ macro_rules! color_transform_value_accessor { this: Object<'gc>, args: &[Value<'gc>], ) -> Result, Error<'gc>> { - //TODO: add validation let new_val = args .get(0) .unwrap_or(&Value::Undefined) @@ -190,7 +187,6 @@ macro_rules! color_transform_value_accessor { this: Object<'gc>, _args: &[Value<'gc>], ) -> Result, Error<'gc>> { - println!("This: {}, {:?}", stringify!($get_ident), this); let ct = this.as_color_transform_object().unwrap(); Ok(Value::Number(ct.$get_ident()).into()) } @@ -219,15 +215,15 @@ pub fn create_proto<'gc>( let mut object = color_transform_object.as_script_object().unwrap(); with_color_transform!(object, gc_context, - "rgb" => [get_rgb, set_rgb], + "alphaMultiplier" => [get_alpha_multiplier, set_alpha_multiplier], "redMultiplier" => [get_red_multiplier, set_red_multiplier], "greenMultiplier" => [get_green_multiplier, set_green_multiplier], "blueMultiplier" => [get_blue_multiplier, set_blue_multiplier], - "alphaMultiplier" => [get_alpha_multiplier, set_alpha_multiplier], + "alphaOffset" => [get_alpha_offset, set_alpha_offset], "redOffset" => [get_red_offset, set_red_offset], "greenOffset" => [get_green_offset, set_green_offset], "blueOffset" => [get_blue_offset, set_blue_offset], - "alphaOffset" => [get_alpha_offset, set_alpha_offset], + "rgb" => [get_rgb, set_rgb], ); object.force_set_function( @@ -299,27 +295,6 @@ fn concat<'gc>( let alpha_offset = (other_ct.get_alpha_offset() * this_ct.get_alpha_multiplier()) + this_ct.get_alpha_offset(); - // This appears to do nothing if values are out of range - if 0.0 > red_multiplier - || red_multiplier > 1.0 - || 0.0 > green_multiplier - || green_multiplier > 1.0 - || 0.0 > blue_multiplier - || blue_multiplier > 1.0 - || 0.0 > alpha_multiplier - || alpha_multiplier > 1.0 - || -255.0 > red_offset - || red_offset > 255.0 - || -255.0 > green_offset - || green_offset > 255.0 - || -255.0 > blue_offset - || blue_offset > 255.0 - || -255.0 > alpha_offset - || alpha_offset > 255.0 - { - return Ok(Value::Undefined); - } - this_ct.set_red_multiplier(context.gc_context, red_multiplier); this_ct.set_green_multiplier(context.gc_context, green_multiplier); this_ct.set_blue_multiplier(context.gc_context, blue_multiplier); diff --git a/core/tests/regression_tests.rs b/core/tests/regression_tests.rs index eb748bfd6..c8443a6c2 100644 --- a/core/tests/regression_tests.rs +++ b/core/tests/regression_tests.rs @@ -215,6 +215,7 @@ swf_tests! { (define_local, "avm1/define_local", 1), (textfield_variable, "avm1/textfield_variable", 8), (error, "avm1/error", 1), + (color_transform, "avm1/color_transform", 1), } // TODO: These tests have some inaccuracies currently, so we use approx_eq to test that numeric values are close enough. diff --git a/core/tests/swfs/avm1/color_transform/output.txt b/core/tests/swfs/avm1/color_transform/output.txt new file mode 100644 index 000000000..8cbac2fea --- /dev/null +++ b/core/tests/swfs/avm1/color_transform/output.txt @@ -0,0 +1,48 @@ +ct +16718080 +(redMultiplier=1, greenMultiplier=1, blueMultiplier=1, alphaMultiplier=1, redOffset=255, greenOffset=25, blueOffset=0, alphaOffset=0) +(redMultiplier=0, greenMultiplier=0, blueMultiplier=0, alphaMultiplier=1, redOffset=255, greenOffset=0, blueOffset=0, alphaOffset=0) +ct2 +(redMultiplier=0.5, greenMultiplier=0.5, blueMultiplier=0.5, alphaMultiplier=0.5, redOffset=0, greenOffset=255, blueOffset=0, alphaOffset=50) +combine +(redMultiplier=0.25, greenMultiplier=0.25, blueMultiplier=0.25, alphaMultiplier=0.25, redOffset=35, greenOffset=50, blueOffset=65, alphaOffset=80) +oob constructor mult +(redMultiplier=1000, greenMultiplier=1000, blueMultiplier=1000, alphaMultiplier=1000, redOffset=1000.1, greenOffset=1000.1, blueOffset=1000.1, alphaOffset=1000.1) +(redMultiplier=250, greenMultiplier=250, blueMultiplier=250, alphaMultiplier=250, redOffset=36000.1, greenOffset=51000.1, blueOffset=66000.1, alphaOffset=81000.1) +36000.1 +51000.1 +66000.1 +250 +250 +250 +RGB +16777215 +2031615 +1984255 +1984080 +1984080 +RGB set +32 +48 +64 +0 +0 +123 +Bad concat +(redMultiplier=1, greenMultiplier=1, blueMultiplier=1, alphaMultiplier=1, redOffset=255, greenOffset=255, blueOffset=255, alphaOffset=255) +toString +concat +rgb +blueOffset +greenOffset +redOffset +alphaOffset +blueMultiplier +greenMultiplier +redMultiplier +alphaMultiplier +Large values +(redMultiplier=8589934592, greenMultiplier=1, blueMultiplier=1, alphaMultiplier=1, redOffset=0, greenOffset=0, blueOffset=0, alphaOffset=0) +Strange values +(redMultiplier=NaN, greenMultiplier=1, blueMultiplier=1, alphaMultiplier=1, redOffset=0, greenOffset=1000, blueOffset=0, alphaOffset=0) +(redMultiplier=0, greenMultiplier=0, blueMultiplier=0, alphaMultiplier=1, redOffset=0, greenOffset=0, blueOffset=0, alphaOffset=0) diff --git a/core/tests/swfs/avm1/color_transform/test.fla b/core/tests/swfs/avm1/color_transform/test.fla new file mode 100644 index 000000000..8901b3cf3 Binary files /dev/null and b/core/tests/swfs/avm1/color_transform/test.fla differ diff --git a/core/tests/swfs/avm1/color_transform/test.swf b/core/tests/swfs/avm1/color_transform/test.swf new file mode 100644 index 000000000..3d890a80f Binary files /dev/null and b/core/tests/swfs/avm1/color_transform/test.swf differ