mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Have PaintLayers own StackingContexts instead of the opposite
Previously, StackingContexts might have a PaintLayer. We switch the ownership, for several reasons: * We want PaintLayers to potentially contain something other than a StackingContext soon. * We want to delay the creation of PaintLayers until the last minute, so that we can synthesize new layers for sandwiched content. This commit also implements the second goal. Instead of creating PaintLayers during layout itself, wait until we are sorting and layerizing a completed DisplayList.
This commit is contained in:
parent
dbf8c9d2bc
commit
4ca93c39d6
6 changed files with 198 additions and 161 deletions
|
@ -63,27 +63,25 @@ impl DisplayListOptimizer {
|
|||
stacking_contexts: I)
|
||||
where I: Iterator<Item=&'a Arc<StackingContext>> {
|
||||
for stacking_context in stacking_contexts {
|
||||
if stacking_context.layer.is_none() {
|
||||
// Transform this stacking context to get it into the same space as
|
||||
// the parent stacking context.
|
||||
let origin_x = stacking_context.bounds.origin.x.to_f32_px();
|
||||
let origin_y = stacking_context.bounds.origin.y.to_f32_px();
|
||||
// Transform this stacking context to get it into the same space as
|
||||
// the parent stacking context.
|
||||
let origin_x = stacking_context.bounds.origin.x.to_f32_px();
|
||||
let origin_y = stacking_context.bounds.origin.y.to_f32_px();
|
||||
|
||||
let transform = Matrix4::identity().translate(origin_x,
|
||||
origin_y,
|
||||
0.0)
|
||||
.mul(&stacking_context.transform);
|
||||
let transform_2d = Matrix2D::new(transform.m11, transform.m12,
|
||||
transform.m21, transform.m22,
|
||||
transform.m41, transform.m42);
|
||||
let transform = Matrix4::identity().translate(origin_x,
|
||||
origin_y,
|
||||
0.0)
|
||||
.mul(&stacking_context.transform);
|
||||
let transform_2d = Matrix2D::new(transform.m11, transform.m12,
|
||||
transform.m21, transform.m22,
|
||||
transform.m41, transform.m42);
|
||||
|
||||
let overflow = geometry::au_rect_to_f32_rect(stacking_context.overflow);
|
||||
let overflow = transform_2d.transform_rect(&overflow);
|
||||
let overflow = geometry::f32_rect_to_au_rect(overflow);
|
||||
let overflow = geometry::au_rect_to_f32_rect(stacking_context.overflow);
|
||||
let overflow = transform_2d.transform_rect(&overflow);
|
||||
let overflow = geometry::f32_rect_to_au_rect(overflow);
|
||||
|
||||
if self.visible_rect.intersects(&overflow) {
|
||||
result_list.push_back((*stacking_context).clone())
|
||||
}
|
||||
if self.visible_rect.intersects(&overflow) {
|
||||
result_list.push_back((*stacking_context).clone())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue