core: Pass UpdateContext to ContextMenuState::build_builtin_items

This simplifies code, as we do not have to access
the same elements over and over.
This commit is contained in:
Kamil Jarosz 2024-06-06 21:26:01 +02:00 committed by Nathan Adams
parent 2955add845
commit 1f3c230691
4 changed files with 12 additions and 14 deletions

View File

@ -186,11 +186,7 @@ pub fn make_context_menu_state<'gc>(
} }
} }
result.build_builtin_items( result.build_builtin_items(builtin_items, &mut activation.context);
builtin_items,
activation.context.stage,
&activation.context.ui.language(),
);
if let Some(menu) = menu { if let Some(menu) = menu {
if let Ok(Value::Object(custom_items)) = menu.get("customItems", activation) { if let Ok(Value::Object(custom_items)) = menu.get("customItems", activation) {

View File

@ -66,11 +66,7 @@ pub fn make_context_menu_state<'gc>(
} }
} }
result.build_builtin_items( result.build_builtin_items(builtin_items, &mut activation.context);
builtin_items,
activation.context.stage,
&activation.context.ui.language(),
);
if let Some(menu) = menu { if let Some(menu) = menu {
if let Ok(Value::Object(custom_items)) = menu.get_public_property("customItems", activation) if let Ok(Value::Object(custom_items)) = menu.get_public_property("customItems", activation)

View File

@ -6,10 +6,10 @@
use crate::avm1; use crate::avm1;
use crate::avm2; use crate::avm2;
use crate::context::UpdateContext;
use crate::display_object::Stage; use crate::display_object::Stage;
use crate::display_object::TDisplayObject; use crate::display_object::TDisplayObject;
use crate::i18n::core_text; use crate::i18n::core_text;
use fluent_templates::LanguageIdentifier;
use gc_arena::Collect; use gc_arena::Collect;
use ruffle_render::quality::StageQuality; use ruffle_render::quality::StageQuality;
use serde::Serialize; use serde::Serialize;
@ -26,22 +26,28 @@ impl<'gc> ContextMenuState<'gc> {
pub fn new() -> Self { pub fn new() -> Self {
Self::default() Self::default()
} }
pub fn push(&mut self, item: ContextMenuItem, callback: ContextMenuCallback<'gc>) { pub fn push(&mut self, item: ContextMenuItem, callback: ContextMenuCallback<'gc>) {
self.info.push(item); self.info.push(item);
self.callbacks.push(callback); self.callbacks.push(callback);
} }
pub fn info(&self) -> &Vec<ContextMenuItem> { pub fn info(&self) -> &Vec<ContextMenuItem> {
&self.info &self.info
} }
pub fn callback(&self, index: usize) -> &ContextMenuCallback<'gc> { pub fn callback(&self, index: usize) -> &ContextMenuCallback<'gc> {
&self.callbacks[index] &self.callbacks[index]
} }
pub fn build_builtin_items( pub fn build_builtin_items(
&mut self, &mut self,
item_flags: BuiltInItemFlags, item_flags: BuiltInItemFlags,
stage: Stage<'gc>, context: &mut UpdateContext<'_, 'gc>,
language: &LanguageIdentifier,
) { ) {
let stage = context.stage;
let language = &context.ui.language();
let Some(root_mc) = stage.root_clip().and_then(|c| c.as_movie_clip()) else { let Some(root_mc) = stage.root_clip().and_then(|c| c.as_movie_clip()) else {
return; return;
}; };

View File

@ -602,7 +602,7 @@ impl Player {
// no AVM1 or AVM2 object - so just prepare the builtin items // no AVM1 or AVM2 object - so just prepare the builtin items
let mut menu = ContextMenuState::new(); let mut menu = ContextMenuState::new();
let builtin_items = BuiltInItemFlags::for_stage(context.stage); let builtin_items = BuiltInItemFlags::for_stage(context.stage);
menu.build_builtin_items(builtin_items, context.stage, &context.ui.language()); menu.build_builtin_items(builtin_items, context);
menu menu
}; };