void Frame::setPageAndTextZoomFactors(float pageZoomFactor, float textZoomFactor) { if (m_pageZoomFactor == pageZoomFactor && m_textZoomFactor == textZoomFactor) return; Page* page = this->page(); if (!page) return; Document* document = this->document(); if (!document) return; m_editor.dismissCorrectionPanelAsIgnored(); #if ENABLE(SVG) // Respect SVGs zoomAndPan="disabled" property in standalone SVG documents. // FIXME: How to handle compound documents + zoomAndPan="disabled"? Needs SVG WG clarification. if (document->isSVGDocument()) { if (!static_cast<SVGDocument*>(document)->zoomAndPanEnabled()) return; } #endif if (m_pageZoomFactor != pageZoomFactor) { if (FrameView* view = this->view()) { // Update the scroll position when doing a full page zoom, so the content stays in relatively the same position. LayoutPoint scrollPosition = view->scrollPosition(); float percentDifference = (pageZoomFactor / m_pageZoomFactor); view->setScrollPosition(IntPoint(scrollPosition.x() * percentDifference, scrollPosition.y() * percentDifference)); } } m_pageZoomFactor = pageZoomFactor; m_textZoomFactor = textZoomFactor; document->recalcStyle(Node::Force); for (Frame* child = tree()->firstChild(); child; child = child->tree()->nextSibling()) child->setPageAndTextZoomFactors(m_pageZoomFactor, m_textZoomFactor); if (FrameView* view = this->view()) { if (document->renderer() && document->renderer()->needsLayout() && view->didFirstLayout()) view->layout(); } if (page->mainFrame() == this) page->backForward()->markPagesForFullStyleRecalc(); }