Bug 722923. Part 1: Strip opacity/transform update hints when we recursively invalidate over our children. r=mats

This commit is contained in:
Robert O'Callahan 2012-02-08 11:52:59 +13:00
parent cbb760d99e
commit 3f0ffee8df

View File

@ -7616,7 +7616,6 @@ DoApplyRenderingChangeToTree(nsIFrame* aFrame,
nsChangeHint aChange);
/**
* @param aBoundsRect returns the bounds enclosing the areas covered by aFrame and its childre
* This rect is relative to aFrame's parent
*/
static void
@ -7675,11 +7674,21 @@ DoApplyRenderingChangeToTree(nsIFrame* aFrame,
"should only be called within ApplyRenderingChangeToTree");
for ( ; aFrame; aFrame = nsLayoutUtils::GetNextContinuationOrSpecialSibling(aFrame)) {
NS_ASSERTION(!(aChange & nsChangeHint_UpdateTransformLayer) || aFrame->IsTransformed(),
"Only transformed frames should have UpdateTransformLayer hint");
// Get view if this frame has one and trigger an update. If the
// frame doesn't have a view, find the nearest containing view
// (adjusting r's coordinate system to reflect the nesting) and
// update there.
UpdateViewsForTree(aFrame, aFrameManager, aChange);
// We don't need to update transforms in UpdateViewsForTree, because
// there can't be any out-of-flows or popups that need to be transformed;
// all out-of-flow descendants of the transformed element must also be
// descendants of the transformed frame.
UpdateViewsForTree(aFrame, aFrameManager,
nsChangeHint(aChange & (nsChangeHint_RepaintFrame |
nsChangeHint_SyncFrameView |
nsChangeHint_UpdateOpacityLayer)));
// if frame has view, will already be invalidated
if (aChange & nsChangeHint_RepaintFrame) {