From 275c42b39ce81fd8f6020ebc4e77d6fe8b5af5d8 Mon Sep 17 00:00:00 2001 From: Lord-McSweeney Date: Tue, 4 Jul 2023 10:39:46 -0700 Subject: [PATCH] core: Correctly apply blend modes and filters from button records --- core/src/display_object/avm1_button.rs | 6 ++++++ core/src/display_object/avm2_button.rs | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/core/src/display_object/avm1_button.rs b/core/src/display_object/avm1_button.rs index bb7fb54bf..decf45e38 100644 --- a/core/src/display_object/avm1_button.rs +++ b/core/src/display_object/avm1_button.rs @@ -14,6 +14,7 @@ use crate::tag_utils::{SwfMovie, SwfSlice}; use crate::vminterface::Instantiator; use core::fmt; use gc_arena::{Collect, GcCell, MutationContext}; +use ruffle_render::filters::Filter; use std::cell::{Ref, RefMut}; use std::collections::BTreeMap; use std::sync::Arc; @@ -173,6 +174,11 @@ impl<'gc> Avm1Button<'gc> { // Set transform of child (and modify previous child if it already existed) child.set_matrix(context.gc_context, record.matrix.into()); child.set_color_transform(context.gc_context, record.color_transform); + child.set_blend_mode(context.gc_context, record.blend_mode); + child.set_filters( + context.gc_context, + record.filters.iter().map(Filter::from).collect(), + ); } } diff --git a/core/src/display_object/avm2_button.rs b/core/src/display_object/avm2_button.rs index 6d3fdf21b..71fc3a2a2 100644 --- a/core/src/display_object/avm2_button.rs +++ b/core/src/display_object/avm2_button.rs @@ -18,6 +18,7 @@ use crate::tag_utils::{SwfMovie, SwfSlice}; use crate::vminterface::Instantiator; use core::fmt; use gc_arena::{Collect, GcCell, MutationContext}; +use ruffle_render::filters::Filter; use std::cell::{Ref, RefMut}; use std::sync::Arc; @@ -211,6 +212,11 @@ impl<'gc> Avm2Button<'gc> { if swf_state != swf::ButtonState::HIT_TEST { child.set_color_transform(context.gc_context, record.color_transform); + child.set_blend_mode(context.gc_context, record.blend_mode); + child.set_filters( + context.gc_context, + record.filters.iter().map(Filter::from).collect(), + ); } children.push((child, record.depth));