diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp b/Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp index a1f56d189..faff331be 100644 --- a/Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp +++ b/Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp @@ -171,6 +171,14 @@ QtViewportHandler::QtViewportHandler(WebKit::WebPageProxy* proxy, QQuickWebView* m_scaleAnimation->setDuration(kScaleAnimationDurationMillis); m_scaleAnimation->setEasingCurve(QEasingCurve::OutCubic); + // Initializing Viewport Raw Attributes to avoid random negative scale factors + // if there is a race condition between the first layout and setting the viewport attributes for the first time. + m_rawAttributes.devicePixelRatio = m_devicePixelRatio; + m_rawAttributes.initialScale = 1; + m_rawAttributes.minimumScale = m_minimumScale; + m_rawAttributes.maximumScale = m_maximumScale; + m_rawAttributes.userScalable = m_allowsUserScaling; + connect(m_viewportItem, SIGNAL(movementStarted()), SLOT(flickMoveStarted()), Qt::DirectConnection); connect(m_viewportItem, SIGNAL(movementEnded()), SLOT(flickMoveEnded()), Qt::DirectConnection); @@ -694,13 +702,10 @@ void QtViewportHandler::pinchGestureCancelled() m_scaleUpdateDeferrer.clear(); } -QRect QtViewportHandler::visibleContentsRect() const +QRectF QtViewportHandler::visibleContentsRect() const { const QRectF visibleRect(m_viewportItem->boundingRect().intersected(m_pageItem->boundingRect())); - - // We avoid using toAlignedRect() because it produces inconsistent width and height. - QRectF mappedRect(m_viewportItem->mapRectToWebContent(visibleRect)); - return QRect(floor(mappedRect.x()), floor(mappedRect.y()), floor(mappedRect.width()), floor(mappedRect.height())); + return m_viewportItem->mapRectToWebContent(visibleRect); } void QtViewportHandler::informVisibleContentChange(const QPointF& trajectoryVector) @@ -709,17 +714,13 @@ void QtViewportHandler::informVisibleContentChange(const QPointF& trajectoryVect if (!drawingArea) return; - if (m_lastVisibleContentsRect == visibleContentsRect()) - return; - qreal scale = m_pageItem->contentsScale(); if (scale != m_lastCommittedScale) emit m_viewportItem->experimental()->test()->contentsScaleCommitted(); m_lastCommittedScale = scale; - m_lastVisibleContentsRect = visibleContentsRect(); - drawingArea->setVisibleContentsRect(visibleContentsRect(), scale, trajectoryVector, m_viewportItem->contentPos()); + drawingArea->setVisibleContentsRect(visibleContentsRect(), scale, trajectoryVector); // Ensure that updatePaintNode is always called before painting. m_pageItem->update(); |