mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Replace the unsound impl DerefMut for FlowRef
with an unsafe function.
See #6503.
This commit is contained in:
parent
a5fbb2f2a6
commit
2d22aa8e7e
10 changed files with 112 additions and 81 deletions
|
@ -14,7 +14,7 @@ use cssparser::ToCss;
|
|||
use data::LayoutDataWrapper;
|
||||
use display_list_builder::ToGfxColor;
|
||||
use flow::{self, Flow, ImmutableFlowUtils, MutableFlowUtils, MutableOwnedFlowUtils};
|
||||
use flow_ref::FlowRef;
|
||||
use flow_ref::{self, FlowRef};
|
||||
use fragment::{Fragment, FragmentBorderBoxIterator, SpecificFragmentInfo};
|
||||
use incremental::{LayoutDamageComputation, REFLOW, REFLOW_ENTIRE_DOCUMENT, REPAINT};
|
||||
use layout_debug;
|
||||
|
@ -781,7 +781,7 @@ impl LayoutTask {
|
|||
_ => return None,
|
||||
};
|
||||
|
||||
flow.mark_as_root();
|
||||
unsafe { flow_ref::deref_mut(&mut flow) }.mark_as_root();
|
||||
|
||||
Some(flow)
|
||||
}
|
||||
|
@ -999,11 +999,11 @@ impl LayoutTask {
|
|||
self.profiler_metadata(),
|
||||
self.time_profiler_chan.clone(),
|
||||
|| {
|
||||
flow::mut_base(&mut **layout_root).stacking_relative_position =
|
||||
flow::mut_base(unsafe { flow_ref::deref_mut(layout_root) }).stacking_relative_position =
|
||||
LogicalPoint::zero(writing_mode).to_physical(writing_mode,
|
||||
rw_data.screen_size);
|
||||
|
||||
flow::mut_base(&mut **layout_root).clip =
|
||||
flow::mut_base(unsafe { flow_ref::deref_mut(layout_root) }).clip =
|
||||
ClippingRegion::from_rect(&data.page_clip_rect);
|
||||
|
||||
match (&mut rw_data.parallel_traversal, opts::get().parallel_display_list_building) {
|
||||
|
@ -1023,14 +1023,16 @@ impl LayoutTask {
|
|||
if data.goal == ReflowGoal::ForDisplay {
|
||||
debug!("Done building display list.");
|
||||
|
||||
let root_background_color = get_root_flow_background_color(&mut **layout_root);
|
||||
let root_background_color = get_root_flow_background_color(
|
||||
unsafe { flow_ref::deref_mut(layout_root) });
|
||||
let root_size = {
|
||||
let root_flow = flow::base(&**layout_root);
|
||||
root_flow.position.size.to_physical(root_flow.writing_mode)
|
||||
};
|
||||
let mut display_list = box DisplayList::new();
|
||||
flow::mut_base(&mut **layout_root).display_list_building_result
|
||||
.add_to(&mut *display_list);
|
||||
flow::mut_base(unsafe { flow_ref::deref_mut(layout_root) })
|
||||
.display_list_building_result
|
||||
.add_to(&mut *display_list);
|
||||
let paint_layer = PaintLayer::new(layout_root.layer_id(0),
|
||||
root_background_color,
|
||||
ScrollPolicy::Scrollable);
|
||||
|
@ -1128,7 +1130,7 @@ impl LayoutTask {
|
|||
}
|
||||
if needs_reflow {
|
||||
if let Some(mut flow) = self.try_get_layout_root(*node) {
|
||||
LayoutTask::reflow_all_nodes(&mut *flow);
|
||||
LayoutTask::reflow_all_nodes(unsafe { flow_ref::deref_mut(&mut flow) });
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1289,7 +1291,7 @@ impl LayoutTask {
|
|||
self.profiler_metadata(),
|
||||
self.time_profiler_chan.clone(),
|
||||
|| {
|
||||
animation::recalc_style_for_animations(root_flow.deref_mut(),
|
||||
animation::recalc_style_for_animations(unsafe { flow_ref::deref_mut(&mut root_flow) },
|
||||
animations)
|
||||
});
|
||||
}
|
||||
|
@ -1309,10 +1311,10 @@ impl LayoutTask {
|
|||
self.profiler_metadata(),
|
||||
self.time_profiler_chan.clone(),
|
||||
|| {
|
||||
if opts::get().nonincremental_layout || root_flow.deref_mut()
|
||||
if opts::get().nonincremental_layout || unsafe { flow_ref::deref_mut(&mut root_flow) }
|
||||
.compute_layout_damage()
|
||||
.contains(REFLOW_ENTIRE_DOCUMENT) {
|
||||
root_flow.deref_mut().reflow_entire_document()
|
||||
unsafe { flow_ref::deref_mut(&mut root_flow) }.reflow_entire_document()
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue