forked from mirrors/gecko-dev
Bug 545049. Capture the pre-transform overflow area of a frame and use it in InvalidateOverflowArea. r=mats
This commit is contained in:
parent
93d285f634
commit
a27c78da5a
5 changed files with 16 additions and 13 deletions
|
|
@ -7211,7 +7211,7 @@ DoApplyRenderingChangeToTree(nsIFrame* aFrame,
|
|||
}
|
||||
#endif
|
||||
} else {
|
||||
aFrame->Invalidate(aFrame->GetOverflowRect());
|
||||
aFrame->InvalidateOverflowRect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -7303,7 +7303,7 @@ InvalidateCanvasIfNeeded(nsIPresShell* presShell, nsIContent* node)
|
|||
|
||||
nsIViewManager::UpdateViewBatch batch(presShell->GetViewManager());
|
||||
nsIFrame* rootFrame = presShell->GetRootFrame();
|
||||
rootFrame->Invalidate(rootFrame->GetOverflowRect());
|
||||
rootFrame->InvalidateOverflowRect();
|
||||
batch.EndUpdateViewBatch(NS_VMREFRESH_DEFERRED);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -534,7 +534,7 @@ nsFrameManager::RemoveFrame(nsIAtom* aListName,
|
|||
// that doesn't change the size of the parent.)
|
||||
// This has to sure to invalidate the entire overflow rect; this
|
||||
// is important in the presence of absolute positioning
|
||||
aOldFrame->Invalidate(aOldFrame->GetOverflowRect());
|
||||
aOldFrame->InvalidateOverflowRect();
|
||||
|
||||
NS_ASSERTION(!aOldFrame->GetPrevContinuation() ||
|
||||
// exception for nsCSSFrameConstructor::RemoveFloatingFirstLetterFrames
|
||||
|
|
|
|||
|
|
@ -1120,7 +1120,7 @@ nsContainerFrame::DeleteNextInFlowChild(nsPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
|
||||
aNextInFlow->Invalidate(aNextInFlow->GetOverflowRect());
|
||||
aNextInFlow->InvalidateOverflowRect();
|
||||
|
||||
// Take the next-in-flow out of the parent's child list
|
||||
#ifdef DEBUG
|
||||
|
|
|
|||
|
|
@ -3825,7 +3825,7 @@ nsIFrame::InvalidateRectDifference(const nsRect& aR1, const nsRect& aR2)
|
|||
void
|
||||
nsIFrame::InvalidateOverflowRect()
|
||||
{
|
||||
Invalidate(GetOverflowRect());
|
||||
Invalidate(GetOverflowRectRelativeToSelf());
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -3965,14 +3965,14 @@ nsIFrame::GetOverflowRectRelativeToParent() const
|
|||
nsRect
|
||||
nsIFrame::GetOverflowRectRelativeToSelf() const
|
||||
{
|
||||
if (!(mState & NS_FRAME_MAY_BE_TRANSFORMED_OR_HAVE_RENDERING_OBSERVERS) ||
|
||||
!GetStyleDisplay()->HasTransform())
|
||||
return GetOverflowRect();
|
||||
nsRect* preEffectsBBox = static_cast<nsRect*>
|
||||
(Properties().Get(PreEffectsBBoxProperty()));
|
||||
if (!preEffectsBBox)
|
||||
return GetOverflowRect();
|
||||
return *preEffectsBBox;
|
||||
if ((mState & NS_FRAME_MAY_BE_TRANSFORMED_OR_HAVE_RENDERING_OBSERVERS) &&
|
||||
GetStyleDisplay()->HasTransform()) {
|
||||
nsRect* preTransformBBox = static_cast<nsRect*>
|
||||
(Properties().Get(PreTransformBBoxProperty()));
|
||||
if (preTransformBBox)
|
||||
return *preTransformBBox;
|
||||
}
|
||||
return GetOverflowRect();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -5666,6 +5666,8 @@ nsIFrame::FinishAndStoreOverflow(nsRect* aOverflowArea, nsSize aNewSize)
|
|||
(mState & NS_FRAME_MAY_BE_TRANSFORMED_OR_HAVE_RENDERING_OBSERVERS) &&
|
||||
GetStyleDisplay()->HasTransform();
|
||||
if (hasTransform) {
|
||||
Properties().
|
||||
Set(nsIFrame::PreTransformBBoxProperty(), new nsRect(*aOverflowArea));
|
||||
/* Since our size might not actually have been computed yet, we need to make sure that we use the
|
||||
* correct dimensions by overriding the stored bounding rectangle with the value the caller has
|
||||
* ensured us we'll use.
|
||||
|
|
|
|||
|
|
@ -831,6 +831,7 @@ public:
|
|||
|
||||
NS_DECLARE_FRAME_PROPERTY(OutlineInnerRectProperty, DestroyRect)
|
||||
NS_DECLARE_FRAME_PROPERTY(PreEffectsBBoxProperty, DestroyRect)
|
||||
NS_DECLARE_FRAME_PROPERTY(PreTransformBBoxProperty, DestroyRect)
|
||||
|
||||
NS_DECLARE_FRAME_PROPERTY(UsedMarginProperty, DestroyMargin)
|
||||
NS_DECLARE_FRAME_PROPERTY(UsedPaddingProperty, DestroyMargin)
|
||||
|
|
|
|||
Loading…
Reference in a new issue