mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-30 19:28:40 +09:00
Issue #1355 - Store the dirty rect on the display list builder rather than passing it as a parameter to BuildDisplayList
Also fix build bustage for De-unified layout/xul in nsRootBoxFrame.cpp
This commit is contained in:
parent
7ae0c88c46
commit
85b85bac28
154 changed files with 259 additions and 430 deletions
|
|
@ -327,7 +327,6 @@ WrapBackgroundColorInOwnLayer(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
|
|
@ -368,7 +367,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
|
||||
if (rfp) {
|
||||
rfp->BuildDisplayList(aBuilder, this, aDirtyRect, aLists);
|
||||
rfp->BuildDisplayList(aBuilder, this, aLists);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -393,17 +392,18 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
nsIFrame* savedIgnoreScrollFrame = nullptr;
|
||||
if (subdocRootFrame) {
|
||||
// get the dirty rect relative to the root frame of the subdoc
|
||||
dirty = aDirtyRect + GetOffsetToCrossDoc(subdocRootFrame);
|
||||
dirty = aBuilder->GetDirtyRect() + GetOffsetToCrossDoc(subdocRootFrame);
|
||||
// and convert into the appunits of the subdoc
|
||||
dirty = dirty.ScaleToOtherAppUnitsRoundOut(parentAPD, subdocAPD);
|
||||
|
||||
if (nsIFrame* rootScrollFrame = presShell->GetRootScrollFrame()) {
|
||||
nsIScrollableFrame* rootScrollableFrame = presShell->GetRootScrollFrameAsScrollable();
|
||||
MOZ_ASSERT(rootScrollableFrame);
|
||||
// Use a copy, so the dirty rect doesn't get modified to the display port.
|
||||
nsRect copy = dirty;
|
||||
// Use a copy, so the rects don't get modified.
|
||||
nsRect copyOfDirty = dirty;
|
||||
haveDisplayPort = rootScrollableFrame->DecideScrollableLayer(aBuilder,
|
||||
©, /* aAllowCreateDisplayPort = */ true);
|
||||
©OfDirty,
|
||||
/* aAllowCreateDisplayPort = */ true);
|
||||
if (!gfxPrefs::LayoutUseContainersForRootFrames()) {
|
||||
haveDisplayPort = false;
|
||||
}
|
||||
|
|
@ -417,7 +417,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
aBuilder->EnterPresShell(subdocRootFrame, pointerEventsNone);
|
||||
} else {
|
||||
dirty = aDirtyRect;
|
||||
dirty = aBuilder->GetDirtyRect();
|
||||
}
|
||||
|
||||
DisplayListClipState::AutoSaveRestore clipState(aBuilder);
|
||||
|
|
@ -456,6 +456,13 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
nestedClipState.EnterStackingContextContents(true);
|
||||
}
|
||||
|
||||
// Invoke AutoBuildingDisplayList to ensure that the correct dirty rect
|
||||
// is used to compute the visible rect if AddCanvasBackgroundColorItem
|
||||
// creates a display item.
|
||||
nsIFrame* frame = subdocRootFrame ? subdocRootFrame : this;
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
building(aBuilder, frame, dirty, true);
|
||||
|
||||
if (subdocRootFrame) {
|
||||
nsIFrame* rootScrollFrame = presShell->GetRootScrollFrame();
|
||||
nsDisplayListBuilder::AutoCurrentScrollParentIdSetter idSetter(
|
||||
|
|
@ -466,7 +473,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
aBuilder->SetAncestorHasApzAwareEventHandler(false);
|
||||
subdocRootFrame->
|
||||
BuildDisplayListForStackingContext(aBuilder, dirty, &childItems);
|
||||
BuildDisplayListForStackingContext(aBuilder, &childItems);
|
||||
}
|
||||
|
||||
if (!aBuilder->IsForEventDelivery()) {
|
||||
|
|
@ -485,15 +492,8 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// painted on the page itself.
|
||||
if (nsLayoutUtils::NeedsPrintPreviewBackground(presContext)) {
|
||||
presShell->AddPrintPreviewBackgroundItem(
|
||||
*aBuilder, childItems, subdocRootFrame ? subdocRootFrame : this,
|
||||
bounds);
|
||||
*aBuilder, childItems, frame, bounds);
|
||||
} else {
|
||||
// Invoke AutoBuildingDisplayList to ensure that the correct dirty rect
|
||||
// is used to compute the visible rect if AddCanvasBackgroundColorItem
|
||||
// creates a display item.
|
||||
nsIFrame* frame = subdocRootFrame ? subdocRootFrame : this;
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
building(aBuilder, frame, dirty, true);
|
||||
// Add the canvas background color to the bottom of the list. This
|
||||
// happens after we've built the list so that AddCanvasBackgroundColorItem
|
||||
// can monkey with the contents if necessary.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue