зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1402199 - Move code for adding extra background items into a helper. r=mstange
This commit is contained in:
Родитель
9304acdbbb
Коммит
991f510e8b
|
@ -3528,6 +3528,46 @@ nsLayoutUtils::ExpireDisplayPortOnAsyncScrollableAncestor(nsIFrame* aFrame)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsLayoutUtils::AddExtraBackgroundItems(nsDisplayListBuilder& aBuilder,
|
||||
nsDisplayList& aList,
|
||||
nsIFrame* aFrame,
|
||||
const nsRect& aCanvasArea,
|
||||
const nsRegion& aVisibleRegion,
|
||||
nscolor aBackstop)
|
||||
{
|
||||
LayoutFrameType frameType = aFrame->Type();
|
||||
nsPresContext* presContext = aFrame->PresContext();
|
||||
nsIPresShell* presShell = presContext->PresShell();
|
||||
|
||||
// For the viewport frame in print preview/page layout we want to paint
|
||||
// the grey background behind the page, not the canvas color.
|
||||
if (frameType == LayoutFrameType::Viewport &&
|
||||
nsLayoutUtils::NeedsPrintPreviewBackground(presContext)) {
|
||||
nsRect bounds = nsRect(aBuilder.ToReferenceFrame(aFrame),
|
||||
aFrame->GetSize());
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingDisplayList(&aBuilder, aFrame, bounds, false);
|
||||
presShell->AddPrintPreviewBackgroundItem(aBuilder, aList, aFrame, bounds);
|
||||
} else if (frameType != LayoutFrameType::Page) {
|
||||
// For printing, this function is first called on an nsPageFrame, which
|
||||
// creates a display list with a PageContent item. The PageContent item's
|
||||
// paint function calls this function on the nsPageFrame's child which is
|
||||
// an nsPageContentFrame. We only want to add the canvas background color
|
||||
// item once, for the nsPageContentFrame.
|
||||
|
||||
// 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.
|
||||
nsRect canvasArea = aVisibleRegion.GetBounds();
|
||||
canvasArea.IntersectRect(aCanvasArea, canvasArea);
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingDisplayList(&aBuilder, aFrame, canvasArea, false);
|
||||
presShell->AddCanvasBackgroundColorItem(
|
||||
aBuilder, aList, aFrame, canvasArea, aBackstop);
|
||||
}
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsLayoutUtils::PaintFrame(gfxContext* aRenderingContext, nsIFrame* aFrame,
|
||||
const nsRegion& aDirtyRegion, nscolor aBackstop,
|
||||
|
@ -3686,33 +3726,7 @@ nsLayoutUtils::PaintFrame(gfxContext* aRenderingContext, nsIFrame* aFrame,
|
|||
aFrame->BuildDisplayListForStackingContext(&builder, &list);
|
||||
}
|
||||
|
||||
LayoutFrameType frameType = aFrame->Type();
|
||||
|
||||
// For the viewport frame in print preview/page layout we want to paint
|
||||
// the grey background behind the page, not the canvas color.
|
||||
if (frameType == LayoutFrameType::Viewport &&
|
||||
nsLayoutUtils::NeedsPrintPreviewBackground(presContext)) {
|
||||
nsRect bounds = nsRect(builder.ToReferenceFrame(aFrame),
|
||||
aFrame->GetSize());
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingDisplayList(&builder, aFrame, bounds, false);
|
||||
presShell->AddPrintPreviewBackgroundItem(builder, list, aFrame, bounds);
|
||||
} else if (frameType != LayoutFrameType::Page) {
|
||||
// For printing, this function is first called on an nsPageFrame, which
|
||||
// creates a display list with a PageContent item. The PageContent item's
|
||||
// paint function calls this function on the nsPageFrame's child which is
|
||||
// an nsPageContentFrame. We only want to add the canvas background color
|
||||
// item once, for the nsPageContentFrame.
|
||||
|
||||
// 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.
|
||||
canvasArea.IntersectRect(canvasArea, visibleRegion.GetBounds());
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingDisplayList(&builder, aFrame, canvasArea, false);
|
||||
presShell->AddCanvasBackgroundColorItem(
|
||||
builder, list, aFrame, canvasArea, aBackstop);
|
||||
}
|
||||
AddExtraBackgroundItems(builder, list, aFrame, canvasArea, visibleRegion, aBackstop);
|
||||
|
||||
builder.LeavePresShell(aFrame, &list);
|
||||
|
||||
|
|
|
@ -2246,6 +2246,13 @@ public:
|
|||
static nsIContent*
|
||||
GetEditableRootContentByContentEditable(nsIDocument* aDocument);
|
||||
|
||||
static void AddExtraBackgroundItems(nsDisplayListBuilder& aBuilder,
|
||||
nsDisplayList& aList,
|
||||
nsIFrame* aFrame,
|
||||
const nsRect& aCanvasArea,
|
||||
const nsRegion& aVisibleRegion,
|
||||
nscolor aBackstop);
|
||||
|
||||
/**
|
||||
* Returns true if the passed in prescontext needs the dark grey background
|
||||
* that goes behind the page of a print preview presentation.
|
||||
|
|
Загрузка…
Ссылка в новой задаче