Bug 1303761 - Disable paint skipping for all scroll frames between the fixed element and the scrolled clip. r?tnikkel
MozReview-Commit-ID: 1FIQcJT55DJ
--- a/layout/base/DisplayListClipState.cpp
+++ b/layout/base/DisplayListClipState.cpp
@@ -37,20 +37,24 @@ DisplayListClipState::GetCurrentCombined
void
DisplayListClipState::SetScrollClipForContainingBlockDescendants(
nsDisplayListBuilder* aBuilder,
const DisplayItemScrollClip* aScrollClip)
{
if (aBuilder->IsPaintingToWindow() &&
mClipContentDescendants &&
- aScrollClip != mScrollClipContainingBlockDescendants &&
- !DisplayItemScrollClip::IsAncestor(mClipContentDescendantsScrollClip, aScrollClip)) {
- if (mClipContentDescendantsScrollClip && mClipContentDescendantsScrollClip->mScrollableFrame) {
- mClipContentDescendantsScrollClip->mScrollableFrame->SetScrollsClipOnUnscrolledOutOfFlow();
+ aScrollClip != mScrollClipContainingBlockDescendants) {
+ // Disable paint skipping for all scroll frames on the way to aScrollClip.
+ for (const DisplayItemScrollClip* sc = mClipContentDescendantsScrollClip;
+ sc && !DisplayItemScrollClip::IsAncestor(sc, aScrollClip);
+ sc = sc->mParent) {
+ if (sc->mScrollableFrame) {
+ sc->mScrollableFrame->SetScrollsClipOnUnscrolledOutOfFlow();
+ }
}
mClipContentDescendantsScrollClip = nullptr;
}
mScrollClipContainingBlockDescendants = aScrollClip;
mStackingContextAncestorSC = DisplayItemScrollClip::PickAncestor(mStackingContextAncestorSC, aScrollClip);
}
void