зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1031107 - Part 4: Union the display port dirty area in nsSubDocumentFrame. r=tn
This commit is contained in:
Родитель
26e1f42909
Коммит
50d31b707c
|
@ -2433,13 +2433,18 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// If we are a root scroll frame that has a display port we want to add
|
||||
// scrollbars, they will be children of the scrollable layer, but they get
|
||||
// adjusted by the APZC automatically.
|
||||
bool addScrollBars = mIsRoot &&
|
||||
nsLayoutUtils::GetDisplayPort(mOuter->GetContent()) &&
|
||||
!aBuilder->IsForEventDelivery();
|
||||
bool usingDisplayPort = nsLayoutUtils::GetDisplayPort(mOuter->GetContent());
|
||||
bool addScrollBars = mIsRoot && usingDisplayPort && !aBuilder->IsForEventDelivery();
|
||||
|
||||
nsRect scrollbarDirty = aDirtyRect;
|
||||
if (usingDisplayPort) {
|
||||
// Make sure we include the scrollbars.
|
||||
scrollbarDirty.Inflate(GetActualScrollbarSizes());
|
||||
}
|
||||
|
||||
if (addScrollBars) {
|
||||
// Add classic scrollbars.
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, aLists, createLayersForScrollbars,
|
||||
AppendScrollPartsTo(aBuilder, scrollbarDirty, aLists, createLayersForScrollbars,
|
||||
false);
|
||||
}
|
||||
|
||||
|
@ -2451,23 +2456,13 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
if (addScrollBars) {
|
||||
// Add overlay scrollbars.
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, aLists,
|
||||
AppendScrollPartsTo(aBuilder, scrollbarDirty, aLists,
|
||||
createLayersForScrollbars, true);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Now display the scrollbars and scrollcorner. These parts are drawn
|
||||
// in the border-background layer, on top of our own background and
|
||||
// borders and underneath borders and backgrounds of later elements
|
||||
// in the tree.
|
||||
// Note that this does not apply for overlay scrollbars; those are drawn
|
||||
// in the positioned-elements layer on top of everything else by the call
|
||||
// to AppendScrollPartsTo(..., true) further down.
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, aLists, createLayersForScrollbars,
|
||||
false);
|
||||
|
||||
// Overflow clipping can never clip frames outside our subtree, so there
|
||||
// is no need to worry about whether we are a moving frame that might clip
|
||||
// non-moving frames.
|
||||
|
@ -2514,6 +2509,22 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
}
|
||||
|
||||
nsRect scrollbarDirty = aDirtyRect;
|
||||
if (usingDisplayport) {
|
||||
// Make sure we include the scrollbars.
|
||||
scrollbarDirty.Inflate(GetActualScrollbarSizes());
|
||||
}
|
||||
|
||||
// Now display the scrollbars and scrollcorner. These parts are drawn
|
||||
// in the border-background layer, on top of our own background and
|
||||
// borders and underneath borders and backgrounds of later elements
|
||||
// in the tree.
|
||||
// Note that this does not apply for overlay scrollbars; those are drawn
|
||||
// in the positioned-elements layer on top of everything else by the call
|
||||
// to AppendScrollPartsTo(..., true) further down.
|
||||
AppendScrollPartsTo(aBuilder, scrollbarDirty, aLists, createLayersForScrollbars,
|
||||
false);
|
||||
|
||||
if (aBuilder->IsForImageVisibility()) {
|
||||
// We expand the dirty rect to catch images just outside of the scroll port.
|
||||
// We use the dirty rect instead of the whole scroll port to prevent
|
||||
|
@ -2650,7 +2661,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
}
|
||||
// Now display overlay scrollbars and the resizer, if we have one.
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, scrolledContent,
|
||||
AppendScrollPartsTo(aBuilder, scrollbarDirty, scrolledContent,
|
||||
createLayersForScrollbars, true);
|
||||
scrolledContent.MoveTo(aLists);
|
||||
}
|
||||
|
|
|
@ -408,7 +408,8 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
nsRect(nsPoint(0,0), nsLayoutUtils::CalculateCompositionSizeForFrame(rootScrollFrame)) :
|
||||
dirty.Intersect(nsRect(nsPoint(0,0), subdocRootFrame->GetSize()));
|
||||
nsRect displayPort;
|
||||
if (nsLayoutUtils::GetOrMaybeCreateDisplayPort(
|
||||
if (!aBuilder->IsForEventDelivery() &&
|
||||
nsLayoutUtils::GetOrMaybeCreateDisplayPort(
|
||||
*aBuilder, rootScrollFrame, displayportBase, &displayPort)) {
|
||||
haveDisplayPort = true;
|
||||
dirty = displayPort;
|
||||
|
|
Загрузка…
Ссылка в новой задаче