зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset 8f2dd8f13b53 (bug 1388161) for failing chrome's test_animation_performance_warning.html | preserve-3d transform. r=backout
This commit is contained in:
Родитель
7f85daeb2a
Коммит
8257b2d113
|
@ -4942,8 +4942,8 @@ PresShell::CreateRangePaintInfo(nsIDOMRange* aRange,
|
|||
nsIFrame* frame = aNode->AsContent()->GetPrimaryFrame();
|
||||
// XXX deal with frame being null due to display:contents
|
||||
for (; frame; frame = nsLayoutUtils::GetNextContinuationOrIBSplitSibling(frame)) {
|
||||
info->mBuilder.SetDirtyRect(frame->GetVisualOverflowRect());
|
||||
frame->BuildDisplayListForStackingContext(&info->mBuilder, &info->mList);
|
||||
frame->BuildDisplayListForStackingContext(&info->mBuilder,
|
||||
frame->GetVisualOverflowRect(), &info->mList);
|
||||
}
|
||||
};
|
||||
if (startContainer->NodeType() == nsIDOMNode::TEXT_NODE) {
|
||||
|
|
|
@ -3257,8 +3257,7 @@ nsLayoutUtils::GetFramesForArea(nsIFrame* aFrame, const nsRect& aRect,
|
|||
}
|
||||
|
||||
builder.EnterPresShell(aFrame);
|
||||
builder.SetDirtyRect(aRect);
|
||||
aFrame->BuildDisplayListForStackingContext(&builder, &list);
|
||||
aFrame->BuildDisplayListForStackingContext(&builder, aRect, &list);
|
||||
builder.LeavePresShell(aFrame, nullptr);
|
||||
|
||||
#ifdef MOZ_DUMP_PAINTING
|
||||
|
@ -3613,8 +3612,7 @@ nsLayoutUtils::PaintFrame(gfxContext* aRenderingContext, nsIFrame* aFrame,
|
|||
|
||||
nsDisplayListBuilder::AutoCurrentScrollParentIdSetter idSetter(&builder, id);
|
||||
|
||||
builder.SetDirtyRect(dirtyRect);
|
||||
aFrame->BuildDisplayListForStackingContext(&builder, &list);
|
||||
aFrame->BuildDisplayListForStackingContext(&builder, dirtyRect, &list);
|
||||
}
|
||||
|
||||
LayoutFrameType frameType = aFrame->Type();
|
||||
|
|
|
@ -1312,6 +1312,7 @@ public:
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
protected:
|
||||
|
@ -1346,10 +1347,11 @@ nsComboboxDisplayFrame::Reflow(nsPresContext* aPresContext,
|
|||
|
||||
void
|
||||
nsComboboxDisplayFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
nsDisplayListCollection set;
|
||||
nsBlockFrame::BuildDisplayList(aBuilder, set);
|
||||
nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, set);
|
||||
|
||||
// remove background items if parent frame is themed
|
||||
if (mComboBox->IsThemed()) {
|
||||
|
@ -1553,8 +1555,14 @@ void nsDisplayComboboxFocus::Paint(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsComboboxControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
#ifdef NOISY
|
||||
printf("%p paint at (%d, %d, %d, %d)\n", this,
|
||||
aDirtyRect.x, aDirtyRect.y, aDirtyRect.width, aDirtyRect.height);
|
||||
#endif
|
||||
|
||||
if (aBuilder->IsForEventDelivery()) {
|
||||
// Don't allow children to receive events.
|
||||
// REVIEW: following old GetFrameForPoint
|
||||
|
@ -1562,7 +1570,7 @@ nsComboboxControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
} else {
|
||||
// REVIEW: Our in-flow child frames are inline-level so they will paint in our
|
||||
// content list, so we don't need to mess with layers.
|
||||
nsBlockFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
// draw a focus indicator only when focus rings should be drawn
|
||||
|
|
|
@ -91,6 +91,7 @@ public:
|
|||
nsEventStatus* aEventStatus) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
void PaintFocus(DrawTarget& aDrawTarget, nsPoint aPt);
|
||||
|
|
|
@ -148,6 +148,7 @@ nsDisplayFieldSetBorder::GetBounds(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsFieldSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) {
|
||||
// Paint our background and border in a special way.
|
||||
// REVIEW: We don't really need to check frame emptiness here; if it's empty,
|
||||
|
@ -174,7 +175,7 @@ nsFieldSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
|
||||
if (GetPrevInFlow()) {
|
||||
DisplayOverflowContainers(aBuilder, aLists);
|
||||
DisplayOverflowContainers(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
nsDisplayListCollection contentDisplayItems;
|
||||
|
@ -185,13 +186,13 @@ nsFieldSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// legend. However, we want the inner frame's display items to be
|
||||
// after the legend's display items in z-order, so we need to save them
|
||||
// and append them later.
|
||||
BuildDisplayListForChild(aBuilder, inner, contentDisplayItems);
|
||||
BuildDisplayListForChild(aBuilder, inner, aDirtyRect, contentDisplayItems);
|
||||
}
|
||||
if (nsIFrame* legend = GetLegend()) {
|
||||
// The legend's background goes on our BlockBorderBackgrounds list because
|
||||
// it's a block child.
|
||||
nsDisplayListSet set(aLists, aLists.BlockBorderBackgrounds());
|
||||
BuildDisplayListForChild(aBuilder, legend, set);
|
||||
BuildDisplayListForChild(aBuilder, legend, aDirtyRect, set);
|
||||
}
|
||||
// Put the inner frame's display items on the master list. Note that this
|
||||
// moves its border/background display items to our BorderBackground() list,
|
||||
|
|
|
@ -44,6 +44,7 @@ public:
|
|||
nscoord* aBaseline) const override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
DrawResult PaintBorder(nsDisplayListBuilder* aBuilder,
|
||||
|
|
|
@ -496,9 +496,10 @@ nsFileControlFrame::SetFormProperty(nsIAtom* aName,
|
|||
|
||||
void
|
||||
nsFileControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
BuildDisplayListForInline(aBuilder, aLists);
|
||||
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
#ifdef ACCESSIBILITY
|
||||
|
|
|
@ -33,6 +33,7 @@ public:
|
|||
nsIFrame* aPrevInFlow) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
NS_DECL_QUERYFRAME
|
||||
|
|
|
@ -38,6 +38,7 @@ public:
|
|||
|
||||
// nsIFrame replacements
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override {
|
||||
DO_GLOBAL_REFLOW_COUNT_DSP("nsFormControlFrame");
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
|
|
@ -113,9 +113,10 @@ nsGfxCheckboxControlFrame::AccessibleType()
|
|||
|
||||
void
|
||||
nsGfxCheckboxControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
nsFormControlFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsFormControlFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
// Get current checked state through content model.
|
||||
if ((!IsChecked() && !IsIndeterminate()) || !IsVisibleForPainting(aBuilder))
|
||||
|
|
|
@ -24,6 +24,7 @@ public:
|
|||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
#endif
|
||||
|
||||
|
|
|
@ -72,9 +72,10 @@ PaintCheckedRadioButton(nsIFrame* aFrame,
|
|||
|
||||
void
|
||||
nsGfxRadioControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
nsFormControlFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsFormControlFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
return;
|
||||
|
|
|
@ -26,6 +26,7 @@ public:
|
|||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
#endif
|
||||
};
|
||||
|
|
|
@ -92,6 +92,7 @@ nsHTMLButtonControlFrame::ShouldClipPaintingToBorderBox()
|
|||
|
||||
void
|
||||
nsHTMLButtonControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
// Clip to our border area for event hit testing.
|
||||
|
@ -125,7 +126,7 @@ nsHTMLButtonControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
clipState.ClipContainingBlockDescendants(rect, hasRadii ? radii : nullptr);
|
||||
}
|
||||
|
||||
BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), set,
|
||||
BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), aDirtyRect, set,
|
||||
DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT);
|
||||
// That should put the display items in set.Content()
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ public:
|
|||
NS_DECL_FRAMEARENA_HELPERS(nsHTMLButtonControlFrame)
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual nscoord GetMinISize(gfxContext *aRenderingContext) override;
|
||||
|
|
|
@ -161,6 +161,7 @@ nsListControlFrame::DestroyFrom(nsIFrame* aDestructRoot)
|
|||
|
||||
void
|
||||
nsListControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
// We allow visibility:hidden <select>s to contain visible options.
|
||||
|
@ -185,7 +186,7 @@ nsListControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
mLastDropdownBackstopColor));
|
||||
}
|
||||
|
||||
nsHTMLScrollFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsHTMLScrollFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -83,6 +83,7 @@ public:
|
|||
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual nsContainerFrame* GetContentInsertionFrame() override;
|
||||
|
|
|
@ -92,9 +92,10 @@ NS_QUERYFRAME_TAIL_INHERITING(nsContainerFrame)
|
|||
|
||||
void
|
||||
nsProgressFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
BuildDisplayListForInline(aBuilder, aLists);
|
||||
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -32,6 +32,7 @@ public:
|
|||
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void Reflow(nsPresContext* aCX,
|
||||
|
|
|
@ -255,6 +255,7 @@ nsDisplayRangeFocusRing::Paint(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsRangeFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
const nsStyleDisplay* disp = StyleDisplay();
|
||||
|
@ -270,10 +271,10 @@ nsRangeFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
nsIFrame* thumb = mThumbDiv->GetPrimaryFrame();
|
||||
if (thumb) {
|
||||
nsDisplayListSet set(aLists, aLists.Content());
|
||||
BuildDisplayListForChild(aBuilder, thumb, set, DISPLAY_CHILD_INLINE);
|
||||
BuildDisplayListForChild(aBuilder, thumb, aDirtyRect, set, DISPLAY_CHILD_INLINE);
|
||||
}
|
||||
} else {
|
||||
BuildDisplayListForInline(aBuilder, aLists);
|
||||
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
// Draw a focus outline if appropriate:
|
||||
|
|
|
@ -42,6 +42,7 @@ public:
|
|||
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;
|
||||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void Reflow(nsPresContext* aPresContext,
|
||||
|
|
|
@ -126,15 +126,16 @@ public:
|
|||
|
||||
void
|
||||
nsSelectsAreaFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!aBuilder->IsForEventDelivery()) {
|
||||
BuildDisplayListInternal(aBuilder, aLists);
|
||||
BuildDisplayListInternal(aBuilder, aDirtyRect, aLists);
|
||||
return;
|
||||
}
|
||||
|
||||
nsDisplayListCollection set;
|
||||
BuildDisplayListInternal(aBuilder, set);
|
||||
BuildDisplayListInternal(aBuilder, aDirtyRect, set);
|
||||
|
||||
nsOptionEventGrabberWrapper wrapper;
|
||||
wrapper.WrapLists(aBuilder, this, set, aLists);
|
||||
|
@ -142,9 +143,10 @@ nsSelectsAreaFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsSelectsAreaFrame::BuildDisplayListInternal(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
nsBlockFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsBlockFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
nsListControlFrame* listFrame = GetEnclosingListFrame(this);
|
||||
if (listFrame && listFrame->IsFocused()) {
|
||||
|
|
|
@ -18,9 +18,11 @@ public:
|
|||
nsFrameState aFlags);
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
void BuildDisplayListInternal(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists);
|
||||
|
||||
virtual void Reflow(nsPresContext* aCX,
|
||||
|
|
|
@ -1286,6 +1286,7 @@ nsTextControlFrame::PeekOffset(nsPeekOffsetStruct *aPos)
|
|||
|
||||
void
|
||||
nsTextControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
/*
|
||||
|
@ -1315,7 +1316,7 @@ nsTextControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
!txtCtrl->GetPlaceholderVisibility()) ||
|
||||
(kid->GetContent() == txtCtrl->GetPreviewNode() &&
|
||||
!txtCtrl->GetPreviewVisibility()))) {
|
||||
BuildDisplayListForChild(aBuilder, kid, set, 0);
|
||||
BuildDisplayListForChild(aBuilder, kid, aDirtyRect, set, 0);
|
||||
}
|
||||
kid = kid->GetNextSibling();
|
||||
}
|
||||
|
|
|
@ -125,6 +125,7 @@ public:
|
|||
nsFrameList& aChildList) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual mozilla::dom::Element*
|
||||
|
|
|
@ -54,6 +54,7 @@ ViewportFrame::Init(nsIContent* aContent,
|
|||
|
||||
void
|
||||
ViewportFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
AUTO_PROFILER_LABEL("ViewportFrame::BuildDisplayList", GRAPHICS);
|
||||
|
@ -62,7 +63,7 @@ ViewportFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// make the kid's BorderBackground our own. This ensures that the canvas
|
||||
// frame's background becomes our own background and therefore appears
|
||||
// below negative z-index elements.
|
||||
BuildDisplayListForChild(aBuilder, kid, aLists);
|
||||
BuildDisplayListForChild(aBuilder, kid, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
nsDisplayList topLayerList;
|
||||
|
@ -123,12 +124,8 @@ BuildDisplayListForTopLayerFrame(nsDisplayListBuilder* aBuilder,
|
|||
asrSetter.SetCurrentActiveScrolledRoot(
|
||||
savedOutOfFlowData->mContainingBlockActiveScrolledRoot);
|
||||
}
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, aFrame, dirty,
|
||||
aBuilder->IsAtRootOfPseudoStackingContext());
|
||||
|
||||
nsDisplayList list;
|
||||
aFrame->BuildDisplayListForStackingContext(aBuilder, &list);
|
||||
aFrame->BuildDisplayListForStackingContext(aBuilder, dirty, &list);
|
||||
aList->AppendToTop(&list);
|
||||
}
|
||||
|
||||
|
|
|
@ -51,6 +51,7 @@ public:
|
|||
#endif
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
void BuildDisplayListForTopLayer(nsDisplayListBuilder* aBuilder,
|
||||
|
|
|
@ -33,6 +33,7 @@ nsBackdropFrame::GetParentStyleContext(nsIFrame** aProviderFrame) const
|
|||
|
||||
/* virtual */ void
|
||||
nsBackdropFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
DO_GLOBAL_REFLOW_COUNT_DSP("nsBackdropFrame");
|
||||
|
|
|
@ -26,6 +26,7 @@ public:
|
|||
virtual nsStyleContext*
|
||||
GetParentStyleContext(nsIFrame** aProviderFrame) const override;
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
virtual mozilla::LogicalSize
|
||||
ComputeAutoSize(gfxContext* aRenderingContext,
|
||||
|
|
|
@ -6662,13 +6662,13 @@ static void DebugOutputDrawLine(int32_t aDepth, nsLineBox* aLine, bool aDrawn) {
|
|||
|
||||
static void
|
||||
DisplayLine(nsDisplayListBuilder* aBuilder, const nsRect& aLineArea,
|
||||
nsBlockFrame::LineIterator& aLine,
|
||||
const nsRect& aDirtyRect, 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(aBuilder->GetDirtyRect());
|
||||
bool intersect = aLineArea.Intersects(aDirtyRect);
|
||||
#ifdef DEBUG
|
||||
if (nsBlockFrame::gLamePaintMetrics) {
|
||||
aDrawnLines++;
|
||||
|
@ -6703,7 +6703,8 @@ DisplayLine(nsDisplayListBuilder* aBuilder, const nsRect& aLineArea,
|
|||
nsIFrame* kid = aLine->mFirstChild;
|
||||
int32_t n = aLine->GetChildCount();
|
||||
while (--n >= 0) {
|
||||
aFrame->BuildDisplayListForChild(aBuilder, kid, childLists, flags);
|
||||
aFrame->BuildDisplayListForChild(aBuilder, kid, aDirtyRect,
|
||||
childLists, flags);
|
||||
kid = kid->GetNextSibling();
|
||||
}
|
||||
|
||||
|
@ -6716,13 +6717,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);
|
||||
|
@ -6730,7 +6731,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,
|
||||
dirty.x, dirty.y, dirty.width, dirty.height,
|
||||
aDirtyRect.x, aDirtyRect.y, aDirtyRect.width, aDirtyRect.height,
|
||||
ca.x, ca.y, ca.width, ca.height);
|
||||
}
|
||||
PRTime start = 0; // Initialize these variables to silence the compiler.
|
||||
|
@ -6743,14 +6744,14 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
||||
if (GetPrevInFlow()) {
|
||||
DisplayOverflowContainers(aBuilder, aLists);
|
||||
DisplayOverflowContainers(aBuilder, aDirtyRect, aLists);
|
||||
for (nsIFrame* f : mFloats) {
|
||||
if (f->GetStateBits() & NS_FRAME_IS_PUSHED_FLOAT)
|
||||
BuildDisplayListForChild(aBuilder, f, aLists);
|
||||
BuildDisplayListForChild(aBuilder, f, aDirtyRect, aLists);
|
||||
}
|
||||
}
|
||||
|
||||
aBuilder->MarkFramesForDisplayList(this, mFloats);
|
||||
aBuilder->MarkFramesForDisplayList(this, mFloats, aDirtyRect);
|
||||
|
||||
// Prepare for text-overflow processing.
|
||||
UniquePtr<TextOverflow> textOverflow =
|
||||
|
@ -6767,7 +6768,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(aBuilder->GetDirtyRect().y);
|
||||
nullptr : GetFirstLineContaining(aDirtyRect.y);
|
||||
LineIterator line_end = LinesEnd();
|
||||
|
||||
if (cursor) {
|
||||
|
@ -6778,10 +6779,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 >= aBuilder->GetDirtyRect().YMost()) {
|
||||
if (lineArea.y >= aDirtyRect.YMost()) {
|
||||
break;
|
||||
}
|
||||
DisplayLine(aBuilder, lineArea, line, depth, drawnLines,
|
||||
DisplayLine(aBuilder, lineArea, aDirtyRect, line, depth, drawnLines,
|
||||
linesDisplayListCollection, this, textOverflow.get());
|
||||
}
|
||||
}
|
||||
|
@ -6794,7 +6795,7 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
line != line_end;
|
||||
++line) {
|
||||
nsRect lineArea = line->GetVisualOverflowArea();
|
||||
DisplayLine(aBuilder, lineArea, line, depth, drawnLines,
|
||||
DisplayLine(aBuilder, lineArea, aDirtyRect, line, depth, drawnLines,
|
||||
linesDisplayListCollection, this, textOverflow.get());
|
||||
if (!lineArea.IsEmpty()) {
|
||||
if (lineArea.y < lastY
|
||||
|
@ -6824,7 +6825,7 @@ nsBlockFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
if (HasOutsideBullet()) {
|
||||
// Display outside bullets manually
|
||||
nsIFrame* bullet = GetOutsideBullet();
|
||||
BuildDisplayListForChild(aBuilder, bullet, aLists);
|
||||
BuildDisplayListForChild(aBuilder, bullet, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
|
|
|
@ -140,6 +140,7 @@ public:
|
|||
nsSplittableType GetSplittableType() const override;
|
||||
bool IsFloatContainingBlock() const override;
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
bool IsFrameOfType(uint32_t aFlags) const override
|
||||
{
|
||||
|
|
|
@ -699,6 +699,7 @@ void nsDisplayBullet::Paint(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsBulletFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
// nsIFrame
|
||||
virtual void DestroyFrom(nsIFrame* aDestructRoot) override;
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
virtual void DidSetStyleContext(nsStyleContext* aOldStyleContext) override;
|
||||
#ifdef DEBUG_FRAME_DUMP
|
||||
|
|
|
@ -484,10 +484,11 @@ public:
|
|||
|
||||
void
|
||||
nsCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (GetPrevInFlow()) {
|
||||
DisplayOverflowContainers(aBuilder, aLists);
|
||||
DisplayOverflowContainers(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
// Force a background to be shown. We may have a background propagated to us,
|
||||
|
@ -550,9 +551,8 @@ nsCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
DisplayListClipState::AutoSaveRestore clipState(aBuilder);
|
||||
nsDisplayListBuilder::AutoCurrentActiveScrolledRootSetter asrSetter(aBuilder);
|
||||
if (displayData) {
|
||||
nsPoint offset = GetOffsetTo(PresContext()->GetPresShell()->GetRootFrame());
|
||||
aBuilder->SetDirtyRect(displayData->mDirtyRect + offset);
|
||||
|
||||
nsRect dirtyRect = displayData->mDirtyRect + GetOffsetTo(PresContext()->GetPresShell()->GetRootFrame());
|
||||
buildingDisplayList.SetDirtyRect(dirtyRect);
|
||||
clipState.SetClipChainForContainingBlockDescendants(
|
||||
displayData->mContainingBlockClipChain);
|
||||
asrSetter.SetCurrentActiveScrolledRoot(
|
||||
|
@ -596,7 +596,7 @@ nsCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
for (nsIFrame* kid : PrincipalChildList()) {
|
||||
// Put our child into its own pseudo-stack.
|
||||
BuildDisplayListForChild(aBuilder, kid, aLists);
|
||||
BuildDisplayListForChild(aBuilder, kid, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
#ifdef DEBUG_CANVAS_FOCUS
|
||||
|
@ -610,10 +610,9 @@ nsCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
nsCOMPtr<nsIDocShell> docShell(do_QueryInterface(container));
|
||||
if (docShell) {
|
||||
docShell->GetHasFocus(&hasFocus);
|
||||
nsRect dirty = aBuilder->GetDirtyRect();
|
||||
printf("%p - nsCanvasFrame::Paint R:%d,%d,%d,%d DR: %d,%d,%d,%d\n", this,
|
||||
mRect.x, mRect.y, mRect.width, mRect.height,
|
||||
dirty.x, dirty.y, dirty.width, dirty.height);
|
||||
aDirtyRect.x, aDirtyRect.y, aDirtyRect.width, aDirtyRect.height);
|
||||
}
|
||||
printf("%p - Focus: %s c: %p DoPaint:%s\n", docShell.get(), hasFocus?"Y":"N",
|
||||
focusContent.get(), mDoPaintFocus?"Y":"N");
|
||||
|
|
|
@ -96,6 +96,7 @@ public:
|
|||
NS_IMETHOD SetHasFocus(bool aHasFocus);
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
void PaintFocus(mozilla::gfx::DrawTarget* aRenderingContext, nsPoint aPt);
|
||||
|
|
|
@ -1278,18 +1278,19 @@ nsColumnSetFrame::Reflow(nsPresContext* aPresContext,
|
|||
|
||||
void
|
||||
nsColumnSetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
||||
if (IsVisibleForPainting(aBuilder)) {
|
||||
aLists.BorderBackground()->
|
||||
AppendNewToTop(new (aBuilder) nsDisplayColumnRule(aBuilder, this));
|
||||
AppendNewToTop(new (aBuilder)nsDisplayColumnRule(aBuilder, this));
|
||||
}
|
||||
|
||||
// Our children won't have backgrounds so it doesn't matter where we put them.
|
||||
for (nsFrameList::Enumerator e(mFrames); !e.AtEnd(); e.Next()) {
|
||||
BuildDisplayListForChild(aBuilder, e.get(), aLists);
|
||||
BuildDisplayListForChild(aBuilder, e.get(), aDirtyRect, aLists);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@ public:
|
|||
}
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
/**
|
||||
|
|
|
@ -361,14 +361,17 @@ nsContainerFrame::GetChildLists(nsTArray<ChildList>* aLists) const
|
|||
|
||||
void
|
||||
nsContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
BuildDisplayListForNonBlockChildren(aBuilder, aLists);
|
||||
|
||||
BuildDisplayListForNonBlockChildren(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
void
|
||||
nsContainerFrame::BuildDisplayListForNonBlockChildren(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists,
|
||||
uint32_t aFlags)
|
||||
{
|
||||
|
@ -377,7 +380,7 @@ nsContainerFrame::BuildDisplayListForNonBlockChildren(nsDisplayListBuilder* aB
|
|||
nsDisplayListSet set(aLists, aLists.Content());
|
||||
// The children should be in content order
|
||||
while (kid) {
|
||||
BuildDisplayListForChild(aBuilder, kid, set, aFlags);
|
||||
BuildDisplayListForChild(aBuilder, kid, aDirtyRect, set, aFlags);
|
||||
kid = kid->GetNextSibling();
|
||||
}
|
||||
}
|
||||
|
@ -1232,12 +1235,13 @@ nsContainerFrame::ReflowOverflowContainerChildren(nsPresContext* aPres
|
|||
|
||||
void
|
||||
nsContainerFrame::DisplayOverflowContainers(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
nsFrameList* overflowconts = GetPropTableFrames(OverflowContainersProperty());
|
||||
if (overflowconts) {
|
||||
for (nsIFrame* frame : *overflowconts) {
|
||||
BuildDisplayListForChild(aBuilder, frame, aLists);
|
||||
BuildDisplayListForChild(aBuilder, frame, aDirtyRect, aLists);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -419,6 +419,7 @@ public:
|
|||
* Add overflow containers to the display list
|
||||
*/
|
||||
void DisplayOverflowContainers(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists);
|
||||
|
||||
/**
|
||||
|
@ -431,6 +432,7 @@ public:
|
|||
* to emulate what nsContainerFrame::Paint did.
|
||||
*/
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
static void PlaceFrameView(nsIFrame* aFrame)
|
||||
|
@ -573,6 +575,7 @@ protected:
|
|||
* display items) go into the Content() list.
|
||||
*/
|
||||
void BuildDisplayListForNonBlockChildren(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists,
|
||||
uint32_t aFlags = 0);
|
||||
|
||||
|
@ -581,9 +584,11 @@ protected:
|
|||
* Intended as a convenience for derived classes.
|
||||
*/
|
||||
void BuildDisplayListForInline(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) {
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
BuildDisplayListForNonBlockChildren(aBuilder, aLists, DISPLAY_CHILD_INLINE);
|
||||
BuildDisplayListForNonBlockChildren(aBuilder, aDirtyRect, aLists,
|
||||
DISPLAY_CHILD_INLINE);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -44,9 +44,10 @@ nsFirstLetterFrame::GetFrameName(nsAString& aResult) const
|
|||
|
||||
void
|
||||
nsFirstLetterFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
BuildDisplayListForInline(aBuilder, aLists);
|
||||
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -21,6 +21,7 @@ public:
|
|||
{}
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void Init(nsIContent* aContent,
|
||||
|
|
|
@ -2245,6 +2245,7 @@ GetDisplayFlagsForFlexItem(nsIFrame* aFrame)
|
|||
|
||||
void
|
||||
nsFlexContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
@ -2265,7 +2266,7 @@ nsFlexContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
OrderingPropertyForIter(this));
|
||||
for (; !iter.AtEnd(); iter.Next()) {
|
||||
nsIFrame* childFrame = *iter;
|
||||
BuildDisplayListForChild(aBuilder, childFrame, childLists,
|
||||
BuildDisplayListForChild(aBuilder, childFrame, aDirtyRect, childLists,
|
||||
GetDisplayFlagsForFlexItem(childFrame));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,6 +64,7 @@ public:
|
|||
nsIFrame* aPrevInFlow) override;
|
||||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
void MarkIntrinsicISizesDirty() override;
|
||||
|
|
|
@ -2071,7 +2071,7 @@ nsFrame::DisplayOutline(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsIFrame::DisplayCaret(nsDisplayListBuilder* aBuilder,
|
||||
nsDisplayList* aList)
|
||||
const nsRect& aDirtyRect, nsDisplayList* aList)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
return;
|
||||
|
@ -2351,12 +2351,13 @@ ItemParticipatesIn3DContext(nsIFrame* aAncestor, nsDisplayItem* aItem)
|
|||
|
||||
static void
|
||||
WrapSeparatorTransform(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
|
||||
nsRect& aDirtyRect,
|
||||
nsDisplayList* aSource, nsDisplayList* aTarget,
|
||||
int aIndex) {
|
||||
if (!aSource->IsEmpty()) {
|
||||
nsDisplayTransform *sepIdItem =
|
||||
new (aBuilder) nsDisplayTransform(aBuilder, aFrame, aSource,
|
||||
aBuilder->GetDirtyRect(), Matrix4x4(), aIndex);
|
||||
aDirtyRect, Matrix4x4(), aIndex);
|
||||
sepIdItem->SetNoExtendContext();
|
||||
aTarget->AppendToTop(sepIdItem);
|
||||
}
|
||||
|
@ -2364,6 +2365,7 @@ WrapSeparatorTransform(nsDisplayListBuilder* aBuilder, nsIFrame* aFrame,
|
|||
|
||||
void
|
||||
nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
nsDisplayList* aList) {
|
||||
if (GetStateBits() & NS_FRAME_TOO_DEEP_IN_FRAME_TREE)
|
||||
return;
|
||||
|
@ -2408,13 +2410,13 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
autoPreserves3DContext.emplace(aBuilder);
|
||||
// Save dirty rect on the builder to avoid being distorted for
|
||||
// multiple transforms along the chain.
|
||||
aBuilder->SavePreserves3DRects();
|
||||
aBuilder->SetPreserves3DDirtyRect(aDirtyRect);
|
||||
}
|
||||
|
||||
// For preserves3d, use the dirty rect already installed on the
|
||||
// builder, since aDirtyRect maybe distorted for transforms along
|
||||
// the chain.
|
||||
nsRect dirtyRect = aBuilder->GetDirtyRect();
|
||||
nsRect dirtyRect = aDirtyRect;
|
||||
|
||||
bool inTransform = aBuilder->IsInTransform();
|
||||
bool isTransformed = IsTransformed(disp, effectSet);
|
||||
|
@ -2447,7 +2449,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
// If we're in preserve-3d then grab the dirty rect that was given to the root
|
||||
// and transform using the combined transform.
|
||||
if (Combines3DTransformWithAncestors(disp)) {
|
||||
dirtyRect = aBuilder->GetPreserves3DRects();
|
||||
dirtyRect = aBuilder->GetPreserves3DDirtyRect(this);
|
||||
}
|
||||
|
||||
nsRect untransformedDirtyRect;
|
||||
|
@ -2462,7 +2464,6 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
inTransform = true;
|
||||
}
|
||||
|
||||
bool usingFilter = StyleEffects()->HasFilters();
|
||||
bool usingMask = nsSVGIntegrationUtils::UsingMaskOrClipPathForFrame(this);
|
||||
bool usingSVGEffects = usingFilter || usingMask;
|
||||
|
@ -2566,7 +2567,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
GetClipPropClipRect(disp, effects, GetSize());
|
||||
|
||||
if (contentClip) {
|
||||
aBuilder->IntersectDirtyRect(*contentClip);
|
||||
dirtyRect.IntersectRect(dirtyRect, *contentClip);
|
||||
nestedClipState.ClipContentDescendants(*contentClip +
|
||||
aBuilder->ToReferenceFrame(this));
|
||||
}
|
||||
|
@ -2579,7 +2580,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
aBuilder->MarkPreserve3DFramesForDisplayList(this);
|
||||
}
|
||||
|
||||
MarkAbsoluteFramesForDisplayList(aBuilder);
|
||||
MarkAbsoluteFramesForDisplayList(aBuilder, dirtyRect);
|
||||
|
||||
nsDisplayLayerEventRegions* eventRegions = nullptr;
|
||||
if (aBuilder->IsBuildingLayerEventRegions()) {
|
||||
|
@ -2588,7 +2589,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
aBuilder->SetLayerEventRegions(eventRegions);
|
||||
}
|
||||
aBuilder->AdjustWindowDraggingRegion(this);
|
||||
BuildDisplayList(aBuilder, set);
|
||||
BuildDisplayList(aBuilder, dirtyRect, set);
|
||||
if (eventRegions) {
|
||||
// If the event regions item ended up empty, throw it away rather than
|
||||
// adding it to the display list.
|
||||
|
@ -2689,7 +2690,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
clipState.Restore();
|
||||
}
|
||||
// Revert to the post-filter dirty rect.
|
||||
aBuilder->SetDirtyRect(dirtyRectOutsideSVGEffects);
|
||||
buildingDisplayList.SetDirtyRect(dirtyRectOutsideSVGEffects);
|
||||
|
||||
// Skip all filter effects while generating glyph mask.
|
||||
if (usingFilter && !aBuilder->IsForGenerateGlyphMask()) {
|
||||
|
@ -2755,7 +2756,8 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
while (nsDisplayItem* item = resultList.RemoveBottom()) {
|
||||
if (ItemParticipatesIn3DContext(this, item) && !item->GetClip().HasClip()) {
|
||||
// The frame of this item participates the same 3D context.
|
||||
WrapSeparatorTransform(aBuilder, this, &nonparticipants, &participants, index++);
|
||||
WrapSeparatorTransform(aBuilder, this, dirtyRect,
|
||||
&nonparticipants, &participants, index++);
|
||||
participants.AppendToTop(item);
|
||||
} else {
|
||||
// The frame of the item doesn't participate the current
|
||||
|
@ -2768,7 +2770,8 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
nonparticipants.AppendToTop(item);
|
||||
}
|
||||
}
|
||||
WrapSeparatorTransform(aBuilder, this, &nonparticipants, &participants, index++);
|
||||
WrapSeparatorTransform(aBuilder, this, dirtyRect,
|
||||
&nonparticipants, &participants, index++);
|
||||
resultList.AppendToTop(&participants);
|
||||
}
|
||||
|
||||
|
@ -2779,7 +2782,7 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
// Revert to the dirtyrect coming in from the parent, without our transform
|
||||
// taken into account.
|
||||
aBuilder->SetDirtyRect(dirtyRectOutsideTransform);
|
||||
buildingDisplayList.SetDirtyRect(dirtyRectOutsideTransform);
|
||||
// Revert to the outer reference frame and offset because all display
|
||||
// items we create from now on are outside the transform.
|
||||
nsPoint toOuterReferenceFrame;
|
||||
|
@ -2923,9 +2926,8 @@ DescendIntoChild(nsDisplayListBuilder* aBuilder, nsIFrame *aChild,
|
|||
(shell->IgnoringViewportScrolling() && child == shell->GetRootScrollFrame());
|
||||
if (!keepDescending) {
|
||||
nsRect childDirty;
|
||||
if (!childDirty.IntersectRect(dirty, child->GetVisualOverflowRect())) {
|
||||
if (!childDirty.IntersectRect(dirty, child->GetVisualOverflowRect()))
|
||||
return false;
|
||||
}
|
||||
// Usually we could set dirty to childDirty now but there's no
|
||||
// benefit, and it can be confusing. It can especially confuse
|
||||
// situations where we're going to ignore a scrollframe's clipping;
|
||||
|
@ -2939,6 +2941,7 @@ DescendIntoChild(nsDisplayListBuilder* aBuilder, nsIFrame *aChild,
|
|||
void
|
||||
nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
||||
nsIFrame* aChild,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists,
|
||||
uint32_t aFlags) {
|
||||
// If painting is restricted to just the background of the top level frame,
|
||||
|
@ -2974,8 +2977,7 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
"It should be held for painting to window");
|
||||
|
||||
// dirty rect in child-relative coordinates
|
||||
nsRect dirty = aBuilder->GetDirtyRect() - child->GetOffsetTo(this);
|
||||
|
||||
nsRect dirty = aDirtyRect - child->GetOffsetTo(this);
|
||||
if (!DescendIntoChild(aBuilder, child, dirty)) {
|
||||
return;
|
||||
}
|
||||
|
@ -2990,10 +2992,10 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
eventRegions->AddFrame(aBuilder, child);
|
||||
}
|
||||
|
||||
child->MarkAbsoluteFramesForDisplayList(aBuilder);
|
||||
child->MarkAbsoluteFramesForDisplayList(aBuilder, dirty);
|
||||
aBuilder->AdjustWindowDraggingRegion(child);
|
||||
child->BuildDisplayList(aBuilder, aLists);
|
||||
aBuilder->DisplayCaret(child, aLists.Content());
|
||||
child->BuildDisplayList(aBuilder, dirty, aLists);
|
||||
aBuilder->DisplayCaret(child, dirty, aLists.Content());
|
||||
#ifdef DEBUG
|
||||
DisplayDebugBorders(aBuilder, child, aLists);
|
||||
#endif
|
||||
|
@ -3022,9 +3024,7 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
|
||||
// dirty rect in child-relative coordinates
|
||||
NS_ASSERTION(aBuilder->GetCurrentFrame() == this, "Wrong coord space!");
|
||||
nsPoint offset = child->GetOffsetTo(this);
|
||||
nsRect dirty = aBuilder->GetDirtyRect() - offset;
|
||||
nsRect dirty = aDirtyRect - child->GetOffsetTo(this);
|
||||
|
||||
nsDisplayListBuilder::OutOfFlowDisplayData* savedOutOfFlowData = nullptr;
|
||||
bool isPlaceholder = false;
|
||||
|
@ -3148,7 +3148,7 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
MOZ_ASSERT(awayFromCommonPath, "It is impossible when savedOutOfFlowData is true");
|
||||
} else if (GetStateBits() & NS_FRAME_FORCE_DISPLAY_LIST_DESCEND_INTO &&
|
||||
isPlaceholder) {
|
||||
NS_ASSERTION(dirty.IsEmpty(), "should have empty visible rect");
|
||||
NS_ASSERTION(dirty.IsEmpty(), "should have empty dirty rect");
|
||||
// Every item we build from now until we descent into an out of flow that
|
||||
// does have saved out of flow data should be invisible. This state gets
|
||||
// restored when AutoBuildingDisplayList gets out of scope.
|
||||
|
@ -3188,20 +3188,20 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
// For stacking contexts, BuildDisplayListForStackingContext handles
|
||||
// clipping and MarkAbsoluteFramesForDisplayList.
|
||||
nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder);
|
||||
child->BuildDisplayListForStackingContext(aBuilder, &list);
|
||||
child->BuildDisplayListForStackingContext(aBuilder, dirty, &list);
|
||||
wrapListASR = contASRTracker.GetContainerASR();
|
||||
aBuilder->DisplayCaret(child, &list);
|
||||
aBuilder->DisplayCaret(child, dirty, &list);
|
||||
} else {
|
||||
Maybe<nsRect> clipPropClip =
|
||||
child->GetClipPropClipRect(disp, effects, child->GetSize());
|
||||
if (clipPropClip) {
|
||||
aBuilder->IntersectDirtyRect(*clipPropClip);
|
||||
dirty.IntersectRect(dirty, *clipPropClip);
|
||||
clipState.ClipContentDescendants(
|
||||
*clipPropClip + aBuilder->ToReferenceFrame(child));
|
||||
awayFromCommonPath = true;
|
||||
}
|
||||
|
||||
child->MarkAbsoluteFramesForDisplayList(aBuilder);
|
||||
child->MarkAbsoluteFramesForDisplayList(aBuilder, dirty);
|
||||
|
||||
if (aBuilder->IsBuildingLayerEventRegions()) {
|
||||
// If this frame has a different animated geometry root than its parent,
|
||||
|
@ -3239,8 +3239,8 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
// return early.
|
||||
|
||||
aBuilder->AdjustWindowDraggingRegion(child);
|
||||
child->BuildDisplayList(aBuilder, aLists);
|
||||
aBuilder->DisplayCaret(child, aLists.Content());
|
||||
child->BuildDisplayList(aBuilder, dirty, aLists);
|
||||
aBuilder->DisplayCaret(child, dirty, aLists.Content());
|
||||
#ifdef DEBUG
|
||||
DisplayDebugBorders(aBuilder, child, aLists);
|
||||
#endif
|
||||
|
@ -3254,8 +3254,8 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
nsDisplayListCollection pseudoStack;
|
||||
aBuilder->AdjustWindowDraggingRegion(child);
|
||||
nsDisplayListBuilder::AutoContainerASRTracker contASRTracker(aBuilder);
|
||||
child->BuildDisplayList(aBuilder, pseudoStack);
|
||||
aBuilder->DisplayCaret(child, pseudoStack.Content());
|
||||
child->BuildDisplayList(aBuilder, dirty, pseudoStack);
|
||||
aBuilder->DisplayCaret(child, dirty, pseudoStack.Content());
|
||||
wrapListASR = contASRTracker.GetContainerASR();
|
||||
|
||||
list.AppendToTop(pseudoStack.BorderBackground());
|
||||
|
@ -3303,10 +3303,11 @@ nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
|
||||
void
|
||||
nsIFrame::MarkAbsoluteFramesForDisplayList(nsDisplayListBuilder* aBuilder)
|
||||
nsIFrame::MarkAbsoluteFramesForDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect)
|
||||
{
|
||||
if (IsAbsoluteContainer()) {
|
||||
aBuilder->MarkFramesForDisplayList(this, GetAbsoluteContainingBlock()->GetChildList());
|
||||
aBuilder->MarkFramesForDisplayList(this, GetAbsoluteContainingBlock()->GetChildList(), aDirtyRect);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -99,6 +99,7 @@ public:
|
|||
nsIFrame::Cursor& aCursor) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void Reflow(nsPresContext* aPresContext,
|
||||
|
@ -146,6 +147,7 @@ public:
|
|||
#endif
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void Reflow(nsPresContext* aPresContext,
|
||||
|
@ -673,9 +675,10 @@ nsHTMLFramesetFrame::GetCursor(const nsPoint& aPoint,
|
|||
|
||||
void
|
||||
nsHTMLFramesetFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
BuildDisplayListForInline(aBuilder, aLists);
|
||||
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
if (mDragger && aBuilder->IsForEventDelivery()) {
|
||||
aLists.Content()->AppendNewToTop(
|
||||
|
@ -1417,6 +1420,7 @@ void nsDisplayFramesetBorder::Paint(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsHTMLFramesetBorderFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
aLists.Content()->AppendNewToTop(
|
||||
|
@ -1628,6 +1632,7 @@ void nsDisplayFramesetBlank::Paint(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsHTMLFramesetBlankFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
aLists.Content()->AppendNewToTop(
|
||||
|
|
|
@ -96,6 +96,7 @@ public:
|
|||
nsIFrame::Cursor& aCursor) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void Reflow(nsPresContext* aPresContext,
|
||||
|
|
|
@ -3050,6 +3050,7 @@ struct HoveredStateComparator
|
|||
|
||||
void
|
||||
ScrollFrameHelper::AppendScrollPartsTo(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists,
|
||||
bool aCreateLayer,
|
||||
bool aPositioned)
|
||||
|
@ -3111,8 +3112,11 @@ ScrollFrameHelper::AppendScrollPartsTo(nsDisplayListBuilder* aBuilder,
|
|||
// this for the root scrollframe of the root content document, which is
|
||||
// zoomable, and where the scrollbar sizes are bounded by the widget.
|
||||
nsRect dirty = mIsRoot && mOuter->PresContext()->IsRootContentDocument()
|
||||
? scrollParts[i]->GetVisualOverflowRectRelativeToParent()
|
||||
: aBuilder->GetDirtyRect();
|
||||
? scrollParts[i]->GetVisualOverflowRectRelativeToParent()
|
||||
: aDirtyRect;
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, scrollParts[i],
|
||||
dirty + mOuter->GetOffsetTo(scrollParts[i]), true);
|
||||
|
||||
// Always create layers for overlay scrollbars so that we don't create a
|
||||
// giant layer covering the whole scrollport if both scrollbars are visible.
|
||||
|
@ -3120,18 +3124,12 @@ ScrollFrameHelper::AppendScrollPartsTo(nsDisplayListBuilder* aBuilder,
|
|||
bool createLayer = aCreateLayer || isOverlayScrollbar ||
|
||||
gfxPrefs::AlwaysLayerizeScrollbarTrackTestOnly();
|
||||
|
||||
nsDisplayListBuilder::AutoCurrentScrollbarInfoSetter
|
||||
infoSetter(aBuilder, scrollTargetId, flags, createLayer);
|
||||
nsDisplayListCollection partList;
|
||||
{
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, mOuter,
|
||||
dirty, true);
|
||||
|
||||
nsDisplayListBuilder::AutoCurrentScrollbarInfoSetter
|
||||
infoSetter(aBuilder, scrollTargetId, flags, createLayer);
|
||||
mOuter->BuildDisplayListForChild(
|
||||
aBuilder, scrollParts[i], partList,
|
||||
nsIFrame::DISPLAY_CHILD_FORCE_STACKING_CONTEXT);
|
||||
}
|
||||
mOuter->BuildDisplayListForChild(
|
||||
aBuilder, scrollParts[i], dirty, partList,
|
||||
nsIFrame::DISPLAY_CHILD_FORCE_STACKING_CONTEXT);
|
||||
|
||||
if (createLayer) {
|
||||
appendToTopFlags |= APPEND_OWN_LAYER;
|
||||
|
@ -3140,18 +3138,11 @@ ScrollFrameHelper::AppendScrollPartsTo(nsDisplayListBuilder* aBuilder,
|
|||
appendToTopFlags |= APPEND_POSITIONED;
|
||||
}
|
||||
|
||||
{
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, scrollParts[i],
|
||||
dirty + mOuter->GetOffsetTo(scrollParts[i]), true);
|
||||
nsDisplayListBuilder::AutoCurrentScrollbarInfoSetter
|
||||
infoSetter(aBuilder, scrollTargetId, flags, createLayer);
|
||||
// DISPLAY_CHILD_FORCE_STACKING_CONTEXT put everything into
|
||||
// partList.PositionedDescendants().
|
||||
::AppendToTop(aBuilder, aLists,
|
||||
partList.PositionedDescendants(), scrollParts[i],
|
||||
appendToTopFlags);
|
||||
}
|
||||
// DISPLAY_CHILD_FORCE_STACKING_CONTEXT put everything into
|
||||
// partList.PositionedDescendants().
|
||||
::AppendToTop(aBuilder, aLists,
|
||||
partList.PositionedDescendants(), scrollParts[i],
|
||||
appendToTopFlags);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3261,6 +3252,7 @@ ClipListsExceptCaret(nsDisplayListCollection* aLists,
|
|||
|
||||
void
|
||||
ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (aBuilder->IsForFrameVisibility()) {
|
||||
|
@ -3297,7 +3289,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// had dirty rects saved for them by their parent frames calling
|
||||
// MarkOutOfFlowChildrenForDisplayList, so it's safe to restrict our
|
||||
// dirty rect here.
|
||||
nsRect dirtyRect = aBuilder->GetDirtyRect();
|
||||
nsRect dirtyRect = aDirtyRect;
|
||||
if (!ignoringThisScrollFrame) {
|
||||
dirtyRect = dirtyRect.Intersect(mScrollPort);
|
||||
}
|
||||
|
@ -3342,7 +3334,8 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
if (addScrollBars) {
|
||||
// Add classic scrollbars.
|
||||
AppendScrollPartsTo(aBuilder, aLists, createLayersForScrollbars, false);
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, aLists,
|
||||
createLayersForScrollbars, false);
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -3353,18 +3346,17 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
aBuilder->SetActiveScrolledRootForRootScrollframe(aBuilder->CurrentActiveScrolledRoot());
|
||||
}
|
||||
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
building(aBuilder, mOuter, dirtyRect, aBuilder->IsAtRootOfPseudoStackingContext());
|
||||
|
||||
// Don't clip the scrolled child, and don't paint scrollbars/scrollcorner.
|
||||
// The scrolled frame shouldn't have its own background/border, so we
|
||||
// can just pass aLists directly.
|
||||
mOuter->BuildDisplayListForChild(aBuilder, mScrolledFrame, aLists);
|
||||
mOuter->BuildDisplayListForChild(aBuilder, mScrolledFrame,
|
||||
dirtyRect, aLists);
|
||||
}
|
||||
|
||||
if (addScrollBars) {
|
||||
// Add overlay scrollbars.
|
||||
AppendScrollPartsTo(aBuilder, aLists, createLayersForScrollbars, true);
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, aLists,
|
||||
createLayersForScrollbars, true);
|
||||
}
|
||||
|
||||
return;
|
||||
|
@ -3402,7 +3394,8 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// 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, aLists, createLayersForScrollbars, false);
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, aLists,
|
||||
createLayersForScrollbars, false);
|
||||
|
||||
const nsStyleDisplay* disp = mOuter->StyleDisplay();
|
||||
if (disp && (disp->mWillChangeBitField & NS_STYLE_WILL_CHANGE_SCROLL)) {
|
||||
|
@ -3526,10 +3519,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
scrolledRectClipState.ClipContainingBlockDescendants(
|
||||
scrolledRectClip + aBuilder->ToReferenceFrame(mOuter));
|
||||
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
building(aBuilder, mOuter, dirtyRect, aBuilder->IsAtRootOfPseudoStackingContext());
|
||||
|
||||
mOuter->BuildDisplayListForChild(aBuilder, mScrolledFrame, scrolledContent);
|
||||
mOuter->BuildDisplayListForChild(aBuilder, mScrolledFrame, dirtyRect, scrolledContent);
|
||||
}
|
||||
|
||||
if (extraContentBoxClipForNonCaretContent) {
|
||||
|
@ -3603,8 +3593,8 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
}
|
||||
// Now display overlay scrollbars and the resizer, if we have one.
|
||||
AppendScrollPartsTo(aBuilder, scrolledContent, createLayersForScrollbars, true);
|
||||
|
||||
AppendScrollPartsTo(aBuilder, aDirtyRect, scrolledContent,
|
||||
createLayersForScrollbars, true);
|
||||
scrolledContent.MoveTo(aLists);
|
||||
}
|
||||
|
||||
|
|
|
@ -70,9 +70,11 @@ public:
|
|||
void Destroy();
|
||||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists);
|
||||
|
||||
void AppendScrollPartsTo(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists,
|
||||
bool aCreateLayer,
|
||||
bool aPositioned);
|
||||
|
@ -691,9 +693,10 @@ public:
|
|||
NS_DECL_QUERYFRAME
|
||||
NS_DECL_FRAMEARENA_HELPERS(nsHTMLScrollFrame)
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override {
|
||||
mHelper.BuildDisplayList(aBuilder, aLists);
|
||||
mHelper.BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
bool TryLayout(ScrollReflowInput* aState,
|
||||
|
@ -1123,8 +1126,9 @@ public:
|
|||
bool aClipAllDescendants);
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override {
|
||||
mHelper.BuildDisplayList(aBuilder, aLists);
|
||||
mHelper.BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
// XXXldb Is this actually used?
|
||||
|
|
|
@ -6407,11 +6407,12 @@ nsGridContainerFrame::MarkIntrinsicISizesDirty()
|
|||
|
||||
void
|
||||
nsGridContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
if (GetPrevInFlow()) {
|
||||
DisplayOverflowContainers(aBuilder, aLists);
|
||||
DisplayOverflowContainers(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
// Our children are all grid-level boxes, which behave the same as
|
||||
|
@ -6425,7 +6426,8 @@ nsGridContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
CSSOrderAwareFrameIterator::eIncludeAll, order);
|
||||
for (; !iter.AtEnd(); iter.Next()) {
|
||||
nsIFrame* child = *iter;
|
||||
BuildDisplayListForChild(aBuilder, child, aLists, ::GetDisplayFlagsForGridItem(child));
|
||||
BuildDisplayListForChild(aBuilder, child, aDirtyRect, aLists,
|
||||
::GetDisplayFlagsForGridItem(child));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -104,6 +104,7 @@ public:
|
|||
}
|
||||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
nscoord GetLogicalBaseline(mozilla::WritingMode aWM) const override
|
||||
|
|
|
@ -462,6 +462,7 @@ nsHTMLCanvasFrame::InitializeCanvasRenderer(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsHTMLCanvasFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
|
|
|
@ -46,6 +46,7 @@ public:
|
|||
nsIFrame* aPrevInFlow) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
|
||||
|
|
|
@ -1633,14 +1633,21 @@ public:
|
|||
* BuildDisplayListForChild.
|
||||
*
|
||||
* See nsDisplayList.h for more information about display lists.
|
||||
*
|
||||
* @param aDirtyRect content outside this rectangle can be ignored; the
|
||||
* rectangle is in frame coordinates
|
||||
*/
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) {}
|
||||
/**
|
||||
* Displays the caret onto the given display list builder. The caret is
|
||||
* painted on top of the rest of the display list items.
|
||||
*
|
||||
* @param aDirtyRect is the dirty rectangle that we're repainting.
|
||||
*/
|
||||
void DisplayCaret(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
nsDisplayList* aList);
|
||||
|
||||
/**
|
||||
|
@ -1674,8 +1681,11 @@ public:
|
|||
/**
|
||||
* Builds a display list for the content represented by this frame,
|
||||
* treating this frame as the root of a stacking context.
|
||||
* @param aDirtyRect content outside this rectangle can be ignored; the
|
||||
* rectangle is in frame coordinates
|
||||
*/
|
||||
void BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
nsDisplayList* aList);
|
||||
|
||||
enum {
|
||||
|
@ -1694,6 +1704,7 @@ public:
|
|||
*/
|
||||
void BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
|
||||
nsIFrame* aChild,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists,
|
||||
uint32_t aFlags = 0);
|
||||
|
||||
|
@ -4030,7 +4041,7 @@ private:
|
|||
nsIFrame* mPrevSibling; // Do not touch outside SetNextSibling!
|
||||
DisplayItemArray mDisplayItemData;
|
||||
|
||||
void MarkAbsoluteFramesForDisplayList(nsDisplayListBuilder* aBuilder);
|
||||
void MarkAbsoluteFramesForDisplayList(nsDisplayListBuilder* aBuilder, const nsRect& aDirtyRect);
|
||||
|
||||
static void DestroyPaintedPresShellList(nsTArray<nsWeakPtr>* list) {
|
||||
list->Clear();
|
||||
|
|
|
@ -1798,6 +1798,7 @@ nsImageFrame::PaintImage(gfxContext& aRenderingContext, nsPoint aPt,
|
|||
|
||||
void
|
||||
nsImageFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
|
|
|
@ -79,6 +79,7 @@ public:
|
|||
nsContainerFrame* aParent,
|
||||
nsIFrame* aPrevInFlow) override;
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
virtual nscoord GetMinISize(gfxContext *aRenderingContext) override;
|
||||
virtual nscoord GetPrefISize(gfxContext *aRenderingContext) override;
|
||||
|
|
|
@ -238,9 +238,10 @@ nsInlineFrame::StealFrame(nsIFrame* aChild)
|
|||
|
||||
void
|
||||
nsInlineFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
BuildDisplayListForInline(aBuilder, aLists);
|
||||
BuildDisplayListForInline(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
// The sole purpose of this is to trigger display of the selection
|
||||
// window for Named Anchors, which don't have any children and
|
||||
|
|
|
@ -30,6 +30,7 @@ public:
|
|||
|
||||
// nsIFrame overrides
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
#ifdef ACCESSIBILITY
|
||||
|
|
|
@ -24,6 +24,7 @@ public:
|
|||
|
||||
// nsIFrame replacements
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override {
|
||||
DO_GLOBAL_REFLOW_COUNT_DSP("nsLeafFrame");
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
|
|
@ -433,7 +433,7 @@ PruneDisplayListForExtraPage(nsDisplayListBuilder* aBuilder,
|
|||
static void
|
||||
BuildDisplayListForExtraPage(nsDisplayListBuilder* aBuilder,
|
||||
nsPageFrame* aPage, nsIFrame* aExtraPage,
|
||||
nsDisplayList* aList)
|
||||
const nsRect& aDirtyRect, nsDisplayList* aList)
|
||||
{
|
||||
// The only content in aExtraPage we care about is out-of-flow content whose
|
||||
// placeholders have occurred in aPage. If
|
||||
|
@ -443,7 +443,7 @@ BuildDisplayListForExtraPage(nsDisplayListBuilder* aBuilder,
|
|||
return;
|
||||
}
|
||||
nsDisplayList list;
|
||||
aExtraPage->BuildDisplayListForStackingContext(aBuilder, &list);
|
||||
aExtraPage->BuildDisplayListForStackingContext(aBuilder, aDirtyRect, &list);
|
||||
PruneDisplayListForExtraPage(aBuilder, aPage, aExtraPage, &list);
|
||||
aList->AppendToTop(&list);
|
||||
}
|
||||
|
@ -513,6 +513,7 @@ protected:
|
|||
//------------------------------------------------------------------------------
|
||||
void
|
||||
nsPageFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
nsDisplayListCollection set;
|
||||
|
@ -553,10 +554,7 @@ nsPageFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
clipState.ClipContainingBlockDescendants(clipRect, nullptr);
|
||||
|
||||
nsRect dirtyRect = child->GetVisualOverflowRectRelativeToSelf();
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, child, dirtyRect,
|
||||
aBuilder->IsAtRootOfPseudoStackingContext());
|
||||
child->BuildDisplayListForStackingContext(aBuilder, &content);
|
||||
child->BuildDisplayListForStackingContext(aBuilder, dirtyRect, &content);
|
||||
|
||||
// We may need to paint out-of-flow frames whose placeholders are
|
||||
// on other pages. Add those pages to our display list. Note that
|
||||
|
@ -567,12 +565,8 @@ nsPageFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// following placeholders to their out-of-flows) end up on the list.
|
||||
nsIFrame* page = child;
|
||||
while ((page = GetNextPage(page)) != nullptr) {
|
||||
nsRect childDirty = dirtyRect + child->GetOffsetTo(page);
|
||||
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, page, childDirty,
|
||||
aBuilder->IsAtRootOfPseudoStackingContext());
|
||||
BuildDisplayListForExtraPage(aBuilder, this, page, &content);
|
||||
BuildDisplayListForExtraPage(aBuilder, this, page,
|
||||
dirtyRect + child->GetOffsetTo(page), &content);
|
||||
}
|
||||
|
||||
// Invoke AutoBuildingDisplayList to ensure that the correct dirtyRect
|
||||
|
@ -586,7 +580,6 @@ nsPageFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// can monkey with the contents if necessary.
|
||||
nsRect backgroundRect =
|
||||
nsRect(aBuilder->ToReferenceFrame(child), child->GetSize());
|
||||
|
||||
PresContext()->GetPresShell()->AddCanvasBackgroundColorItem(
|
||||
*aBuilder, content, child, backgroundRect, NS_RGBA(0,0,0,0));
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@ public:
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
#ifdef DEBUG_FRAME_DUMP
|
||||
|
|
|
@ -253,6 +253,7 @@ PaintDebugPlaceholder(nsIFrame* aFrame, DrawTarget* aDrawTarget,
|
|||
|
||||
void
|
||||
nsPlaceholderFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
DO_GLOBAL_REFLOW_COUNT_DSP("nsPlaceholderFrame");
|
||||
|
|
|
@ -107,6 +107,7 @@ public:
|
|||
|
||||
#if defined(DEBUG) || (defined(MOZ_REFLOW_PERF_DSP) && defined(MOZ_REFLOW_PERF))
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
#endif // DEBUG || (MOZ_REFLOW_PERF_DSP && MOZ_REFLOW_PERF)
|
||||
|
||||
|
|
|
@ -1123,6 +1123,7 @@ nsPluginFrame::IsTransparentMode() const
|
|||
|
||||
void
|
||||
nsPluginFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
// XXX why are we painting collapsed object frames?
|
||||
|
|
|
@ -80,6 +80,7 @@ public:
|
|||
const ReflowInput* aReflowInput,
|
||||
nsDidReflowStatus aStatus) override;
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual nsresult HandleEvent(nsPresContext* aPresContext,
|
||||
|
|
|
@ -57,13 +57,14 @@ nsRubyTextFrame::GetFrameName(nsAString& aResult) const
|
|||
|
||||
/* virtual */ void
|
||||
nsRubyTextFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (IsAutoHidden()) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsRubyContentFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsRubyContentFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
/* virtual */ void
|
||||
|
|
|
@ -32,6 +32,7 @@ public:
|
|||
#endif
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void Reflow(nsPresContext* aPresContext,
|
||||
|
|
|
@ -827,6 +827,7 @@ ComputePageSequenceTransform(nsIFrame* aFrame, float aAppUnitsPerPixel)
|
|||
|
||||
void
|
||||
nsSimplePageSequenceFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
@ -840,16 +841,13 @@ nsSimplePageSequenceFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
clipState.Clear();
|
||||
|
||||
nsIFrame* child = PrincipalChildList().FirstChild();
|
||||
nsRect dirty = aBuilder->GetDirtyRect();
|
||||
nsRect dirty = aDirtyRect;
|
||||
dirty.ScaleInverseRoundOut(PresContext()->GetPrintPreviewScale());
|
||||
|
||||
while (child) {
|
||||
if (child->GetVisualOverflowRectRelativeToParent().Intersects(dirty)) {
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, child,
|
||||
dirty - child->GetPosition(),
|
||||
aBuilder->IsAtRootOfPseudoStackingContext());
|
||||
child->BuildDisplayListForStackingContext(aBuilder, &content);
|
||||
child->BuildDisplayListForStackingContext(aBuilder,
|
||||
dirty - child->GetPosition(), &content);
|
||||
aBuilder->ResetMarkedFramesForDisplayList();
|
||||
}
|
||||
child = child->GetNextSibling();
|
||||
|
|
|
@ -69,6 +69,7 @@ public:
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
// nsIPageSequenceFrame
|
||||
|
|
|
@ -328,6 +328,7 @@ WrapBackgroundColorInOwnLayer(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
|
@ -368,7 +369,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
}
|
||||
|
||||
if (rfp) {
|
||||
rfp->BuildDisplayList(aBuilder, this, aLists);
|
||||
rfp->BuildDisplayList(aBuilder, this, aDirtyRect, aLists);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -393,19 +394,17 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
nsIFrame* savedIgnoreScrollFrame = nullptr;
|
||||
if (subdocRootFrame) {
|
||||
// get the dirty rect relative to the root frame of the subdoc
|
||||
dirty = aBuilder->GetDirtyRect() + GetOffsetToCrossDoc(subdocRootFrame);
|
||||
dirty = aDirtyRect + 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 rects don't get modified.
|
||||
nsRect copyOfDirty = dirty;
|
||||
// Use a copy, so the dirty rect doesn't get modified to the display port.
|
||||
nsRect copy = dirty;
|
||||
haveDisplayPort = rootScrollableFrame->DecideScrollableLayer(aBuilder,
|
||||
©OfDirty,
|
||||
/* aAllowCreateDisplayPort = */ true);
|
||||
|
||||
©, /* aAllowCreateDisplayPort = */ true);
|
||||
if (!gfxPrefs::LayoutUseContainersForRootFrames()) {
|
||||
haveDisplayPort = false;
|
||||
}
|
||||
|
@ -419,7 +418,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
aBuilder->EnterPresShell(subdocRootFrame, pointerEventsNone);
|
||||
} else {
|
||||
dirty = aBuilder->GetDirtyRect();
|
||||
dirty = aDirtyRect;
|
||||
}
|
||||
|
||||
DisplayListClipState::AutoSaveRestore clipState(aBuilder);
|
||||
|
@ -440,7 +439,6 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
{
|
||||
needsOwnLayer = true;
|
||||
}
|
||||
|
||||
if (!needsOwnLayer && aBuilder->IsBuildingLayerEventRegions() &&
|
||||
nsLayoutUtils::HasDocumentLevelListenersForApzAwareEvents(presShell))
|
||||
{
|
||||
|
@ -459,13 +457,6 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
nestedClipState.Clear();
|
||||
}
|
||||
|
||||
// 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(
|
||||
|
@ -476,7 +467,7 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
aBuilder->SetAncestorHasApzAwareEventHandler(false);
|
||||
subdocRootFrame->
|
||||
BuildDisplayListForStackingContext(aBuilder, &childItems);
|
||||
BuildDisplayListForStackingContext(aBuilder, dirty, &childItems);
|
||||
}
|
||||
|
||||
if (!aBuilder->IsForEventDelivery()) {
|
||||
|
@ -495,8 +486,15 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// painted on the page itself.
|
||||
if (nsLayoutUtils::NeedsPrintPreviewBackground(presContext)) {
|
||||
presShell->AddPrintPreviewBackgroundItem(
|
||||
*aBuilder, childItems, frame, bounds);
|
||||
*aBuilder, childItems, subdocRootFrame ? subdocRootFrame : this,
|
||||
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.
|
||||
|
|
|
@ -77,6 +77,7 @@ public:
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
nsresult AttributeChanged(int32_t aNameSpaceID,
|
||||
|
|
|
@ -5320,6 +5320,7 @@ nsDisplayText::RenderToContext(gfxContext* aCtx, nsDisplayListBuilder* aBuilder,
|
|||
|
||||
void
|
||||
nsTextFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
|
||||
// nsIFrame
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
void Init(nsIContent* aContent,
|
||||
|
|
|
@ -534,6 +534,7 @@ public:
|
|||
|
||||
void
|
||||
nsVideoFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!IsVisibleForPainting(aBuilder))
|
||||
|
@ -569,15 +570,14 @@ nsVideoFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// but only want to draw mPosterImage conditionally. Others we
|
||||
// always add to the display list.
|
||||
for (nsIFrame* child : mFrames) {
|
||||
if (child->GetContent() != mPosterImage || shouldDisplayPoster ||
|
||||
child->IsBoxFrame()) {
|
||||
|
||||
nsDisplayListBuilder::AutoBuildingDisplayList
|
||||
buildingForChild(aBuilder, child,
|
||||
aBuilder->GetDirtyRect() - child->GetOffsetTo(this),
|
||||
aBuilder->IsAtRootOfPseudoStackingContext());
|
||||
|
||||
child->BuildDisplayListForStackingContext(aBuilder, aLists.Content());
|
||||
if (child->GetContent() != mPosterImage || shouldDisplayPoster) {
|
||||
child->BuildDisplayListForStackingContext(aBuilder,
|
||||
aDirtyRect - child->GetOffsetTo(this),
|
||||
aLists.Content());
|
||||
} else if (child->IsBoxFrame()) {
|
||||
child->BuildDisplayListForStackingContext(aBuilder,
|
||||
aDirtyRect - child->GetOffsetTo(this),
|
||||
aLists.Content());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,6 +44,7 @@ public:
|
|||
NS_DECL_FRAMEARENA_HELPERS(nsVideoFrame)
|
||||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
nsresult AttributeChanged(int32_t aNameSpaceID,
|
||||
|
|
|
@ -284,6 +284,7 @@ RenderFrameParent::TriggerRepaint()
|
|||
void
|
||||
RenderFrameParent::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
nsSubDocumentFrame* aFrame,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
// We're the subdoc for <browser remote="true"> and it has
|
||||
|
|
|
@ -66,6 +66,7 @@ public:
|
|||
|
||||
void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
nsSubDocumentFrame* aFrame,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists);
|
||||
|
||||
already_AddRefed<Layer> BuildLayer(nsDisplayListBuilder* aBuilder,
|
||||
|
|
|
@ -616,6 +616,7 @@ nsMathMLContainerFrame::PropagatePresentationDataFromChildAt(nsIFrame* aPa
|
|||
|
||||
void
|
||||
nsMathMLContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
// report an error if something wrong was found in this frame
|
||||
|
@ -630,7 +631,8 @@ nsMathMLContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
||||
BuildDisplayListForNonBlockChildren(aBuilder, aLists, DISPLAY_CHILD_INLINE);
|
||||
BuildDisplayListForNonBlockChildren(aBuilder, aDirtyRect, aLists,
|
||||
DISPLAY_CHILD_INLINE);
|
||||
|
||||
#if defined(DEBUG) && defined(SHOW_BOUNDING_BOX)
|
||||
// for visual debug
|
||||
|
|
|
@ -115,6 +115,7 @@ public:
|
|||
}
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual bool ComputeCustomOverflow(nsOverflowAreas& aOverflowAreas) override;
|
||||
|
|
|
@ -58,13 +58,14 @@ nsMathMLSelectedFrame::SetInitialChildList(ChildListID aListID,
|
|||
// Only paint the selected child...
|
||||
void
|
||||
nsMathMLSelectedFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
// Report an error if something wrong was found in this frame.
|
||||
// We can't call nsDisplayMathMLError from here,
|
||||
// so ask nsMathMLContainerFrame to do the work for us.
|
||||
if (NS_MATHML_HAS_ERROR(mPresentationData.flags)) {
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -75,7 +76,7 @@ nsMathMLSelectedFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
// Put the child's background directly onto the content list
|
||||
nsDisplayListSet set(aLists, aLists.Content());
|
||||
// The children should be in content order
|
||||
BuildDisplayListForChild(aBuilder, childFrame, set);
|
||||
BuildDisplayListForChild(aBuilder, childFrame, aDirtyRect, set);
|
||||
}
|
||||
|
||||
#if defined(DEBUG) && defined(SHOW_BOUNDING_BOX)
|
||||
|
|
|
@ -21,6 +21,7 @@ public:
|
|||
ChildListChanged(int32_t aModType) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual nsresult
|
||||
|
|
|
@ -201,11 +201,12 @@ nsMathMLmencloseFrame::TransmitAutomaticData()
|
|||
|
||||
void
|
||||
nsMathMLmencloseFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
/////////////
|
||||
// paint the menclosed content
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
if (NS_MATHML_HAS_ERROR(mPresentationData.flags))
|
||||
return;
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
GetAdditionalStyleContext(int32_t aIndex) const override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
NS_IMETHOD
|
||||
|
|
|
@ -160,11 +160,12 @@ nsMathMLmfencedFrame::CreateFencesAndSeparators(nsPresContext* aPresContext)
|
|||
|
||||
void
|
||||
nsMathMLmfencedFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
/////////////
|
||||
// display the content
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
////////////
|
||||
// display fences and separators
|
||||
|
|
|
@ -41,6 +41,7 @@ public:
|
|||
nsReflowStatus& aStatus) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual void
|
||||
|
|
|
@ -148,11 +148,12 @@ nsMathMLmfracFrame::CalcLineThickness(nsPresContext* aPresContext,
|
|||
|
||||
void
|
||||
nsMathMLmfracFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
/////////////
|
||||
// paint the numerator and denominator
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
/////////////
|
||||
// paint the fraction line
|
||||
|
|
|
@ -67,6 +67,7 @@ public:
|
|||
ReflowOutput& aDesiredSize) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual nsresult
|
||||
|
|
|
@ -70,13 +70,14 @@ nsMathMLmoFrame::UseMathMLChar()
|
|||
|
||||
void
|
||||
nsMathMLmoFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
bool useMathMLChar = UseMathMLChar();
|
||||
|
||||
if (!useMathMLChar) {
|
||||
// let the base class do everything
|
||||
nsMathMLTokenFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsMathMLTokenFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
} else {
|
||||
DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ public:
|
|||
GetAdditionalStyleContext(int32_t aIndex) const override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
NS_IMETHOD
|
||||
|
|
|
@ -77,11 +77,12 @@ nsMathMLmrootFrame::TransmitAutomaticData()
|
|||
|
||||
void
|
||||
nsMathMLmrootFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
/////////////
|
||||
// paint the content we are square-rooting
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aLists);
|
||||
nsMathMLContainerFrame::BuildDisplayList(aBuilder, aDirtyRect, aLists);
|
||||
|
||||
/////////////
|
||||
// paint the sqrt symbol
|
||||
|
|
|
@ -51,6 +51,7 @@ public:
|
|||
ReflowOutput& aDesiredSize) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
uint8_t
|
||||
|
|
|
@ -1047,9 +1047,10 @@ nsDisplayListBuilder::FindAnimatedGeometryRootFor(nsDisplayItem* aItem)
|
|||
|
||||
|
||||
void nsDisplayListBuilder::MarkOutOfFlowFrameForDisplay(nsIFrame* aDirtyFrame,
|
||||
nsIFrame* aFrame)
|
||||
nsIFrame* aFrame,
|
||||
const nsRect& aDirtyRect)
|
||||
{
|
||||
nsRect dirtyRectRelativeToDirtyFrame = GetDirtyRect();
|
||||
nsRect dirtyRectRelativeToDirtyFrame = aDirtyRect;
|
||||
if (nsLayoutUtils::IsFixedPosFrameInDisplayPort(aFrame) &&
|
||||
IsPaintingToWindow()) {
|
||||
NS_ASSERTION(aDirtyFrame == aFrame->GetParent(), "Dirty frame should be viewport frame");
|
||||
|
@ -1064,8 +1065,7 @@ void nsDisplayListBuilder::MarkOutOfFlowFrameForDisplay(nsIFrame* aDirtyFrame,
|
|||
dirtyRectRelativeToDirtyFrame.SizeTo(aDirtyFrame->GetSize());
|
||||
}
|
||||
}
|
||||
nsPoint offset = aFrame->GetOffsetTo(aDirtyFrame);
|
||||
nsRect dirty = dirtyRectRelativeToDirtyFrame - offset;
|
||||
nsRect dirty = dirtyRectRelativeToDirtyFrame - aFrame->GetOffsetTo(aDirtyFrame);
|
||||
nsRect overflowRect = aFrame->GetVisualOverflowRect();
|
||||
|
||||
if (aFrame->IsTransformed() &&
|
||||
|
@ -1105,7 +1105,6 @@ static void UnmarkFrameForDisplay(nsIFrame* aFrame) {
|
|||
return;
|
||||
f->RemoveStateBits(NS_FRAME_FORCE_DISPLAY_LIST_DESCEND_INTO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
nsDisplayListBuilder::~nsDisplayListBuilder() {
|
||||
|
@ -1281,7 +1280,8 @@ nsDisplayListBuilder::ResetMarkedFramesForDisplayList()
|
|||
|
||||
void
|
||||
nsDisplayListBuilder::MarkFramesForDisplayList(nsIFrame* aDirtyFrame,
|
||||
const nsFrameList& aFrames) {
|
||||
const nsFrameList& aFrames,
|
||||
const nsRect& aDirtyRect) {
|
||||
for (nsIFrame* e : aFrames) {
|
||||
// Skip the AccessibleCaret frame when building no caret.
|
||||
if (!IsBuildingCaret()) {
|
||||
|
@ -1295,7 +1295,7 @@ nsDisplayListBuilder::MarkFramesForDisplayList(nsIFrame* aDirtyFrame,
|
|||
}
|
||||
|
||||
mFramesMarkedForDisplay.AppendElement(e);
|
||||
MarkOutOfFlowFrameForDisplay(aDirtyFrame, e);
|
||||
MarkOutOfFlowFrameForDisplay(aDirtyFrame, e, aDirtyRect);
|
||||
}
|
||||
|
||||
if (!aDirtyFrame->GetParent()) {
|
||||
|
@ -1313,7 +1313,7 @@ nsDisplayListBuilder::MarkFramesForDisplayList(nsIFrame* aDirtyFrame,
|
|||
const DisplayItemClipChain* combinedClipChain = mClipState.GetCurrentCombinedClipChain(this);
|
||||
const ActiveScrolledRoot* asr = mCurrentActiveScrolledRoot;
|
||||
CurrentPresShellState()->mFixedBackgroundDisplayData.emplace(
|
||||
clipChain, combinedClipChain, asr, GetDirtyRect());
|
||||
clipChain, combinedClipChain, asr, aDirtyRect);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3306,7 +3306,7 @@ nsDisplayBackgroundImage::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuil
|
|||
// There cannot be any transforms between aFrame and rootFrame
|
||||
// because then bgData.shouldFixToViewport would have been false.
|
||||
nsRect dirtyRect = displayData->mDirtyRect + aFrame->GetOffsetTo(rootFrame);
|
||||
aBuilder->SetDirtyRect(dirtyRect);
|
||||
buildingDisplayList.SetDirtyRect(dirtyRect);
|
||||
}
|
||||
}
|
||||
nsDisplayBackgroundImage* bgItem = nullptr;
|
||||
|
@ -3316,7 +3316,8 @@ nsDisplayBackgroundImage::AppendBackgroundItemsToTop(nsDisplayListBuilder* aBuil
|
|||
DisplayListClipState::AutoSaveRestore bgImageClip(aBuilder);
|
||||
bgImageClip.Clear();
|
||||
if (aSecondaryReferenceFrame) {
|
||||
bgItem = new (aBuilder) nsDisplayTableBackgroundImage(bgData, aSecondaryReferenceFrame);
|
||||
bgItem = new (aBuilder) nsDisplayTableBackgroundImage(bgData,
|
||||
aSecondaryReferenceFrame);
|
||||
} else {
|
||||
bgItem = new (aBuilder) nsDisplayBackgroundImage(bgData);
|
||||
}
|
||||
|
|
|
@ -525,10 +525,6 @@ public:
|
|||
* BuildDisplayList on right now).
|
||||
*/
|
||||
const nsRect& GetDirtyRect() { return mDirtyRect; }
|
||||
|
||||
void SetDirtyRect(const nsRect& aDirtyRect) { mDirtyRect = aDirtyRect; }
|
||||
void IntersectDirtyRect(const nsRect& aDirtyRect) { mDirtyRect.IntersectRect(mDirtyRect, aDirtyRect); }
|
||||
|
||||
const nsIFrame* GetCurrentFrame() { return mCurrentFrame; }
|
||||
const nsIFrame* GetCurrentReferenceFrame() { return mCurrentReferenceFrame; }
|
||||
const nsPoint& GetCurrentFrameOffsetToReferenceFrame() { return mCurrentOffsetToReferenceFrame; }
|
||||
|
@ -578,10 +574,11 @@ public:
|
|||
/**
|
||||
* Display the caret if needed.
|
||||
*/
|
||||
void DisplayCaret(nsIFrame* aFrame, nsDisplayList* aList) {
|
||||
void DisplayCaret(nsIFrame* aFrame, const nsRect& aDirtyRect,
|
||||
nsDisplayList* aList) {
|
||||
nsIFrame* frame = GetCaretFrame();
|
||||
if (aFrame == frame) {
|
||||
frame->DisplayCaret(this, aList);
|
||||
frame->DisplayCaret(this, aDirtyRect, aList);
|
||||
}
|
||||
}
|
||||
/**
|
||||
|
@ -686,7 +683,8 @@ public:
|
|||
* destroyed.
|
||||
*/
|
||||
void MarkFramesForDisplayList(nsIFrame* aDirtyFrame,
|
||||
const nsFrameList& aFrames);
|
||||
const nsFrameList& aFrames,
|
||||
const nsRect& aDirtyRect);
|
||||
/**
|
||||
* Mark all child frames that Preserve3D() as needing display.
|
||||
* Because these frames include transforms set on their parent, dirty rects
|
||||
|
@ -1384,11 +1382,11 @@ public:
|
|||
Preserves3DContext mSavedCtx;
|
||||
};
|
||||
|
||||
const nsRect GetPreserves3DRects() const {
|
||||
const nsRect GetPreserves3DDirtyRect(const nsIFrame *aFrame) const {
|
||||
return mPreserves3DCtx.mDirtyRect;
|
||||
}
|
||||
void SavePreserves3DRects() {
|
||||
mPreserves3DCtx.mDirtyRect = mDirtyRect;
|
||||
void SetPreserves3DDirtyRect(const nsRect &aDirtyRect) {
|
||||
mPreserves3DCtx.mDirtyRect = aDirtyRect;
|
||||
}
|
||||
|
||||
bool IsBuildingInvisibleItems() const { return mBuildingInvisibleItems; }
|
||||
|
@ -1410,7 +1408,8 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
void MarkOutOfFlowFrameForDisplay(nsIFrame* aDirtyFrame, nsIFrame* aFrame);
|
||||
void MarkOutOfFlowFrameForDisplay(nsIFrame* aDirtyFrame, nsIFrame* aFrame,
|
||||
const nsRect& aDirtyRect);
|
||||
|
||||
/**
|
||||
* Returns whether a frame acts as an animated geometry root, optionally
|
||||
|
|
|
@ -25,6 +25,7 @@ public:
|
|||
NS_DECL_FRAMEARENA_HELPERS(SVGFEUnstyledLeafFrame)
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override {}
|
||||
|
||||
virtual bool IsFrameOfType(uint32_t aFlags) const override
|
||||
|
|
|
@ -261,6 +261,7 @@ SVGGeometryFrame::IsSVGTransformed(gfx::Matrix *aOwnTransform,
|
|||
|
||||
void
|
||||
SVGGeometryFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (!static_cast<const nsSVGElement*>(mContent)->HasValidDimensions() ||
|
||||
|
|
|
@ -90,6 +90,7 @@ public:
|
|||
#endif
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
// SVGGeometryFrame methods
|
||||
|
|
|
@ -3176,6 +3176,7 @@ SVGTextFrame::Init(nsIContent* aContent,
|
|||
|
||||
void
|
||||
SVGTextFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (NS_SUBTREE_DIRTY(this)) {
|
||||
|
|
|
@ -227,6 +227,7 @@ public:
|
|||
}
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
#ifdef DEBUG_FRAME_DUMP
|
||||
|
|
|
@ -36,6 +36,7 @@ public:
|
|||
|
||||
// nsIFrame methods:
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override {}
|
||||
|
||||
// nsSVGClipPathFrame methods:
|
||||
|
|
|
@ -143,6 +143,7 @@ nsSVGDisplayContainerFrame::Init(nsIContent* aContent,
|
|||
|
||||
void
|
||||
nsSVGDisplayContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
// mContent could be a XUL element so check for an SVG element before casting
|
||||
|
@ -151,7 +152,7 @@ nsSVGDisplayContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
return;
|
||||
}
|
||||
DisplayOutline(aBuilder, aLists);
|
||||
return BuildDisplayListForNonBlockChildren(aBuilder, aLists);
|
||||
return BuildDisplayListForNonBlockChildren(aBuilder, aDirtyRect, aLists);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -82,6 +82,7 @@ public:
|
|||
}
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override {}
|
||||
|
||||
virtual bool ComputeCustomOverflow(nsOverflowAreas& aOverflowAreas) override;
|
||||
|
@ -131,6 +132,7 @@ public:
|
|||
nsIFrame* aPrevInFlow) override;
|
||||
|
||||
virtual void BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
const nsRect& aDirtyRect,
|
||||
const nsDisplayListSet& aLists) override;
|
||||
|
||||
virtual bool IsSVGTransformed(Matrix *aOwnTransform = nullptr,
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче