mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 807563 - Update the overflow areas of all preserve-3d children when the transform changes. r=roc
This commit is contained in:
parent
ecdc83dbd2
commit
1e525216af
@ -7805,6 +7805,7 @@ DoApplyRenderingChangeToTree(nsIFrame* aFrame,
|
||||
}
|
||||
if (aChange & nsChangeHint_UpdateTransformLayer) {
|
||||
aFrame->MarkLayersActive(nsChangeHint_UpdateTransformLayer);
|
||||
aFrame->AddStateBits(NS_FRAME_TRANSFORM_CHANGED);
|
||||
// If we're not already going to do an invalidating paint, see
|
||||
// if we can get away with only updating the transform on a
|
||||
// layer for this frame, and not scheduling an invalidating
|
||||
|
@ -6984,12 +6984,10 @@ nsIFrame::FinishAndStoreOverflow(nsOverflowAreas& aOverflowAreas,
|
||||
nsRect& o = aOverflowAreas.Overflow(otype);
|
||||
o = nsDisplayTransform::TransformRect(o, this, nsPoint(0, 0), &newBounds);
|
||||
}
|
||||
if (sizeChanged) {
|
||||
if (Preserves3DChildren()) {
|
||||
ComputePreserve3DChildrenOverflow(aOverflowAreas, newBounds);
|
||||
} else if (ChildrenHavePerspective()) {
|
||||
RecomputePerspectiveChildrenOverflow(this->GetStyleContext(), &newBounds);
|
||||
}
|
||||
if ((sizeChanged || HasAnyStateBits(NS_FRAME_TRANSFORM_CHANGED)) && Preserves3DChildren()) {
|
||||
ComputePreserve3DChildrenOverflow(aOverflowAreas, newBounds);
|
||||
} else if (sizeChanged && ChildrenHavePerspective()) {
|
||||
RecomputePerspectiveChildrenOverflow(this->GetStyleContext(), &newBounds);
|
||||
}
|
||||
} else {
|
||||
Properties().Delete(nsIFrame::PreTransformOverflowAreasProperty());
|
||||
@ -6998,6 +6996,7 @@ nsIFrame::FinishAndStoreOverflow(nsOverflowAreas& aOverflowAreas,
|
||||
RecomputePerspectiveChildrenOverflow(this->GetStyleContext(), &newBounds);
|
||||
}
|
||||
}
|
||||
RemoveStateBits(NS_FRAME_TRANSFORM_CHANGED);
|
||||
|
||||
|
||||
bool anyOverflowChanged;
|
||||
|
@ -252,6 +252,10 @@ typedef uint64_t nsFrameState;
|
||||
// This bit acts as a loop flag for recursive paint server drawing.
|
||||
#define NS_FRAME_DRAWING_AS_PAINTSERVER NS_FRAME_STATE_BIT(33)
|
||||
|
||||
// Marks the frame as having a changed transform between processing
|
||||
// nsChangeHint_UpdateTransformLayer and calling FinishAndStoreOverflow.
|
||||
#define NS_FRAME_TRANSFORM_CHANGED NS_FRAME_STATE_BIT(34)
|
||||
|
||||
// Frame is a display root and the retained layer tree needs to be updated
|
||||
// at the next paint via display list construction.
|
||||
// Only meaningful for display roots, so we don't really need a global state
|
||||
|
Loading…
Reference in New Issue
Block a user