зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1346109. Call NotifyApproximateFrameVisibilityUpdate after we set a display port base rect. r=botond
NotifyApproximateFrameVisibilityUpdate gets the displayport so we want the base rect set before calling it. We also don't want to record the displayport if we ignored it in the actual visibility pass.
This commit is contained in:
Родитель
f2802b9d4c
Коммит
cba42d43ac
|
@ -6003,8 +6003,6 @@ PresShell::MarkFramesInSubtreeApproximatelyVisible(nsIFrame* aFrame,
|
|||
|
||||
nsIScrollableFrame* scrollFrame = do_QueryFrame(aFrame);
|
||||
if (scrollFrame) {
|
||||
scrollFrame->NotifyApproximateFrameVisibilityUpdate();
|
||||
|
||||
bool ignoreDisplayPort = false;
|
||||
if (nsLayoutUtils::IsMissingDisplayPortBaseRect(aFrame->GetContent())) {
|
||||
// We can properly set the base rect for root scroll frames on top level
|
||||
|
@ -6023,6 +6021,8 @@ PresShell::MarkFramesInSubtreeApproximatelyVisible(nsIFrame* aFrame,
|
|||
}
|
||||
}
|
||||
|
||||
scrollFrame->NotifyApproximateFrameVisibilityUpdate(ignoreDisplayPort);
|
||||
|
||||
nsRect displayPort;
|
||||
bool usingDisplayport = !ignoreDisplayPort &&
|
||||
nsLayoutUtils::GetDisplayPortForVisibilityTesting(
|
||||
|
|
|
@ -2717,12 +2717,17 @@ ScrollFrameHelper::ScheduleSyntheticMouseMove()
|
|||
}
|
||||
|
||||
void
|
||||
ScrollFrameHelper::NotifyApproximateFrameVisibilityUpdate()
|
||||
ScrollFrameHelper::NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort)
|
||||
{
|
||||
mLastUpdateFramesPos = GetScrollPosition();
|
||||
mHadDisplayPortAtLastFrameUpdate =
|
||||
nsLayoutUtils::GetDisplayPort(mOuter->GetContent(),
|
||||
&mDisplayPortAtLastFrameUpdate);
|
||||
if (aIgnoreDisplayPort) {
|
||||
mHadDisplayPortAtLastFrameUpdate = false;
|
||||
mDisplayPortAtLastFrameUpdate = nsRect();
|
||||
} else {
|
||||
mHadDisplayPortAtLastFrameUpdate =
|
||||
nsLayoutUtils::GetDisplayPort(mOuter->GetContent(),
|
||||
&mDisplayPortAtLastFrameUpdate);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -3238,7 +3243,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
|||
const nsDisplayListSet& aLists)
|
||||
{
|
||||
if (aBuilder->IsForFrameVisibility()) {
|
||||
NotifyApproximateFrameVisibilityUpdate();
|
||||
NotifyApproximateFrameVisibilityUpdate(false);
|
||||
}
|
||||
|
||||
mOuter->DisplayBorderBackgroundOutline(aBuilder, aLists);
|
||||
|
|
|
@ -405,7 +405,7 @@ public:
|
|||
bool DecideScrollableLayer(nsDisplayListBuilder* aBuilder,
|
||||
nsRect* aDirtyRect,
|
||||
bool aAllowCreateDisplayPort);
|
||||
void NotifyApproximateFrameVisibilityUpdate();
|
||||
void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort);
|
||||
bool GetDisplayPortAtLastApproximateFrameVisibilityUpdate(nsRect* aDisplayPort);
|
||||
|
||||
bool AllowDisplayPortExpiration();
|
||||
|
@ -943,8 +943,8 @@ public:
|
|||
bool aAllowCreateDisplayPort) override {
|
||||
return mHelper.DecideScrollableLayer(aBuilder, aDirtyRect, aAllowCreateDisplayPort);
|
||||
}
|
||||
virtual void NotifyApproximateFrameVisibilityUpdate() override {
|
||||
mHelper.NotifyApproximateFrameVisibilityUpdate();
|
||||
virtual void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort) override {
|
||||
mHelper.NotifyApproximateFrameVisibilityUpdate(aIgnoreDisplayPort);
|
||||
}
|
||||
virtual bool GetDisplayPortAtLastApproximateFrameVisibilityUpdate(nsRect* aDisplayPort) override {
|
||||
return mHelper.GetDisplayPortAtLastApproximateFrameVisibilityUpdate(aDisplayPort);
|
||||
|
@ -1463,8 +1463,8 @@ public:
|
|||
bool aAllowCreateDisplayPort) override {
|
||||
return mHelper.DecideScrollableLayer(aBuilder, aDirtyRect, aAllowCreateDisplayPort);
|
||||
}
|
||||
virtual void NotifyApproximateFrameVisibilityUpdate() override {
|
||||
mHelper.NotifyApproximateFrameVisibilityUpdate();
|
||||
virtual void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort) override {
|
||||
mHelper.NotifyApproximateFrameVisibilityUpdate(aIgnoreDisplayPort);
|
||||
}
|
||||
virtual bool GetDisplayPortAtLastApproximateFrameVisibilityUpdate(nsRect* aDisplayPort) override {
|
||||
return mHelper.GetDisplayPortAtLastApproximateFrameVisibilityUpdate(aDisplayPort);
|
||||
|
|
|
@ -452,8 +452,10 @@ public:
|
|||
|
||||
/**
|
||||
* Notification that this scroll frame is getting its frame visibility updated.
|
||||
* aIgnoreDisplayPort indicates that the display port was ignored (because
|
||||
* there was no suitable base rect)
|
||||
*/
|
||||
virtual void NotifyApproximateFrameVisibilityUpdate() = 0;
|
||||
virtual void NotifyApproximateFrameVisibilityUpdate(bool aIgnoreDisplayPort) = 0;
|
||||
|
||||
/**
|
||||
* Returns true if this scroll frame had a display port at the last frame
|
||||
|
|
Загрузка…
Ссылка в новой задаче