зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1501665 Part 7: Add a new function to allow visual viewport size to be un-set. r=smaug
Once nsIPresShell::SetVisualViewportSize is called, we currently have no way to restore the default viewport sizing behavior. This corrects that. We need the default behavior to get correctly-placed scrollbars when turning off meta viewport handling in Responsive Design Mode panes. Differential Revision: https://phabricator.services.mozilla.com/D20593 --HG-- extra : source : 178210eb72baa05f877b3a35e0c94d0b23880d13
This commit is contained in:
Родитель
8a637ac0e3
Коммит
ba8e9742ef
|
@ -10627,6 +10627,22 @@ void nsIPresShell::MarkFixedFramesForReflow(IntrinsicDirty aIntrinsicDirty) {
|
|||
}
|
||||
}
|
||||
|
||||
void nsIPresShell::CompleteChangeToVisualViewportSize() {
|
||||
if (nsIScrollableFrame* rootScrollFrame = GetRootScrollFrameAsScrollable()) {
|
||||
rootScrollFrame->MarkScrollbarsDirtyForReflow();
|
||||
}
|
||||
MarkFixedFramesForReflow(nsIPresShell::eResize);
|
||||
|
||||
if (auto* window = nsGlobalWindowInner::Cast(mDocument->GetInnerWindow())) {
|
||||
window->VisualViewport()->PostResizeEvent();
|
||||
}
|
||||
|
||||
if (nsIScrollableFrame* rootScrollFrame = GetRootScrollFrameAsScrollable()) {
|
||||
ScrollAnchorContainer* container = rootScrollFrame->Anchor();
|
||||
container->UserScrolled();
|
||||
}
|
||||
}
|
||||
|
||||
void nsIPresShell::SetVisualViewportSize(nscoord aWidth, nscoord aHeight) {
|
||||
if (!mVisualViewportSizeSet || mVisualViewportSize.width != aWidth ||
|
||||
mVisualViewportSize.height != aHeight) {
|
||||
|
@ -10634,21 +10650,17 @@ void nsIPresShell::SetVisualViewportSize(nscoord aWidth, nscoord aHeight) {
|
|||
mVisualViewportSize.width = aWidth;
|
||||
mVisualViewportSize.height = aHeight;
|
||||
|
||||
if (nsIScrollableFrame* rootScrollFrame =
|
||||
GetRootScrollFrameAsScrollable()) {
|
||||
rootScrollFrame->MarkScrollbarsDirtyForReflow();
|
||||
}
|
||||
MarkFixedFramesForReflow(nsIPresShell::eResize);
|
||||
CompleteChangeToVisualViewportSize();
|
||||
}
|
||||
}
|
||||
|
||||
if (auto* window = nsGlobalWindowInner::Cast(mDocument->GetInnerWindow())) {
|
||||
window->VisualViewport()->PostResizeEvent();
|
||||
}
|
||||
void nsIPresShell::ResetVisualViewportSize() {
|
||||
if (mVisualViewportSizeSet) {
|
||||
mVisualViewportSizeSet = false;
|
||||
mVisualViewportSize.width = 0;
|
||||
mVisualViewportSize.height = 0;
|
||||
|
||||
if (nsIScrollableFrame* rootScrollFrame =
|
||||
GetRootScrollFrameAsScrollable()) {
|
||||
ScrollAnchorContainer* container = rootScrollFrame->Anchor();
|
||||
container->UserScrolled();
|
||||
}
|
||||
CompleteChangeToVisualViewportSize();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1654,6 +1654,7 @@ class nsIPresShell : public nsStubDocumentObserver {
|
|||
static void ClearMouseCapture(nsIFrame* aFrame);
|
||||
|
||||
void SetVisualViewportSize(nscoord aWidth, nscoord aHeight);
|
||||
void ResetVisualViewportSize();
|
||||
bool IsVisualViewportSizeSet() { return mVisualViewportSizeSet; }
|
||||
nsSize GetVisualViewportSize() {
|
||||
NS_ASSERTION(mVisualViewportSizeSet,
|
||||
|
@ -1661,6 +1662,10 @@ class nsIPresShell : public nsStubDocumentObserver {
|
|||
return mVisualViewportSize;
|
||||
}
|
||||
|
||||
// This function handles all the work after VisualViewportSize is set
|
||||
// or reset.
|
||||
void CompleteChangeToVisualViewportSize();
|
||||
|
||||
/**
|
||||
* The return value indicates whether the offset actually changed.
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче