зеркало из https://github.com/mozilla/pjs.git
Bug 551463. Don't clamp scroll positions during reflow, do it during a post-reflow callback so that temporary frame size changes don't clamp when they shouldn't. r=mats
This commit is contained in:
Родитель
7f5266d26e
Коммит
88e8d89f57
|
@ -800,8 +800,7 @@ nsHTMLScrollFrame::Reflow(nsPresContext* aPresContext,
|
||||||
// oldScrollPosition is a multiple of device pixels. This could have been
|
// oldScrollPosition is a multiple of device pixels. This could have been
|
||||||
// thrown out by a zoom change.
|
// thrown out by a zoom change.
|
||||||
nsIntPoint ptDevPx;
|
nsIntPoint ptDevPx;
|
||||||
nsPoint oldScrollPosition =
|
nsPoint oldScrollPosition = mInner.GetScrollPosition();
|
||||||
mInner.ClampAndRestrictToDevPixels(mInner.GetScrollPosition(), &ptDevPx);
|
|
||||||
|
|
||||||
state.mComputedBorder = aReflowState.mComputedBorderPadding -
|
state.mComputedBorder = aReflowState.mComputedBorderPadding -
|
||||||
aReflowState.mComputedPadding;
|
aReflowState.mComputedPadding;
|
||||||
|
@ -810,6 +809,9 @@ nsHTMLScrollFrame::Reflow(nsPresContext* aPresContext,
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv))
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
|
// Restore the old scroll position, for now, even if that's not valid anymore
|
||||||
|
// because we changed size. We'll fix it up in a post-reflow callback, because
|
||||||
|
// our current size may only be temporary (e.g. we're compute XUL desired sizes).
|
||||||
PlaceScrollArea(state, oldScrollPosition);
|
PlaceScrollArea(state, oldScrollPosition);
|
||||||
if (!mInner.mPostedReflowCallback) {
|
if (!mInner.mPostedReflowCallback) {
|
||||||
// Make sure we'll try scrolling to restored position
|
// Make sure we'll try scrolling to restored position
|
||||||
|
@ -1345,13 +1347,11 @@ nsGfxScrollFrameInner::AsyncScrollCallback(nsITimer *aTimer, void* anInstance)
|
||||||
}
|
}
|
||||||
|
|
||||||
self->ScrollToImpl(destination);
|
self->ScrollToImpl(destination);
|
||||||
// 'self' may be a dangling pointer here since ScrollToImpl may have destroyed it
|
|
||||||
} else {
|
} else {
|
||||||
delete self->mAsyncScroll;
|
delete self->mAsyncScroll;
|
||||||
self->mAsyncScroll = nsnull;
|
self->mAsyncScroll = nsnull;
|
||||||
|
|
||||||
self->ScrollToImpl(self->mDestination);
|
self->ScrollToImpl(self->mDestination);
|
||||||
// 'self' may be a dangling pointer here since ScrollToImpl may have destroyed it
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2914,6 +2914,9 @@ nsGfxScrollFrameInner::ReflowFinished()
|
||||||
|
|
||||||
ScrollToRestoredPosition();
|
ScrollToRestoredPosition();
|
||||||
|
|
||||||
|
// Clamp scroll position
|
||||||
|
ScrollToImpl(GetScrollPosition());
|
||||||
|
|
||||||
if (NS_SUBTREE_DIRTY(mOuter) || !mUpdateScrollbarAttributes)
|
if (NS_SUBTREE_DIRTY(mOuter) || !mUpdateScrollbarAttributes)
|
||||||
return PR_FALSE;
|
return PR_FALSE;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<div style="display:-moz-box; width:400px;">
|
||||||
|
<div id="d" style="overflow:auto; height:100px; width:400px; font-size:20px;">
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
<span style="font-size:22px;">Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var d = document.getElementById("d");
|
||||||
|
d.scrollTop = 200;
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<div style="display:-moz-box; width:400px;">
|
||||||
|
<div id="d" style="overflow:auto; height:100px; width:400px; font-size:20px;">
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
<span id="s">Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.
|
||||||
|
Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty. Hello Kitty.</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
var d = document.getElementById("d");
|
||||||
|
d.scrollTop = 200;
|
||||||
|
/* Force the scrolled div d to be reflowed. We want to check that calculation
|
||||||
|
of the XUL preferred width doesn't temporarily give d a small height
|
||||||
|
and cause d to clamp the scroll position */
|
||||||
|
var s = document.getElementById("s");
|
||||||
|
s.style.fontSize = "22px";
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1416,3 +1416,4 @@ random-if(!haveTestPlugin) == 541406-1.html 541406-1-ref.html
|
||||||
random-if(!haveTestPlugin) == 546071-1.html 546071-1-ref.html
|
random-if(!haveTestPlugin) == 546071-1.html 546071-1-ref.html
|
||||||
== 549184-1.html 549184-1-ref.html
|
== 549184-1.html 549184-1-ref.html
|
||||||
== 550716-1.html 550716-1-ref.html
|
== 550716-1.html 550716-1-ref.html
|
||||||
|
== 551463-1.html 551463-1-ref.html
|
||||||
|
|
Загрузка…
Ссылка в новой задаче