refactor: Stop manually borrowing fields in mutate_with_update_context
This commit is contained in:
parent
8cc00f32bb
commit
969fab7619
|
@ -1439,52 +1439,6 @@ impl Player {
|
||||||
where
|
where
|
||||||
F: for<'a, 'gc> FnOnce(&mut UpdateContext<'a, 'gc, '_>) -> R,
|
F: for<'a, 'gc> FnOnce(&mut UpdateContext<'a, 'gc, '_>) -> R,
|
||||||
{
|
{
|
||||||
// We have to do this piecewise borrowing of fields before the closure to avoid
|
|
||||||
// completely borrowing `self`.
|
|
||||||
let (
|
|
||||||
player_version,
|
|
||||||
swf,
|
|
||||||
renderer,
|
|
||||||
audio,
|
|
||||||
navigator,
|
|
||||||
ui,
|
|
||||||
rng,
|
|
||||||
mouse_position,
|
|
||||||
player,
|
|
||||||
system_properties,
|
|
||||||
instance_counter,
|
|
||||||
storage,
|
|
||||||
locale,
|
|
||||||
logging,
|
|
||||||
video,
|
|
||||||
needs_render,
|
|
||||||
max_execution_duration,
|
|
||||||
current_frame,
|
|
||||||
time_offset,
|
|
||||||
frame_rate,
|
|
||||||
) = (
|
|
||||||
self.player_version,
|
|
||||||
&self.swf,
|
|
||||||
self.renderer.deref_mut(),
|
|
||||||
self.audio.deref_mut(),
|
|
||||||
self.navigator.deref_mut(),
|
|
||||||
self.ui.deref_mut(),
|
|
||||||
&mut self.rng,
|
|
||||||
&self.mouse_pos,
|
|
||||||
self.self_reference.clone(),
|
|
||||||
&mut self.system,
|
|
||||||
&mut self.instance_counter,
|
|
||||||
self.storage.deref_mut(),
|
|
||||||
self.locale.deref_mut(),
|
|
||||||
self.log.deref_mut(),
|
|
||||||
self.video.deref_mut(),
|
|
||||||
&mut self.needs_render,
|
|
||||||
self.max_execution_duration,
|
|
||||||
&mut self.current_frame,
|
|
||||||
&mut self.time_offset,
|
|
||||||
&mut self.frame_rate,
|
|
||||||
);
|
|
||||||
|
|
||||||
self.gc_arena.mutate(|gc_context, gc_root| {
|
self.gc_arena.mutate(|gc_context, gc_root| {
|
||||||
let mut root_data = gc_root.0.write(gc_context);
|
let mut root_data = gc_root.0.write(gc_context);
|
||||||
let mouse_hovered_object = root_data.mouse_hovered_object;
|
let mouse_hovered_object = root_data.mouse_hovered_object;
|
||||||
|
@ -1507,44 +1461,44 @@ impl Player {
|
||||||
) = root_data.update_context_params();
|
) = root_data.update_context_params();
|
||||||
|
|
||||||
let mut update_context = UpdateContext {
|
let mut update_context = UpdateContext {
|
||||||
player_version,
|
player_version: self.player_version,
|
||||||
swf,
|
swf: &self.swf,
|
||||||
library,
|
library,
|
||||||
rng,
|
rng: &mut self.rng,
|
||||||
renderer,
|
renderer: self.renderer.deref_mut(),
|
||||||
audio,
|
audio: self.audio.deref_mut(),
|
||||||
navigator,
|
navigator: self.navigator.deref_mut(),
|
||||||
ui,
|
ui: self.ui.deref_mut(),
|
||||||
action_queue,
|
action_queue,
|
||||||
gc_context,
|
gc_context,
|
||||||
stage,
|
stage,
|
||||||
mouse_over_object: mouse_hovered_object,
|
mouse_over_object: mouse_hovered_object,
|
||||||
mouse_down_object: mouse_pressed_object,
|
mouse_down_object: mouse_pressed_object,
|
||||||
mouse_position,
|
mouse_position: &self.mouse_pos,
|
||||||
drag_object,
|
drag_object,
|
||||||
player,
|
player: self.self_reference.clone(),
|
||||||
load_manager,
|
load_manager,
|
||||||
system: system_properties,
|
system: &mut self.system,
|
||||||
instance_counter,
|
instance_counter: &mut self.instance_counter,
|
||||||
storage,
|
storage: self.storage.deref_mut(),
|
||||||
locale,
|
locale: self.locale.deref_mut(),
|
||||||
log: logging,
|
log: self.log.deref_mut(),
|
||||||
video,
|
video: self.video.deref_mut(),
|
||||||
shared_objects,
|
shared_objects,
|
||||||
unbound_text_fields,
|
unbound_text_fields,
|
||||||
timers,
|
timers,
|
||||||
current_context_menu,
|
current_context_menu,
|
||||||
needs_render,
|
needs_render: &mut self.needs_render,
|
||||||
avm1,
|
avm1,
|
||||||
avm2,
|
avm2,
|
||||||
external_interface,
|
external_interface,
|
||||||
update_start: Instant::now(),
|
update_start: Instant::now(),
|
||||||
max_execution_duration,
|
max_execution_duration: self.max_execution_duration,
|
||||||
focus_tracker,
|
focus_tracker,
|
||||||
times_get_time_called: 0,
|
times_get_time_called: 0,
|
||||||
time_offset,
|
time_offset: &mut self.time_offset,
|
||||||
audio_manager,
|
audio_manager,
|
||||||
frame_rate,
|
frame_rate: &mut self.frame_rate,
|
||||||
};
|
};
|
||||||
|
|
||||||
let old_frame_rate = *update_context.frame_rate;
|
let old_frame_rate = *update_context.frame_rate;
|
||||||
|
@ -1559,7 +1513,7 @@ impl Player {
|
||||||
update_context.audio.set_frame_rate(new_frame_rate);
|
update_context.audio.set_frame_rate(new_frame_rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
*current_frame = update_context
|
self.current_frame = update_context
|
||||||
.stage
|
.stage
|
||||||
.root_clip()
|
.root_clip()
|
||||||
.as_movie_clip()
|
.as_movie_clip()
|
||||||
|
|
Loading…
Reference in New Issue