mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-30 03:08:38 +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
|
|
@ -6525,13 +6525,13 @@ static void DebugOutputDrawLine(int32_t aDepth, nsLineBox* aLine, bool aDrawn) {
|
|||
|
||||
static void
|
||||
DisplayLine(nsDisplayListBuilder* aBuilder, const nsRect& aLineArea,
|
||||
const nsRect& aDirtyRect, nsBlockFrame::LineIterator& aLine,
|
||||
nsBlockFrame::LineIterator& aLine,
|
||||
int32_t aDepth, int32_t& aDrawnLines, const nsDisplayListSet& aLists,
|
||||
nsBlockFrame* aFrame, TextOverflow* aTextOverflow) {
|
||||
// If the line's combined area (which includes child frames that
|
||||
// stick outside of the line's bounding box or our bounding box)
|
||||
// intersects the dirty rect then paint the line.
|
||||
bool intersect = aLineArea.Intersects(aDirtyRect);
|
||||
bool intersect = aLineArea.Intersects(aBuilder->GetDirtyRect());
|
||||
#ifdef DEBUG
|
||||
if (nsBlockFrame::gLamePaintMetrics) {
|
||||
aDrawnLines++;
|
||||
|
|
@ -6566,8 +6566,7 @@ DisplayLine(nsDisplayListBuilder* aBuilder, const nsRect& aLineArea,
|
|||
nsIFrame* kid = aLine->mFirstChild;
|
||||
int32_t n = aLine->GetChildCount();
|
||||
while (--n >= 0) {
|
||||
aFrame->BuildDisplayListForChild(aBuilder, kid, aDirtyRect,
|
||||
childLists, flags);
|
||||
aFrame->BuildDisplayListForChild(aBuilder, kid, childLists, flags);
|
||||
kid = kid->GetNextSibling();
|
||||
}
|
||||
|
||||
|
|
@ -6580,13 +6579,13 @@ DisplayLine(nsDisplayListBuilder* aBuilder, const nsRect& aLineArea,
|
|||
|
||||
void
|
||||
nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
int32_t drawnLines; // Will only be used if set (gLamePaintMetrics).
|
||||
int32_t depth = 0;
|
||||
#ifdef DEBUG
|
||||
if (gNoisyDamageRepair) {
|
||||
nsRect dirty = aBuilder->GetDirtyRect();
|
||||
depth = GetDepth();
|
||||
nsRect ca;
|
||||
::ComputeVisualOverflowArea(mLines, mRect.width, mRect.height, ca);
|
||||
|
|
@ -6594,7 +6593,7 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
ListTag(stdout);
|
||||
printf(": bounds=%d,%d,%d,%d dirty(absolute)=%d,%d,%d,%d ca=%d,%d,%d,%d\n",
|
||||
mRect.x, mRect.y, mRect.width, mRect.height,
|
||||
aDirtyRect.x, aDirtyRect.y, aDirtyRect.width, aDirtyRect.height,
|
||||
dirty.x, dirty.y, dirty.width, dirty.height,
|
||||
ca.x, ca.y, ca.width, ca.height);
|
||||
}
|
||||
PRTime start = 0; // Initialize these variables to silence the compiler.
|
||||
|
|
@ -6607,14 +6606,14 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
||||
if (GetPrevInFlow()) {
|
||||
DisplayOverflowContainers(aBuilder, aDirtyRect, aLists);
|
||||
DisplayOverflowContainers(aBuilder, aLists);
|
||||
for (nsIFrame* f : mFloats) {
|
||||
if (f->GetStateBits() & NS_FRAME_IS_PUSHED_FLOAT)
|
||||
BuildDisplayListForChild(aBuilder, f, aDirtyRect, aLists);
|
||||
BuildDisplayListForChild(aBuilder, f, aLists);
|
||||
}
|
||||
}
|
||||
|
||||
aBuilder->MarkFramesForDisplayList(this, mFloats, aDirtyRect);
|
||||
aBuilder->MarkFramesForDisplayList(this, mFloats);
|
||||
|
||||
// Prepare for text-overflow processing.
|
||||
UniquePtr<TextOverflow> textOverflow(
|
||||
|
|
@ -6631,7 +6630,7 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// approximate it by checking it on |this|; if it's true for any
|
||||
// frame in our child list, it's also true for |this|.
|
||||
nsLineBox* cursor = aBuilder->ShouldDescendIntoFrame(this) ?
|
||||
nullptr : GetFirstLineContaining(aDirtyRect.y);
|
||||
nullptr : GetFirstLineContaining(aBuilder->GetDirtyRect().y);
|
||||
LineIterator line_end = LinesEnd();
|
||||
|
||||
if (cursor) {
|
||||
|
|
@ -6642,10 +6641,10 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
if (!lineArea.IsEmpty()) {
|
||||
// Because we have a cursor, the combinedArea.ys are non-decreasing.
|
||||
// Once we've passed aDirtyRect.YMost(), we can never see it again.
|
||||
if (lineArea.y >= aDirtyRect.YMost()) {
|
||||
if (lineArea.y >= aBuilder->GetDirtyRect().YMost()) {
|
||||
break;
|
||||
}
|
||||
DisplayLine(aBuilder, lineArea, aDirtyRect, line, depth, drawnLines,
|
||||
DisplayLine(aBuilder, lineArea, line, depth, drawnLines,
|
||||
linesDisplayListCollection, this, textOverflow.get());
|
||||
}
|
||||
}
|
||||
|
|
@ -6658,7 +6657,7 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
line != line_end;
|
||||
++line) {
|
||||
nsRect lineArea = line->GetVisualOverflowArea();
|
||||
DisplayLine(aBuilder, lineArea, aDirtyRect, line, depth, drawnLines,
|
||||
DisplayLine(aBuilder, lineArea, line, depth, drawnLines,
|
||||
linesDisplayListCollection, this, textOverflow.get());
|
||||
if (!lineArea.IsEmpty()) {
|
||||
if (lineArea.y < lastY
|
||||
|
|
@ -6688,7 +6687,7 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
if (HasOutsideBullet()) {
|
||||
// Display outside bullets manually
|
||||
nsIFrame* bullet = GetOutsideBullet();
|
||||
BuildDisplayListForChild(aBuilder, bullet, aDirtyRect, aLists);
|
||||
BuildDisplayListForChild(aBuilder, bullet, aLists);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue