summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp')
-rw-r--r--Source/WebKit2/UIProcess/qt/QtViewportHandler.cpp21
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();